[svn:parrot] r46302 - in branches/ops_pct: . compilers/data_json compilers/imcc compilers/json compilers/ncigen compilers/nqp compilers/opsc compilers/pct compilers/pct/src/PAST compilers/pct/src/PCT compilers/pct/src/POST compilers/pge compilers/pge/PGE compilers/pirc compilers/pirc/src compilers/tge config/auto config/auto/attributes config/auto/cgoto config/auto/crypto config/auto/gdbm config/auto/sizes config/auto/zlib config/gen config/gen/config_h config/gen/config_pm config/gen/crypto config/gen/makefiles config/gen/platform config/gen/platform/ansi config/gen/platform/generic config/gen/platform/win32 config/init config/init/hints config/inter docs docs/book/draft docs/book/pct docs/book/pir docs/dev docs/pdds docs/pdds/draft docs/pmc docs/project editor examples/benchmarks examples/c examples/config/file examples/embed examples/japh examples/json examples/languages/abc examples/languages/squaak examples/languages/squaak/src/parser examples/library examples/n ci examples/pge examples/pir examples/pir/befunge examples/sdl examples/shootout examples/tutorial ext/Parrot-Embed ext/Parrot-Embed/lib/Parrot ext/Parrot-Embed/t ext/SQLite3 ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib lib/Parrot lib/Parrot/Configure/Options lib/Parrot/Configure/Options/Conf lib/Parrot/Configure/Options/Test lib/Parrot/Configure/Step lib/Parrot/Docs/Section lib/Parrot/Harness lib/Parrot/OpTrans lib/Parrot/Ops2c lib/Parrot/Ops2pm lib/Parrot/Pmc2c lib/Parrot/Pmc2c/PMC ports/cpan ports/cygwin ports/debian ports/debian/patches ports/fedora ports/fedora/2.3.0 ports/mandriva ports/mandriva/2.3.0 ports/suse ports/suse/2.2.0 ports/ubuntu runtime/parrot/languages runtime/parrot/library runtime/parrot/library/Archive runtime/parrot/library/CGI runtime/parrot/library/Config runtime/parrot/library/Getopt runtime/parrot/library/HTTP runtime/parrot/library/MIME runtime/parrot/library/Math runtime/parrot/library/ProfTest runtime/parrot/library/Stre am runtime/parrot/library/String runtime/parrot/library/TAP runtime/parrot/library/Test runtime/parrot/library/Test/Builder 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/data_json t/compilers/imcc/imcpasm t/compilers/imcc/reg t/compilers/imcc/syn t/compilers/json t/compilers/pct t/compilers/pge t/compilers/pge/p5regex t/compilers/pge/perl6regex t/compilers/tge t/configure/testlib t/distro t/dynoplibs t/dynpmc t/examples t/include t/library t/native_pbc t/oo t/op t/pharness t/pir t/pmc t/pmc/testlib t/profiling t/run t/src t/steps/auto t/steps/gen t/steps/init t/steps/init/hints t/steps/inter t/tools/install/testlib t/tools/ops2cutils t/tools/ops2pm tools/build tools/dev tools/docs tools/install tools/util

cotto at svn.parrot.org cotto at svn.parrot.org
Wed May 5 08:45:57 UTC 2010


Author: cotto
Date: Wed May  5 08:45:29 2010
New Revision: 46302
URL: https://trac.parrot.org/parrot/changeset/46302

Log:
sync branch with trunk, hopefully for real this time

Added:
   branches/ops_pct/.gitignore
      - copied unchanged from r46301, trunk/.gitignore
   branches/ops_pct/config/auto/zlib/
      - copied from r46301, trunk/config/auto/zlib/
   branches/ops_pct/config/auto/zlib.pm
      - copied unchanged from r46301, trunk/config/auto/zlib.pm
   branches/ops_pct/config/gen/config_pm/config_lib_pir.in
      - copied unchanged from r46301, trunk/config/gen/config_pm/config_lib_pir.in
   branches/ops_pct/examples/benchmarks/stress_strings.pir
      - copied unchanged from r46301, trunk/examples/benchmarks/stress_strings.pir
   branches/ops_pct/include/parrot/platform_interface.h
      - copied unchanged from r46301, trunk/include/parrot/platform_interface.h
   branches/ops_pct/ports/fedora/2.3.0/
      - copied from r46301, trunk/ports/fedora/2.3.0/
   branches/ops_pct/ports/mandriva/2.3.0/
      - copied from r46301, trunk/ports/mandriva/2.3.0/
   branches/ops_pct/ports/suse/2.2.0/
      - copied from r46301, trunk/ports/suse/2.2.0/
   branches/ops_pct/runtime/parrot/library/Archive/   (props changed)
      - copied from r46301, trunk/runtime/parrot/library/Archive/
   branches/ops_pct/runtime/parrot/library/ProfTest/   (props changed)
      - copied from r46301, trunk/runtime/parrot/library/ProfTest/
   branches/ops_pct/runtime/parrot/library/TAP/   (props changed)
      - copied from r46301, trunk/runtime/parrot/library/TAP/
   branches/ops_pct/runtime/parrot/library/osutils.pir
      - copied unchanged from r46301, trunk/runtime/parrot/library/osutils.pir
   branches/ops_pct/src/dynpmc/Defines.in
      - copied unchanged from r46301, trunk/src/dynpmc/Defines.in
   branches/ops_pct/src/dynpmc/Rules.in
      - copied unchanged from r46301, trunk/src/dynpmc/Rules.in
   branches/ops_pct/src/dynpmc/file.pmc
      - copied unchanged from r46301, trunk/src/dynpmc/file.pmc
   branches/ops_pct/src/dynpmc/gziphandle.pmc
      - copied unchanged from r46301, trunk/src/dynpmc/gziphandle.pmc
   branches/ops_pct/src/dynpmc/os.pmc
      - copied unchanged from r46301, trunk/src/dynpmc/os.pmc
   branches/ops_pct/src/pmc/imageiostrings.pmc
      - copied unchanged from r46301, trunk/src/pmc/imageiostrings.pmc
   branches/ops_pct/src/pmc/packfiledebug.pmc
      - copied unchanged from r46301, trunk/src/pmc/packfiledebug.pmc
   branches/ops_pct/src/pmc/threadinterpreter.pmc
      - copied unchanged from r46301, trunk/src/pmc/threadinterpreter.pmc
   branches/ops_pct/t/compilers/data_json/   (props changed)
      - copied from r46301, trunk/t/compilers/data_json/
   branches/ops_pct/t/dynpmc/file.t
      - copied unchanged from r46301, trunk/t/dynpmc/file.t
   branches/ops_pct/t/dynpmc/gziphandle.t
      - copied unchanged from r46301, trunk/t/dynpmc/gziphandle.t
   branches/ops_pct/t/dynpmc/os.t
      - copied unchanged from r46301, trunk/t/dynpmc/os.t
   branches/ops_pct/t/harness.pir
      - copied unchanged from r46301, trunk/t/harness.pir
   branches/ops_pct/t/library/archive_tar.t
      - copied unchanged from r46301, trunk/t/library/archive_tar.t
   branches/ops_pct/t/library/osutils.t
      - copied unchanged from r46301, trunk/t/library/osutils.t
   branches/ops_pct/t/library/tap_parser.t
      - copied unchanged from r46301, trunk/t/library/tap_parser.t
   branches/ops_pct/t/pmc/imageiostrings.t
      - copied unchanged from r46301, trunk/t/pmc/imageiostrings.t
   branches/ops_pct/t/pmc/namespace-subs.t
      - copied unchanged from r46301, trunk/t/pmc/namespace-subs.t
   branches/ops_pct/t/profiling/
      - copied from r46301, trunk/t/profiling/
   branches/ops_pct/t/steps/auto/zlib-01.t
      - copied unchanged from r46301, trunk/t/steps/auto/zlib-01.t
   branches/ops_pct/tools/dev/faces.pl
      - copied unchanged from r46301, trunk/tools/dev/faces.pl
   branches/ops_pct/tools/dev/tapir.pir
      - copied unchanged from r46301, trunk/tools/dev/tapir.pir
   branches/ops_pct/tools/docs/filename_and_chapter.pl
      - copied unchanged from r46301, trunk/tools/docs/filename_and_chapter.pl
Replaced:
   branches/ops_pct/config/auto/zlib/zlib_c.in
      - copied unchanged from r46301, trunk/config/auto/zlib/zlib_c.in
   branches/ops_pct/ports/fedora/2.3.0/parrot.desk.in.tar.gz
      - copied unchanged from r46301, trunk/ports/fedora/2.3.0/parrot.desk.in.tar.gz
   branches/ops_pct/ports/fedora/2.3.0/parrot.patch
      - copied unchanged from r46301, trunk/ports/fedora/2.3.0/parrot.patch
   branches/ops_pct/ports/fedora/2.3.0/parrot.spec
      - copied unchanged from r46301, trunk/ports/fedora/2.3.0/parrot.spec
   branches/ops_pct/ports/mandriva/2.3.0/parrot-2.3.0-remove_md2_upstream_r45824.patch
      - copied unchanged from r46301, trunk/ports/mandriva/2.3.0/parrot-2.3.0-remove_md2_upstream_r45824.patch
   branches/ops_pct/ports/mandriva/2.3.0/parrot.spec
      - copied unchanged from r46301, trunk/ports/mandriva/2.3.0/parrot.spec
   branches/ops_pct/ports/suse/2.2.0/parrot.diff
      - copied unchanged from r46301, trunk/ports/suse/2.2.0/parrot.diff
   branches/ops_pct/ports/suse/2.2.0/parrot.spec
      - copied unchanged from r46301, trunk/ports/suse/2.2.0/parrot.spec
   branches/ops_pct/runtime/parrot/library/Archive/Tar.pir
      - copied unchanged from r46301, trunk/runtime/parrot/library/Archive/Tar.pir
   branches/ops_pct/runtime/parrot/library/ProfTest/Matcher.nqp
      - copied unchanged from r46301, trunk/runtime/parrot/library/ProfTest/Matcher.nqp
   branches/ops_pct/runtime/parrot/library/ProfTest/NQPProfile.nqp
      - copied unchanged from r46301, trunk/runtime/parrot/library/ProfTest/NQPProfile.nqp
   branches/ops_pct/runtime/parrot/library/ProfTest/PIRProfile.nqp
      - copied unchanged from r46301, trunk/runtime/parrot/library/ProfTest/PIRProfile.nqp
   branches/ops_pct/runtime/parrot/library/ProfTest/Want.nqp
      - copied unchanged from r46301, trunk/runtime/parrot/library/ProfTest/Want.nqp
   branches/ops_pct/runtime/parrot/library/TAP/Formatter.pir
      - copied unchanged from r46301, trunk/runtime/parrot/library/TAP/Formatter.pir
   branches/ops_pct/runtime/parrot/library/TAP/Harness.pir
      - copied unchanged from r46301, trunk/runtime/parrot/library/TAP/Harness.pir
   branches/ops_pct/runtime/parrot/library/TAP/Parser.pir
      - copied unchanged from r46301, trunk/runtime/parrot/library/TAP/Parser.pir
   branches/ops_pct/src/pmc/parrotthread.pmc
      - copied unchanged from r46301, trunk/src/pmc/parrotthread.pmc
   branches/ops_pct/t/compilers/data_json/from_parrot.t
      - copied unchanged from r46301, trunk/t/compilers/data_json/from_parrot.t
   branches/ops_pct/t/compilers/data_json/to_parrot.t
      - copied unchanged from r46301, trunk/t/compilers/data_json/to_parrot.t
   branches/ops_pct/t/profiling/profiling.t
      - copied unchanged from r46301, trunk/t/profiling/profiling.t
Deleted:
   branches/ops_pct/META.yml
   branches/ops_pct/Makefile.PL
   branches/ops_pct/compilers/json/
   branches/ops_pct/compilers/ncigen/
   branches/ops_pct/compilers/nqp/
   branches/ops_pct/config/auto/cgoto/
   branches/ops_pct/config/auto/cgoto.pm
   branches/ops_pct/config/auto/crypto/
   branches/ops_pct/config/auto/crypto.pm
   branches/ops_pct/config/auto/gdbm/
   branches/ops_pct/config/auto/gdbm.pm
   branches/ops_pct/config/gen/config_pm/config_lib_pasm.in
   branches/ops_pct/config/gen/crypto/
   branches/ops_pct/config/gen/crypto.pm
   branches/ops_pct/config/gen/makefiles/dynpmc.in
   branches/ops_pct/config/gen/platform/platform_interface.h
   branches/ops_pct/ext/SQLite3/
   branches/ops_pct/ext/nqp-rx/.gitignore
   branches/ops_pct/lib/Parrot/OpTrans/CGP.pm
   branches/ops_pct/lib/Parrot/OpTrans/CGoto.pm
   branches/ops_pct/lib/Parrot/OpTrans/CPrederef.pm
   branches/ops_pct/lib/Parrot/OpTrans/CSwitch.pm
   branches/ops_pct/ports/cpan/
   branches/ops_pct/ports/debian/patches/01_fix_doc_install.patch
   branches/ops_pct/ports/debian/patches/02_fix_man_whatis.patch
   branches/ops_pct/ports/fedora/parrot.patch
   branches/ops_pct/ports/fedora/parrot.spec.fedora
   branches/ops_pct/ports/mandriva/parrot.spec.mandriva
   branches/ops_pct/ports/suse/parrot.spec.suse
   branches/ops_pct/runtime/parrot/library/SQLite3.pir
   branches/ops_pct/src/dynpmc/gdbmhash.pmc
   branches/ops_pct/src/pmc/cpointer.pmc
   branches/ops_pct/src/pmc/file.pmc
   branches/ops_pct/src/pmc/os.pmc
   branches/ops_pct/src/pmc/parrotrunningthread.pmc
   branches/ops_pct/src/pmc/retcontinuation.pmc
   branches/ops_pct/t/compilers/json/
   branches/ops_pct/t/distro/meta_yml.t
   branches/ops_pct/t/dynpmc/gdbmhash.t
   branches/ops_pct/t/op/pushaction.t
   branches/ops_pct/t/pmc/cpointer.t
   branches/ops_pct/t/pmc/file.t
   branches/ops_pct/t/pmc/os.t
   branches/ops_pct/t/pmc/parrotrunningthread.t
   branches/ops_pct/t/pmc/retcontinuation.t
   branches/ops_pct/t/steps/auto/cgoto-01.t
   branches/ops_pct/t/steps/auto/crypto-01.t
   branches/ops_pct/t/steps/auto/gdbm-01.t
Modified:
   branches/ops_pct/   (props changed)
   branches/ops_pct/CREDITS
   branches/ops_pct/ChangeLog
   branches/ops_pct/Configure.pl
   branches/ops_pct/DEPRECATED.pod
   branches/ops_pct/MANIFEST
   branches/ops_pct/MANIFEST.SKIP
   branches/ops_pct/MANIFEST.generated
   branches/ops_pct/NEWS
   branches/ops_pct/PBC_COMPAT
   branches/ops_pct/README
   branches/ops_pct/README_cygwin.pod
   branches/ops_pct/README_win32.pod
   branches/ops_pct/RESPONSIBLE_PARTIES
   branches/ops_pct/VERSION
   branches/ops_pct/compilers/data_json/Defines.mak
   branches/ops_pct/compilers/data_json/Rules.mak   (contents, props changed)
   branches/ops_pct/compilers/imcc/Rules.in   (contents, props changed)
   branches/ops_pct/compilers/imcc/cfg.c
   branches/ops_pct/compilers/imcc/imcc.l
   branches/ops_pct/compilers/imcc/imcc.y
   branches/ops_pct/compilers/imcc/imclexer.c
   branches/ops_pct/compilers/imcc/imcparser.c
   branches/ops_pct/compilers/imcc/imcparser.h
   branches/ops_pct/compilers/imcc/instructions.c
   branches/ops_pct/compilers/imcc/main.c
   branches/ops_pct/compilers/imcc/optimizer.c
   branches/ops_pct/compilers/imcc/parser_util.c
   branches/ops_pct/compilers/imcc/pbc.c
   branches/ops_pct/compilers/imcc/pcc.c
   branches/ops_pct/compilers/imcc/symreg.c
   branches/ops_pct/compilers/imcc/symreg.h
   branches/ops_pct/compilers/imcc/unit.h
   branches/ops_pct/compilers/opsc/Defines.mak   (props changed)
   branches/ops_pct/compilers/opsc/Rules.mak   (props changed)
   branches/ops_pct/compilers/pct/Rules.mak   (props changed)
   branches/ops_pct/compilers/pct/src/PAST/Compiler.pir
   branches/ops_pct/compilers/pct/src/PCT/HLLCompiler.pir
   branches/ops_pct/compilers/pct/src/POST/Node.pir
   branches/ops_pct/compilers/pge/PGE/Exp.pir
   branches/ops_pct/compilers/pge/PGE/OPTable.pir
   branches/ops_pct/compilers/pge/PGE/Perl6Regex.pir
   branches/ops_pct/compilers/pge/PGE/Regex.pir
   branches/ops_pct/compilers/pge/Rules.mak   (props changed)
   branches/ops_pct/compilers/pirc/Rules.mak
   branches/ops_pct/compilers/pirc/src/pircompiler.c
   branches/ops_pct/compilers/pirc/src/pircompiler.h
   branches/ops_pct/compilers/pirc/src/pircompunit.c
   branches/ops_pct/compilers/pirc/src/pircompunit.h
   branches/ops_pct/compilers/pirc/src/pirlexer.h
   branches/ops_pct/compilers/pirc/src/pirparser.c
   branches/ops_pct/compilers/pirc/src/pirsymbol.c
   branches/ops_pct/compilers/pirc/src/pirsymbol.h
   branches/ops_pct/compilers/tge/Rules.mak   (props changed)
   branches/ops_pct/config/auto/arch.pm
   branches/ops_pct/config/auto/attributes.pm
   branches/ops_pct/config/auto/attributes/test_c.in
   branches/ops_pct/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/ops_pct/config/auto/warnings.pm
   branches/ops_pct/config/gen/config_h/config_h.in
   branches/ops_pct/config/gen/config_pm.pm
   branches/ops_pct/config/gen/config_pm/config_pir.in
   branches/ops_pct/config/gen/core_pmcs.pm
   branches/ops_pct/config/gen/makefiles.pm
   branches/ops_pct/config/gen/makefiles/docs.in
   branches/ops_pct/config/gen/makefiles/root.in
   branches/ops_pct/config/gen/opengl.pm
   branches/ops_pct/config/gen/platform.pm
   branches/ops_pct/config/gen/platform/ansi/dl.c
   branches/ops_pct/config/gen/platform/generic/dl.c
   branches/ops_pct/config/gen/platform/generic/env.c
   branches/ops_pct/config/gen/platform/generic/exec.c
   branches/ops_pct/config/gen/platform/generic/itimer.c
   branches/ops_pct/config/gen/platform/win32/dl.c
   branches/ops_pct/config/gen/platform/win32/env.c
   branches/ops_pct/config/gen/platform/win32/exec.c
   branches/ops_pct/config/init/defaults.pm
   branches/ops_pct/config/init/hints.pm
   branches/ops_pct/config/init/hints/cygwin.pm
   branches/ops_pct/config/init/hints/irix.pm
   branches/ops_pct/config/init/optimize.pm
   branches/ops_pct/config/inter/progs.pm
   branches/ops_pct/docs/   (props changed)
   branches/ops_pct/docs/book/draft/README   (props changed)
   branches/ops_pct/docs/book/draft/appa_glossary.pod   (props changed)
   branches/ops_pct/docs/book/draft/appb_patch_submission.pod   (props changed)
   branches/ops_pct/docs/book/draft/appc_command_line_options.pod   (contents, props changed)
   branches/ops_pct/docs/book/draft/appd_build_options.pod   (props changed)
   branches/ops_pct/docs/book/draft/appe_source_code.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch01_introduction.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch02_getting_started.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch07_dynpmcs.pod   (contents, props changed)
   branches/ops_pct/docs/book/draft/ch08_dynops.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch10_opcode_reference.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch11_directive_reference.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch12_operator_reference.pod   (props changed)
   branches/ops_pct/docs/book/draft/chXX_hlls.pod   (contents, props changed)
   branches/ops_pct/docs/book/draft/chXX_library.pod   (props changed)
   branches/ops_pct/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch01_introduction.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch02_getting_started.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch03_compiler_tools.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch04_pge.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch05_nqp.pod   (props changed)
   branches/ops_pct/docs/book/pir/ch04_variables.pod
   branches/ops_pct/docs/configuration.pod
   branches/ops_pct/docs/dev/c_functions.pod   (props changed)
   branches/ops_pct/docs/dev/infant.pod
   branches/ops_pct/docs/dev/pccmethods.pod
   branches/ops_pct/docs/dev/pmc_freeze.pod
   branches/ops_pct/docs/dev/pmc_obj_design_meeting_notes.pod
   branches/ops_pct/docs/dev/profiling.pod
   branches/ops_pct/docs/embed.pod
   branches/ops_pct/docs/intro.pod
   branches/ops_pct/docs/parrothist.pod
   branches/ops_pct/docs/pdds/draft/pdd01_overview.pod
   branches/ops_pct/docs/pdds/draft/pdd05_opfunc.pod
   branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod
   branches/ops_pct/docs/pdds/draft/pdd08_keys.pod
   branches/ops_pct/docs/pdds/draft/pdd10_embedding.pod
   branches/ops_pct/docs/pdds/draft/pdd11_extending.pod
   branches/ops_pct/docs/pdds/draft/pdd14_numbers.pod
   branches/ops_pct/docs/pdds/draft/pdd16_native_call.pod
   branches/ops_pct/docs/pdds/draft/pdd29_compiler_tools.pod
   branches/ops_pct/docs/pdds/draft/pdd31_hll.pod
   branches/ops_pct/docs/pdds/draft/pdd31_hll_interop.pod
   branches/ops_pct/docs/pdds/pdd00_pdd.pod
   branches/ops_pct/docs/pdds/pdd03_calling_conventions.pod
   branches/ops_pct/docs/pdds/pdd07_codingstd.pod
   branches/ops_pct/docs/pdds/pdd09_gc.pod
   branches/ops_pct/docs/pdds/pdd15_objects.pod
   branches/ops_pct/docs/pdds/pdd17_pmc.pod
   branches/ops_pct/docs/pdds/pdd18_security.pod
   branches/ops_pct/docs/pdds/pdd19_pir.pod
   branches/ops_pct/docs/pdds/pdd20_lexical_vars.pod
   branches/ops_pct/docs/pdds/pdd21_namespaces.pod
   branches/ops_pct/docs/pdds/pdd22_io.pod
   branches/ops_pct/docs/pdds/pdd23_exceptions.pod
   branches/ops_pct/docs/pdds/pdd24_events.pod
   branches/ops_pct/docs/pdds/pdd25_concurrency.pod
   branches/ops_pct/docs/pdds/pdd26_ast.pod
   branches/ops_pct/docs/pdds/pdd27_multiple_dispatch.pod
   branches/ops_pct/docs/pdds/pdd28_strings.pod
   branches/ops_pct/docs/pdds/pdd30_install.pod   (contents, props changed)
   branches/ops_pct/docs/pdds/pdd_template.pod
   branches/ops_pct/docs/pmc.pod
   branches/ops_pct/docs/pmc/documentation.pod
   branches/ops_pct/docs/pmc2c.pod
   branches/ops_pct/docs/porting_intro.pod
   branches/ops_pct/docs/project/debian_packaging_guide.pod
   branches/ops_pct/docs/project/metacommitter_guide.pod
   branches/ops_pct/docs/project/release_manager_guide.pod
   branches/ops_pct/docs/running.pod
   branches/ops_pct/editor/pir-mode.el
   branches/ops_pct/examples/benchmarks/oo1.pir
   branches/ops_pct/examples/benchmarks/oo2.pir
   branches/ops_pct/examples/c/test_main.c
   branches/ops_pct/examples/config/file/configcompiler
   branches/ops_pct/examples/config/file/configwithfatalstep
   branches/ops_pct/examples/embed/Makefile
   branches/ops_pct/examples/embed/cotorra.c   (contents, props changed)
   branches/ops_pct/examples/japh/japh3.pasm
   branches/ops_pct/examples/json/postalcodes.pir
   branches/ops_pct/examples/languages/abc/   (props changed)
   branches/ops_pct/examples/languages/abc/setup.pir
   branches/ops_pct/examples/languages/squaak/   (props changed)
   branches/ops_pct/examples/languages/squaak/setup.pir
   branches/ops_pct/examples/languages/squaak/src/parser/actions.pm
   branches/ops_pct/examples/library/ncurses_life.pir
   branches/ops_pct/examples/nci/Xlib.pir
   branches/ops_pct/examples/nci/xlibtest.pir
   branches/ops_pct/examples/pge/demo.pir   (contents, props changed)
   branches/ops_pct/examples/pir/befunge/debug.pir
   branches/ops_pct/examples/pir/befunge/io.pir
   branches/ops_pct/examples/pir/befunge/load.pir
   branches/ops_pct/examples/pir/befunge/setup.pir
   branches/ops_pct/examples/pir/io.pir
   branches/ops_pct/examples/pir/pirric.pir
   branches/ops_pct/examples/pir/quine_ord.pir
   branches/ops_pct/examples/pir/substr.pir
   branches/ops_pct/examples/sdl/mandel.pir
   branches/ops_pct/examples/shootout/ack.pir
   branches/ops_pct/examples/shootout/binarytrees.pir
   branches/ops_pct/examples/shootout/fasta.pir
   branches/ops_pct/examples/shootout/knucleotide.pir
   branches/ops_pct/examples/shootout/partialsums.pir
   branches/ops_pct/examples/shootout/pidigits.pir
   branches/ops_pct/examples/shootout/random.pir
   branches/ops_pct/examples/shootout/recursive-2.pir
   branches/ops_pct/examples/shootout/recursive.pir
   branches/ops_pct/examples/shootout/regexdna.pir
   branches/ops_pct/examples/shootout/revcomp.pir
   branches/ops_pct/examples/shootout/takfp.pir
   branches/ops_pct/examples/tutorial/23_string_ops_substr.pir
   branches/ops_pct/examples/tutorial/40_file_ops.pir
   branches/ops_pct/examples/tutorial/56_defined.pir
   branches/ops_pct/ext/Parrot-Embed/Build.PL
   branches/ops_pct/ext/Parrot-Embed/MANIFEST
   branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs
   branches/ops_pct/ext/Parrot-Embed/t/interp.t
   branches/ops_pct/ext/nqp-rx/Rules.mak   (props changed)
   branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/ops_pct/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/ops_pct/ext/nqp-rx/src/stage0/Regex-s0.pir
   branches/ops_pct/include/parrot/   (props changed)
   branches/ops_pct/include/parrot/call.h   (contents, props changed)
   branches/ops_pct/include/parrot/charset.h
   branches/ops_pct/include/parrot/compiler.h
   branches/ops_pct/include/parrot/context.h
   branches/ops_pct/include/parrot/debugger.h
   branches/ops_pct/include/parrot/dynext.h
   branches/ops_pct/include/parrot/embed.h
   branches/ops_pct/include/parrot/encoding.h
   branches/ops_pct/include/parrot/exceptions.h
   branches/ops_pct/include/parrot/exit.h
   branches/ops_pct/include/parrot/extend.h
   branches/ops_pct/include/parrot/gc_api.h   (contents, props changed)
   branches/ops_pct/include/parrot/global_setup.h
   branches/ops_pct/include/parrot/hash.h
   branches/ops_pct/include/parrot/imcc.h
   branches/ops_pct/include/parrot/interpreter.h
   branches/ops_pct/include/parrot/io.h
   branches/ops_pct/include/parrot/io_portable.h
   branches/ops_pct/include/parrot/io_unix.h
   branches/ops_pct/include/parrot/io_win32.h
   branches/ops_pct/include/parrot/key.h
   branches/ops_pct/include/parrot/misc.h
   branches/ops_pct/include/parrot/nci.h
   branches/ops_pct/include/parrot/oo.h
   branches/ops_pct/include/parrot/op.h
   branches/ops_pct/include/parrot/oplib.h
   branches/ops_pct/include/parrot/oplib/core_ops.h
   branches/ops_pct/include/parrot/packfile.h
   branches/ops_pct/include/parrot/pmc.h
   branches/ops_pct/include/parrot/pmc_freeze.h
   branches/ops_pct/include/parrot/pobj.h
   branches/ops_pct/include/parrot/runcore_api.h   (contents, props changed)
   branches/ops_pct/include/parrot/runcore_profiling.h   (contents, props changed)
   branches/ops_pct/include/parrot/runcore_trace.h   (props changed)
   branches/ops_pct/include/parrot/string.h
   branches/ops_pct/include/parrot/string_funcs.h
   branches/ops_pct/include/parrot/string_primitives.h
   branches/ops_pct/include/parrot/sub.h
   branches/ops_pct/include/parrot/thr_windows.h
   branches/ops_pct/include/parrot/thread.h
   branches/ops_pct/include/parrot/vtables.h
   branches/ops_pct/lib/Parrot/Configure/Options/Conf.pm
   branches/ops_pct/lib/Parrot/Configure/Options/Conf/Shared.pm
   branches/ops_pct/lib/Parrot/Configure/Options/Test/Prepare.pm
   branches/ops_pct/lib/Parrot/Configure/Step/List.pm
   branches/ops_pct/lib/Parrot/Configure/Step/Test.pm   (props changed)
   branches/ops_pct/lib/Parrot/Distribution.pm
   branches/ops_pct/lib/Parrot/Docs/Section/Compilers.pm
   branches/ops_pct/lib/Parrot/H2inc.pm   (contents, props changed)
   branches/ops_pct/lib/Parrot/Harness/DefaultTests.pm
   branches/ops_pct/lib/Parrot/Harness/Options.pm
   branches/ops_pct/lib/Parrot/Harness/Smoke.pm
   branches/ops_pct/lib/Parrot/Headerizer.pm
   branches/ops_pct/lib/Parrot/Manifest.pm
   branches/ops_pct/lib/Parrot/OpTrans.pm
   branches/ops_pct/lib/Parrot/OpTrans/C.pm
   branches/ops_pct/lib/Parrot/Ops2c/Auxiliary.pm
   branches/ops_pct/lib/Parrot/Ops2c/Utils.pm
   branches/ops_pct/lib/Parrot/Ops2pm/Base.pm
   branches/ops_pct/lib/Parrot/OpsRenumber.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Attribute.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Dumper.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Emitter.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Library.pm
   branches/ops_pct/lib/Parrot/Pmc2c/MethodEmitter.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Object.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PCCMETHOD.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMC.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMC/Null.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMC/Object.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMC/ParrotClass.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMC/default.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Parser.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Pmc2cMain.pm
   branches/ops_pct/lib/Parrot/Pmc2c/UtilFunctions.pm
   branches/ops_pct/lib/Parrot/Vtable.pm
   branches/ops_pct/ports/cygwin/README
   branches/ops_pct/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/ops_pct/ports/debian/changelog
   branches/ops_pct/ports/debian/control.in
   branches/ops_pct/ports/debian/libparrot-dev.install.in   (props changed)
   branches/ops_pct/ports/debian/libparrot.install.in   (props changed)
   branches/ops_pct/ports/debian/parrot-doc.install.in   (props changed)
   branches/ops_pct/ports/debian/parrot.install.in   (props changed)
   branches/ops_pct/ports/debian/patches/series
   branches/ops_pct/ports/ubuntu/control.in
   branches/ops_pct/runtime/parrot/languages/   (props changed)
   branches/ops_pct/runtime/parrot/library/CGI/QueryHash.pir
   branches/ops_pct/runtime/parrot/library/Config/JSON.pir
   branches/ops_pct/runtime/parrot/library/Crow.pir
   branches/ops_pct/runtime/parrot/library/Getopt/Obj.pir
   branches/ops_pct/runtime/parrot/library/HTTP/Daemon.pir
   branches/ops_pct/runtime/parrot/library/JSON.pir
   branches/ops_pct/runtime/parrot/library/MIME/Base64.pir
   branches/ops_pct/runtime/parrot/library/Math/Rand.pir   (props changed)
   branches/ops_pct/runtime/parrot/library/OpenGL.pir
   branches/ops_pct/runtime/parrot/library/P6object.pir
   branches/ops_pct/runtime/parrot/library/Rules.mak   (props changed)
   branches/ops_pct/runtime/parrot/library/Stream/Base.pir
   branches/ops_pct/runtime/parrot/library/String/Utils.pir
   branches/ops_pct/runtime/parrot/library/Test/Builder.pir
   branches/ops_pct/runtime/parrot/library/Test/Builder/Output.pir
   branches/ops_pct/runtime/parrot/library/Test/Builder/Test.pir
   branches/ops_pct/runtime/parrot/library/Test/More.pir
   branches/ops_pct/runtime/parrot/library/distutils.pir
   branches/ops_pct/runtime/parrot/library/pcore.pir
   branches/ops_pct/runtime/parrot/library/uuid.pir
   branches/ops_pct/src/byteorder.c
   branches/ops_pct/src/call/args.c
   branches/ops_pct/src/call/context.c
   branches/ops_pct/src/call/context_accessors.c
   branches/ops_pct/src/call/ops.c   (contents, props changed)
   branches/ops_pct/src/call/pcc.c   (contents, props changed)
   branches/ops_pct/src/datatypes.c
   branches/ops_pct/src/debug.c
   branches/ops_pct/src/dynext.c
   branches/ops_pct/src/dynoplibs/Defines.in
   branches/ops_pct/src/dynoplibs/Rules.in
   branches/ops_pct/src/dynpmc/   (props changed)
   branches/ops_pct/src/dynpmc/dynlexpad.pmc
   branches/ops_pct/src/dynpmc/foo.pmc
   branches/ops_pct/src/dynpmc/pccmethod_test.pmc
   branches/ops_pct/src/dynpmc/rational.pmc
   branches/ops_pct/src/dynpmc/subproxy.pmc
   branches/ops_pct/src/embed.c
   branches/ops_pct/src/exceptions.c
   branches/ops_pct/src/exit.c
   branches/ops_pct/src/extend.c
   branches/ops_pct/src/frame_builder.c
   branches/ops_pct/src/gc/   (props changed)
   branches/ops_pct/src/gc/alloc_memory.c   (props changed)
   branches/ops_pct/src/gc/alloc_resources.c   (contents, props changed)
   branches/ops_pct/src/gc/api.c   (contents, props changed)
   branches/ops_pct/src/gc/gc_inf.c
   branches/ops_pct/src/gc/gc_ms.c
   branches/ops_pct/src/gc/gc_private.h
   branches/ops_pct/src/gc/malloc.c   (contents, props changed)
   branches/ops_pct/src/gc/malloc_trace.c   (contents, props changed)
   branches/ops_pct/src/gc/mark_sweep.c   (contents, props changed)
   branches/ops_pct/src/gc/system.c   (contents, props changed)
   branches/ops_pct/src/global.c
   branches/ops_pct/src/global_setup.c
   branches/ops_pct/src/hash.c
   branches/ops_pct/src/hll.c
   branches/ops_pct/src/interp/inter_cb.c   (contents, props changed)
   branches/ops_pct/src/interp/inter_create.c   (contents, props changed)
   branches/ops_pct/src/interp/inter_misc.c   (contents, props changed)
   branches/ops_pct/src/io/api.c
   branches/ops_pct/src/io/buffer.c
   branches/ops_pct/src/io/core.c
   branches/ops_pct/src/io/filehandle.c
   branches/ops_pct/src/io/portable.c
   branches/ops_pct/src/io/socket_api.c
   branches/ops_pct/src/io/socket_unix.c
   branches/ops_pct/src/io/socket_win32.c
   branches/ops_pct/src/io/unix.c
   branches/ops_pct/src/io/utf8.c
   branches/ops_pct/src/io/win32.c
   branches/ops_pct/src/key.c
   branches/ops_pct/src/library.c
   branches/ops_pct/src/longopt.c
   branches/ops_pct/src/main.c
   branches/ops_pct/src/misc.c
   branches/ops_pct/src/multidispatch.c
   branches/ops_pct/src/nci/api.c
   branches/ops_pct/src/nci/core_thunks.c
   branches/ops_pct/src/nci/extra_thunks.c
   branches/ops_pct/src/nci_test.c
   branches/ops_pct/src/oo.c
   branches/ops_pct/src/ops/bit.ops
   branches/ops_pct/src/ops/cmp.ops
   branches/ops_pct/src/ops/core.ops
   branches/ops_pct/src/ops/core_ops.c
   branches/ops_pct/src/ops/object.ops
   branches/ops_pct/src/ops/ops.num
   branches/ops_pct/src/ops/pmc.ops
   branches/ops_pct/src/ops/set.ops
   branches/ops_pct/src/ops/string.ops
   branches/ops_pct/src/ops/var.ops
   branches/ops_pct/src/packdump.c
   branches/ops_pct/src/packfile.c
   branches/ops_pct/src/packfile/pf_items.c
   branches/ops_pct/src/packout.c
   branches/ops_pct/src/parrot_debugger.c
   branches/ops_pct/src/pbc_dump.c
   branches/ops_pct/src/pbc_merge.c
   branches/ops_pct/src/pmc.c
   branches/ops_pct/src/pmc/addrregistry.pmc
   branches/ops_pct/src/pmc/arrayiterator.pmc
   branches/ops_pct/src/pmc/bigint.pmc
   branches/ops_pct/src/pmc/bignum.pmc
   branches/ops_pct/src/pmc/boolean.pmc
   branches/ops_pct/src/pmc/callcontext.pmc
   branches/ops_pct/src/pmc/capture.pmc
   branches/ops_pct/src/pmc/class.pmc
   branches/ops_pct/src/pmc/codestring.pmc
   branches/ops_pct/src/pmc/complex.pmc
   branches/ops_pct/src/pmc/continuation.pmc
   branches/ops_pct/src/pmc/coroutine.pmc
   branches/ops_pct/src/pmc/default.pmc
   branches/ops_pct/src/pmc/env.pmc
   branches/ops_pct/src/pmc/eval.pmc
   branches/ops_pct/src/pmc/eventhandler.pmc
   branches/ops_pct/src/pmc/exception.pmc
   branches/ops_pct/src/pmc/exceptionhandler.pmc
   branches/ops_pct/src/pmc/exporter.pmc
   branches/ops_pct/src/pmc/filehandle.pmc
   branches/ops_pct/src/pmc/fixedbooleanarray.pmc
   branches/ops_pct/src/pmc/fixedfloatarray.pmc
   branches/ops_pct/src/pmc/fixedintegerarray.pmc
   branches/ops_pct/src/pmc/fixedpmcarray.pmc
   branches/ops_pct/src/pmc/fixedstringarray.pmc
   branches/ops_pct/src/pmc/float.pmc
   branches/ops_pct/src/pmc/handle.pmc
   branches/ops_pct/src/pmc/hash.pmc
   branches/ops_pct/src/pmc/hashiterator.pmc
   branches/ops_pct/src/pmc/hashiteratorkey.pmc
   branches/ops_pct/src/pmc/imageio.pmc
   branches/ops_pct/src/pmc/imageiosize.pmc
   branches/ops_pct/src/pmc/integer.pmc
   branches/ops_pct/src/pmc/iterator.pmc
   branches/ops_pct/src/pmc/key.pmc
   branches/ops_pct/src/pmc/lexinfo.pmc
   branches/ops_pct/src/pmc/lexpad.pmc
   branches/ops_pct/src/pmc/managedstruct.pmc
   branches/ops_pct/src/pmc/multisub.pmc
   branches/ops_pct/src/pmc/namespace.pmc
   branches/ops_pct/src/pmc/nci.pmc
   branches/ops_pct/src/pmc/null.pmc
   branches/ops_pct/src/pmc/object.pmc
   branches/ops_pct/src/pmc/opcode.pmc
   branches/ops_pct/src/pmc/oplib.pmc
   branches/ops_pct/src/pmc/orderedhash.pmc
   branches/ops_pct/src/pmc/orderedhashiterator.pmc
   branches/ops_pct/src/pmc/packfile.pmc
   branches/ops_pct/src/pmc/packfileannotation.pmc
   branches/ops_pct/src/pmc/packfileannotations.pmc
   branches/ops_pct/src/pmc/packfileconstanttable.pmc
   branches/ops_pct/src/pmc/packfiledirectory.pmc
   branches/ops_pct/src/pmc/packfilefixupentry.pmc
   branches/ops_pct/src/pmc/packfilefixuptable.pmc
   branches/ops_pct/src/pmc/packfilerawsegment.pmc
   branches/ops_pct/src/pmc/packfilesegment.pmc
   branches/ops_pct/src/pmc/parrotinterpreter.pmc
   branches/ops_pct/src/pmc/parrotlibrary.pmc
   branches/ops_pct/src/pmc/pmc.num
   branches/ops_pct/src/pmc/pmcproxy.pmc
   branches/ops_pct/src/pmc/pointer.pmc
   branches/ops_pct/src/pmc/resizablebooleanarray.pmc
   branches/ops_pct/src/pmc/resizablefloatarray.pmc
   branches/ops_pct/src/pmc/resizableintegerarray.pmc
   branches/ops_pct/src/pmc/resizablepmcarray.pmc
   branches/ops_pct/src/pmc/resizablestringarray.pmc
   branches/ops_pct/src/pmc/role.pmc
   branches/ops_pct/src/pmc/scalar.pmc
   branches/ops_pct/src/pmc/scheduler.pmc
   branches/ops_pct/src/pmc/schedulermessage.pmc
   branches/ops_pct/src/pmc/sockaddr.pmc
   branches/ops_pct/src/pmc/socket.pmc
   branches/ops_pct/src/pmc/string.pmc
   branches/ops_pct/src/pmc/stringhandle.pmc
   branches/ops_pct/src/pmc/stringiterator.pmc
   branches/ops_pct/src/pmc/sub.pmc
   branches/ops_pct/src/pmc/task.pmc
   branches/ops_pct/src/pmc/timer.pmc
   branches/ops_pct/src/pmc/undef.pmc
   branches/ops_pct/src/pmc/unmanagedstruct.pmc
   branches/ops_pct/src/pmc_freeze.c
   branches/ops_pct/src/runcore/cores.c   (contents, props changed)
   branches/ops_pct/src/runcore/main.c   (contents, props changed)
   branches/ops_pct/src/runcore/profiling.c   (contents, props changed)
   branches/ops_pct/src/runcore/trace.c   (contents, props changed)
   branches/ops_pct/src/scheduler.c
   branches/ops_pct/src/spf_render.c
   branches/ops_pct/src/spf_vtable.c
   branches/ops_pct/src/string/api.c
   branches/ops_pct/src/string/charset.c
   branches/ops_pct/src/string/charset/ascii.c
   branches/ops_pct/src/string/charset/ascii.h
   branches/ops_pct/src/string/charset/binary.c
   branches/ops_pct/src/string/charset/binary.h
   branches/ops_pct/src/string/charset/iso-8859-1.c
   branches/ops_pct/src/string/charset/iso-8859-1.h
   branches/ops_pct/src/string/charset/unicode.c
   branches/ops_pct/src/string/charset/unicode.h
   branches/ops_pct/src/string/encoding.c
   branches/ops_pct/src/string/encoding/fixed_8.c
   branches/ops_pct/src/string/encoding/fixed_8.h
   branches/ops_pct/src/string/encoding/ucs2.c
   branches/ops_pct/src/string/encoding/ucs2.h
   branches/ops_pct/src/string/encoding/utf16.c
   branches/ops_pct/src/string/encoding/utf16.h
   branches/ops_pct/src/string/encoding/utf8.c
   branches/ops_pct/src/string/encoding/utf8.h
   branches/ops_pct/src/string/primitives.c
   branches/ops_pct/src/sub.c
   branches/ops_pct/src/thread.c
   branches/ops_pct/src/utils.c
   branches/ops_pct/src/vtables.c
   branches/ops_pct/t/codingstd/c_function_docs.t
   branches/ops_pct/t/codingstd/c_parens.t
   branches/ops_pct/t/codingstd/pdd_format.t
   branches/ops_pct/t/compilers/imcc/imcpasm/optc.t
   branches/ops_pct/t/compilers/imcc/reg/spill.t
   branches/ops_pct/t/compilers/imcc/syn/file.t
   branches/ops_pct/t/compilers/imcc/syn/labels.t
   branches/ops_pct/t/compilers/imcc/syn/objects.t
   branches/ops_pct/t/compilers/imcc/syn/op.t
   branches/ops_pct/t/compilers/imcc/syn/regressions.t
   branches/ops_pct/t/compilers/imcc/syn/scope.t
   branches/ops_pct/t/compilers/imcc/syn/subflags.t
   branches/ops_pct/t/compilers/imcc/syn/tail.t
   branches/ops_pct/t/compilers/imcc/syn/veracity.t
   branches/ops_pct/t/compilers/pct/complete_workflow.t
   branches/ops_pct/t/compilers/pge/02-match.t
   branches/ops_pct/t/compilers/pge/03-optable.t
   branches/ops_pct/t/compilers/pge/04-compile.t
   branches/ops_pct/t/compilers/pge/p5regex/p5rx.t
   branches/ops_pct/t/compilers/pge/perl6regex/01-regex.t
   branches/ops_pct/t/compilers/pge/pge-hs.t
   branches/ops_pct/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/ops_pct/t/compilers/tge/basic.t
   branches/ops_pct/t/compilers/tge/parser.t
   branches/ops_pct/t/configure/testlib/adefectivefoobar
   branches/ops_pct/t/configure/testlib/bdefectivefoobar
   branches/ops_pct/t/configure/testlib/cdefectivefoobar
   branches/ops_pct/t/configure/testlib/ddefectivefoobar
   branches/ops_pct/t/configure/testlib/verbosefoobar
   branches/ops_pct/t/distro/file_metadata.t
   branches/ops_pct/t/dynoplibs/math.t
   branches/ops_pct/t/dynoplibs/obscure.t
   branches/ops_pct/t/dynpmc/foo2.t
   branches/ops_pct/t/dynpmc/rational.t
   branches/ops_pct/t/dynpmc/rotest.t
   branches/ops_pct/t/dynpmc/subproxy.t
   branches/ops_pct/t/examples/shootout.t
   branches/ops_pct/t/examples/tutorial.t
   branches/ops_pct/t/harness
   branches/ops_pct/t/include/fp_equality.t
   branches/ops_pct/t/library/configure.t
   branches/ops_pct/t/library/getopt_obj.t
   branches/ops_pct/t/library/hllmacros.t
   branches/ops_pct/t/library/md5.t
   branches/ops_pct/t/library/mime_base64.t
   branches/ops_pct/t/library/p6object.t
   branches/ops_pct/t/library/parrotlib.t
   branches/ops_pct/t/library/pcre.t
   branches/ops_pct/t/library/protoobject.t
   branches/ops_pct/t/library/rand.t
   branches/ops_pct/t/library/range.t
   branches/ops_pct/t/library/test_builder_tester.t
   branches/ops_pct/t/library/test_class.t
   branches/ops_pct/t/library/test_more.t
   branches/ops_pct/t/library/uuid.t
   branches/ops_pct/t/native_pbc/annotations.pbc
   branches/ops_pct/t/native_pbc/integer_1.pbc
   branches/ops_pct/t/native_pbc/integer_4.pbc
   branches/ops_pct/t/native_pbc/number_1.pbc
   branches/ops_pct/t/native_pbc/number_4.pbc
   branches/ops_pct/t/native_pbc/string_1.pbc
   branches/ops_pct/t/native_pbc/string_4.pbc
   branches/ops_pct/t/oo/attributes.t
   branches/ops_pct/t/oo/composition.t
   branches/ops_pct/t/oo/inheritance.t
   branches/ops_pct/t/oo/isa.t
   branches/ops_pct/t/oo/metamodel.t
   branches/ops_pct/t/oo/methods.t
   branches/ops_pct/t/oo/mro-c3.t
   branches/ops_pct/t/oo/names.t
   branches/ops_pct/t/oo/new.t
   branches/ops_pct/t/oo/ops.t
   branches/ops_pct/t/oo/proxy.t
   branches/ops_pct/t/oo/root_new.t   (contents, props changed)
   branches/ops_pct/t/oo/subclass.t
   branches/ops_pct/t/oo/vtableoverride.t
   branches/ops_pct/t/op/00ff-dos.t
   branches/ops_pct/t/op/00ff-unix.t
   branches/ops_pct/t/op/64bit.t
   branches/ops_pct/t/op/annotate-old.t
   branches/ops_pct/t/op/annotate.t
   branches/ops_pct/t/op/arithmetics.t
   branches/ops_pct/t/op/arithmetics_pmc.t
   branches/ops_pct/t/op/box.t
   branches/ops_pct/t/op/calling.t
   branches/ops_pct/t/op/cc_params.t
   branches/ops_pct/t/op/cmp-nonbranch.t
   branches/ops_pct/t/op/comp.t
   branches/ops_pct/t/op/copy.t
   branches/ops_pct/t/op/debuginfo.t
   branches/ops_pct/t/op/errorson.t
   branches/ops_pct/t/op/exceptions.t
   branches/ops_pct/t/op/fetch.t
   branches/ops_pct/t/op/gc-leaky.t
   branches/ops_pct/t/op/gc.t
   branches/ops_pct/t/op/globals.t
   branches/ops_pct/t/op/ifunless.t
   branches/ops_pct/t/op/inf_nan.t
   branches/ops_pct/t/op/integer.t
   branches/ops_pct/t/op/interp.t
   branches/ops_pct/t/op/io.t
   branches/ops_pct/t/op/literal.t
   branches/ops_pct/t/op/number.t
   branches/ops_pct/t/op/sprintf.t
   branches/ops_pct/t/op/sprintf2.t
   branches/ops_pct/t/op/string.t
   branches/ops_pct/t/op/string_cmp.t
   branches/ops_pct/t/op/string_cs.t
   branches/ops_pct/t/op/stringu.t
   branches/ops_pct/t/op/time.t
   branches/ops_pct/t/op/trans.t
   branches/ops_pct/t/op/vivify.t
   branches/ops_pct/t/pharness/02-get_test_prog_args.t
   branches/ops_pct/t/pir/macro.t
   branches/ops_pct/t/pir/registernames.t
   branches/ops_pct/t/pmc/addrregistry.t
   branches/ops_pct/t/pmc/arrayiterator.t
   branches/ops_pct/t/pmc/bigint.t
   branches/ops_pct/t/pmc/boolean.t
   branches/ops_pct/t/pmc/callcontext.t
   branches/ops_pct/t/pmc/capture.t
   branches/ops_pct/t/pmc/class.t
   branches/ops_pct/t/pmc/codestring.t
   branches/ops_pct/t/pmc/complex.t
   branches/ops_pct/t/pmc/config.t
   branches/ops_pct/t/pmc/context.t
   branches/ops_pct/t/pmc/continuation.t
   branches/ops_pct/t/pmc/default.t
   branches/ops_pct/t/pmc/env.t
   branches/ops_pct/t/pmc/eval.t
   branches/ops_pct/t/pmc/eventhandler.t
   branches/ops_pct/t/pmc/exception-old.t
   branches/ops_pct/t/pmc/exception.t
   branches/ops_pct/t/pmc/exceptionhandler.t
   branches/ops_pct/t/pmc/fixedbooleanarray.t
   branches/ops_pct/t/pmc/fixedfloatarray.t
   branches/ops_pct/t/pmc/fixedintegerarray.t
   branches/ops_pct/t/pmc/fixedpmcarray.t
   branches/ops_pct/t/pmc/fixedstringarray.t
   branches/ops_pct/t/pmc/float.t
   branches/ops_pct/t/pmc/freeze.t
   branches/ops_pct/t/pmc/handle.t
   branches/ops_pct/t/pmc/hash.t
   branches/ops_pct/t/pmc/hashiterator.t
   branches/ops_pct/t/pmc/imageio.t
   branches/ops_pct/t/pmc/imageiosize.t
   branches/ops_pct/t/pmc/integer.t
   branches/ops_pct/t/pmc/io.t
   branches/ops_pct/t/pmc/key.t
   branches/ops_pct/t/pmc/lexinfo.t
   branches/ops_pct/t/pmc/lexpad.t
   branches/ops_pct/t/pmc/managedstruct.t
   branches/ops_pct/t/pmc/multidispatch.t
   branches/ops_pct/t/pmc/namespace-old.t   (contents, props changed)
   branches/ops_pct/t/pmc/namespace.t
   branches/ops_pct/t/pmc/nci.t
   branches/ops_pct/t/pmc/null.t
   branches/ops_pct/t/pmc/object.t
   branches/ops_pct/t/pmc/objects.t
   branches/ops_pct/t/pmc/opcode.t
   branches/ops_pct/t/pmc/oplib.t
   branches/ops_pct/t/pmc/packfile.t
   branches/ops_pct/t/pmc/packfileannotation.t
   branches/ops_pct/t/pmc/packfileannotations.t
   branches/ops_pct/t/pmc/packfileconstanttable.t
   branches/ops_pct/t/pmc/packfiledirectory.t
   branches/ops_pct/t/pmc/packfilefixupentry.t
   branches/ops_pct/t/pmc/packfilefixuptable.t
   branches/ops_pct/t/pmc/packfilerawsegment.t
   branches/ops_pct/t/pmc/packfilesegment.t
   branches/ops_pct/t/pmc/parrotclass.t
   branches/ops_pct/t/pmc/parrotinterpreter.t
   branches/ops_pct/t/pmc/parrotlibrary.t
   branches/ops_pct/t/pmc/parrotobject.t
   branches/ops_pct/t/pmc/parrotthread.t
   branches/ops_pct/t/pmc/pmcproxy.t
   branches/ops_pct/t/pmc/pointer.t
   branches/ops_pct/t/pmc/prop.t
   branches/ops_pct/t/pmc/resizablebooleanarray.t
   branches/ops_pct/t/pmc/resizablefloatarray.t
   branches/ops_pct/t/pmc/resizableintegerarray.t
   branches/ops_pct/t/pmc/resizablepmcarray.t
   branches/ops_pct/t/pmc/ro.t
   branches/ops_pct/t/pmc/role.t
   branches/ops_pct/t/pmc/scalar.t
   branches/ops_pct/t/pmc/scheduler.t
   branches/ops_pct/t/pmc/schedulermessage.t
   branches/ops_pct/t/pmc/sockaddr.t
   branches/ops_pct/t/pmc/socket.t
   branches/ops_pct/t/pmc/string.t
   branches/ops_pct/t/pmc/stringiterator.t
   branches/ops_pct/t/pmc/testlib/packfile_common.pir
   branches/ops_pct/t/pmc/threads.t
   branches/ops_pct/t/pmc/undef.t
   branches/ops_pct/t/pmc/unmanagedstruct.t
   branches/ops_pct/t/run/exit.t
   branches/ops_pct/t/src/basic.t
   branches/ops_pct/t/src/embed.t   (contents, props changed)
   branches/ops_pct/t/src/extend.t
   branches/ops_pct/t/src/warnings.t
   branches/ops_pct/t/steps/auto/arch-01.t
   branches/ops_pct/t/steps/gen/platform-01.t
   branches/ops_pct/t/steps/init/defaults-01.t
   branches/ops_pct/t/steps/init/hints/linux-01.t   (props changed)
   branches/ops_pct/t/steps/inter/progs-04.t
   branches/ops_pct/t/tools/install/testlib/README
   branches/ops_pct/t/tools/ops2cutils/01-new.t
   branches/ops_pct/t/tools/ops2cutils/03-print_c_header_file.t
   branches/ops_pct/t/tools/ops2cutils/04-print_c_source_top.t
   branches/ops_pct/t/tools/ops2cutils/05-print_c_source_bottom.t
   branches/ops_pct/t/tools/ops2cutils/06-dynamic.t
   branches/ops_pct/t/tools/ops2cutils/07-make_incdir.t
   branches/ops_pct/t/tools/ops2cutils/08-nolines.t
   branches/ops_pct/t/tools/ops2cutils/09-dynamic_nolines.t
   branches/ops_pct/t/tools/ops2cutils/10-print_c_source_file.t
   branches/ops_pct/t/tools/ops2pm/05-renum_op_map_file.t
   branches/ops_pct/tools/build/h2inc.pl   (props changed)
   branches/ops_pct/tools/build/headerizer.pl
   branches/ops_pct/tools/build/ops2c.pl
   branches/ops_pct/tools/dev/branch_status.pl
   branches/ops_pct/tools/dev/checkdepend.pl
   branches/ops_pct/tools/dev/fetch_languages.pl   (props changed)
   branches/ops_pct/tools/dev/gen_charset_tables.pl
   branches/ops_pct/tools/dev/install_files.pl
   branches/ops_pct/tools/dev/mk_gitignore.pl   (props changed)
   branches/ops_pct/tools/dev/mk_inno.pl
   branches/ops_pct/tools/dev/mk_manifest_and_skip.pl
   branches/ops_pct/tools/dev/mk_native_pbc
   branches/ops_pct/tools/dev/nci_thunk_gen.pir
   branches/ops_pct/tools/dev/parrot-fuzzer
   branches/ops_pct/tools/dev/pbc_to_exe.pir
   branches/ops_pct/tools/install/smoke.pl
   branches/ops_pct/tools/util/parrot-config.pir
   branches/ops_pct/tools/util/perlcritic-cage.conf   (props changed)
   branches/ops_pct/tools/util/pgegrep
   branches/ops_pct/tools/util/release.json

Copied: branches/ops_pct/.gitignore (from r46301, trunk/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/.gitignore	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/.gitignore)
@@ -0,0 +1,581 @@
+# ex: set ro:
+# $Id$
+# generated by tools/dev/mk_gitignore.pl Sat Apr 24 05:11:34 2010 UT
+#
+# This file should contain a transcript of the svn:ignore properties
+# of the directories in the Parrot subversion repository.
+# The .gitignore file is a convenience for developers  working with git-svn.
+# See http://www.kernel.org/pub/software/scm/git/docs/gitignore.html for the
+# format of this file.
+#
+# generated from svn:ignore of './'
+/*.core
+/*.def
+/*.exe
+/*.exp
+/*.ilk
+/*.lib
+/*.manifest
+/*.ncb
+/*.o
+/*.obj
+/*.patch
+/*.pdb
+/*.sln
+/*.sto
+/*.suo
+/*.tmp
+/*.vcproj*
+/.git
+/.parrot_current_rev
+/CFLAGS
+/MANIFEST.configure.generated
+/Makefile
+/TAGS
+/all_cstring.str
+/blib
+/config_lib.pir
+/cover_db
+/install_config.fpmc
+/installable*
+/libparrot.def
+/libparrot.dll
+/miniparrot
+/myconfig
+/parrot
+/parrot-nqp
+/parrot-nqp.c
+/parrot-nqp.pbc
+/parrot.ilk
+/parrot.iss
+/parrot.pc
+/parrot.pdb
+/parrot_config
+/parrot_config.c
+/parrot_config.pbc
+/parrot_debugger
+/parrot_nci_thunk_gen
+/parrot_nci_thunk_gen.c
+/parrot_nci_thunk_gen.pbc
+/parrot_test_run.tar.gz
+/pbc_disassemble
+/pbc_dump
+/pbc_info
+/pbc_merge
+/pbc_to_exe
+/pbc_to_exe.*
+/perl6
+/pirc
+/tags
+/tapir
+/tapir.*
+/temp.file
+/test
+/test.c
+/test.cco
+/test.err
+/test.ilk
+/test.ldo
+/test.out
+/test.pdb
+/vc60.pdb
+/vc70.pdb
+/vtable.dump
+# generated from svn:ignore of 'compilers/data_json/'
+/compilers/data_json/data_json.pbc
+# generated from svn:ignore of 'compilers/data_json/data_json/'
+/compilers/data_json/data_json/*.pbc
+/compilers/data_json/data_json/*.pir
+# generated from svn:ignore of 'compilers/imcc/'
+/compilers/imcc/*.flag
+/compilers/imcc/*.o
+/compilers/imcc/*.obj
+/compilers/imcc/*.tmp
+/compilers/imcc/Rules.mak
+/compilers/imcc/imcc
+/compilers/imcc/imclexer.c
+/compilers/imcc/imcparser.c
+/compilers/imcc/imcparser.h
+/compilers/imcc/imcparser.output
+# generated from svn:ignore of 'compilers/pct/src/PAST/'
+/compilers/pct/src/PAST/*.pbc
+# generated from svn:ignore of 'compilers/pct/src/PCT/'
+/compilers/pct/src/PCT/*.pbc
+# generated from svn:ignore of 'compilers/pct/src/POST/'
+/compilers/pct/src/POST/*.pbc
+/compilers/pct/src/POST/Grammar_gen.pir
+# generated from svn:ignore of 'compilers/pge/'
+/compilers/pge/PGE.pbc
+# generated from svn:ignore of 'compilers/pge/PGE/'
+/compilers/pge/PGE/*.dll
+/compilers/pge/PGE/builtins_gen.pir
+# generated from svn:ignore of 'compilers/pirc/'
+/compilers/pirc/*.o
+/compilers/pirc/*.obj
+/compilers/pirc/*.pbd
+/compilers/pirc/pirc
+/compilers/pirc/pirc.exe
+# generated from svn:ignore of 'compilers/pirc/t/'
+/compilers/pirc/t/basic_?.pir
+/compilers/pirc/t/basic_??.pir
+/compilers/pirc/t/heredoc_?.pir
+/compilers/pirc/t/macro_?.pir
+/compilers/pirc/t/stmts_?.pir
+/compilers/pirc/t/subflags_?.pir
+# generated from svn:ignore of 'compilers/tge/'
+/compilers/tge/tgc.pbc
+# generated from svn:ignore of 'compilers/tge/TGE/'
+/compilers/tge/TGE/Parser.pir
+# generated from svn:ignore of 'docs/'
+/docs/*.tmp
+/docs/Makefile
+/docs/doc-prep
+/docs/html
+/docs/packfile-c.pod
+/docs/packfile-perl.pod
+# generated from svn:ignore of 'docs/book/'
+/docs/book/*.html
+# generated from svn:ignore of 'docs/ops/'
+/docs/ops/*.pod
+# generated from svn:ignore of 'editor/'
+/editor/Makefile
+/editor/imc.vim
+/editor/imcc.xml
+/editor/pir.vim
+# generated from svn:ignore of 'examples/languages/abc/'
+/examples/languages/abc/*.c
+/examples/languages/abc/*.exe
+/examples/languages/abc/*.iss
+/examples/languages/abc/*.o
+/examples/languages/abc/*.obj
+/examples/languages/abc/*.pbc
+/examples/languages/abc/MANIFEST
+/examples/languages/abc/abc
+/examples/languages/abc/installable_abc
+/examples/languages/abc/man
+# generated from svn:ignore of 'examples/languages/abc/src/'
+/examples/languages/abc/src/gen_actions.pir
+/examples/languages/abc/src/gen_builtins.pir
+/examples/languages/abc/src/gen_grammar.pir
+# generated from svn:ignore of 'examples/languages/abc/t/'
+/examples/languages/abc/t/*_*.out
+/examples/languages/abc/t/*_*.pir
+# generated from svn:ignore of 'examples/languages/squaak/'
+/examples/languages/squaak/*.c
+/examples/languages/squaak/*.exe
+/examples/languages/squaak/*.iss
+/examples/languages/squaak/*.o
+/examples/languages/squaak/*.obj
+/examples/languages/squaak/*.pbc
+/examples/languages/squaak/MANIFEST
+/examples/languages/squaak/installable_squaak
+/examples/languages/squaak/squaak
+# generated from svn:ignore of 'examples/languages/squaak/src/'
+/examples/languages/squaak/src/gen_*.pir
+# generated from svn:ignore of 'examples/mops/'
+/examples/mops/*.o
+/examples/mops/mops
+# generated from svn:ignore of 'examples/nci/'
+/examples/nci/*.pbc
+# generated from svn:ignore of 'examples/pasm/'
+/examples/pasm/hello
+/examples/pasm/hello.o
+/examples/pasm/hello.pbc
+# generated from svn:ignore of 'examples/pir/befunge/'
+/examples/pir/befunge/*.c
+/examples/pir/befunge/*.exe
+/examples/pir/befunge/*.iss
+/examples/pir/befunge/*.o
+/examples/pir/befunge/*.obj
+/examples/pir/befunge/*.pbc
+/examples/pir/befunge/MANIFEST
+/examples/pir/befunge/befunge
+/examples/pir/befunge/installable_befunge
+# generated from svn:ignore of 'ext/'
+/ext/Makefile
+# generated from svn:ignore of 'ext/Parrot-Embed/'
+/ext/Parrot-Embed/*.bs
+/ext/Parrot-Embed/*.bundle
+/ext/Parrot-Embed/*.c
+/ext/Parrot-Embed/*.def
+/ext/Parrot-Embed/*.dll
+/ext/Parrot-Embed/*.dump
+/ext/Parrot-Embed/*.dylib
+/ext/Parrot-Embed/*.exe
+/ext/Parrot-Embed/*.exp
+/ext/Parrot-Embed/*.h
+/ext/Parrot-Embed/*.ilk
+/ext/Parrot-Embed/*.lib
+/ext/Parrot-Embed/*.manifest
+/ext/Parrot-Embed/*.o
+/ext/Parrot-Embed/*.obj
+/ext/Parrot-Embed/*.old
+/ext/Parrot-Embed/*.pdb
+/ext/Parrot-Embed/*.pdb
+/ext/Parrot-Embed/*.so
+/ext/Parrot-Embed/*.tmp
+/ext/Parrot-Embed/*.xs
+/ext/Parrot-Embed/Build
+/ext/Parrot-Embed/Build.bat
+/ext/Parrot-Embed/Makefile
+/ext/Parrot-Embed/Makefile.PL
+/ext/Parrot-Embed/_build
+/ext/Parrot-Embed/blib
+/ext/Parrot-Embed/dll.base
+/ext/Parrot-Embed/pm_to_blib
+# generated from svn:ignore of 'ext/Parrot-Embed/lib/Parrot/'
+/ext/Parrot-Embed/lib/Parrot/*.c
+/ext/Parrot-Embed/lib/Parrot/*.obj
+# generated from svn:ignore of 'ext/Parrot-Embed/t/'
+/ext/Parrot-Embed/t/*.pbc
+# generated from svn:ignore of 'include/parrot/'
+/include/parrot/*.tmp
+/include/parrot/config.h
+/include/parrot/core_pmcs.h
+/include/parrot/extend_vtable.h
+/include/parrot/feature.h
+/include/parrot/has_header.h
+/include/parrot/opsenum.h
+/include/parrot/pbcversion.h
+/include/parrot/platform.h
+/include/parrot/platform_interface.h
+/include/parrot/platform_limits.h
+/include/parrot/vtable.h
+# generated from svn:ignore of 'include/parrot/oplib/'
+/include/parrot/oplib/*_ops.h
+/include/parrot/oplib/*_ops_cg*.h
+/include/parrot/oplib/*_ops_switch.h
+/include/parrot/oplib/ops.h
+# generated from svn:ignore of 'include/pmc/'
+/include/pmc/*.h
+# generated from svn:ignore of 'lib/'
+/lib/DumbLink.pm
+# generated from svn:ignore of 'lib/Parrot/'
+/lib/Parrot/*.tmp
+/lib/Parrot/Jit.pm
+/lib/Parrot/Makefile
+/lib/Parrot/OpLib
+/lib/Parrot/PMC.pm
+/lib/Parrot/PakFile2.bs
+/lib/Parrot/PakFile2.c
+/lib/Parrot/blib
+/lib/Parrot/pm_to_blib
+# generated from svn:ignore of 'lib/Parrot/Config/'
+/lib/Parrot/Config/Generated.pm
+# generated from svn:ignore of 'lib/Parrot/Pmc2c/'
+/lib/Parrot/Pmc2c/PCCMETHOD_BITS.pm
+# generated from svn:ignore of 'runtime/parrot/dynext/'
+/runtime/parrot/dynext/*.bundle
+/runtime/parrot/dynext/*.def
+/runtime/parrot/dynext/*.dll
+/runtime/parrot/dynext/*.dylib
+/runtime/parrot/dynext/*.exe
+/runtime/parrot/dynext/*.exp
+/runtime/parrot/dynext/*.ilk
+/runtime/parrot/dynext/*.lib
+/runtime/parrot/dynext/*.manifest
+/runtime/parrot/dynext/*.obj
+/runtime/parrot/dynext/*.pdb
+/runtime/parrot/dynext/*.so
+/runtime/parrot/dynext/libnci.*
+# generated from svn:ignore of 'runtime/parrot/include/'
+/runtime/parrot/include/*.fpmc
+/runtime/parrot/include/*.pasm
+/runtime/parrot/include/*.pbc
+# generated from svn:ignore of 'runtime/parrot/languages/'
+/runtime/parrot/languages/data_json
+# generated from svn:ignore of 'runtime/parrot/library/'
+/runtime/parrot/library/*.pbc
+/runtime/parrot/library/OpenGL_funcs.pir
+/runtime/parrot/library/PAST
+/runtime/parrot/library/config.pir
+# generated from svn:ignore of 'runtime/parrot/library/CGI/'
+/runtime/parrot/library/CGI/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Config/'
+/runtime/parrot/library/Config/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Configure/'
+/runtime/parrot/library/Configure/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Data/'
+/runtime/parrot/library/Data/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Data/Dumper/'
+/runtime/parrot/library/Data/Dumper/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Digest/'
+/runtime/parrot/library/Digest/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Getopt/'
+/runtime/parrot/library/Getopt/Obj.pbc
+# generated from svn:ignore of 'runtime/parrot/library/MIME/'
+/runtime/parrot/library/MIME/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Math/'
+/runtime/parrot/library/Math/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/NCI/'
+/runtime/parrot/library/NCI/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/OpenGL/'
+/runtime/parrot/library/OpenGL/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/PCT/'
+/runtime/parrot/library/PCT/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/PGE/'
+/runtime/parrot/library/PGE/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Parrot/'
+/runtime/parrot/library/Parrot/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/ProfTest/'
+/runtime/parrot/library/ProfTest/*.pbc
+/runtime/parrot/library/ProfTest/*.pir
+# generated from svn:ignore of 'runtime/parrot/library/Stream/'
+/runtime/parrot/library/Stream/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/String/'
+/runtime/parrot/library/String/Utils.pbc
+# generated from svn:ignore of 'runtime/parrot/library/TAP/'
+/runtime/parrot/library/TAP/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Tcl/'
+/runtime/parrot/library/Tcl/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Test/'
+/runtime/parrot/library/Test/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/Test/Builder/'
+/runtime/parrot/library/Test/Builder/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/YAML/'
+/runtime/parrot/library/YAML/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/YAML/Dumper/'
+/runtime/parrot/library/YAML/Dumper/*.pbc
+# generated from svn:ignore of 'runtime/parrot/library/YAML/Parser/'
+/runtime/parrot/library/YAML/Parser/*.pbc
+# generated from svn:ignore of 'src/'
+/src/*.o
+/src/*.obj
+/src/*.str
+/src/asmfun.*
+/src/core_pmcs.c
+/src/exec_cpu.c
+/src/exec_dep.c
+/src/exec_dep.h
+/src/extend_vtable.c
+/src/extra_nci_thunks.c
+/src/fingerprint.c
+/src/glut_callbacks.c
+/src/glut_nci_thunks.c
+/src/glut_nci_thunks.nci
+/src/install_config.c
+/src/jit_cpu.c
+/src/jit_defs.c
+/src/jit_emit.h
+/src/null_config.c
+/src/parrot_config.c
+/src/parrot_config.h
+/src/platform.c
+/src/platform_asm.s
+/src/revision.c
+# generated from svn:ignore of 'src/atomic/'
+/src/atomic/*.gcda
+/src/atomic/*.o
+# generated from svn:ignore of 'src/call/'
+/src/call/*.o
+/src/call/*.obj
+/src/call/*.str
+# generated from svn:ignore of 'src/dynoplibs/'
+/src/dynoplibs/*.bundle
+/src/dynoplibs/*.c
+/src/dynoplibs/*.dll
+/src/dynoplibs/*.exp
+/src/dynoplibs/*.h
+/src/dynoplibs/*.ilk
+/src/dynoplibs/*.lib
+/src/dynoplibs/*.manifest
+/src/dynoplibs/*.o
+/src/dynoplibs/*.obj
+/src/dynoplibs/*.pdb
+/src/dynoplibs/*.so
+/src/dynoplibs/Defines.mak
+/src/dynoplibs/Rules.mak
+# generated from svn:ignore of 'src/dynpmc/'
+/src/dynpmc/*.bundle
+/src/dynpmc/*.c
+/src/dynpmc/*.def
+/src/dynpmc/*.dll
+/src/dynpmc/*.dump
+/src/dynpmc/*.dylib
+/src/dynpmc/*.exe
+/src/dynpmc/*.exp
+/src/dynpmc/*.h
+/src/dynpmc/*.ilk
+/src/dynpmc/*.lib
+/src/dynpmc/*.manifest
+/src/dynpmc/*.o
+/src/dynpmc/*.obj
+/src/dynpmc/*.pdb
+/src/dynpmc/*.so
+/src/dynpmc/Makefile
+/src/dynpmc/md2.pmc
+/src/dynpmc/md4.pmc
+/src/dynpmc/md5.pmc
+/src/dynpmc/ripemd160.pmc
+/src/dynpmc/sha.pmc
+/src/dynpmc/sha1.pmc
+/src/dynpmc/sha256.pmc
+/src/dynpmc/sha512.pmc
+# generated from svn:ignore of 'src/gc/'
+/src/gc/*.bundle
+/src/gc/*.def
+/src/gc/*.dll
+/src/gc/*.dump
+/src/gc/*.dylib
+/src/gc/*.exe
+/src/gc/*.exp
+/src/gc/*.h
+/src/gc/*.ilk
+/src/gc/*.lib
+/src/gc/*.manifest
+/src/gc/*.o
+/src/gc/*.obj
+/src/gc/*.pdb
+/src/gc/*.so
+/src/gc/Makefile
+# generated from svn:ignore of 'src/interp/'
+/src/interp/*.o
+/src/interp/*.str
+# generated from svn:ignore of 'src/io/'
+/src/io/*.o
+/src/io/*.obj
+/src/io/*.str
+# generated from svn:ignore of 'src/nci/'
+/src/nci/*.o
+/src/nci/*.obj
+/src/nci/*.str
+# generated from svn:ignore of 'src/ops/'
+/src/ops/*.c
+/src/ops/*.o
+/src/ops/*.obj
+# generated from svn:ignore of 'src/packfile/'
+/src/packfile/*.o
+/src/packfile/*.obj
+# generated from svn:ignore of 'src/pmc/'
+/src/pmc/*.c
+/src/pmc/*.dump
+/src/pmc/*.h
+/src/pmc/*.o
+/src/pmc/*.obj
+/src/pmc/*.str
+/src/pmc/*.tmp
+/src/pmc/Makefile
+# generated from svn:ignore of 'src/runcore/'
+/src/runcore/*.o
+/src/runcore/*.obj
+/src/runcore/*.str
+# generated from svn:ignore of 'src/string/'
+/src/string/*.o
+/src/string/*.obj
+/src/string/*.str
+/src/string/private_cstring.h
+# generated from svn:ignore of 'src/string/charset/'
+/src/string/charset/*.o
+/src/string/charset/*.obj
+# generated from svn:ignore of 'src/string/encoding/'
+/src/string/encoding/*.o
+/src/string/encoding/*.obj
+# generated from svn:ignore of 't/benchmark/'
+/t/benchmark/*.pasm
+/t/benchmark/*.pir
+# generated from svn:ignore of 't/compilers/data_json/'
+/t/compilers/data_json/*.pbc
+/t/compilers/data_json/*.pir
+/t/compilers/data_json/*_pbcexe
+# generated from svn:ignore of 't/compilers/imcc/'
+/t/compilers/imcc/*.pbc
+# generated from svn:ignore of 't/compilers/imcc/imcpasm/'
+/t/compilers/imcc/imcpasm/*.pasm
+/t/compilers/imcc/imcpasm/*.pbc
+/t/compilers/imcc/imcpasm/*.pir
+/t/compilers/imcc/imcpasm/*_pbcexe
+# generated from svn:ignore of 't/compilers/imcc/reg/'
+/t/compilers/imcc/reg/*.pasm
+/t/compilers/imcc/reg/*.pbc
+/t/compilers/imcc/reg/*.pir
+/t/compilers/imcc/reg/*_pbcexe*
+# generated from svn:ignore of 't/compilers/imcc/syn/'
+/t/compilers/imcc/syn/*.pasm
+/t/compilers/imcc/syn/*.pbc
+/t/compilers/imcc/syn/*.pir
+/t/compilers/imcc/syn/*_pbcexe*
+# generated from svn:ignore of 't/compilers/pct/'
+/t/compilers/pct/*.pbc
+/t/compilers/pct/*.pir
+# generated from svn:ignore of 't/compilers/pge/'
+/t/compilers/pge/*.pasm
+/t/compilers/pge/*.pbc
+/t/compilers/pge/*.pir
+/t/compilers/pge/*_pbcexe
+# generated from svn:ignore of 't/compilers/pge/p5regex/'
+/t/compilers/pge/p5regex/*.pir
+# generated from svn:ignore of 't/compilers/pge/perl6regex/'
+/t/compilers/pge/perl6regex/*.pbc
+/t/compilers/pge/perl6regex/*.pir
+# generated from svn:ignore of 't/compilers/tge/'
+/t/compilers/tge/*.pbc
+/t/compilers/tge/*.pir
+/t/compilers/tge/*_pbcexe
+# generated from svn:ignore of 't/dynoplibs/'
+/t/dynoplibs/*.pasm
+/t/dynoplibs/*.pbc
+/t/dynoplibs/*.pir
+# generated from svn:ignore of 't/dynpmc/'
+/t/dynpmc/*.pasm
+/t/dynpmc/*.pbc
+/t/dynpmc/*.pir
+/t/dynpmc/*_pbcexe*
+/t/dynpmc/md2.t
+/t/dynpmc/md4.t
+/t/dynpmc/md5.t
+/t/dynpmc/ripemd160.t
+/t/dynpmc/sha.t
+/t/dynpmc/sha1.t
+/t/dynpmc/sha256.t
+/t/dynpmc/sha512.t
+# generated from svn:ignore of 't/examples/'
+/t/examples/*.pasm
+/t/examples/*.pbc
+/t/examples/*.pir
+/t/examples/*_pbcexe*
+# generated from svn:ignore of 't/library/'
+/t/library/*.out
+/t/library/*.pasm
+/t/library/*.pbc
+/t/library/*.pir
+/t/library/*_pbcexe*
+# generated from svn:ignore of 't/native_pbc/'
+/t/native_pbc/*_pbcexe*
+# generated from svn:ignore of 't/oo/'
+/t/oo/*.pbc
+/t/oo/*.pir
+# generated from svn:ignore of 't/op/'
+/t/op/*.out
+/t/op/*.pasm
+/t/op/*.pbc
+/t/op/*.pir
+/t/op/*_pbcexe*
+# generated from svn:ignore of 't/perl/'
+/t/perl/Parrot_Test_1.pasm
+/t/perl/Parrot_Test_1.pir
+# generated from svn:ignore of 't/pmc/'
+/t/pmc/*.out
+/t/pmc/*.pasm
+/t/pmc/*.pbc
+/t/pmc/*.pir
+/t/pmc/*_pbcexe*
+# generated from svn:ignore of 't/src/'
+/t/src/*_*
+# generated from svn:ignore of 't/stress/'
+/t/stress/*.out
+/t/stress/*.pasm
+/t/stress/*.pbc
+/t/stress/*.pir
+/t/stress/*_pbcexe*
+# generated from svn:ignore of 't/tools/'
+/t/tools/*.pbc
+/t/tools/*.pir
+/t/tools/pdb.t.*
+/t/tools/pmc2c.*.c
+/t/tools/pmc2c.*.dump
+/t/tools/pmc2c.*.h
+/t/tools/pmc2c.*.pmc
+# Local variables:
+#   mode: text
+#   buffer-read-only: t
+# End:

Modified: branches/ops_pct/CREDITS
==============================================================================
--- branches/ops_pct/CREDITS	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/CREDITS	Wed May  5 08:45:29 2010	(r46302)
@@ -402,7 +402,7 @@
 
 N: Gerd Pokorra
 E: pokorra at uni-siegen.de
-D: Release manager for 1.9.0
+D: Release manager for 1.9.0 and 2.3.0
 
 N: Goplat
 D: Win98 and other fixes.
@@ -509,9 +509,10 @@
 E: jesse at fsck.com
 
 N: Jimmy Zhuo
-A: jimmy
+A: JimmyZ
+U: jimmy
 E: zhuomingliang at yahoo.com.cn
-D: Bugfixes
+D: Bugfixes, cage cleaning
 
 N: John J. Trammell
 E: trammell at el-swifto.com
@@ -573,7 +574,8 @@
 D: Getopt/Obj.pir
 
 N: Julian Albo
-U: julianalbo
+U: NotFound
+A: julianalbo
 E: julian.notfound at gmail.com
 
 N: Julian Fondren
@@ -767,10 +769,6 @@
 N: Nigelsandever
 D: Win32 patches
 
-N: Notfound
-D: Bugfixing and cage cleaning.
-E: julian.notfound at gmail.com
-
 N: Nuno 'smash' Carvalho
 U: smash
 D: PGE/perl6/abc debugging and testing
@@ -922,6 +920,11 @@
 N: Stefan Lidman
 D: sqrt ops
 
+N: Stefan O'Rear
+E: stefanor at cox.net
+D: Perl 5 interoperability, Blizkost
+U: sorear
+
 N: Stéphane Payrard
 D: Various code fixes and improvements
 

Modified: branches/ops_pct/ChangeLog
==============================================================================
--- branches/ops_pct/ChangeLog	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ChangeLog	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,13 @@
 #1 $Id$
 
+2010.04.20     Gerd
+	* Released 2.3.0
+	See NEWS for more.
+
+2010.03.16     cotto
+	* Released 2.2.0
+	See NEWS for more.
+
 2010.02.16     darbelo
 	* Released 2.1.0
 	See NEWS for more.

Modified: branches/ops_pct/Configure.pl
==============================================================================
--- branches/ops_pct/Configure.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/Configure.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -343,10 +343,6 @@
 
 Use the given ops files.
 
-=item C<--cgoto=0>
-
-Don't build cgoto core. This is recommended when you are short of memory.
-
 =item C<--jitcapable>
 
 Use JIT system.
@@ -623,7 +619,6 @@
     auto::jit
     auto::frames
     auto::cpu
-    auto::cgoto
     auto::inline
     auto::gc
     auto::memalign
@@ -632,10 +627,8 @@
     auto::env
     auto::gmp
     auto::readline
-    auto::gdbm
     auto::pcre
     auto::opengl
-    auto::crypto
     auto::gettext
     auto::snprintf
     # auto::perldoc
@@ -644,7 +637,6 @@
     auto::icu
     gen::config_h
     gen::core_pmcs
-    gen::crypto
     gen::opengl
     gen::makefiles
     gen::platform

Modified: branches/ops_pct/DEPRECATED.pod
==============================================================================
--- branches/ops_pct/DEPRECATED.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/DEPRECATED.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -7,8 +7,8 @@
 
 =head1 Experimental Status
 
-These features are not considered stable, even though they may
-have shipped in a stable release of parrot[2]. Use them at your own
+These features are not considered supported, even though they may
+have shipped in a supported release of parrot[2]. Use them at your own
 risk, as they can be removed or changed in any release. These
 items are marked below with C<[experimental]>.
 
@@ -22,27 +22,34 @@
 shipped, this feature may be removed in B<any> upcoming release, and
 you should no longer rely on it.
 
-Whenever deprecated items are removed, information
-regarding how to cope with the removal should be added to
-L<https://trac.parrot.org/parrot/wiki/Deprecation>.
+If you find a feature you once used was removed after a deprecation
+cycle, L<https://trac.parrot.org/parrot/wiki/Deprecation>. Otherwise
+please open a documentation ticket via Trac[1].
 
-When running parrot, you can receive warnings about deprecated opcodes.
+=head1 Are you using any Deprecated Features?
+
+When running parrot, you can receive warnings about deprecations.
 Either run parrot with the C<-w> option to enable all warnings, or
-specifically by including this C<PIR> code:
+deprecations specifically by including this snippet:
+
+=begin PIR_FRAGMENT
 
  .include 'warnings.pasm'
  warningson .PARROT_WARNINGS_DEPRECATED_FLAG
 
+=end PIR_FRAGMENT
+
 =head1 PMCS
 
 =over 4
 
-=item moved to dynpmc [eligible in 1.1]
+=item GzipHandle [experimental]
 
-AddrRegistry, CodeString, Env, Eval, File, OS, PCCMETHOD_Test, StringHandle,
-and Timer.
+L<https://trac.parrot.org/parrot/ticket/1580>
 
-L<https://trac.parrot.org/parrot/ticket/448>
+=item PackfileDebug [experimental]
+
+L<https://trac.parrot.org/parrot/ticket/1599>
 
 =item multiple dispatch within core PMCs [eligible in 1.1]
 
@@ -60,27 +67,62 @@
 
 L<https://trac.parrot.org/parrot/ticket/103>
 
-=item CPointer PMC [eligible in 2.1]
+=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
+that elements which themselves have structure - struct pointers and function
+pointers will be stored as C<void *> and C<void (*)(void)> respectively. To use
+these, they will need to be cast to the appropriate signature on access.
+
+L<https://trac.parrot.org/parrot/ticket/1551>
+
+=item UnManagedStruct initializer structure [eligible in 2.4]
+
+The initializer structure will cease to be an array of triples. In stead, an
+array of flags (no counts or offsets), or a string representation of the same
+information may be used.
+
+L<https://trac.parrot.org/parrot/ticket/1552>
+
+=item UnManagedStruct get_integer, set_integer_native [eligible in 2.4]
+
+These will no longer refer to the byte length of the buffer, but to the number
+of times the struct is repeated; emulating an array of structs.
+
+L<https://trac.parrot.org/parrot/ticket/1553>
+
+=item ManagedStruct reallocations based on shape changes [eligible in 2.4]
+
+Since shape changes may simply be used for re-interpreting data, and may also
+occur in several steps, re-allocating after any one shape change may be
+undesirable. In stead, an explicit allocate/reallocate method will be provided.
 
-And all uses in the Parrot calling conventions.
+L<https://trac.parrot.org/parrot/ticket/1554>
 
-L<https://trac.parrot.org/parrot/ticket/1407>
+=item Auto-vivification of nested aggregates [eligible in 2.4]
 
-=item Digest dynpmcs [eligible in 2.4]
+E.g.
 
-The digest dynpmcs are, since the posting of this notice, available on
-http://gitorious.org/digest-dynpmcs and will no longer be distributed
-with parrot after 2.3.
+  $P0 = new ['Hash']
+  $S1 = $P0['foo';'bar';'baz']
 
-L<https://trac.parrot.org/parrot/ticket/1467>
+will not auto-vivify nested hashes and return PMCNULL early.
 
-=item gdbmhash dynpmc [eligible in 2.4]
+L<https://trac.parrot.org/parrot/ticket/1561>
 
-The gdbmhash dynpmc is, since the posting of this notice, available on
-http://gitorious.org/dbm-dynpmcs and will no longer be distributed
-with parrot after 2.3.
+=item Method lower on String [eligible in 3.1]
 
-L<https://trac.parrot.org/parrot/ticket/1469>
+Use the downcase opcode or subclass with a method name consistent with your
+HLL.
+
+L<http://trac.parrot.org/parrot/ticket/1606>
 
 =back
 
@@ -122,10 +164,6 @@
 
 =item get_results opcode order and features [eligible in 2.1]
 
-Move get_results to follow invoke.
-
-L<https://trac.parrot.org/parrot/ticket/1405>
-
 get_results no longer used to fetch exception object.
 
 L<https://trac.parrot.org/parrot/ticket/1406>
@@ -135,6 +173,45 @@
 Ability to get the string name of the current GC core from the interpinfo_s_i.
 See r43900 and r43904 for details.
 
+L<https://trac.parrot.org/parrot/ticket/1581>
+
+=item NCI_FB_CB and NCI_FB_UD in iglobals [experimental]
+
+Hooks allowing a runtime-loadable dynamic frame builder.
+
+L<https://trac.parrot.org/parrot/ticket/1582>
+
+=item loadlib_p_s_p [experimental]
+
+Ability to use non-default dynamic loading behaviour.
+
+L<https://trac.parrot.org/parrot/ticket/1583>
+
+=item new_callback_p_p_p_s [eligible in 2.4]
+
+To be replaced with new_callback_p_p_p_p_s.
+
+L<https://trac.parrot.org/parrot/ticket/1548>
+
+=item dlfunc and new_callback signature string format [eligible in 2.4]
+
+These will be changed to allow more flexibility in types.
+
+L<https://trac.parrot.org/parrot/ticket/1565>
+
+=item find_lex [eligible in 2.4]
+
+find_lex will not throw exception for non-existing lexicals.
+
+L<https://trac.parrot.org/parrot/ticket/1207>
+
+=item inplace string updates. [eligible in 2.4]
+
+All "inplace" string update ops are deprecated. E.g. "chopn_s", etc.
+Part of COW removal.
+
+L<https://trac.parrot.org/parrot/ticket/1540>
+
 =back
 
 =head1 Bytecode
@@ -185,14 +262,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/907>
 
-=item Subs marked with C<:vtable>/C<:method> aren't in namespace [eligible in 1.1]
-
-Subs marked with C<:vtable> or C<:method> flags are no longer given a
-namespace entry by default.  Use the C<:nsentry> flag to cause this
-to happen.
-
-L<https://trac.parrot.org/parrot/ticket/389>
-
 =item C API coding standards cleanup [eligible in 1.1]
 
 All C API functions that aren't currently named according to the
@@ -207,24 +276,43 @@
  Parrot_gc_free_pmc_attributes
 
 These items and related helper functions are added as experimental support
-for L<https://trac.parrot.org/parrot/ticket/895>
+for L<https://trac.parrot.org/parrot/ticket/1506>
 
 =item STRING Out parameters in Parrot_str_* functions [eligible in 2.1]
 
 All STRING modification functions will return a STRING pointer; capture and use
 this rather than relying on in-place modification of an existing pointer.
 
-=item STRING_is_null function [eligible in 2.4]
+L<https://trac.parrot.org/parrot/ticket/1584>
+
+=item STRING COW [eligible in 2.4]
 
-renamed to Parrot_str_is_null
+COW strings are to be removed. All "inplace" string modification
+functions and all "inplace" string ops are deprecated.
 
-=item Parrot_string_* [eligible in 2.4]
+L<https://trac.parrot.org/parrot/ticket/1540>
 
-rename Parrot_string_cstring to Parrot_str_cstring
+=item Parrot_PMC_* in src/extend.c [eligible in 2.4]
 
-=item STRING functions which don't have Parrot_str_ prefix
+These are duplicates of functions in src/extend_vtable.c. Exceptions:
 
-The string subsytem is gradually getting an overhaul.
+  Parrot_PMC_new
+  Parrot_PMC_typenum
+  Parrot_PMC_null
+  Parrot_PMC_set_vtable
+  Parrot_PMC_newclass
+
+L<https://trac.parrot.org/parrot/ticket/1587>
+
+=item Parrot_VTABLE, Parrot_get_vtable, Parrot_PMC_set_vtable [eligible in 2.4]
+
+These do not expose any functionality that should be available to code outside
+of parrot core.
+
+These might get revived in some form to allow for creating new types and adding
+vtable-overrides, if that functionality becomes desired.
+
+L<https://trac.parrot.org/parrot/ticket/1588>
 
 =back
 
@@ -278,23 +366,6 @@
 
 =back
 
-=head1 Compilers
-
-=over 4
-
-=item json [eligible in 2.4]
-
-The json compiler was dupicated into data_json some time ago. If you're
-using json, just use data_json instead, it's the same code. See TT #1461.
-
-=item nqp [eligible in 2.4]
-
-Replaced by ext/nqp-rx and parrot-nqp.
-
-L<http://trac.parrot.org/parrot/ticket/1462>
-
-=back
-
 =head1 Parrot library
 
 =over 4
@@ -306,7 +377,11 @@
 A way to provide an equivalent of -L and -I parrot command line options
 to language that doesn't support it.
 
-=item JSON, JSON, and Config;JSON [eligible in 1.5]
+=item Archive::Tar [experimental]
+
+L<https://trac.parrot.org/parrot/ticket/1598>
+
+=item JSON and Config;JSON [eligible in 1.5]
 
 L<https://trac.parrot.org/parrot/ticket/508>
 
@@ -320,6 +395,16 @@
 
 =back
 
+=head1 Experimental
+
+=over 4
+
+=item Threads and Parallelism [experimental]
+
+L<https://trac.parrot.org/parrot/ticket/1601>
+
+=back
+
 =head1 Footnotes
 
 =over 4
@@ -331,7 +416,7 @@
 =item 2
 
 For an item to be considered experimental, it can B<never> have shipped in
-a stable release without the C<[experimental]> tag; otherwise, it must be
+a supported release without the C<[experimental]> tag; otherwise, it must be
 deprecated normally before removal or incompatible change.
 
 =back

Modified: branches/ops_pct/MANIFEST
==============================================================================
--- branches/ops_pct/MANIFEST	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/MANIFEST	Wed May  5 08:45:29 2010	(r46302)
@@ -1,12 +1,14 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Sun Mar 14 21:20:56 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Tue May  4 01:57:56 2010 UT
 #
 # See below for documentation on the format of this file.
 #
-# See docs/submissions.pod on how to recreate this file after SVN
+# See docs/submissions.pod and the documentation in
+# tools/dev/mk_manifest_and_skip.pl on how to recreate this file after SVN
 # has been told about new or deleted files.
+.gitignore                                                  []
 CREDITS                                                     [main]doc
 ChangeLog                                                   []
 Configure.pl                                                []
@@ -17,8 +19,6 @@
 MANIFEST                                                    []
 MANIFEST.SKIP                                               []
 MANIFEST.generated                                          []
-META.yml                                                    []
-Makefile.PL                                                 []
 NEWS                                                        [main]doc
 PBC_COMPAT                                                  [main]doc
 PLATFORMS                                                   [devel]doc
@@ -62,98 +62,6 @@
 compilers/imcc/symreg.c                                     [imcc]
 compilers/imcc/symreg.h                                     [imcc]
 compilers/imcc/unit.h                                       [imcc]
-compilers/json/Defines.mak                                  [json]
-compilers/json/JSON.pir                                     [json]
-compilers/json/JSON/grammar.pg                              [json]
-compilers/json/JSON/pge2pir.tg                              [json]
-compilers/json/Rules.mak                                    [json]
-compilers/ncigen/MAINTAINER                                 [ncigen]
-compilers/ncigen/NCIGEN.TODO                                [ncigen]
-compilers/ncigen/NCIGENP6.pm                                [ncigen]
-compilers/ncigen/README                                     []doc
-compilers/ncigen/config/makefiles/ncigen.in                 [ncigen]
-compilers/ncigen/lib/Parrot/Test/NCIGENAST.pm               [ncigen]
-compilers/ncigen/ncigen.pir                                 [ncigen]
-compilers/ncigen/ncigen.pl                                  [ncigen]
-compilers/ncigen/src/NCIGENAST.pir                          [ncigen]
-compilers/ncigen/src/NCIPIR.pir                             [ncigen]
-compilers/ncigen/src/builtins/say.pir                       [ncigen]
-compilers/ncigen/src/parser/actions.pm                      [ncigen]
-compilers/ncigen/src/parser/grammar.pg                      [ncigen]
-compilers/ncigen/t/NCIGENAST/struct_00.t                    [test]
-compilers/ncigen/t/NCIGENAST/typedef_00.t                   [test]
-compilers/ncigen/t/harness                                  [test]
-compilers/ncigen/t/parse_00.t                               [test]
-compilers/ncigen/t/parse_01.t                               [test]
-compilers/ncigen/t/parse_02.t                               [test]
-compilers/nqp/Defines.mak                                   [nqp]
-compilers/nqp/README.pod                                    []doc
-compilers/nqp/Rules.mak                                     [nqp]
-compilers/nqp/TODO.pod                                      [nqp]
-compilers/nqp/bootstrap/actions.pm                          [nqp]
-compilers/nqp/bootstrap/nqp.pir                             [nqp]
-compilers/nqp/bootstrap/t/harness                           [test]
-compilers/nqp/nqp.pir                                       [nqp]
-compilers/nqp/src/Grammar.pg                                [nqp]
-compilers/nqp/src/Grammar/Actions.pir                       [nqp]
-compilers/nqp/src/builtins.pir                              [nqp]
-compilers/nqp/t/01-literals.t                               [test]
-compilers/nqp/t/02-if-else.t                                [test]
-compilers/nqp/t/02-if.t                                     [test]
-compilers/nqp/t/03-unless.t                                 [test]
-compilers/nqp/t/04-comments.t                               [test]
-compilers/nqp/t/05-pod.t                                    [test]
-compilers/nqp/t/06-args-pos.t                               [test]
-compilers/nqp/t/07-boolean.t                                [test]
-compilers/nqp/t/08-blocks.t                                 [test]
-compilers/nqp/t/09-var.t                                    [test]
-compilers/nqp/t/10-sub.t                                    [test]
-compilers/nqp/t/11-cmp.t                                    [test]
-compilers/nqp/t/12-list.t                                   [test]
-compilers/nqp/t/13-logical.t                                [test]
-compilers/nqp/t/14-op.t                                     [test]
-compilers/nqp/t/15-module.t                                 [test]
-compilers/nqp/t/16-while.t                                  [test]
-compilers/nqp/t/17-class.t                                  [test]
-compilers/nqp/t/18-inline.t                                 [test]
-compilers/nqp/t/19-hash_access.t                            [test]
-compilers/nqp/t/20-list_access.t                            [test]
-compilers/nqp/t/22-optional_args.t                          [test]
-compilers/nqp/t/23-named_args.t                             [test]
-compilers/nqp/t/24-scalar_context.t                         [test]
-compilers/nqp/t/25-list_context.t                           [test]
-compilers/nqp/t/26-method_ops.t                             [test]
-compilers/nqp/t/27-ternary.t                                [test]
-compilers/nqp/t/28-return.t                                 [test]
-compilers/nqp/t/29-self.t                                   [test]
-compilers/nqp/t/30-subclass.t                               [test]
-compilers/nqp/t/harness                                     [test]
-compilers/opsc/Defines.mak                                  [opsc]
-compilers/opsc/Rules.mak                                    [opsc]
-compilers/opsc/TODO                                         [opsc]
-compilers/opsc/gen/Ops/Compiler/IGNOREME                    [opsc]
-compilers/opsc/gen/Ops/Trans/IGNOREME                       [opsc]
-compilers/opsc/ops2c.nqp                                    [opsc]
-compilers/opsc/opsc.pir                                     [opsc]
-compilers/opsc/src/Ops/Compiler.pm                          [opsc]
-compilers/opsc/src/Ops/Compiler/Actions.pm                  [opsc]
-compilers/opsc/src/Ops/Compiler/Grammar.pm                  [opsc]
-compilers/opsc/src/Ops/Emitter.pm                           [opsc]
-compilers/opsc/src/Ops/File.pm                              [opsc]
-compilers/opsc/src/Ops/Op.pm                                [opsc]
-compilers/opsc/src/Ops/OpLib.pm                             [opsc]
-compilers/opsc/src/Ops/Trans.pm                             [opsc]
-compilers/opsc/src/Ops/Trans/C.pm                           [opsc]
-compilers/opsc/src/builtins.pir                             [opsc]
-compilers/opsc/t/01-parse.t                                 [test]
-compilers/opsc/t/02-parse-all-ops.t                         [test]
-compilers/opsc/t/03-past.t                                  [test]
-compilers/opsc/t/04-op.t                                    [test]
-compilers/opsc/t/05-oplib.t                                 [test]
-compilers/opsc/t/06-opsfile.t                               [test]
-compilers/opsc/t/07-emitter.t                               [test]
-compilers/opsc/t/common.pir                                 [test]
-compilers/opsc/t/harness                                    [test]
 compilers/pct/Defines.mak                                   [pct]
 compilers/pct/PCT.pir                                       [pct]
 compilers/pct/README.pod                                    []doc
@@ -251,8 +159,6 @@
 config/auto/backtrace/test_dlinfo_c.in                      []
 config/auto/byteorder.pm                                    []
 config/auto/byteorder/test_c.in                             []
-config/auto/cgoto.pm                                        []
-config/auto/cgoto/test_c.in                                 []
 config/auto/cpu.pm                                          []
 config/auto/cpu/i386/auto.pm                                []
 config/auto/cpu/i386/test_gcc_cmpxchg_c.in                  []
@@ -261,8 +167,6 @@
 config/auto/cpu/sun4/auto.pm                                []
 config/auto/cpu/sun4/test_atomic_c.in                       []
 config/auto/cpu/x86_64/auto.pm                              []
-config/auto/crypto.pm                                       []
-config/auto/crypto/crypto_c.in                              []
 config/auto/ctags.pm                                        []
 config/auto/env.pm                                          []
 config/auto/env/test_setenv_c.in                            []
@@ -276,8 +180,6 @@
 config/auto/gc/test_c.in                                    []
 config/auto/gcc.pm                                          []
 config/auto/gcc/test_c.in                                   []
-config/auto/gdbm.pm                                         []
-config/auto/gdbm/gdbm_c.in                                  []
 config/auto/gettext.pm                                      []
 config/auto/gettext/gettext_c.in                            []
 config/auto/glibc.pm                                        []
@@ -329,22 +231,20 @@
 config/auto/va_ptr/test_c.in                                []
 config/auto/warnings.pm                                     []
 config/auto/warnings/test_c.in                              []
+config/auto/zlib.pm                                         []
+config/auto/zlib/zlib_c.in                                  []
 config/gen/config_h.pm                                      []
 config/gen/config_h/config_h.in                             []
 config/gen/config_h/feature_h.in                            []
 config/gen/config_h/has_header_h.in                         []
 config/gen/config_pm.pm                                     []
 config/gen/config_pm/Config_pm.in                           []
-config/gen/config_pm/config_lib_pasm.in                     []
+config/gen/config_pm/config_lib_pir.in                      []
 config/gen/config_pm/config_pir.in                          []
 config/gen/config_pm/myconfig.in                            []
 config/gen/core_pmcs.pm                                     []
-config/gen/crypto.pm                                        []
-config/gen/crypto/digest_pmc.in                             []
-config/gen/crypto/digest_t.in                               []
 config/gen/makefiles.pm                                     []
 config/gen/makefiles/docs.in                                []
-config/gen/makefiles/dynpmc.in                              []
 config/gen/makefiles/editor.in                              []
 config/gen/makefiles/ext.in                                 []
 config/gen/makefiles/parrot_embed_pl.in                     []
@@ -386,7 +286,6 @@
 config/gen/platform/openbsd/math.c                          []
 config/gen/platform/openbsd/memexec.c                       []
 config/gen/platform/openbsd/misc.h                          []
-config/gen/platform/platform_interface.h                    []
 config/gen/platform/solaris/math.c                          []
 config/gen/platform/solaris/time.c                          []
 config/gen/platform/win32/begin.c                           []
@@ -664,6 +563,7 @@
 examples/benchmarks/stress2.pl                              [examples]
 examples/benchmarks/stress2.rb                              [examples]
 examples/benchmarks/stress3.pasm                            [examples]
+examples/benchmarks/stress_strings.pir                      [examples]
 examples/benchmarks/vpm.pir                                 [examples]
 examples/benchmarks/vpm.pl                                  [examples]
 examples/benchmarks/vpm.py                                  [examples]
@@ -952,22 +852,12 @@
 ext/Parrot-Embed/tools/check_embed_coverage.pl              []
 ext/Parrot-Embed/tools/write_typemap.pl                     []
 ext/Parrot-Embed/typemap                                    []
-ext/SQLite3/DBDI.pm                                         []
-ext/SQLite3/DBDI/Driver/SQLite3.pm                          []
-ext/SQLite3/Makefile.PL                                     []
-ext/SQLite3/Makefile.in                                     []
-ext/SQLite3/SQLite3.pir                                     []
-ext/SQLite3/gen_sqlite3.pl                                  []
-ext/SQLite3/t/test.p6                                       [test]
-ext/SQLite3/test.pir                                        []
-ext/nqp-rx/.gitignore                                       []
 ext/nqp-rx/CREDITS                                          []
 ext/nqp-rx/Defines.mak                                      []
 ext/nqp-rx/LICENSE                                          []
 ext/nqp-rx/README                                           []doc
 ext/nqp-rx/Rules.mak                                        []
 ext/nqp-rx/STATUS                                           []
-ext/nqp-rx/src/gen/settings.pm                              []
 ext/nqp-rx/src/stage0/HLL-s0.pir                            []
 ext/nqp-rx/src/stage0/NQP-s0.pir                            []
 ext/nqp-rx/src/stage0/P6Regex-s0.pir                        []
@@ -1069,9 +959,9 @@
 include/parrot/oo_private.h                                 [main]include
 include/parrot/op.h                                         [main]include
 include/parrot/oplib.h                                      [main]include
-include/parrot/oplib/core_ops.h                             [main]include
 include/parrot/packfile.h                                   [main]include
 include/parrot/parrot.h                                     [main]include
+include/parrot/platform_interface.h                         [main]include
 include/parrot/pmc.h                                        [main]include
 include/parrot/pmc_freeze.h                                 [main]include
 include/parrot/pobj.h                                       [main]include
@@ -1152,10 +1042,6 @@
 lib/Parrot/Op.pm                                            [devel]lib
 lib/Parrot/OpTrans.pm                                       [devel]lib
 lib/Parrot/OpTrans/C.pm                                     [devel]lib
-lib/Parrot/OpTrans/CGP.pm                                   [devel]lib
-lib/Parrot/OpTrans/CGoto.pm                                 [devel]lib
-lib/Parrot/OpTrans/CPrederef.pm                             [devel]lib
-lib/Parrot/OpTrans/CSwitch.pm                               [devel]lib
 lib/Parrot/Ops2c/Auxiliary.pm                               [devel]lib
 lib/Parrot/Ops2c/Utils.pm                                   [devel]lib
 lib/Parrot/Ops2pm.pm                                        [devel]lib
@@ -1238,6 +1124,7 @@
 runtime/parrot/include/hllmacros.pir                        [library]
 runtime/parrot/include/test_more.pir                        [library]
 runtime/parrot/languages/parrot/parrot.pir                  [library]
+runtime/parrot/library/Archive/Tar.pir                      [library]
 runtime/parrot/library/CGI/QueryHash.pir                    [library]
 runtime/parrot/library/Config/JSON.pir                      [library]
 runtime/parrot/library/Configure/genfile.pir                [library]
@@ -1267,6 +1154,10 @@
 runtime/parrot/library/Parrot/Coroutine.pir                 [library]
 runtime/parrot/library/Parrot/Exception.pir                 [library]
 runtime/parrot/library/Pg.pir                               [library]
+runtime/parrot/library/ProfTest/Matcher.nqp                 [library]
+runtime/parrot/library/ProfTest/NQPProfile.nqp              [library]
+runtime/parrot/library/ProfTest/PIRProfile.nqp              [library]
+runtime/parrot/library/ProfTest/Want.nqp                    [library]
 runtime/parrot/library/Protoobject.pir                      [library]
 runtime/parrot/library/Range.pir                            [library]
 runtime/parrot/library/Rules.mak                            [library]
@@ -1285,7 +1176,6 @@
 runtime/parrot/library/SDL/Sprite.pir                       [library]
 runtime/parrot/library/SDL/StopWatch.pir                    [library]
 runtime/parrot/library/SDL/Surface.pir                      [library]
-runtime/parrot/library/SQLite3.pir                          [library]
 runtime/parrot/library/Stream/Base.pir                      [library]
 runtime/parrot/library/Stream/Combiner.pir                  [library]
 runtime/parrot/library/Stream/Coroutine.pir                 [library]
@@ -1296,6 +1186,9 @@
 runtime/parrot/library/Stream/Sub.pir                       [library]
 runtime/parrot/library/Stream/Writer.pir                    [library]
 runtime/parrot/library/String/Utils.pir                     [library]
+runtime/parrot/library/TAP/Formatter.pir                    [library]
+runtime/parrot/library/TAP/Harness.pir                      [library]
+runtime/parrot/library/TAP/Parser.pir                       [library]
 runtime/parrot/library/Tcl/Glob.pir                         [library]
 runtime/parrot/library/TclLibrary.pir                       [library]
 runtime/parrot/library/Test/Builder.pir                     [library]
@@ -1314,6 +1207,7 @@
 runtime/parrot/library/ncurses.declarations                 [library]
 runtime/parrot/library/ncurses.pasm                         [library]
 runtime/parrot/library/ncurses.pir                          [library]
+runtime/parrot/library/osutils.pir                          [library]
 runtime/parrot/library/parrotlib.pir                        [library]
 runtime/parrot/library/pcore.pir                            [library]
 runtime/parrot/library/pcre.pir                             [library]
@@ -1339,17 +1233,21 @@
 src/dynoplibs/Rules.in                                      []
 src/dynoplibs/math.ops                                      []
 src/dynoplibs/obscure.ops                                   []
+src/dynpmc/Defines.in                                       []
 src/dynpmc/README.pod                                       []doc
-src/dynpmc/dynlexpad.pmc                                    [devel]src
+src/dynpmc/Rules.in                                         []
+src/dynpmc/dynlexpad.pmc                                    []
 src/dynpmc/ext.pir                                          []
-src/dynpmc/foo.pmc                                          [devel]src
-src/dynpmc/foo2.pmc                                         [devel]src
-src/dynpmc/gdbmhash.pmc                                     [devel]src
+src/dynpmc/file.pmc                                         []
+src/dynpmc/foo.pmc                                          []
+src/dynpmc/foo2.pmc                                         []
+src/dynpmc/gziphandle.pmc                                   []
 src/dynpmc/main.pasm                                        []
-src/dynpmc/pccmethod_test.pmc                               [devel]src
-src/dynpmc/rational.pmc                                     [devel]src
-src/dynpmc/rotest.pmc                                       [devel]src
-src/dynpmc/subproxy.pmc                                     [devel]src
+src/dynpmc/os.pmc                                           []
+src/dynpmc/pccmethod_test.pmc                               []
+src/dynpmc/rational.pmc                                     []
+src/dynpmc/rotest.pmc                                       []
+src/dynpmc/subproxy.pmc                                     []
 src/embed.c                                                 []
 src/exceptions.c                                            []
 src/exit.c                                                  []
@@ -1402,7 +1300,6 @@
 src/ops/bit.ops                                             []
 src/ops/cmp.ops                                             []
 src/ops/core.ops                                            []
-src/ops/core_ops.c                                          []
 src/ops/debug.ops                                           []
 src/ops/experimental.ops                                    []
 src/ops/io.ops                                              []
@@ -1424,92 +1321,90 @@
 src/pbc_dump.c                                              []
 src/pbc_merge.c                                             []
 src/pmc.c                                                   []
-src/pmc/addrregistry.pmc                                    [devel]src
-src/pmc/arrayiterator.pmc                                   [devel]src
-src/pmc/bigint.pmc                                          [devel]src
-src/pmc/bignum.pmc                                          [devel]src
-src/pmc/boolean.pmc                                         [devel]src
-src/pmc/callcontext.pmc                                     [devel]src
-src/pmc/capture.pmc                                         [devel]src
-src/pmc/class.pmc                                           [devel]src
-src/pmc/codestring.pmc                                      [devel]src
-src/pmc/complex.pmc                                         [devel]src
-src/pmc/continuation.pmc                                    [devel]src
-src/pmc/coroutine.pmc                                       [devel]src
-src/pmc/cpointer.pmc                                        [devel]src
-src/pmc/default.pmc                                         [devel]src
-src/pmc/env.pmc                                             [devel]src
-src/pmc/eval.pmc                                            [devel]src
-src/pmc/eventhandler.pmc                                    [devel]src
-src/pmc/exception.pmc                                       [devel]src
-src/pmc/exceptionhandler.pmc                                [devel]src
-src/pmc/exporter.pmc                                        [devel]src
-src/pmc/file.pmc                                            [devel]src
-src/pmc/filehandle.pmc                                      [devel]src
-src/pmc/fixedbooleanarray.pmc                               [devel]src
-src/pmc/fixedfloatarray.pmc                                 [devel]src
-src/pmc/fixedintegerarray.pmc                               [devel]src
-src/pmc/fixedpmcarray.pmc                                   [devel]src
-src/pmc/fixedstringarray.pmc                                [devel]src
-src/pmc/float.pmc                                           [devel]src
-src/pmc/handle.pmc                                          [devel]src
-src/pmc/hash.pmc                                            [devel]src
-src/pmc/hashiterator.pmc                                    [devel]src
-src/pmc/hashiteratorkey.pmc                                 [devel]src
-src/pmc/imageio.pmc                                         [devel]src
-src/pmc/imageiosize.pmc                                     [devel]src
-src/pmc/integer.pmc                                         [devel]src
-src/pmc/iterator.pmc                                        [devel]src
-src/pmc/key.pmc                                             [devel]src
-src/pmc/lexinfo.pmc                                         [devel]src
-src/pmc/lexpad.pmc                                          [devel]src
-src/pmc/managedstruct.pmc                                   [devel]src
-src/pmc/multisub.pmc                                        [devel]src
-src/pmc/namespace.pmc                                       [devel]src
-src/pmc/nci.pmc                                             [devel]src
-src/pmc/null.pmc                                            [devel]src
-src/pmc/object.pmc                                          [devel]src
-src/pmc/opcode.pmc                                          [devel]src
-src/pmc/oplib.pmc                                           [devel]src
-src/pmc/orderedhash.pmc                                     [devel]src
-src/pmc/orderedhashiterator.pmc                             [devel]src
-src/pmc/os.pmc                                              [devel]src
-src/pmc/packfile.pmc                                        [devel]src
-src/pmc/packfileannotation.pmc                              [devel]src
-src/pmc/packfileannotations.pmc                             [devel]src
-src/pmc/packfileconstanttable.pmc                           [devel]src
-src/pmc/packfiledirectory.pmc                               [devel]src
-src/pmc/packfilefixupentry.pmc                              [devel]src
-src/pmc/packfilefixuptable.pmc                              [devel]src
-src/pmc/packfilerawsegment.pmc                              [devel]src
-src/pmc/packfilesegment.pmc                                 [devel]src
-src/pmc/parrotinterpreter.pmc                               [devel]src
-src/pmc/parrotlibrary.pmc                                   [devel]src
-src/pmc/parrotrunningthread.pmc                             [devel]src
-src/pmc/parrotthread.pmc                                    [devel]src
+src/pmc/addrregistry.pmc                                    []
+src/pmc/arrayiterator.pmc                                   []
+src/pmc/bigint.pmc                                          []
+src/pmc/bignum.pmc                                          []
+src/pmc/boolean.pmc                                         []
+src/pmc/callcontext.pmc                                     []
+src/pmc/capture.pmc                                         []
+src/pmc/class.pmc                                           []
+src/pmc/codestring.pmc                                      []
+src/pmc/complex.pmc                                         []
+src/pmc/continuation.pmc                                    []
+src/pmc/coroutine.pmc                                       []
+src/pmc/default.pmc                                         []
+src/pmc/env.pmc                                             []
+src/pmc/eval.pmc                                            []
+src/pmc/eventhandler.pmc                                    []
+src/pmc/exception.pmc                                       []
+src/pmc/exceptionhandler.pmc                                []
+src/pmc/exporter.pmc                                        []
+src/pmc/filehandle.pmc                                      []
+src/pmc/fixedbooleanarray.pmc                               []
+src/pmc/fixedfloatarray.pmc                                 []
+src/pmc/fixedintegerarray.pmc                               []
+src/pmc/fixedpmcarray.pmc                                   []
+src/pmc/fixedstringarray.pmc                                []
+src/pmc/float.pmc                                           []
+src/pmc/handle.pmc                                          []
+src/pmc/hash.pmc                                            []
+src/pmc/hashiterator.pmc                                    []
+src/pmc/hashiteratorkey.pmc                                 []
+src/pmc/imageio.pmc                                         []
+src/pmc/imageiosize.pmc                                     []
+src/pmc/imageiostrings.pmc                                  []
+src/pmc/integer.pmc                                         []
+src/pmc/iterator.pmc                                        []
+src/pmc/key.pmc                                             []
+src/pmc/lexinfo.pmc                                         []
+src/pmc/lexpad.pmc                                          []
+src/pmc/managedstruct.pmc                                   []
+src/pmc/multisub.pmc                                        []
+src/pmc/namespace.pmc                                       []
+src/pmc/nci.pmc                                             []
+src/pmc/null.pmc                                            []
+src/pmc/object.pmc                                          []
+src/pmc/opcode.pmc                                          []
+src/pmc/oplib.pmc                                           []
+src/pmc/orderedhash.pmc                                     []
+src/pmc/orderedhashiterator.pmc                             []
+src/pmc/packfile.pmc                                        []
+src/pmc/packfileannotation.pmc                              []
+src/pmc/packfileannotations.pmc                             []
+src/pmc/packfileconstanttable.pmc                           []
+src/pmc/packfiledebug.pmc                                   []
+src/pmc/packfiledirectory.pmc                               []
+src/pmc/packfilefixupentry.pmc                              []
+src/pmc/packfilefixuptable.pmc                              []
+src/pmc/packfilerawsegment.pmc                              []
+src/pmc/packfilesegment.pmc                                 []
+src/pmc/parrotinterpreter.pmc                               []
+src/pmc/parrotlibrary.pmc                                   []
+src/pmc/parrotthread.pmc                                    []
 src/pmc/pmc.num                                             []
-src/pmc/pmcproxy.pmc                                        [devel]src
-src/pmc/pointer.pmc                                         [devel]src
-src/pmc/resizablebooleanarray.pmc                           [devel]src
-src/pmc/resizablefloatarray.pmc                             [devel]src
-src/pmc/resizableintegerarray.pmc                           [devel]src
-src/pmc/resizablepmcarray.pmc                               [devel]src
-src/pmc/resizablestringarray.pmc                            [devel]src
-src/pmc/retcontinuation.pmc                                 [devel]src
-src/pmc/role.pmc                                            [devel]src
-src/pmc/scalar.pmc                                          [devel]src
-src/pmc/scheduler.pmc                                       [devel]src
-src/pmc/schedulermessage.pmc                                [devel]src
-src/pmc/sockaddr.pmc                                        [devel]src
-src/pmc/socket.pmc                                          [devel]src
-src/pmc/string.pmc                                          [devel]src
-src/pmc/stringhandle.pmc                                    [devel]src
-src/pmc/stringiterator.pmc                                  [devel]src
-src/pmc/sub.pmc                                             [devel]src
-src/pmc/task.pmc                                            [devel]src
-src/pmc/timer.pmc                                           [devel]src
-src/pmc/undef.pmc                                           [devel]src
-src/pmc/unmanagedstruct.pmc                                 [devel]src
+src/pmc/pmcproxy.pmc                                        []
+src/pmc/pointer.pmc                                         []
+src/pmc/resizablebooleanarray.pmc                           []
+src/pmc/resizablefloatarray.pmc                             []
+src/pmc/resizableintegerarray.pmc                           []
+src/pmc/resizablepmcarray.pmc                               []
+src/pmc/resizablestringarray.pmc                            []
+src/pmc/role.pmc                                            []
+src/pmc/scalar.pmc                                          []
+src/pmc/scheduler.pmc                                       []
+src/pmc/schedulermessage.pmc                                []
+src/pmc/sockaddr.pmc                                        []
+src/pmc/socket.pmc                                          []
+src/pmc/string.pmc                                          []
+src/pmc/stringhandle.pmc                                    []
+src/pmc/stringiterator.pmc                                  []
+src/pmc/sub.pmc                                             []
+src/pmc/task.pmc                                            []
+src/pmc/threadinterpreter.pmc                               []
+src/pmc/timer.pmc                                           []
+src/pmc/undef.pmc                                           []
+src/pmc/unmanagedstruct.pmc                                 []
 src/pmc_freeze.c                                            []
 src/runcore/cores.c                                         []
 src/runcore/main.c                                          []
@@ -1582,6 +1477,8 @@
 t/codingstd/svn_id.t                                        [test]
 t/codingstd/tabs.t                                          [test]
 t/codingstd/trailing_space.t                                [test]
+t/compilers/data_json/from_parrot.t                         [test]
+t/compilers/data_json/to_parrot.t                           [test]
 t/compilers/imcc/imcpasm/cfg.t                              [test]
 t/compilers/imcc/imcpasm/opt0.t                             [test]
 t/compilers/imcc/imcpasm/opt1.t                             [test]
@@ -1611,8 +1508,6 @@
 t/compilers/imcc/syn/symbols.t                              [test]
 t/compilers/imcc/syn/tail.t                                 [test]
 t/compilers/imcc/syn/veracity.t                             [test]
-t/compilers/json/from_parrot.t                              [test]
-t/compilers/json/to_parrot.t                                [test]
 t/compilers/pct/complete_workflow.t                         [test]
 t/compilers/pct/past.t                                      [test]
 t/compilers/pct/pct_hllcompiler.t                           [test]
@@ -1718,13 +1613,14 @@
 t/configure/testlib/verbosefoobar                           [test]
 t/distro/file_metadata.t                                    [test]
 t/distro/manifest.t                                         [test]
-t/distro/meta_yml.t                                         [test]
 t/dynoplibs/math.t                                          [test]
 t/dynoplibs/obscure.t                                       [test]
 t/dynpmc/dynlexpad.t                                        [test]
+t/dynpmc/file.t                                             [test]
 t/dynpmc/foo.t                                              [test]
 t/dynpmc/foo2.t                                             [test]
-t/dynpmc/gdbmhash.t                                         [test]
+t/dynpmc/gziphandle.t                                       [test]
+t/dynpmc/os.t                                               [test]
 t/dynpmc/pccmethod_test.t                                   [test]
 t/dynpmc/rational.t                                         [test]
 t/dynpmc/rotest.t                                           [test]
@@ -1743,7 +1639,9 @@
 t/examples/subs.t                                           [test]
 t/examples/tutorial.t                                       [test]
 t/harness                                                   [test]
+t/harness.pir                                               [test]
 t/include/fp_equality.t                                     [test]
+t/library/archive_tar.t                                     [test]
 t/library/cgi_query_hash.t                                  [test]
 t/library/configure.t                                       [test]
 t/library/coroutine.t                                       [test]
@@ -1753,6 +1651,7 @@
 t/library/iter.t                                            [test]
 t/library/md5.t                                             [test]
 t/library/mime_base64.t                                     [test]
+t/library/osutils.t                                         [test]
 t/library/p6object.t                                        [test]
 t/library/parrotlib.t                                       [test]
 t/library/pcre.t                                            [test]
@@ -1763,6 +1662,7 @@
 t/library/range.t                                           [test]
 t/library/streams.t                                         [test]
 t/library/string_utils.t                                    [test]
+t/library/tap_parser.t                                      [test]
 t/library/tcl_glob.t                                        [test]
 t/library/tcl_lib.t                                         [test]
 t/library/test_builder_tester.t                             [test]
@@ -1857,7 +1757,6 @@
 t/op/literal.t                                              [test]
 t/op/load_bytecode.t                                        [test]
 t/op/number.t                                               [test]
-t/op/pushaction.t                                           [test]
 t/op/say.t                                                  [test]
 t/op/spawnw.t                                               [test]
 t/op/sprintf.t                                              [test]
@@ -1903,7 +1802,6 @@
 t/pmc/context.t                                             [test]
 t/pmc/continuation.t                                        [test]
 t/pmc/coroutine.t                                           [test]
-t/pmc/cpointer.t                                            [test]
 t/pmc/default.t                                             [test]
 t/pmc/env.t                                                 [test]
 t/pmc/eval.t                                                [test]
@@ -1912,7 +1810,6 @@
 t/pmc/exception.t                                           [test]
 t/pmc/exceptionhandler.t                                    [test]
 t/pmc/exporter.t                                            [test]
-t/pmc/file.t                                                [test]
 t/pmc/filehandle.t                                          [test]
 t/pmc/fixedbooleanarray.t                                   [test]
 t/pmc/fixedfloatarray.t                                     [test]
@@ -1928,6 +1825,7 @@
 t/pmc/hashiteratorkey.t                                     [test]
 t/pmc/imageio.t                                             [test]
 t/pmc/imageiosize.t                                         [test]
+t/pmc/imageiostrings.t                                      [test]
 t/pmc/integer.t                                             [test]
 t/pmc/io.t                                                  [test]
 t/pmc/io_iterator.t                                         [test]
@@ -1940,6 +1838,7 @@
 t/pmc/multidispatch.t                                       [test]
 t/pmc/multisub.t                                            [test]
 t/pmc/namespace-old.t                                       [test]
+t/pmc/namespace-subs.t                                      [test]
 t/pmc/namespace.t                                           [test]
 t/pmc/nci.t                                                 [test]
 t/pmc/null.t                                                [test]
@@ -1951,7 +1850,6 @@
 t/pmc/oplib.t                                               [test]
 t/pmc/orderedhash.t                                         [test]
 t/pmc/orderedhashiterator.t                                 [test]
-t/pmc/os.t                                                  [test]
 t/pmc/packfile.t                                            [test]
 t/pmc/packfileannotation.t                                  [test]
 t/pmc/packfileannotations.t                                 [test]
@@ -1966,7 +1864,6 @@
 t/pmc/parrotio.t                                            [test]
 t/pmc/parrotlibrary.t                                       [test]
 t/pmc/parrotobject.t                                        [test]
-t/pmc/parrotrunningthread.t                                 [test]
 t/pmc/parrotthread.t                                        [test]
 t/pmc/pmc.t                                                 [test]
 t/pmc/pmcproxy.t                                            [test]
@@ -1977,7 +1874,6 @@
 t/pmc/resizableintegerarray.t                               [test]
 t/pmc/resizablepmcarray.t                                   [test]
 t/pmc/resizablestringarray.t                                [test]
-t/pmc/retcontinuation.t                                     [test]
 t/pmc/ro.t                                                  [test]
 t/pmc/role.t                                                [test]
 t/pmc/scalar.t                                              [test]
@@ -2001,6 +1897,7 @@
 t/postconfigure/02-data_get_PConfig.t                       [test]
 t/postconfigure/05-trace.t                                  [test]
 t/postconfigure/06-data_get_PConfig_Temp.t                  [test]
+t/profiling/profiling.t                                     [test]
 t/run/README                                                []doc
 t/run/exit.t                                                [test]
 t/run/options.t                                             [test]
@@ -2015,16 +1912,13 @@
 t/steps/auto/attributes-01.t                                [test]
 t/steps/auto/backtrace-01.t                                 [test]
 t/steps/auto/byteorder-01.t                                 [test]
-t/steps/auto/cgoto-01.t                                     [test]
 t/steps/auto/cpu-01.t                                       [test]
-t/steps/auto/crypto-01.t                                    [test]
 t/steps/auto/ctags-01.t                                     [test]
 t/steps/auto/env-01.t                                       [test]
 t/steps/auto/format-01.t                                    [test]
 t/steps/auto/frames-01.t                                    [test]
 t/steps/auto/gc-01.t                                        [test]
 t/steps/auto/gcc-01.t                                       [test]
-t/steps/auto/gdbm-01.t                                      [test]
 t/steps/auto/gettext-01.t                                   [test]
 t/steps/auto/glibc-01.t                                     [test]
 t/steps/auto/gmp-01.t                                       [test]
@@ -2052,6 +1946,7 @@
 t/steps/auto/thread-01.t                                    [test]
 t/steps/auto/va_ptr-01.t                                    [test]
 t/steps/auto/warnings-01.t                                  [test]
+t/steps/auto/zlib-01.t                                      [test]
 t/steps/gen/config_h-01.t                                   [test]
 t/steps/gen/config_pm-01.t                                  [test]
 t/steps/gen/core_pmcs-01.t                                  [test]
@@ -2178,6 +2073,7 @@
 tools/dev/checkdepend.pl                                    []
 tools/dev/create_language.pl                                [devel]
 tools/dev/debian_docs.sh                                    []
+tools/dev/faces.pl                                          []
 tools/dev/fetch_languages.pl                                []
 tools/dev/gen_charset_tables.pl                             []
 tools/dev/gen_class.pl                                      []
@@ -2219,10 +2115,12 @@
 tools/dev/search-ops.pl                                     []
 tools/dev/svnclobber.pl                                     []
 tools/dev/symlink.pl                                        []
+tools/dev/tapir.pir                                         []
 tools/dev/vgp                                               []
 tools/dev/vgp_darwin                                        []
 tools/dev/vms-patch                                         []
 tools/dev/vtablize.pl                                       []
+tools/docs/filename_and_chapter.pl                          []
 tools/docs/mk_chm.pl                                        []
 tools/docs/ops_summary.pl                                   []
 tools/docs/write_docs.pl                                    []

Modified: branches/ops_pct/MANIFEST.SKIP
==============================================================================
--- branches/ops_pct/MANIFEST.SKIP	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/MANIFEST.SKIP	Wed May  5 08:45:29 2010	(r46302)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Mon Mar  8 22:07:22 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Tue May  4 14:32:03 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -65,8 +65,8 @@
 ^all_cstring\.str/
 ^blib$
 ^blib/
-^config_lib\.pasm$
-^config_lib\.pasm/
+^config_lib\.pir$
+^config_lib\.pir/
 ^cover_db$
 ^cover_db/
 ^install_config\.fpmc$
@@ -131,6 +131,10 @@
 ^pirc/
 ^tags$
 ^tags/
+^tapir$
+^tapir/
+^tapir\..*$
+^tapir\..*/
 ^temp\.file$
 ^temp\.file/
 ^test$
@@ -184,37 +188,6 @@
 ^compilers/imcc/imcparser\.h/
 ^compilers/imcc/imcparser\.output$
 ^compilers/imcc/imcparser\.output/
-# generated from svn:ignore of 'compilers/json/'
-^compilers/json/JSON\.pbc$
-^compilers/json/JSON\.pbc/
-# generated from svn:ignore of 'compilers/json/JSON/'
-^compilers/json/JSON/.*\.pbc$
-^compilers/json/JSON/.*\.pbc/
-^compilers/json/JSON/.*\.pir$
-^compilers/json/JSON/.*\.pir/
-# generated from svn:ignore of 'compilers/ncigen/'
-^compilers/ncigen/Makefile$
-^compilers/ncigen/Makefile/
-^compilers/ncigen/ncigen\.pbc$
-^compilers/ncigen/ncigen\.pbc/
-# generated from svn:ignore of 'compilers/ncigen/src/'
-^compilers/ncigen/src/gen_actions\.pir$
-^compilers/ncigen/src/gen_actions\.pir/
-^compilers/ncigen/src/gen_builtins\.pir$
-^compilers/ncigen/src/gen_builtins\.pir/
-^compilers/ncigen/src/gen_grammar\.pir$
-^compilers/ncigen/src/gen_grammar\.pir/
-# generated from svn:ignore of 'compilers/nqp/'
-^compilers/nqp/nqp\.pbc$
-^compilers/nqp/nqp\.pbc/
-# generated from svn:ignore of 'compilers/nqp/bootstrap/'
-^compilers/nqp/bootstrap/gen_actions\.pir$
-^compilers/nqp/bootstrap/gen_actions\.pir/
-^compilers/nqp/bootstrap/nqp\.pbc$
-^compilers/nqp/bootstrap/nqp\.pbc/
-# generated from svn:ignore of 'compilers/nqp/src/'
-^compilers/nqp/src/Grammar_gen\.pir$
-^compilers/nqp/src/Grammar_gen\.pir/
 # generated from svn:ignore of 'compilers/pct/src/PAST/'
 ^compilers/pct/src/PAST/.*\.pbc$
 ^compilers/pct/src/PAST/.*\.pbc/
@@ -269,6 +242,8 @@
 ^docs/.*\.tmp/
 ^docs/Makefile$
 ^docs/Makefile/
+^docs/build$
+^docs/build/
 ^docs/doc-prep$
 ^docs/doc-prep/
 ^docs/html$
@@ -464,6 +439,8 @@
 ^include/parrot/feature\.h/
 ^include/parrot/has_header\.h$
 ^include/parrot/has_header\.h/
+^include/parrot/opsenum\.h$
+^include/parrot/opsenum\.h/
 ^include/parrot/pbcversion\.h$
 ^include/parrot/pbcversion\.h/
 ^include/parrot/platform\.h$
@@ -548,6 +525,9 @@
 ^runtime/parrot/include/.*\.pasm/
 ^runtime/parrot/include/.*\.pbc$
 ^runtime/parrot/include/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/languages/'
+^runtime/parrot/languages/data_json$
+^runtime/parrot/languages/data_json/
 # generated from svn:ignore of 'runtime/parrot/library/'
 ^runtime/parrot/library/.*\.pbc$
 ^runtime/parrot/library/.*\.pbc/
@@ -557,6 +537,9 @@
 ^runtime/parrot/library/PAST/
 ^runtime/parrot/library/config\.pir$
 ^runtime/parrot/library/config\.pir/
+# generated from svn:ignore of 'runtime/parrot/library/Archive/'
+^runtime/parrot/library/Archive/.*\.pbc$
+^runtime/parrot/library/Archive/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/CGI/'
 ^runtime/parrot/library/CGI/.*\.pbc$
 ^runtime/parrot/library/CGI/.*\.pbc/
@@ -599,12 +582,20 @@
 # generated from svn:ignore of 'runtime/parrot/library/Parrot/'
 ^runtime/parrot/library/Parrot/.*\.pbc$
 ^runtime/parrot/library/Parrot/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/ProfTest/'
+^runtime/parrot/library/ProfTest/.*\.pbc$
+^runtime/parrot/library/ProfTest/.*\.pbc/
+^runtime/parrot/library/ProfTest/.*\.pir$
+^runtime/parrot/library/ProfTest/.*\.pir/
 # generated from svn:ignore of 'runtime/parrot/library/Stream/'
 ^runtime/parrot/library/Stream/.*\.pbc$
 ^runtime/parrot/library/Stream/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/String/'
 ^runtime/parrot/library/String/Utils\.pbc$
 ^runtime/parrot/library/String/Utils\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/TAP/'
+^runtime/parrot/library/TAP/.*\.pbc$
+^runtime/parrot/library/TAP/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/Tcl/'
 ^runtime/parrot/library/Tcl/.*\.pbc$
 ^runtime/parrot/library/Tcl/.*\.pbc/
@@ -736,6 +727,8 @@
 ^src/dynpmc/.*\.ilk/
 ^src/dynpmc/.*\.lib$
 ^src/dynpmc/.*\.lib/
+^src/dynpmc/.*\.mak$
+^src/dynpmc/.*\.mak/
 ^src/dynpmc/.*\.manifest$
 ^src/dynpmc/.*\.manifest/
 ^src/dynpmc/.*\.o$
@@ -767,8 +760,6 @@
 # generated from svn:ignore of 'src/gc/'
 ^src/gc/.*\.bundle$
 ^src/gc/.*\.bundle/
-^src/gc/.*\.c$
-^src/gc/.*\.c/
 ^src/gc/.*\.def$
 ^src/gc/.*\.def/
 ^src/gc/.*\.dll$
@@ -878,6 +869,13 @@
 ^t/benchmark/.*\.pasm/
 ^t/benchmark/.*\.pir$
 ^t/benchmark/.*\.pir/
+# generated from svn:ignore of 't/compilers/data_json/'
+^t/compilers/data_json/.*\.pbc$
+^t/compilers/data_json/.*\.pbc/
+^t/compilers/data_json/.*\.pir$
+^t/compilers/data_json/.*\.pir/
+^t/compilers/data_json/.*_pbcexe$
+^t/compilers/data_json/.*_pbcexe/
 # generated from svn:ignore of 't/compilers/imcc/'
 ^t/compilers/imcc/.*\.pbc$
 ^t/compilers/imcc/.*\.pbc/
@@ -908,13 +906,6 @@
 ^t/compilers/imcc/syn/.*\.pir/
 ^t/compilers/imcc/syn/.*_pbcexe.*$
 ^t/compilers/imcc/syn/.*_pbcexe.*/
-# generated from svn:ignore of 't/compilers/json/'
-^t/compilers/json/.*\.pbc$
-^t/compilers/json/.*\.pbc/
-^t/compilers/json/.*\.pir$
-^t/compilers/json/.*\.pir/
-^t/compilers/json/.*_pbcexe$
-^t/compilers/json/.*_pbcexe/
 # generated from svn:ignore of 't/compilers/pct/'
 ^t/compilers/pct/.*\.pbc$
 ^t/compilers/pct/.*\.pbc/

Modified: branches/ops_pct/MANIFEST.generated
==============================================================================
--- branches/ops_pct/MANIFEST.generated	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/MANIFEST.generated	Wed May  5 08:45:29 2010	(r46302)
@@ -2,16 +2,12 @@
 # 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.1.0.dylib                    [main]lib
+blib/lib/libparrot.2.3.0.dylib                    [main]lib
 blib/lib/libparrot.a                              [main]lib
 blib/lib/libparrot.dylib                          [main]lib
-blib/lib/libparrot.so.2.1.0                       [main]lib
+blib/lib/libparrot.so.2.3.0                       [main]lib
 blib/lib/libparrot.so                             [main]lib
 compilers/data_json/data_json.pbc                 [data_json]
-compilers/json/JSON.pbc                           [json]
-compilers/json/JSON/grammar.pbc                   [json]
-compilers/json/JSON/pge2pir.pbc                   [json]
-compilers/nqp/nqp.pbc                             [nqp]
 config/gen/call_list/opengl.in                    []
 docs/ops/bit.pod                                  [doc]
 docs/ops/cmp.pod                                  [doc]
@@ -37,14 +33,10 @@
 include/parrot/extend_vtable.h                    [main]include
 include/parrot/feature.h                          [main]include
 include/parrot/has_header.h                       [main]include
-include/parrot/oplib/core_ops_cg.h                [main]include
-include/parrot/oplib/core_ops_cgp.h               [main]include
 include/parrot/oplib/core_ops.h                   [main]include
-include/parrot/oplib/core_ops_switch.h            [main]include
 include/parrot/oplib/ops.h                        [main]include
 include/parrot/pbcversion.h                       [devel]include
 include/parrot/platform.h                         [main]include
-include/parrot/platform_interface.h               [main]include
 include/parrot/platform_limits.h                  [devel]include
 include/parrot/vtable.h                           [main]include
 install_config.fpmc                               [main]lib
@@ -67,6 +59,8 @@
 installable_pbc_to_exe                            [main]bin
 installable_parrot-nqp.exe                        [main]bin
 installable_parrot-nqp                            [main]bin
+installable_tapir.exe                             [main]bin
+installable_tapir                                 [main]bin
 lib/Parrot/Config/Generated.pm                    [devel]lib
 libparrot.dll                                     [main]bin
 libparrot.lib                                     [main]bin
@@ -74,30 +68,22 @@
 lib/Parrot/Pmc2c/PCCMETHOD_BITS.pm                [devel]lib
 lib/Parrot/PMC.pm                                 [devel]lib
 parrot.pc                                         [main]pkgconfig
-runtime/parrot/dynext/digest_group.bundle         [library]
-runtime/parrot/dynext/digest_group.dll            [library]
-runtime/parrot/dynext/digest_group.dylib          [library]
-runtime/parrot/dynext/digest_group.so             [library]
 runtime/parrot/dynext/dynlexpad.bundle            [library]
 runtime/parrot/dynext/dynlexpad.dll               [library]
 runtime/parrot/dynext/dynlexpad.dylib             [library]
 runtime/parrot/dynext/dynlexpad.so                [library]
-runtime/parrot/dynext/gdbmhash.bundle             [library]
-runtime/parrot/dynext/gdbmhash.dll                [library]
-runtime/parrot/dynext/gdbmhash.dylib              [library]
-runtime/parrot/dynext/gdbmhash.so                 [library]
+runtime/parrot/dynext/file.bundle                 [library]
+runtime/parrot/dynext/file.dll                    [library]
+runtime/parrot/dynext/file.dylib                  [library]
+runtime/parrot/dynext/file.so                     [library]
+runtime/parrot/dynext/gziphandle.bundle           [library]
+runtime/parrot/dynext/gziphandle.dll              [library]
+runtime/parrot/dynext/gziphandle.dylib            [library]
+runtime/parrot/dynext/gziphandle.so               [library]
 runtime/parrot/dynext/libglutcb.bundle            [library]
 runtime/parrot/dynext/libglutcb.dll               [library]
 runtime/parrot/dynext/libglutcb.dylib             [library]
 runtime/parrot/dynext/libglutcb.so                [library]
-runtime/parrot/dynext/libnci_test.bundle          [library]
-runtime/parrot/dynext/libnci_test.dll             [library]
-runtime/parrot/dynext/libnci_test.dylib           [library]
-runtime/parrot/dynext/libnci_test.so              [library]
-runtime/parrot/dynext/match_group.bundle          [library]
-runtime/parrot/dynext/match_group.dll             [library]
-runtime/parrot/dynext/match_group.dylib           [library]
-runtime/parrot/dynext/match_group.so              [library]
 runtime/parrot/dynext/math_ops.so                 [library]
 runtime/parrot/dynext/math_ops.bundle             [library]
 runtime/parrot/dynext/math_ops.dll                [library]
@@ -106,21 +92,23 @@
 runtime/parrot/dynext/obscure_ops.dll             [library]
 runtime/parrot/dynext/obscure_ops.dylib           [library]
 runtime/parrot/dynext/obscure_ops.so              [library]
+runtime/parrot/dynext/os.bundle                   [library]
+runtime/parrot/dynext/os.dll                      [library]
+runtime/parrot/dynext/os.dylib                    [library]
+runtime/parrot/dynext/os.so                       [library]
 runtime/parrot/dynext/rational.bundle             [library]
 runtime/parrot/dynext/rational.dll                [library]
 runtime/parrot/dynext/rational.dylib              [library]
 runtime/parrot/dynext/rational.so                 [library]
-runtime/parrot/dynext/subproxy.bundle             [library]
-runtime/parrot/dynext/subproxy.dll                [library]
-runtime/parrot/dynext/subproxy.dylib              [library]
-runtime/parrot/dynext/subproxy.so                 [library]
 runtime/parrot/include/call_bits.pasm             [main]
 runtime/parrot/include/cclass.pasm                [main]
 runtime/parrot/include/config.fpmc                []
 runtime/parrot/include/datatypes.pasm             [main]
+runtime/parrot/include/dlopenflags.pasm           [main]
 runtime/parrot/include/errors.pasm                [main]
 runtime/parrot/include/except_severity.pasm       [main]
 runtime/parrot/include/except_types.pasm          [main]
+runtime/parrot/include/hash_key_type.pasm         [main]
 runtime/parrot/include/iglobals.pasm              [main]
 runtime/parrot/include/interpcores.pasm           [main]
 runtime/parrot/include/interpdebug.pasm           [main]
@@ -144,6 +132,7 @@
 runtime/parrot/include/tm.pasm                    [main]
 runtime/parrot/include/vtable_methods.pasm        [main]
 runtime/parrot/include/warnings.pasm              [main]
+runtime/parrot/library/Archive/TAR.pbc            [main]
 runtime/parrot/library/CGI/QueryHash.pbc          [main]
 runtime/parrot/library/Config/JSON.pbc            [main]
 runtime/parrot/library/Configure/genfile.pbc      [main]
@@ -171,6 +160,7 @@
 runtime/parrot/library/OpenGL_funcs.pir           [main]
 runtime/parrot/library/OpenGL_funcs.pbc           [main]
 runtime/parrot/library/OpenGL.pbc                 [main]
+runtime/parrot/library/osutils.pbc                [main]
 runtime/parrot/library/P6object.pbc               [main]
 runtime/parrot/library/P6Regex.pbc                [main]
 runtime/parrot/library/Parrot/Capture_PIR.pbc     [main]
@@ -203,6 +193,9 @@
 runtime/parrot/library/Stream/Replay.pbc          [main]
 runtime/parrot/library/Stream/Sub.pbc             [main]
 runtime/parrot/library/Stream/Writer.pbc          [main]
+runtime/parrot/library/TAP/Formatter.pbc          [main]
+runtime/parrot/library/TAP/Harness.pbc            [main]
+runtime/parrot/library/TAP/Parser.pbc             [main]
 runtime/parrot/library/Tcl/Glob.pbc               [main]
 runtime/parrot/library/TclLibrary.pbc             [main]
 runtime/parrot/library/Test/Builder/Test.pbc      [main]
@@ -222,8 +215,6 @@
 src/jit_emit.h                                    []
 src/nci.c                                         []
 src/null_config.c                                 []
-src/ops/core_ops_cgp.c                            []
-src/ops/core_ops_switch.c                         []
 src/parrot_config.c                               []
 src/pmc/boolean.dump                              [devel]src
 src/pmc/continuation.dump                         [devel]src

Deleted: branches/ops_pct/META.yml
==============================================================================
--- branches/ops_pct/META.yml	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,41 +0,0 @@
-# $Id$
-#
-# This file describes the CPAN distribution for Parrot.
-# See http://module-build.sourceforge.net/META-spec-current.html for details.
----
-name: parrot
-version: 2.1.0
-author: parrot-dev at lists.parrot.org
-abstract: a virtual machine designed for dynamic languages
-license: artistic2
-no_index:
-    directory:
-        - config
-        - languages
-        - lib
-        - lib/Digest
-        - lib/File
-        - lib/Parse
-        - lib/Perl/Critic
-        - lib/Pod
-        - t
-        - tools
-    file:
-        - lib/IO/CaptureOutput.pm
-        - lib/SmartLink.pm
-    package:
-        - DB
-        - Parrot::Test::DB
-        - Parrot::Distribution
-        - Parrot::Docs::HTMLPage
-        - Parrot::OpTrans::CGP
-        - Parrot::OpTrans::CSwitch
-        - Parrot::OpsFile
-requires:
-  Storable: 2.12
-  perl: 5.8.4
-resources:
-    homepage:   'http://parrot.org/'
-    license:    'http://opensource.org/licenses/artistic-license-2.0.php'
-    bugtracker: 'https://trac.parrot.org/parrot/'
-generated_by: Humans

Deleted: branches/ops_pct/Makefile.PL
==============================================================================
--- branches/ops_pct/Makefile.PL	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,45 +0,0 @@
-#! perl
-
-# Copyright (C) 2007-2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Makefile.PL - CPAN installer passthrough to configure Parrot
-
-=head1 DESCRIPTION
-
-This file exists only to allow users of a CPAN shell to configure and build
-Parrot.  If you're reading this yourself, use F<Configure.pl>
-
-=cut
-
-use strict;
-use warnings;
-
-BEGIN { require 5.008 }
-
-my %translations =
-(
-    INSTALL_BASE => 'prefix',
-    LIB          => 'lib',
-    PREFIX       => 'prefix',
-);
-
-my @commands;
-
-for my $arg (@ARGV)
-{
-    my ($name, $value) = split /=/, $arg, 2;
-    next unless exists $translations{ $name };
-    push @commands, "--$name=$value";
-}
-
-system( $^X, 'Configure.pl', @commands );
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/NEWS
==============================================================================
--- branches/ops_pct/NEWS	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/NEWS	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,44 @@
 # $Id$
 
+New in 2.4.0
+- Deprecations
+  + Tools to distribute on CPAN were removed
+
+New in 2.3.0
+- Core
+  + Allow passing parameters to the dynamic linker ('dlopen' improved)
+  + loadlib opcode added
+  + Calling conventions are now much more consistent, and follows natural
+    semantics of handling arguments and return values
+  + Recursive make for src/dynpmc removed
+  + Datatype STRINGNULL for a single Null STRING added
+  + config_lib.pasm replaced with config_lib.pir
+- Platforms
+  + Improved handling of new compilers
+  + Cygwin packages will be updated again with Parrot releases
+  + Fedora packages add desktop files
+  + gzip and bzip2 compressed tar files for releases
+- Tools
+  + tapir executable added; tapir is a TAP test harness
+  + Added TAP options --merge --ignore-exit
+- Miscellaneous
+  + 3 month cycle for supported releases
+  + Review and vote of GSoC applications
+
+New in 2.2.0
+- Core changes
+  + Most internal allocations now use the GC
+  + RNG non-randomnes fixes
+  + Elimination of much dead code
+- API changes
+  + PMCs can now be initialized from an int
+  + Many legacy ops are removed
+- Platforms
+  + Sun cc and Intel icc support have been restored
+  + Compiler invocation no longer goes through a Perl script
+- Tools
+  + NCI thunks are now generated by self-hosted PIR code
+
 New in 2.1.0
 - Core changes
   + GC performance and encapsulation were greatly improved.

Modified: branches/ops_pct/PBC_COMPAT
==============================================================================
--- branches/ops_pct/PBC_COMPAT	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/PBC_COMPAT	Wed May  5 08:45:29 2010	(r46302)
@@ -27,6 +27,15 @@
 
 # please insert tab separated entries at the top of the list
 
+6.14	2010.05.03	coke	remove popaction, pushmark, pushaction ops.
+6.13	2010.05.03	coke	move File/OS pmcs to src/dynpmc
+6.12	2010.05.02	plobsing	store constant PMC strings as top level constant strings    
+6.11	2010.04.29	tewk	remove ParrotRunningThread
+6.10	2010.04.29	NotFound	packfiledebug.pmc
+6.9	2010.04.27	bacek	remove deprecated in-place string ops (bitwise, charset, case change)
+6.8	2010.04.27	bacek	remove deprecated in-place substr ops
+6.7	2010.04.22	coke	remove RetContinuation PMC
+6.6	2010.04.17	bacek	add replace op
 6.5	2010.03.09	cotto	remove cpu_ret op
 6.4	2010.03.02	cotto	remove prederef__ and reserved
 6.3	2010.02.16	whiteknight	Add OpLib and Opcode PMCs

Modified: branches/ops_pct/README
==============================================================================
--- branches/ops_pct/README	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/README	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.1.0
+This is Parrot, version 2.3.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.
@@ -92,14 +92,6 @@
 
     perldoc -F docs/intro.pod
 
-NOTES
------
-
-On some older computers with little RAM, the computed-goto dispatch core
-(ops/core_ops_cg.c) may take a while to compile or may fail to compile at all.
-You can pass a flag to Configure.pl (--cgoto=0) to disable the computed-goto
-core, at a slight cost in runtime speed.
-
 CHANGES
 -------
 

Modified: branches/ops_pct/README_cygwin.pod
==============================================================================
--- branches/ops_pct/README_cygwin.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/README_cygwin.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -25,22 +25,22 @@
 
 Runtime requirements:
 
-  libreadline6 ncurses libintl8 libgmp3 libgdbm4
+  libreadline6 ncurses libintl8 libgmp3
 
 Optional requirements:
 
-  libicu38 libpq5 openssl
+  libicu38 libpq5
 
   for opengl: w32api opengl or libglut3 xorg-x11-base xorg-x11-bin-dlls
 
 Build requirements:
 
   gcc make perl parrot readline libncurses-devel libgmp-devel
-  libgdbm-devel pcre-devel
+  pcre-devel
 
 Optional build requirements:
 
-  libicu-devel openssl-devel
+  libicu-devel
 
   for Cygwin/X opengl: freeglut libglut-devel xorg-x11-devel
 

Modified: branches/ops_pct/README_win32.pod
==============================================================================
--- branches/ops_pct/README_win32.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/README_win32.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -85,15 +85,9 @@
 
 The availability of these libraries is checked by Configure.pl.
 
-B<libcrypto> - a part of libssl / OpenSSL
-L<http://gnuwin32.sourceforge.net/>
-
 B<gettext> - library and tools for native language support
 L<http://gnuwin32.sourceforge.net/>
 
-B<gdbm> - GNU database manager
-L<http://gnuwin32.sourceforge.net/>
-
 B<GMP> - GNU multiple precision arithmetic library
 L<http://developer.berlios.de/projects/win32gmp/>
 

Modified: branches/ops_pct/RESPONSIBLE_PARTIES
==============================================================================
--- branches/ops_pct/RESPONSIBLE_PARTIES	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/RESPONSIBLE_PARTIES	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2009, Parrot Foundation.
+# Copyright (C) 2002-2010, Parrot Foundation.
 # $Id$
 
 This is a list of project roles, with a partial list of the folks who have
@@ -62,6 +62,7 @@
                                 Reini Urban (cygwin)
                                 Will Coleda (MacPorts)
                                 Jerry Gay (Windows)
+                                Gerd Pokorra (Fedora)
 
 
 Patch Monster                   chromatic

Modified: branches/ops_pct/VERSION
==============================================================================
--- branches/ops_pct/VERSION	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/VERSION	Wed May  5 08:45:29 2010	(r46302)
@@ -1 +1 @@
-2.1.0
+2.3.0

Modified: branches/ops_pct/compilers/data_json/Defines.mak
==============================================================================
--- branches/ops_pct/compilers/data_json/Defines.mak	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/data_json/Defines.mak	Wed May  5 08:45:29 2010	(r46302)
@@ -1,6 +1,6 @@
-DATA_JSON_LIB_PBCS = $(LIBRARY_DIR)/data_json.pbc
+DATA_JSON_LIB_PBCS = runtime/parrot/languages/data_json/data_json.pbc
 
-DATA_JSON_CLEANUPS = $(LIBRARY_DIR)/data_json.pbc \
+DATA_JSON_CLEANUPS = $(DATA_JSON_LIB_PBCS) \
     compilers/data_json/data_json.pbc \
     compilers/data_json/data_json/grammar.pir \
     compilers/data_json/data_json/pge2pir.pir

Modified: branches/ops_pct/compilers/data_json/Rules.mak
==============================================================================
--- branches/ops_pct/compilers/data_json/Rules.mak	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/data_json/Rules.mak	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,5 @@
-$(LIBRARY_DIR)/data_json.pbc: compilers/data_json/data_json.pbc
+runtime/parrot/languages/data_json/data_json.pbc: compilers/data_json/data_json.pbc
+	$(MKPATH) runtime/parrot/languages/data_json
 	$(CP) compilers/data_json/data_json.pbc $@
 
 compilers/data_json/data_json.pbc : \

Modified: branches/ops_pct/compilers/imcc/Rules.in
==============================================================================
--- branches/ops_pct/compilers/imcc/Rules.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/Rules.in	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,5 @@
 compilers/imcc/pcc$(O) : \
+    compilers/imcc/pcc.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -12,6 +13,7 @@
     $(PARROT_H_HEADERS)
 
 compilers/imcc/instructions$(O) : \
+    compilers/imcc/instructions.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -25,6 +27,7 @@
     $(PARROT_H_HEADERS)
 
 compilers/imcc/pbc$(O) : \
+    compilers/imcc/pbc.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -38,6 +41,7 @@
     include/pmc/pmc_sub.h
 
 compilers/imcc/parser_util$(O) : \
+    compilers/imcc/parser_util.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -56,6 +60,7 @@
     include/pmc/pmc_sub.h
 
 compilers/imcc/imc$(O) : \
+    compilers/imcc/imc.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -68,6 +73,7 @@
     $(PARROT_H_HEADERS)
 
 compilers/imcc/cfg$(O) : \
+    compilers/imcc/cfg.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -80,6 +86,7 @@
     $(PARROT_H_HEADERS)
 
 compilers/imcc/debug$(O) : \
+    compilers/imcc/debug.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -126,6 +133,7 @@
 	$(CC) $(CFLAGS) @optimize::compilers/imcc/imcparser.c@ @ccwarn::compilers/imcc/imcparser.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imcparser.c
 
 compilers/imcc/main$(O) : \
+    compilers/imcc/main.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -159,6 +167,7 @@
 	$(CC) $(CFLAGS) @optimize::compilers/imcc/optimizer.c@ @ccwarn::compilers/imcc/optimizer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/optimizer.c
 
 compilers/imcc/reg_alloc$(O) : \
+    compilers/imcc/reg_alloc.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -171,6 +180,7 @@
     $(PARROT_H_HEADERS)
 
 compilers/imcc/sets$(O) : \
+    compilers/imcc/sets.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -182,6 +192,7 @@
     $(PARROT_H_HEADERS)
 
 compilers/imcc/symreg$(O) : \
+    compilers/imcc/symreg.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \

Modified: branches/ops_pct/compilers/imcc/cfg.c
==============================================================================
--- branches/ops_pct/compilers/imcc/cfg.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/cfg.c	Wed May  5 08:45:29 2010	(r46302)
@@ -949,18 +949,6 @@
                  *
                  * TT #1244: emit warning in propagate_need()
                  */
-#if 0
-                if (pred->index == 0) {
-                    Instruction *ins = r->life_info[i]->first_ins;
-                    int bbi = ins->bbindex;
-                    for (; ins && ins->bbindex == bbi; ins = ins->next)
-                        if (instruction_reads(ins, r))
-                            break;
-                    IMCC_warning("propagate_need",
-                            "'%s' might be used uninitialized in %s:%d\n",
-                            r->name, function, ins->line);
-                }
-#endif
                 propagate_need(pred, r, i);
             }
         }

Modified: branches/ops_pct/compilers/imcc/imcc.l
==============================================================================
--- branches/ops_pct/compilers/imcc/imcc.l	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/imcc.l	Wed May  5 08:45:29 2010	(r46302)
@@ -87,10 +87,14 @@
 
 static void include_file(PARROT_INTERP, char *file_name, ARGMOD(void *yyscanner));
 
+static int handle_identifier(PARROT_INTERP, YYSTYPE *valp, ARGIN(const char *id));
+
 #define YY_DECL int yylex(YYSTYPE *valp, yyscan_t yyscanner, PARROT_INTERP)
 
 #define YYCHOP() (yytext[--yyleng] = '\0')
 
+#define SET_LINE_NUMBER (IMCC_INFO(interp)->line = yylineno)
+
 #define DUP_AND_RET(valp, token)             \
   do {                                       \
       if (valp) (valp)->s = mem_sys_strdup(yytext); \
@@ -111,6 +115,7 @@
 %option reentrant
 %option never-interactive
 %option stack
+%option yylineno
 
 LETTER          [a-zA-Z_@]
 DIGIT           [0-9]
@@ -133,7 +138,7 @@
 STRINGCONSTANT  {SQ_STRING}|{DQ_STRING}
 SQ_STRING       \'[^'\n]*\'
 RANKSPEC        \[[,]*\]
-EOL        \r?\n
+EOL             \r?\n
 WS              [\t\f\r\x1a ]
 SP              [ ]
 
@@ -167,7 +172,10 @@
             return 0;
         }
 
+<*>^{WS}*            { SET_LINE_NUMBER; }
+
 <heredoc1>.*{EOL} {
+            SET_LINE_NUMBER;
             IMCC_INFO(interp)->frames->heredoc_rest = mem_sys_strdup(yytext);
             BEGIN(heredoc2);
     }
@@ -177,7 +185,6 @@
          * arrange them before all wildcard state matches */
 
         /* Newline in the heredoc. Realloc and cat on. */
-        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->heredoc_content =
             (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
                             strlen(IMCC_INFO(interp)->heredoc_content) +
@@ -187,6 +194,7 @@
     }
 
 <heredoc2>.* {
+        SET_LINE_NUMBER;
         /* Are we at the end of the heredoc? */
         if (STREQ(IMCC_INFO(interp)->heredoc_end, yytext)) {
             /* End of the heredoc. */
@@ -209,7 +217,7 @@
             yy_pop_state(yyscanner);
             yy_scan_string(IMCC_INFO(interp)->frames->heredoc_rest, yyscanner);
 
-            /* the EOF rule will increment the line number; decrement here */
+            /* not sure we need this decrement; more testing needed */
             IMCC_INFO(interp)->line--;
             return STRINGC;
         }
@@ -244,7 +252,7 @@
 <*>setline{SP}+ { yy_push_state(cmt1, yyscanner);  }
 
 <cmt1>{DIGITS} {
-        IMCC_INFO(interp)->line = atoi(yytext);
+        yylineno = IMCC_INFO(interp)->line = atoi(yytext);
         yy_pop_state(yyscanner);
         yy_push_state(cmt4, yyscanner);
         return LINECOMMENT;
@@ -252,7 +260,6 @@
 
 <cmt4>.*{EOL} {
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 
 <INITIAL,emit>{EOL} {
@@ -260,7 +267,6 @@
             BEGIN(INITIAL);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
@@ -276,7 +282,6 @@
             yy_pop_state(yyscanner);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
@@ -284,23 +289,24 @@
 
 <INITIAL,emit,macro>^"=cut"{EOL} {
     /* this is a stand-alone =cut, but we're not in POD mode, so ignore.  */
-    IMCC_INFO(interp)->line++;
+    SET_LINE_NUMBER;
 }
 
-<INITIAL,emit,macro>^"=" {
+<INITIAL,emit,macro>^"=".*{EOL} {
+        SET_LINE_NUMBER;
         IMCC_INFO(interp)->in_pod = 1;
         yy_push_state(pod, yyscanner);
     }
 
 <pod>^"=cut"{EOL} {
+        SET_LINE_NUMBER;
         IMCC_INFO(interp)->in_pod = 0;
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 
-<pod>.*         { /*ignore*/ }
+<pod>.* { SET_LINE_NUMBER; }
 
-<pod>{EOL}      { IMCC_INFO(interp)->line++; }
+<pod>{EOL}      { /* ignore */ }
 
 <*>".line"               return TK_LINE;
 <*>".file"               return TK_FILE;
@@ -337,7 +343,7 @@
 ":instanceof"              return SUB_INSTANCE_OF;
 ":subid"                   return SUBID;
 
-".get_result"                  return RESULT;
+".get_result"              return RESULT;
 ".get_results"             return GET_RESULTS;
 ".yield"                   return YIELDT;
 ".set_yield"               return SET_YIELD;
@@ -447,6 +453,8 @@
     }
 
 <emit,INITIAL>".macro" {
+        /* the initial whitespace catcher misses this one */
+        SET_LINE_NUMBER;
         return read_macro(valp, interp, yyscanner);
     }
 
@@ -485,7 +493,6 @@
     }
 
 <emit,INITIAL>{ID}"$" {
-
         if (valp) {
             char *label;
             size_t len;
@@ -635,34 +642,8 @@
         return REG;
     }
 
-<emit,INITIAL>{ID} {
-        if (!IMCC_INFO(interp)->is_def) {
-            SymReg *r = find_sym(interp, yytext);
-
-            if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
-                valp->sr = r;
-                return VAR;
-            }
-
-            if (IMCC_INFO(interp)->cur_unit
-            &&  IMCC_INFO(interp)->cur_unit->instructions
-            && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
-            &&  r->pcc_sub)
-            {
-                if (((r->pcc_sub->pragma & P_METHOD)
-                ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
-                &&   !strcmp(yytext, "self")) {
-                    valp->sr = mk_ident(interp, "self", 'P');
-                    IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
-                    return VAR;
-                }
-            }
-        }
-
-        valp->s = mem_sys_strdup(yytext);
-        return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
-    }
 
+<emit,INITIAL>{ID} { return handle_identifier(interp, valp, yytext); }
 
 <emit,INITIAL>{WS}+ /* skip */;
 
@@ -684,10 +665,13 @@
 
 <INITIAL><<EOF>> yyterminate();
 
-<macro>".endm"         DUP_AND_RET(valp, ENDM);
+<macro>".endm"         {
+        /* the initial whitespace catcher misses this one */
+        SET_LINE_NUMBER;
+        DUP_AND_RET(valp, ENDM);
+}
 
 <macro>{WS}*{EOL} {
-        IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
     }
 
@@ -745,7 +729,6 @@
     return IDENTIFIER;
 }
 
-<macro>^{WS}+                       /* skip leading ws */;
 <macro>{WS}+                        DUP_AND_RET(valp, ' ');
 <macro>[SNIP]{DIGITS}               DUP_AND_RET(valp, REG);
 <macro>"$"[SNIP]{DIGITS}            DUP_AND_RET(valp, REG);
@@ -814,6 +797,9 @@
     frame->s.next             = (parser_state_t *)IMCC_INFO(interp)->frames;
     IMCC_INFO(interp)->frames = frame;
 
+    /* start at the effective *starting line* of the macro */
+    IMCC_INFO(interp)->line   = frame->s.line - 2;
+
     yy_scan_string(expansion, yyscanner);
 }
 
@@ -1069,9 +1055,6 @@
     IMCC_INFO(interp)->macro_buffer   = NULL;
     IMCC_INFO(interp)->cur_macro_name = NULL;
 
-    /* the ENDM rule doesn't set the line number */
-    IMCC_INFO(interp)->line--;
-
     return MACRO;
 }
 
@@ -1232,8 +1215,6 @@
             }
         }
 
-        /* let the normal EOF rules match line numbers */
-        IMCC_INFO(interp)->line = m->line - 1;
         scan_string(frame, m->expansion, yyscanner);
 
         return 1;
@@ -1283,15 +1264,19 @@
 scan_file(PARROT_INTERP, macro_frame_t *frame, FILE *file, void *yyscanner)
 {
     yyguts_t * const yyg      = (yyguts_t *)yyscanner;
+    const      int   oldline  = IMCC_INFO(interp)->line;
     frame->buffer             = YY_CURRENT_BUFFER;
     frame->s.next             = (parser_state_t *)IMCC_INFO(interp)->frames;
     IMCC_INFO(interp)->frames = frame;
     IMCC_INFO(interp)->state  = (parser_state_t *)IMCC_INFO(interp)->frames;
 
-    IMCC_INFO(interp)->line   = 1;
+    /* let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line   = 0;
 
     yy_switch_to_buffer(yy_create_buffer(file, YY_BUF_SIZE, yyscanner),
         yyscanner);
+
+    IMCC_INFO(interp)->line   = oldline;
 }
 
 void
@@ -1469,6 +1454,36 @@
     return yyg->yy_hold_char == '\0';
 }
 
+static int
+handle_identifier(PARROT_INTERP, YYSTYPE *valp, const char *text)
+{
+    if (!IMCC_INFO(interp)->is_def) {
+        SymReg *r = find_sym(interp, text);
+
+        if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
+            valp->sr = r;
+            return VAR;
+        }
+
+        if (IMCC_INFO(interp)->cur_unit
+        &&  IMCC_INFO(interp)->cur_unit->instructions
+        && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
+        &&  r->pcc_sub)
+        {
+            if (((r->pcc_sub->pragma & P_METHOD)
+            ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
+            &&   !strcmp(text, "self")) {
+                valp->sr = mk_ident(interp, "self", 'P');
+                IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
+                return VAR;
+            }
+        }
+    }
+
+    valp->s = mem_sys_strdup(text);
+    return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
+}
+
 /*
  * Local variables:
  *   c-file-style: "parrot"

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

Modified: branches/ops_pct/compilers/imcc/imclexer.c
==============================================================================
--- branches/ops_pct/compilers/imcc/imclexer.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/imclexer.c	Wed May  5 08:45:29 2010	(r46302)
@@ -204,7 +204,20 @@
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
 
-    #define YY_LESS_LINENO(n)
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE yylex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yyl;\
+                for ( yyl = n; yyl < yyleng; ++yyl )\
+                    if ( yytext[yyl] == '\n' )\
+                        --yylineno;\
+            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -385,125 +398,129 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1062] =
+static yyconst flex_int16_t yy_accept[1095] =
     {   0,
-        0,    0,    0,    0,    0,    0,   16,   16,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        3,    3,  149,  135,  134,   10,  134,  135,  135,   11,
-      135,  135,  135,  135,  135,  135,  115,  135,   95,  135,
-      119,  119,  135,   87,  135,   89,  133,  133,  133,  133,
-      133,  133,  133,  133,  135,  135,   14,  134,  134,  135,
-      135,  135,  135,  133,   14,  147,  142,  137,  142,  147,
-      147,  147,  147,  147,  119,  119,  147,  145,  145,  145,
-      141,  141,   14,   16,   17,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,  148,  135,    8,    8,
-
-      135,  135,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    5,  135,    9,  135,  135,  135,  135,  135,
-      119,  119,  135,  135,  135,  135,   12,  135,  135,  135,
-      135,  135,  119,  119,  135,  135,  135,  148,    1,  148,
-      148,  148,  148,  148,  119,  119,  148,  148,  148,    3,
-        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,  134,    0,   10,   92,    0,  124,    0,  131,  131,
-      131,  131,  131,  100,   84,  103,    0,   93,   98,    0,
-      119,   96,   97,  118,  109,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-
-      117,  117,  101,   99,  118,    0,    0,  123,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   81,   88,   91,   64,   90,   82,  114,    0,
-      133,  116,  132,  133,   74,  133,  133,  133,  133,  133,
-      133,  104,   85,  105,   86,    0,  134,  117,  117,  117,
-      117,  117,  117,    0,    0,    0,    0,  142,  137,  142,
-        0,    0,    0,  146,  146,  146,  146,  145,    0,  143,
-      145,  141,  141,   16,   17,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,   16,    0,    0,    8,    0,    4,
+        0,    1,    0,    1,    0,    1,   17,    1,    0,    1,
+        0,    1,    0,    1,    0,    1,    0,    1,    0,    1,
+        4,    1,  149,  136,  135,   11,  135,  136,  136,   12,
+      136,  136,  136,  136,  136,  136,  116,  136,   96,  136,
+      120,  120,  136,   88,  136,   90,  134,  134,  134,  134,
+      134,  134,  134,  134,  136,  136,    1,    1,  136,  135,
+      135,  136,  136,  136,  136,  134,    1,    1,  136,  147,
+      142,  138,  142,  147,  147,  147,  147,  147,  120,  120,
+      147,  145,  145,  145,    1,    1,  147,   17,   18,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,    1,
+
+        1,   17,  148,  136,    9,    9,  136,  136,    1,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    1,
+        6,  136,   10,  136,  136,  136,  136,  136,  120,  120,
+      136,  136,  136,    1,    1,  136,   13,  136,  136,  136,
+      136,  136,  120,  120,  136,  136,  136,    1,    1,  148,
+        2,  148,  148,  148,  148,  148,  120,  120,  148,  148,
+      148,    1,    1,    4,    3,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    1,    1,  135,    0,   11,
+       93,    0,  125,    0,  132,  132,  132,  132,  132,  101,
+       85,  104,    0,   94,   99,    0,  120,   97,   98,  119,
+
+      110,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  102,  100,
+      119,    0,    0,  124,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   82,   89,
+       92,   65,   91,   83,  115,    0,  134,  117,  133,  134,
+       75,  134,  134,  134,  134,  134,  134,  105,   86,  106,
+       87,    1,    0,   15,    0,   92,   65,    0,  135,  118,
+      118,  118,  118,  118,  118,    0,    0,    0,    0,    1,
+      142,  138,  142,    0,    0,    0,  146,  146,  146,  146,
+      145,    0,  143,  145,    1,    1,   17,   18,   17,   17,
 
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,    1,   17,    0,
+        0,    9,    0,    1,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    1,    0,   10,    0,    0,    0,  125,    0,
+        0,    0,    0,  120,  119,    0,    0,  119,    0,    0,
+      124,    0,    0,    0,    0,    0,    0,    1,    1,    0,
+       13,    0,    0,    0,  125,    0,    0,    0,    0,  120,
+      119,    0,    0,  119,    0,    0,  124,    0,    0,    0,
+        0,    0,    0,    1,    1,    0,    2,    0,    0,    0,
+
+      125,    0,    0,    0,    0,  120,  119,    0,    0,  119,
+        0,    0,  124,    0,    0,    0,    0,    0,    0,    1,
+        1,    4,    3,    4,    4,    4,    4,    4,    4,    4,
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    0,    9,    0,
-        0,    0,  124,    0,    0,    0,    0,  119,  118,    0,
-        0,  118,    0,    0,  123,    0,    0,    0,    0,    0,
-        0,    0,   12,    0,    0,    0,  124,    0,    0,    0,
-        0,  119,  118,    0,    0,  118,    0,    0,  123,    0,
-        0,    0,    0,    0,    0,    0,    1,    0,    0,    0,
-      124,    0,    0,    0,    0,  119,  118,    0,    0,  118,
-        0,    0,  123,    0,    0,    0,    0,    0,    0,    3,
-        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-       94,  127,  128,  130,  129,    0,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
-      117,  102,  118,  121,    0,  118,  122,  120,    0,    0,
+        4,    4,    1,   95,  128,  129,  131,  130,    0,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  103,  119,  122,    0,  119,  123,
+      121,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  107,
-      106,   83,  113,    0,    0,  132,  133,   77,  133,   78,
-       79,  133,  133,  133,    0,  117,  117,    0,    0,  138,
-      144,  140,  146,  146,  146,  146,  146,  145,   16,   16,
-
-       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,    0,    0,    0,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    0,    0,
-        0,  118,  121,    0,  118,  122,  120,    0,    0,    0,
-        0,    0,    0,    0,    0,  118,  121,    0,  118,  122,
-      120,    0,    0,    0,    0,    0,    0,    0,    0,  118,
-      121,    0,  118,  122,  120,    0,    0,    0,    0,    0,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    0,  118,   68,  117,  117,  117,
-      117,   24,  117,  117,  117,  117,  117,   21,  117,  117,
 
-      117,  117,  117,  117,  117,  117,  117,  117,  117,   23,
-      117,  117,    0,    0,    0,    0,    0,    0,    0,   45,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  125,    0,    0,  108,    0,  126,
-        0,    0,    0,   73,   76,  133,  133,  133,  133,    0,
-      140,  146,  146,  146,  146,  145,  145,   16,   16,   16,
-       16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,    0,    0,    0,    0,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    0,  118,    0,
-        0,    0,    0,  125,    0,    0,    0,    0,    0,  126,
-
-        0,    0,    0,    0,    0,    0,  118,    0,    0,    0,
-        0,  125,    0,    0,    0,    0,    0,  126,    0,    0,
-        0,    0,    0,    0,  118,    0,    0,    0,    0,  125,
-        0,    0,    0,    0,    0,  126,    0,    0,    0,    0,
-        0,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,  117,  117,   27,  117,
-      117,   19,  117,  117,  117,  117,   18,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,  117,   43,
-        0,   59,    0,   40,    0,    0,   39,   38,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  108,  107,   84,  114,    0,    0,  133,  134,
+       78,  134,   79,   80,  134,  134,  134,    0,  118,  118,
+        0,    0,  139,  144,  141,  146,  146,  146,  146,  146,
+      145,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,    0,    0,    0,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    0,    0,    0,  119,  122,    0,  119,  123,  121,
+        0,    0,    0,    0,    0,    0,    0,    0,  119,  122,
+        0,  119,  123,  121,    0,    0,    0,    0,    0,    0,
+        0,    0,  119,  122,    0,  119,  123,  121,    0,    0,
+
+        0,    0,    0,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    4,    0,  119,   69,
+      118,  118,  118,  118,   25,  118,  118,  118,  118,  118,
+       22,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,   24,  118,  118,    0,    0,    0,    0,    0,
+        0,    0,   46,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  126,    0,    0,
+      109,    0,  127,    0,    0,    0,   74,   77,  134,  134,
+      134,  134,    0,  141,  146,  146,  146,  146,  145,  145,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+
+       17,   17,   17,   17,   17,   17,    0,    0,    0,    0,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        0,  119,    0,    0,    0,    0,  126,    0,    0,    0,
+        0,    0,  127,    0,    0,    0,    0,    0,    0,  119,
+        0,    0,    0,    0,  126,    0,    0,    0,    0,    0,
+      127,    0,    0,    0,    0,    0,    0,  119,    0,    0,
+        0,    0,  126,    0,    0,    0,    0,    0,  127,    0,
+        0,    0,    0,    0,    4,    4,    4,    4,    4,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,  118,
+      118,   28,  118,  118,   20,  118,  118,  118,  118,   19,
+
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,  118,   44,    0,   60,    0,   41,    0,    0,   40,
+       39,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  134,  134,  134,  134,   14,    0,  137,
+       20,  146,   19,  145,  145,   17,   17,   17,   17,   16,
+       17,   20,   19,    0,    0,    5,    5,    5,    5,   20,
+       19,    0,    0,   20,   19,    0,    0,   20,   19,    0,
+        0,    4,    4,    4,    4,  118,  118,   71,  118,  118,
+      118,  118,  118,  118,  118,  118,   70,  112,  118,  118,
+      118,   73,  118,  118,  118,  118,  118,  118,   54,    0,
+
+        0,    0,    0,    0,   38,   64,    0,    0,    0,   45,
+        0,    0,   51,    0,    0,  134,  134,   81,   76,  146,
+      145,  145,   17,   17,    0,    0,    5,    5,    0,    0,
+        0,    0,    0,    0,    4,    4,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+      118,   56,  118,  118,  118,  118,    0,    0,    0,    0,
+       37,    0,    0,    0,    0,   61,    0,   47,  134,  134,
+      140,  145,  145,   17,   17,    0,    0,    5,    5,    0,
+        0,    0,    0,    0,    0,    4,    4,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  113,  118,   59,  118,
+
+      118,  118,  118,   32,   23,  118,  118,  118,    0,    0,
+        0,    0,   48,    0,    0,    0,    0,    0,    8,   17,
+        8,    5,    5,    0,    8,    0,    8,    0,    8,    4,
+        4,   21,  118,  118,  118,   27,  118,  118,  118,  118,
+       31,  118,  118,  118,   29,  118,  118,   58,   67,    0,
+        0,   66,   63,   62,   43,    0,    7,    7,    7,    7,
+        7,    4,  118,  118,  118,  118,   36,  118,  118,  118,
+       30,   68,  118,   55,   42,    0,    0,   26,  118,  118,
+       34,   52,  118,  118,   57,   50,   49,  118,   35,   53,
+       72,  111,   33,    0
 
-      133,  133,  133,  133,   13,    0,  136,   19,  146,   18,
-      145,  145,   16,   16,   16,   16,   15,   16,   19,   18,
-        0,    0,    4,    4,    4,    4,   19,   18,    0,    0,
-       19,   18,    0,    0,   19,   18,    0,    0,    3,    3,
-        3,    3,  117,  117,   70,  117,  117,  117,  117,  117,
-      117,  117,  117,   69,  111,  117,  117,  117,   72,  117,
-      117,  117,  117,  117,  117,   53,    0,    0,    0,    0,
-        0,   37,   63,    0,    0,    0,   44,    0,    0,   50,
-        0,    0,  133,  133,   80,   75,  146,  145,  145,   16,
-       16,    0,    0,    4,    4,    0,    0,    0,    0,    0,
-
-        0,    3,    3,  117,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  117,  117,  117,  117,  117,   55,  117,
-      117,  117,  117,    0,    0,    0,    0,   36,    0,    0,
-        0,    0,   60,    0,   46,  133,  133,  139,  145,  145,
-       16,   16,    0,    0,    4,    4,    0,    0,    0,    0,
-        0,    0,    3,    3,  117,  117,  117,  117,  117,  117,
-      117,  117,  117,  112,  117,   58,  117,  117,  117,  117,
-       31,   22,  117,  117,  117,    0,    0,    0,    0,   47,
-        0,    0,    0,    0,    0,    7,   16,    7,    4,    4,
-        0,    7,    0,    7,    0,    7,    3,    3,   20,  117,
-
-      117,  117,   26,  117,  117,  117,  117,   30,  117,  117,
-      117,   28,  117,  117,   57,   66,    0,    0,   65,   62,
-       61,   42,    0,    6,    6,    6,    6,    6,    3,  117,
-      117,  117,  117,   35,  117,  117,  117,   29,   67,  117,
-       54,   41,    0,    0,   25,  117,  117,   33,   51,  117,
-      117,   56,   49,   48,  117,   34,   52,   71,  110,   32,
-        0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -549,283 +566,289 @@
        10,   10,   10,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1213] =
+static yyconst flex_int16_t yy_base[1251] =
     {   0,
-        0, 4304,   64, 4303,  129,   81,  194, 4302,  259,    0,
-      324,    0,   72,   77,  389,    0,  454,    0,  519,    0,
-      584,    0, 4326, 6980,   98, 6980,  106, 4300,   64, 6980,
-       83, 4299,  102, 4311,   82,  633, 6980,  640,  647,  638,
-      694,  724,  729,   48,  100,  645,  703,  741,  711,  769,
-      709,  743,  777,  782,  704,  710,  771,  734,  799,  789,
-      812,  777, 4298,  798, 4277, 6980,  837, 6980,  843,  715,
-      816, 4308,  857,  863,    0,  869, 4291,  726,  885,  797,
-      890,  914, 4270,    0, 6980, 4310,  810, 4300,  903,  907,
-      942,  903, 4285, 1004, 1069, 4243, 6980,  928,  914, 1015,
-
-     4263,  641,    0,    0,  854,  970,  947, 1118,  941, 4261,
-     1180, 1245,  819,  821, 6980,  830,  934,  909, 1021, 1085,
-     1308, 1087,  927, 1370, 1435,  877, 6980,  893, 1050,  940,
-     1043, 1099, 1498, 1171,  996, 1560, 1625,  952, 6980,  979,
-     1156, 1047, 1209, 1273, 1688, 1180, 1093, 1750, 1815,    0,
-     6980, 4281,  933, 4271, 1091, 1123, 1864, 1236, 4258, 1926,
-     1991, 1151, 1096, 6980, 6980,  946, 6980,    0,    0, 1156,
-     1216, 1261, 1267, 6980, 6980, 6980, 4269, 6980, 6980, 1280,
-     1381, 6980, 6980, 1285, 6980,    0, 4246, 4226, 4232, 1013,
-     4224, 4223,  721, 4219,  947,   59,  709,  856, 4225,  671,
-
-     4228, 4219, 4239, 6980, 1313, 1105, 1336, 6980, 1108,    0,
-     4210, 4220, 4210, 1113,  977, 1006,  810,  739, 4206,   16,
-     4206, 4199, 1215, 6980, 6980, 6980, 6980, 1176, 4234, 4233,
-     1330, 4248, 1397, 1398, 1381, 1446, 1455, 1447, 1457, 1456,
-     1473, 6980, 6980, 6980, 6980, 4194, 1213, 4199, 4199, 1267,
-     4209, 4139, 4136, 1214, 4121, 4118,  995, 1361, 6980, 1420,
-     4154, 1409,    0,    0, 4123, 4125, 1049, 1010, 4167, 1526,
-     1451, 1481, 1490,    0, 6980, 1032,    0,    0, 4161, 1534,
-     1571, 1576, 4122, 4121, 1633, 1254, 1588,    0, 1348, 2038,
-     1155, 2085, 2150, 2215, 4110, 4119, 4118, 1639, 1099,    0,
-
-     1311,    0, 1560, 1682, 1750, 4117, 4116, 1762, 1277, 1599,
-        0, 1502, 2262, 1296, 2309, 2374, 2439, 1337, 6980, 1345,
-     1536, 1671, 1357, 1388, 1500, 1526, 1716, 2502, 1832, 1643,
-     1663, 1844, 1677, 1783, 1405, 1726, 2546, 1736, 2593, 2658,
-     2723, 1473, 6980, 1484, 1791, 1803, 1494, 1505, 1547, 1683,
-     1892, 2786, 1942, 1673, 1729, 1964, 1853, 1901, 1522, 1856,
-     2830, 1885, 2877, 2942, 3007, 1532, 6980, 1554, 1842, 1967,
-     1608, 1641, 1797, 1944, 1956, 3070, 2008, 1808, 1866, 2031,
-     1905, 2101, 1679, 2020, 3114, 2066, 3161, 3226, 3291,    0,
-     6980, 1192,    0,    0, 4153, 1960, 2107, 2215, 4114, 4113,
-
-     2227, 1695, 2124,    0, 1934, 3338, 1582, 3385, 3450, 3515,
-     1897, 1999, 2023, 2027, 2043, 2244,    0, 4128, 4108, 4112,
-     4108, 4104, 4111, 4104, 4095, 4099, 1070, 4090, 4098, 1014,
-     4106, 4090, 4096, 4097, 4089, 4101, 4081, 4080, 4095, 4087,
-     4088, 6980, 2232, 1706, 2111, 2248, 2055,    0, 4058, 4060,
-     4068, 4057, 1727, 4046, 4065, 4056, 4046, 4053, 4051, 4056,
-     4039, 4038, 4038, 4035, 4051, 4039, 4046, 1201, 4075, 6980,
-     6980, 4061, 6980, 1681, 4062, 2277, 2457, 2278, 2279, 2280,
-     2320, 2461, 2322, 2451, 4025, 4039, 4040, 4031, 4057, 6980,
-     2331,    0,    0, 4034, 4027, 4034, 4023, 2445, 2341, 3955,
-
-     3952, 2469, 1848, 2320, 2345, 2093, 3562, 1982, 3992, 2094,
-     3609, 3674, 3944, 3951, 3948, 1647, 2519, 3949, 3946, 2507,
-     1938, 2349, 2523, 2223, 3721, 2469, 3768, 3833, 2609, 2068,
-     2272, 2739, 2482, 2551, 2558, 2617, 3896, 2506, 2344, 2761,
-     3943, 4008, 2631, 2295, 2556, 2751, 2623, 2772, 2792, 2806,
-     4071, 2795, 2513, 2814, 4118, 4183, 2825, 2479, 2579, 2893,
-     2636, 2905, 2915, 2901, 4246, 2858, 2741, 3035, 4293, 4358,
-     3029, 3947, 3944, 3007, 2006, 2565, 2758, 2474, 4405, 2099,
-     3984, 2480, 4452, 4517, 2847, 2909,    0, 3941, 3944, 3942,
-     3934, 3950, 3944, 3948, 3945, 3936, 3932,    0, 3939, 3939,
-
-     3940, 3924, 3931, 3933, 3937, 3935, 3935, 3915, 3933,    0,
-     3922, 3921, 3918, 3919, 3906, 3918, 3904, 3903, 3905, 6980,
-     3892, 3883, 3886, 3875, 3887, 3879,  861, 3885, 3871, 3872,
-     3878, 3871, 3880, 2507, 6980,    0, 3910, 6980, 2511, 6980,
-        0, 3898, 3913, 2814, 2815, 3045, 3046, 3054, 2848, 2029,
-        0, 3867, 3868, 3867, 3866, 1821, 2484, 3037, 3059, 3865,
-     3864, 2524,    0,    0, 3897, 2574,    0,    0, 4582, 3901,
-     4647, 3857, 2132, 3860, 3859,  724, 1376, 3063, 3089, 3858,
-     3857, 2904,    0, 4712, 3895, 4777, 3851, 3102, 3109, 3094,
-     3099, 3143, 3148, 2144, 2268, 3032, 3177, 3321, 3323, 2355,
-
-     2455, 4842, 3134, 4907, 3790, 3187, 3191, 3150, 3307, 3329,
-     3331, 2553, 2645, 3211, 3309, 3336, 3338, 2747, 2753, 4972,
-     3195, 5037, 3781, 3200, 3401, 3316, 3319, 3545, 3547, 2763,
-     2780, 3403, 3414, 3553, 3555, 2839, 2852, 5102, 3344, 5167,
-     3780, 3353, 3408, 3783, 3782, 2779,    0,    0, 3815, 2808,
-        0,    0, 5232, 3819, 5297, 3775, 3765, 3770,    0, 3763,
-     3057,    0, 3764, 3778, 3759, 3774,    0, 3766, 3765, 3761,
-     3773, 3755, 3768, 3759, 3752, 3752, 3307, 3763, 3761, 6980,
-     3764, 6980, 3759, 6980, 3757, 3746, 6980, 6980, 3734, 3737,
-     3739, 3716, 3715, 3707, 3701, 3713, 3693, 3702, 3684, 3626,
-
-     3552, 3736, 3554, 3737, 6980, 3669,    0,    0, 3619,    0,
-     3396, 3519,    0,    0, 5362, 1118, 6980, 3661, 6980, 6980,
-     1128,  765,    0,    0, 5427, 1480, 2929, 3037, 3014, 1171,
-     3090, 3122, 3098, 1211, 3189, 3213, 3363, 1266,    0,    0,
-     3381, 1336, 3617, 3616,    0, 3614, 3608, 3602, 3604, 3596,
-     3600, 3596, 3581,    0, 3589, 3581, 3545, 3557,    0, 3534,
-     3535, 3529, 3527, 3519, 3523,    0, 3479, 3484, 3465, 3374,
-     3356, 6980, 6980, 3331, 3326, 3301, 6980, 3292, 3281, 6980,
-     3291, 3283, 3555, 3620, 3425, 3430, 3431, 2847, 3520, 1611,
-     1698, 1299, 1618, 2512, 2595, 1193, 1553, 1622, 1743, 1841,
-
-     1919, 2425, 2754, 3259, 3161, 3149, 3138, 3136, 3081, 3083,
-     3073, 3062, 3056, 3044, 3044, 3034, 3016, 3017,    0, 3004,
-     2987, 2988, 2972, 2860, 2794, 2730, 2709, 6980, 2689, 2697,
-     2612, 2592, 6980, 2511, 6980, 3632, 3635, 3438, 3623, 3637,
-     1400, 1463, 2254, 2817, 2564, 2848, 1937, 3127, 3302, 3374,
-     3526, 3539, 3548, 3562, 2432, 2427, 2409, 2396, 2293, 2277,
-     2277, 2256, 2243,    0, 2226,    0, 2202, 2199, 2187, 2167,
-        0,    0, 2082, 2056, 2037, 2031, 1977, 1967, 1914, 6980,
-     1881, 1868, 1851, 1793, 1609, 1837, 2111, 1829, 2617, 1808,
-     3658, 3542, 3664, 3751, 3793, 3798, 2933, 1786,    0, 1727,
-
-     1707, 1695,    0, 1649, 1655, 1633, 1570,    0, 1534, 1460,
-     1444,    0, 1397, 1388,    0, 6980, 1366, 1282, 6980, 6980,
-     6980, 6980, 1280, 6980,    0, 3434, 3441, 3593,    0, 1233,
-     1218, 1201, 1158,    0, 1128, 1115, 1027,    0,    0,  907,
-        0, 6980,  898,  839,    0,  816,  767,    0,  719,  662,
-      614,    0, 6980, 6980,  598,    0,    0,    0,    0,    0,
-     6980, 5492, 5498, 5508, 5516, 5520, 5528, 5535, 5546, 5557,
-     5568, 5579, 5586, 5597, 5608, 5619, 5630, 5641, 5652, 5663,
-     5674, 5685, 5696, 5707, 5718, 5729, 5740, 5751, 5762, 5773,
-     5784, 5795, 5801, 5811, 5817, 5823, 5828, 5836, 5845, 5851,
-
-     5855, 5861, 5868, 5879, 5890, 5901, 5912, 5923, 5934, 5945,
-     5956, 5967, 5978, 5989, 6000, 6011, 6022, 6033, 6044, 6055,
-     6066, 6077, 6088, 6099, 6110, 6121, 6127, 6132, 6138, 6147,
-     6158, 6169, 6176, 6184, 6190, 6196, 6202, 6209, 6220, 6231,
-     6242, 6253, 6264, 6271, 6282, 6293, 6304, 6315, 6326, 6337,
-     6348, 6359, 6370, 6381, 6392, 6403, 6414, 6425, 6436, 6447,
-     6458, 6469, 6480, 6491, 6502, 6513, 6524, 6530, 6541, 6552,
-     6563, 6570, 6578, 6584, 6590, 6597, 6608, 6619, 6630, 6641,
-     6652, 6659, 6670, 6681, 6692, 6703, 6714, 6725, 6736, 6747,
-     6758, 6769, 6780, 6791, 6802, 6813, 6824, 6835, 6846, 6857,
-
-     6868, 6879, 6890, 6901, 6912, 6918, 6926, 6932, 6939, 6950,
-     6957, 6968
+        0,   64,   88,   70,  153,   75,  218,   82,  283,  113,
+      348,  117,  109,  412,  434,  121,  499,  130,  564,  135,
+      629,  140, 4665, 7097,  693, 7097,  697, 4639,   63, 7097,
+      385, 4638,   56, 4648,   58,  686, 7097,  696,  703,   60,
+      750,  780,  785,   72,   83,  124,  703,  797,  767,  825,
+      765,  759,  769,  833,   63,  766,  848,  856,  851,  422,
+      864,  862,  871,  838, 4623,  848,  803,  898,  819, 7097,
+      902, 7097,  906,   84,  898, 4570,  920,  929,    0,  935,
+     4553,  405,  951,  828,  941,  956,  909,    0, 7097, 4573,
+      689, 4563,  965,  969, 1004,  965, 4550, 1066, 1131,  991,
+
+      995, 4529, 7097,  990, 1009, 1077, 4549,   87, 1001,    0,
+        0,  791, 1032, 1066, 1180, 1003, 4547, 1242, 1307, 1013,
+      878,  426, 7097,  894, 1111, 1010, 1105, 1160, 1370, 1129,
+      959, 1432, 1497, 1057, 1098,  974, 7097, 1032, 1163, 1052,
+     1218, 1276, 1560, 1300, 1149, 1622, 1687, 1157, 1182, 1041,
+     7097, 1101, 1185, 1116, 1266, 1337, 1750, 1306, 1209, 1812,
+     1877, 1225, 1259,    0, 7097, 4567,  880, 4557, 1254, 1356,
+     1926, 1369, 4544, 1988, 2053, 1213, 1287, 1297, 1346, 7097,
+     7097, 1168, 7097,    0,    0, 1344, 1360, 1374, 1398, 7097,
+     7097, 7097, 4555, 7097, 7097, 1406, 1443, 7097, 7097, 1448,
+
+     7097,    0, 4532, 4512, 4518, 1136, 4510, 4512,  658, 4508,
+     1425,  105,  883,  922, 4514,  727, 4517, 4508, 4532, 7097,
+     1505, 1174, 1466, 7097, 1185,    0, 4503, 4513, 4502, 1179,
+      816, 1292,  685,  947, 4498,   22, 4498, 4491, 1109, 7097,
+     7097, 7097, 7097, 1252, 4526, 4525, 1406, 4540, 1525, 1533,
+     1443, 1543, 1467, 1544, 1549, 1560, 1562, 7097, 7097, 7097,
+     7097, 1593, 1290, 7097, 1300, 1366, 1382, 1513, 1449, 4492,
+     4492, 1482, 4502, 4501, 4498, 1349, 4483, 4476, 1162, 1582,
+     1616, 7097, 1639, 4512, 1630,    0,    0, 4481, 4483, 1199,
+     1321, 4523, 1638, 1515, 1661, 1665,    0, 7097, 1265,    0,
+
+        0, 4505, 1652, 1698, 1704, 4458, 4457, 1716, 1391, 1661,
+        0, 1472, 2100, 1543, 2147, 2212, 2277, 1607, 4446, 4455,
+     4454, 1744,  909, 1674,    0, 1736,    0, 1687, 1823, 1828,
+     4453, 4452, 1885, 1510, 1778,    0, 1710, 2324, 1563, 2371,
+     2436, 2501, 1753, 1536, 7097, 1597, 1799, 1856, 1601, 1612,
+     1737, 1756, 1851, 2564, 1905, 1778, 1784, 2004, 1894, 1918,
+     1652, 1954, 2608, 1964, 2655, 2720, 2785, 1805, 1862, 1681,
+     7097, 1718, 1926, 1946, 1772, 1828, 1907, 1975, 2016, 2848,
+     2026, 1960, 1981, 2070, 2013, 2082, 1858, 2091, 2892, 2037,
+     2939, 3004, 3069, 2078, 2103, 1978, 7097, 2018, 2128, 2134,
+
+     2039, 2084, 2111, 2121, 2163, 3132, 2293, 2136, 2301, 2387,
+     2172, 2174, 2123, 2305, 3176, 2194, 3223, 3288, 3353, 2200,
+     2205,    0, 7097, 1321,    0,    0, 4489, 2299, 2382, 2310,
+     4450, 4449, 2501, 2160, 2341,    0, 2314, 3400, 1735, 3447,
+     3512, 3577, 2345, 2416, 2403, 2410, 2513, 2517, 2529,    0,
+     4464, 4441, 4445, 4441, 4438, 4445, 4367, 4358, 4362,  786,
+     4353, 4361, 1051, 4369, 4353, 4359, 4360, 4352, 4364, 4348,
+     4347, 4362, 4354, 4357, 7097, 2533, 2180, 2537, 2550, 2394,
+        0, 4348, 4350, 4358, 4347, 2249, 4336, 4355, 4346, 4335,
+     4342, 4340, 4345, 4331, 4330, 4330, 4327, 4343, 4335, 4342,
+
+     1390, 4371, 7097, 7097, 4357, 7097, 1441, 4354, 2564, 2566,
+     2579, 2581, 2583, 2584, 2592, 2624, 2600, 2334, 4332, 4333,
+     4324, 4348, 7097, 2663,    0,    0, 4304, 4297, 4304, 4293,
+     2598, 2677, 4294, 4291, 2785, 2308, 2668, 2681, 2509, 3624,
+     1921, 4331, 1937, 3671, 3736, 4283, 4290, 4287, 1754, 2690,
+     4288, 4282, 2797, 2339, 2694, 2801, 2557, 3783, 2610, 3830,
+     3895, 2826, 2809, 2622, 2834, 2615, 2854, 2868, 2880, 3958,
+     2920, 2829, 2926, 4005, 4070, 2888, 2922, 2832, 2955, 2912,
+     2967, 2977, 3085, 4133, 3104, 2894, 3110, 4180, 4245, 3126,
+     3087, 2914, 3153, 3096, 3099, 3165, 3173, 4308, 3119, 2979,
+
+     3160, 4355, 4420, 3193, 4283, 4280, 3223, 2345, 2973, 3169,
+     2842, 4467, 2011, 4320, 2129, 4514, 4579, 3235, 3239,    0,
+     4277, 4276, 4274, 4266, 4282, 4276, 4280, 4277, 4268, 4264,
+        0, 4271, 4271, 4273, 4257, 4264, 4197, 4201, 4199, 4199,
+     4179, 4197,    0, 4186, 4185, 4182, 4183, 4174, 4186, 4172,
+     4171, 4175, 7097, 4183, 4174, 4177, 4166, 4178, 4170,  783,
+     4176, 4162, 4162, 4168, 4161, 4173, 2584, 7097,    0, 4203,
+     7097, 2637, 7097,    0, 4191, 4206, 2870, 3116, 3364, 3365,
+     3373, 3194, 2423,    0, 4160, 4165, 4164, 4163, 3108, 3374,
+     3245, 3251, 4162, 4161, 2794,    0,    0, 4190, 2819,    0,
+
+        0, 4644, 4193, 4709, 4149, 2558, 4128, 4126, 1733, 1818,
+     3255, 3259, 4124, 4123, 3158,    0, 4774, 4161, 4839, 4117,
+     3380, 3388, 3391, 3428, 3475, 3607, 2638, 2704, 3401, 3463,
+     3609, 3615, 2714, 2965, 4904, 3094, 4969, 4115, 3473, 3477,
+     3437, 3593, 3617, 3622, 3178, 3198, 3497, 3595, 3624, 3699,
+     3247, 3279, 5034, 3431, 5099, 4110, 3485, 3688, 3602, 3605,
+     3811, 3817, 3281, 3382, 3701, 3711, 3862, 3986, 3465, 3481,
+     5164, 3630, 5229, 4108, 3639, 3679, 4110, 4105, 2921,    0,
+        0, 4138, 3103,    0,    0, 5294, 4142, 5359, 4098, 4088,
+     4093,    0, 4086, 1855,    0, 4087, 4101, 4082, 4097,    0,
+
+     4089, 4088, 4084, 4027, 4009, 4022, 4013, 4005, 4005, 1006,
+     4017, 4015, 7097, 4018, 7097, 4013, 7097, 4015, 4012, 7097,
+     7097, 4001, 4000, 3996, 3965, 3950, 3942, 3925, 3931, 3915,
+     3923, 3906, 3842, 3976, 4148, 4016, 3800, 7097, 3487,    0,
+        0, 3834,    0, 2580, 3640,    0,    0, 5424, 1059, 7097,
+     3878, 7097, 7097, 1332, 1986,    0,    0, 5489, 1540, 3499,
+     3713, 3668, 1097, 3717, 3721, 3676, 1231, 3725, 3727, 3682,
+     1504,    0,    0, 3756, 3158, 3821, 3796,    0, 3780, 3773,
+     3767, 3764, 3757, 3689, 3680, 3662,    0, 3649, 3643, 3619,
+     3623,    0, 3580, 3582, 3566, 3569, 3530, 3468,    0, 3428,
+
+     3400, 3386, 3394, 3388, 7097, 7097, 3370, 3365, 3358, 7097,
+     3352, 3340, 7097, 3352, 3329, 3975, 4150, 3851, 3852, 3874,
+     3836, 3948, 1800, 1908, 1438, 1810, 2247, 2260, 1174, 1745,
+     1870, 2063, 2494, 2496, 2778, 2831, 3313, 3820, 3318, 3227,
+     3222, 3181, 3127, 3114, 3102, 3094, 3083, 3070, 3043, 2951,
+     2947,    0, 2936, 2919, 2926, 2868, 2816, 2797, 2770, 2652,
+     7097, 2629, 2634, 2629, 2553, 7097, 2533, 7097, 3958, 3960,
+     3882, 2382, 3857, 1295, 2643,  772, 1490, 3211, 3599,  942,
+     1965, 2950, 3091, 3458, 3588, 3841, 3990, 2518, 2475, 2462,
+     2384, 2368, 2350, 2349, 2332, 2324,    0, 2289,    0, 2268,
+
+     2265, 2236, 2164,    0,    0, 2129, 2130, 2112, 2102, 2075,
+     2051, 2025, 7097, 2027, 2018, 1972, 1947, 1709, 1986, 2898,
+     1978, 3418, 1947, 3885, 4030, 4039, 4033, 4044, 4049, 3625,
+     1931,    0, 1842, 1816, 1765,    0, 1728, 1728, 1694, 1650,
+        0, 1585, 1556, 1522,    0, 1476, 1429,    0, 7097, 1375,
+     1360, 7097, 7097, 7097, 7097, 1321, 7097,    0, 3846, 3868,
+     3969,    0, 1275, 1198, 1185, 1145,    0, 1117, 1071, 1024,
+        0,    0,  926,    0, 7097,  869,  827,    0,  752,  675,
+        0,  367,  356,   61,    0, 7097, 7097,   23,    0,    0,
+        0,    0,    0, 7097, 5554, 5560, 5570, 5578, 5589, 5593,
+
+     5601, 5608, 5619, 5630, 5641, 5652, 5659, 5670, 5681, 5692,
+     5703, 5714, 5725, 5736, 5747, 5758, 5769, 5780, 5791, 5802,
+     5813, 5824, 5835, 5846, 5857, 5868, 5874, 5884, 5890, 5896,
+     5901, 5909, 5918, 5929, 5935, 5939, 5945, 5952, 5963, 5974,
+     5985, 5996, 6007, 6018, 6029, 6040, 6051, 6062, 6073, 6084,
+     6095, 6106, 6117, 6128, 6139, 6150, 6161, 6172, 6183, 6194,
+     6205, 6211, 6216, 6222, 6231, 6242, 6253, 6260, 6268, 6279,
+     6285, 6291, 6297, 6304, 6315, 6326, 6337, 6348, 6359, 6366,
+     6377, 6388, 6399, 6410, 6421, 6432, 6443, 6454, 6465, 6476,
+     6487, 6498, 6509, 6520, 6531, 6542, 6553, 6564, 6575, 6586,
+
+     6597, 6608, 6619, 6625, 6636, 6647, 6658, 6665, 6673, 6684,
+     6690, 6696, 6703, 6714, 6725, 6736, 6747, 6758, 6765, 6776,
+     6787, 6798, 6809, 6820, 6831, 6842, 6853, 6864, 6875, 6886,
+     6897, 6908, 6919, 6930, 6941, 6952, 6963, 6974, 6985, 6996,
+     7007, 7018, 7024, 7032, 7043, 7049, 7056, 7067, 7074, 7085
     } ;
 
-static yyconst flex_int16_t yy_def[1213] =
+static yyconst flex_int16_t yy_def[1251] =
     {   0,
-     1061,    1,    1,    3, 1061,    5, 1061,    7, 1061,    9,
-     1061,   11,    9,    9, 1061,   15, 1061,   17, 1061,   19,
-     1061,   21, 1061, 1061, 1061, 1061, 1061, 1061, 1062, 1061,
-     1063, 1061, 1061, 1064, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1065, 1065, 1065, 1065,
-     1065, 1065, 1065, 1065, 1061, 1061, 1061, 1061, 1061, 1061,
-       39, 1061, 1061, 1065, 1061, 1061, 1061, 1061, 1061, 1062,
-     1066, 1064, 1061, 1067,   41, 1061, 1061, 1068, 1068, 1068,
-     1061, 1061, 1061, 1069, 1061, 1069, 1070, 1071, 1069, 1069,
-     1069,   91, 1069, 1072, 1072, 1069, 1061, 1061,   41, 1061,
-
-     1073, 1073, 1074, 1074, 1075, 1074, 1074, 1074,  108, 1074,
-     1076, 1076, 1062, 1077, 1061, 1077, 1078, 1079, 1077, 1077,
-     1077,  121, 1077, 1080, 1080, 1081, 1061, 1081, 1082, 1083,
-     1081, 1081, 1081,  133, 1081, 1084, 1084, 1085, 1061, 1085,
-     1086, 1087, 1085, 1085, 1085,  145, 1085, 1088, 1088, 1089,
-     1061, 1089, 1090, 1091, 1089, 1089, 1089,  157, 1089, 1092,
-     1092, 1061, 1061, 1061, 1061, 1062, 1061, 1062, 1093, 1093,
-     1093, 1093, 1093, 1061, 1061, 1061, 1094, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1095, 1095, 1095, 1095, 1095,
-     1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
-
-     1095, 1095, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1096,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1097,
-     1098, 1099, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
-     1098, 1061, 1061, 1061, 1061, 1061, 1061, 1095, 1095, 1095,
-     1095, 1095, 1095, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1100, 1100, 1101, 1102, 1102, 1102, 1102, 1103, 1099, 1103,
-     1103, 1061, 1061, 1104, 1061, 1105, 1104, 1105, 1106, 1104,
-     1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
-     1104, 1107, 1061, 1107, 1104, 1061, 1061, 1061, 1097, 1108,
-
-     1109, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
-     1108, 1108, 1108, 1108, 1110, 1061, 1110, 1111, 1061, 1111,
-     1112, 1112, 1111, 1112, 1113, 1113, 1111, 1111, 1111, 1111,
-     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1114, 1061,
-     1114, 1115, 1061, 1115, 1116, 1116, 1115, 1116, 1117, 1117,
-     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
-     1115, 1115, 1118, 1061, 1118, 1119, 1061, 1119, 1120, 1120,
-     1119, 1120, 1121, 1121, 1119, 1119, 1119, 1119, 1119, 1119,
-     1119, 1119, 1119, 1119, 1119, 1119, 1122, 1061, 1122, 1123,
-     1061, 1124, 1123, 1124, 1125, 1123, 1123, 1123, 1123, 1123,
-
-     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1126, 1061, 1126,
-     1061, 1127, 1127, 1127, 1127, 1061, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
-     1128, 1061, 1061, 1061, 1061, 1061, 1061, 1129, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1130, 1131, 1061,
-     1061, 1061, 1061, 1132, 1133, 1134, 1134, 1134, 1134, 1134,
-     1134, 1134, 1134, 1134, 1061, 1128, 1128, 1061, 1135, 1061,
-     1135, 1136, 1137, 1137, 1137, 1137, 1137, 1138, 1139, 1139,
-
-     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140, 1141, 1142,
-     1143, 1061, 1139, 1061, 1061, 1144, 1145, 1145, 1145, 1145,
-     1145, 1145, 1145, 1145, 1145, 1146, 1147, 1061, 1148, 1148,
-     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1149, 1150, 1151,
-     1152, 1061, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
-     1153, 1154, 1155, 1156, 1157, 1061, 1158, 1158, 1158, 1158,
-     1158, 1158, 1158, 1158, 1158, 1159, 1160, 1161, 1162, 1061,
-     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164,
-     1165, 1166, 1167, 1061, 1061, 1061, 1168, 1168, 1168, 1168,
-     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
-
-     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
-     1168, 1168, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1169, 1061, 1169, 1170, 1061, 1171, 1061,
-     1171, 1172, 1061, 1173, 1173, 1173, 1173, 1173, 1173, 1061,
-     1174, 1175, 1175, 1175, 1175, 1176, 1176, 1177, 1177, 1177,
-     1177, 1178, 1177, 1178, 1179, 1180, 1177, 1180, 1181, 1177,
-     1061,  671, 1177, 1061, 1061, 1182, 1182, 1183, 1183, 1183,
-     1183, 1184, 1183, 1185, 1183, 1061,  686, 1186, 1186, 1186,
-     1186, 1187, 1187, 1186, 1187, 1188, 1188, 1189, 1189, 1186,
-
-     1189, 1190, 1186, 1061,  704, 1191, 1191, 1191, 1191, 1192,
-     1192, 1191, 1192, 1193, 1193, 1194, 1194, 1191, 1194, 1195,
-     1191, 1061,  722, 1196, 1196, 1196, 1196, 1197, 1197, 1196,
-     1197, 1198, 1198, 1199, 1199, 1196, 1199, 1200, 1196, 1061,
-      740, 1201, 1201, 1201, 1201, 1202, 1201, 1202, 1203, 1204,
-     1201, 1204, 1205, 1201, 1061,  755, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1207, 1207, 1207, 1207, 1061, 1061, 1208, 1208, 1208, 1208,
-     1209, 1209, 1210, 1210, 1061,  815, 1061, 1210, 1061, 1061,
-     1211, 1211, 1212, 1212, 1061,  825, 1186, 1186,  704,  704,
-     1191, 1191,  722,  722, 1196, 1196,  740,  740, 1201, 1201,
-      755,  755, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1207, 1207, 1207, 1207, 1208, 1209, 1209,  815,
-      815, 1211, 1211,  825,  825,  704,  704,  722,  722,  740,
-
-      740,  755,  755, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1207, 1207, 1061, 1209, 1209,
-      815,  815, 1211, 1211,  825,  825,  704,  704,  722,  722,
-      740,  740,  755,  755, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1210, 1210, 1212, 1212,
-     1186, 1186, 1191, 1191, 1196, 1196, 1201, 1201, 1206, 1206,
-
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1206, 1206, 1206, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1210, 1186, 1191, 1196, 1201, 1206,
-     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1061, 1061, 1061, 1206, 1206, 1206, 1206, 1206, 1206,
-     1206, 1206, 1061, 1061, 1206, 1206, 1206, 1206, 1206, 1206,
-        0, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061
+     1094,    1,    1,    3, 1094,    5, 1094,    7, 1094,    9,
+     1094,   11,    9,    9, 1094,   15, 1094,   17, 1094,   19,
+     1094,   21, 1094, 1094, 1094, 1094, 1094, 1094, 1095, 1094,
+     1096, 1094, 1094, 1097, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1098, 1098, 1098, 1098,
+     1098, 1098, 1098, 1098, 1094, 1094, 1094, 1094, 1099, 1094,
+     1094, 1094,   39, 1094, 1094, 1098, 1094, 1094, 1099, 1094,
+     1094, 1094, 1094, 1095, 1100, 1097, 1094, 1101,   41, 1094,
+     1094, 1102, 1102, 1102, 1094, 1094, 1099, 1103, 1094, 1103,
+     1104, 1105, 1103, 1103, 1103,   95, 1103, 1106, 1106, 1103,
+
+     1103, 1103, 1094, 1094,   41, 1094, 1107, 1107, 1094, 1108,
+     1108, 1109, 1108, 1108, 1108,  115, 1108, 1110, 1110, 1108,
+     1095, 1111, 1094, 1111, 1112, 1113, 1111, 1111, 1111,  129,
+     1111, 1114, 1114, 1111, 1111, 1115, 1094, 1115, 1116, 1117,
+     1115, 1115, 1115,  143, 1115, 1118, 1118, 1115, 1115, 1119,
+     1094, 1119, 1120, 1121, 1119, 1119, 1119,  157, 1119, 1122,
+     1122, 1119, 1119, 1123, 1094, 1123, 1124, 1125, 1123, 1123,
+     1123,  171, 1123, 1126, 1126, 1123, 1123, 1094, 1094, 1094,
+     1094, 1095, 1094, 1095, 1127, 1127, 1127, 1127, 1127, 1094,
+     1094, 1094, 1128, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+
+     1094, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1130, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1131, 1132, 1133, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1094, 1094, 1094,
+     1094, 1094, 1134, 1094, 1134, 1134, 1134, 1134, 1094, 1129,
+     1129, 1129, 1129, 1129, 1129, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1135, 1135, 1136, 1137, 1137, 1137, 1137,
+     1138, 1133, 1138, 1138, 1094, 1094, 1139, 1094, 1140, 1139,
+
+     1140, 1141, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1142, 1094, 1142, 1139, 1139, 1094,
+     1094, 1094, 1131, 1094, 1143, 1144, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1145,
+     1094, 1145, 1143, 1146, 1094, 1146, 1147, 1147, 1146, 1147,
+     1148, 1148, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+     1146, 1146, 1146, 1146, 1149, 1094, 1149, 1146, 1146, 1150,
+     1094, 1150, 1151, 1151, 1150, 1151, 1152, 1152, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
+     1153, 1094, 1153, 1150, 1150, 1154, 1094, 1154, 1155, 1155,
+
+     1154, 1155, 1156, 1156, 1154, 1154, 1154, 1154, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1157, 1094, 1157, 1154,
+     1154, 1158, 1094, 1159, 1158, 1159, 1160, 1158, 1158, 1158,
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1161,
+     1094, 1161, 1158, 1094, 1162, 1162, 1162, 1162, 1094, 1163,
+     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
+     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
+     1163, 1163, 1163, 1163, 1094, 1094, 1094, 1094, 1094, 1094,
+     1164, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+
+     1165, 1166, 1094, 1094, 1094, 1094, 1167, 1168, 1169, 1169,
+     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170, 1163, 1163,
+     1094, 1171, 1094, 1171, 1172, 1173, 1173, 1173, 1173, 1173,
+     1174, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
+     1176, 1177, 1178, 1179, 1094, 1175, 1094, 1094, 1180, 1181,
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1183,
+     1094, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
+     1185, 1186, 1187, 1188, 1094, 1189, 1189, 1189, 1189, 1189,
+     1189, 1189, 1189, 1189, 1190, 1191, 1192, 1193, 1094, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1195, 1196,
+
+     1197, 1198, 1094, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
+     1199, 1199, 1200, 1201, 1202, 1203, 1094, 1094, 1094, 1204,
+     1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
+     1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
+     1204, 1204, 1204, 1204, 1204, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1205, 1094, 1205, 1206,
+     1094, 1207, 1094, 1207, 1208, 1094, 1209, 1209, 1209, 1209,
+     1209, 1209, 1210, 1211, 1212, 1212, 1212, 1212, 1213, 1213,
+     1214, 1214, 1214, 1214, 1215, 1214, 1215, 1216, 1217, 1214,
+
+     1217, 1218, 1214, 1094,  704, 1214, 1094, 1094, 1219, 1219,
+     1220, 1220, 1220, 1220, 1221, 1220, 1222, 1220, 1094,  719,
+     1223, 1223, 1223, 1223, 1224, 1224, 1223, 1224, 1225, 1225,
+     1226, 1226, 1223, 1226, 1227, 1223, 1094,  737, 1228, 1228,
+     1228, 1228, 1229, 1229, 1228, 1229, 1230, 1230, 1231, 1231,
+     1228, 1231, 1232, 1228, 1094,  755, 1233, 1233, 1233, 1233,
+     1234, 1234, 1233, 1234, 1235, 1235, 1236, 1236, 1233, 1236,
+     1237, 1233, 1094,  773, 1238, 1238, 1238, 1238, 1239, 1238,
+     1239, 1240, 1241, 1238, 1241, 1242, 1238, 1094,  788, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+     1243, 1243, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1244, 1244, 1244, 1244, 1094, 1245, 1246,
+     1246, 1246, 1246, 1247, 1247, 1248, 1248, 1094,  848, 1094,
+     1248, 1094, 1094, 1249, 1249, 1250, 1250, 1094,  858, 1223,
+     1223,  737,  737, 1228, 1228,  755,  755, 1233, 1233,  773,
+      773, 1238, 1238,  788,  788, 1243, 1243, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1094,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1244, 1244, 1244, 1244, 1246,
+     1247, 1247,  848,  848, 1249, 1249,  858,  858,  737,  737,
+      755,  755,  773,  773,  788,  788, 1243, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1244, 1244,
+     1094, 1247, 1247,  848,  848, 1249, 1249,  858,  858,  737,
+      737,  755,  755,  773,  773,  788,  788, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1248,
+     1248, 1250, 1250, 1223, 1223, 1228, 1228, 1233, 1233, 1238,
+     1238, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1248, 1223, 1228,
+     1233, 1238, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1094, 1094, 1094, 1243, 1243, 1243,
+     1243, 1243, 1243, 1243, 1243, 1094, 1094, 1243, 1243, 1243,
+     1243, 1243, 1243,    0, 1094, 1094, 1094, 1094, 1094, 1094,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094
     } ;
 
-static yyconst flex_int16_t yy_nxt[7046] =
+static yyconst flex_int16_t yy_nxt[7163] =
     {   0,
        24,   25,   26,   27,   25,   28,   29,   30,   31,   32,
        33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
@@ -833,778 +856,791 @@
        47,   47,   48,   47,   48,   47,   48,   48,   47,   24,
        47,   47,   47,   47,   47,   47,   47,   49,   47,   50,
        47,   47,   51,   47,   52,   47,   47,   53,   47,   54,
-       47,   47,   47,   55,   56,   58,  464,   59,   58,   24,
-      167,  223,  224,   24,   24,  465,   24,   60,  113,   60,
-       61,   24,   81,  113,   82,   81,   62,   63,   24,   24,
-       41,   42,   42,   42,  178,   41,   42,   42,   42,  162,
-
-      431,  162,  162,  168,  432,   83,  179,  162,  164,  162,
-      162,   47,  175,   47,  163,  170,   47,  171,   47,  172,
-      173,   64,  163,   47,  225,  226,  176,   24,   24,   66,
-       67,   68,   69,   67,   66,   70,   66,   71,   66,   66,
-       72,   66,   73,   66,   73,   74,   66,   75,   76,   76,
-       76,   66,   77,   66,   66,   78,   78,   78,   78,   78,
-       78,   79,   78,   79,   78,   79,   79,   78,   66,   78,
-       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
-       78,   78,   78,   78,   78,   78,   80,   78,   78,   78,
-       78,   78,   66,   66,   84,   84,   85,   86,   84,   84,
-
-       87,   84,   84,   84,   84,   88,   84,   89,   84,   89,
-       90,   84,   91,   92,   92,   92,   84,   93,   84,   84,
-       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,   84,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   95,   94,   94,   94,   94,   94,   84,   84,   24,
-       24,   97,   24,   24,   24,   29,   24,   24,   24,   24,
-       34,   24,   60,   24,   60,   98,   24,   99,  100,  100,
-      100,   24,   63,   24,   24,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,   24,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  102,  101,  101,  101,
-      101,  101,   24,   24,  103,  103,  104,  103,  103,  103,
-       29,  103,  103,  103,  103,  105,  103,  106,  103,  106,
-      107,  103,  108,  109,  109,  109,  103,  110,  103,  103,
-      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
-      111,  111,  111,  103,  111,  111,  111,  111,  111,  111,
-      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
-      111,  112,  111,  111,  111,  111,  111,  103,  103,  114,
-      114,  115,  116,  114,  114,  117,  114,  114,  114,  114,
-
-      118,  114,  119,  114,  119,  120,  114,  121,  122,  122,
-      122,  114,  123,  114,  114,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  124,  124,  114,  124,
-      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  125,  124,  124,  124,
-      124,  124,  114,  114,  126,  126,  127,  128,  126,  126,
-      129,  126,  126,  126,  126,  130,  126,  131,  126,  131,
-      132,  126,  133,  134,  134,  134,  126,  135,  126,  126,
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  136,  136,  126,  136,  136,  136,  136,  136,  136,
-
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  137,  136,  136,  136,  136,  136,  126,  126,  138,
-      138,  139,  140,  138,  138,  141,  138,  138,  138,  138,
-      142,  138,  143,  138,  143,  144,  138,  145,  146,  146,
-      146,  138,  147,  138,  138,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  138,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  149,  148,  148,  148,
-      148,  148,  138,  138,  150,  150,  151,  152,  150,  150,
+       47,   47,   47,   55,   56,   57,  191,   58,   57,  183,
+      194,   67,  497,   68,   67, 1093,   85,  219,   86,   85,
+      192,  498,  195,  100,  220,  101,  100,  258,   59,   60,
+      183,   61,   60,   24,   69,  239,  240,   24,   24,   87,
+
+       24,   62,  184,   62,   63,   24,  102,  241,  242,  292,
+       64,   65,   24,   24,  109,  121,  109,  109,  120, 1092,
+      120,  120,  134,  184,  135,  134,  259,   41,   42,   42,
+       42,  148,  323,  149,  148,   47,  162,   47,  163,  162,
+       47,  176,   47,  177,  176,   66,  464,   47,  243,  244,
+      465,   24,   24,   70,   71,   72,   73,   71,   70,   74,
+       70,   75,   70,   70,   76,   70,   77,   70,   77,   78,
+       70,   79,   80,   80,   80,   70,   81,   70,   70,   82,
+       82,   82,   82,   82,   82,   83,   82,   83,   82,   83,
+       83,   82,   70,   82,   82,   82,   82,   82,   82,   82,
+
+       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
+       84,   82,   82,   82,   82,   82,   70,   70,   88,   88,
+       89,   90,   88,   88,   91,   88,   88,   88,   88,   92,
+       88,   93,   88,   93,   94,   88,   95,   96,   96,   96,
+       88,   97,   88,   88,   98,   98,   98,   98,   98,   98,
+       98,   98,   98,   98,   98,   98,   98,   88,   98,   98,
+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+       98,   98,   98,   98,   98,   99,   98,   98,   98,   98,
+       98,   88,   88,   24,   24,  103,   24,   24,   24,   29,
+       24,   24,   24,   24,   34,   24,   62,   24,   62,  104,
+
+       24,  105,  106,  106,  106,   24,   65,   24,   24,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      107,  107,   24,  107,  107,  107,  107,  107,  107,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      108,  107,  107,  107,  107,  107,   24,   24,  110,  110,
+      111,  110,  110,  110,   29,  110,  110,  110,  110,  112,
+      110,  113,  110,  113,  114,  110,  115,  116,  116,  116,
+      110,  117,  110,  110,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  110,  118,  118,
+      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+
+      118,  118,  118,  118,  118,  119,  118,  118,  118,  118,
+      118,  110,  110,  109, 1091,  109,  109,  186,  121,  187,
+      246,  188,  189,  269, 1090,  269,  269,  292,  345,  346,
+       41,   42,   42,   42,  122,  122,  123,  124,  122,  122,
+      125,  122,  122,  122,  122,  126,  122,  127,  122,  127,
+      128,  122,  129,  130,  130,  130,  122,  131,  122,  122,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  122,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  133,  132,  132,  132,  132,  132,  122,  122,  136,
+
+      136,  137,  138,  136,  136,  139,  136,  136,  136,  136,
+      140,  136,  141,  136,  141,  142,  136,  143,  144,  144,
+      144,  136,  145,  136,  136,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  146,  146,  136,  146,
+      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  147,  146,  146,  146,
+      146,  146,  136,  136,  150,  150,  151,  152,  150,  150,
       153,  150,  150,  150,  150,  154,  150,  155,  150,  155,
-
       156,  150,  157,  158,  158,  158,  150,  159,  150,  150,
       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+
       160,  160,  160,  150,  160,  160,  160,  160,  160,  160,
       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  161,  160,  160,  160,  160,  160,  150,  150,  180,
-     1060,  181,  181,  181,  181,  203,  180,  182,  181,  181,
-      181,  181,  204,  269,  183,  184,  184,  184,  184,  227,
-      228,  185, 1059,  186,  186,  186,  186,  186,  187,  186,
-      186,  186,  186,  186,  186,  186,  299,  186,  188,  189,
-      190,  186,  191,  192,  193,  186,  194,  195,  196,  197,
-
-      186,  198,  186,  199,  200,  201,  186,  186,  186,  202,
-      205,  229,  181,  181,  181,  181,  438,  229,  230,  229,
-     1058,  167,  206,  207,  230,  232,  230,  208,  242,  209,
-      439,  232,  210,  232,  244,  247,  206,  247,  247,  207,
-      205,  230,  181,  181,  181,  181,  269,  209,  269,  229,
-      433,  229,  434,  207,  168,  210,  230,  208,  230,  233,
-      233,  233,  233,  232,  234,  232,  425,  243,  237,  207,
-      211,  426,  212,  821,  245,  213, 1057,  229,  214,  215,
-      216,  217,  218,  219,  230,  229,  220,  269,  221,  222,
-      229,  232,  230,  461,  238,  225,  226,  230,  462,  232,
-
-      247,  164,  247,  247,  232,  180,  229,  181,  181,  181,
-      181, 1056,  230,  230,  246,  235,  277,  893,  211,  269,
-      232,  236,  239,  319,  320,  167,  254,  215,  216,  255,
-      256,  219,  319,  320,  241,  240, 1061,  222,  258,  259,
-      260,  258,  271,  239,  258,  259,  260,  258,  262,  278,
-      262,  459,  262,  262,  186,  248,  300,  186,  168,  186,
-      177,  249,  250,  251,  252,  302,  253,  460,  186,  186,
-      186,  263, 1055,  180,  186,  181,  181,  181,  181,  343,
-      344,  184,  184,  184,  184,  205, 1054,  181,  181,  181,
-      181,  272,  259,  273,  272,  343,  344,  435,  207,  436,
-
-      230,  793,  208,  270,  270,  270,  270,  269,  265,  266,
-      794,  319,  326,  267,  207,  272,  259,  273,  272,  280,
-      323,  281,  281,  281,  281,  282,  282,  282,  282,  319,
-      320,  274,  298,  298,  298,  298,  319,  322,  274,  393,
-      323,  274,  343,  350, 1053,  274,  184,  184,  184,  184,
-      338,  347,  167,  283,  367,  368,  274,  284,  285, 1052,
-      281,  281,  281,  281,  274,  305,  305,  305,  305,  300,
-      286,  287,  394,  324,  296,  288,  300,  289,  297,  300,
-      290,  367,  368,  300,  286,  168,  303,  287,  304,  304,
-      304,  304,  428,  306,  300,  289,  429,  307,  343,  344,
-
-      430,  468,  300,  290,  274,  274,  469,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  362,
-      274,  274,  454,  319,  320,  230,  293,  274,  274,  274,
-      455,  205,  269,  298,  298,  298,  298,  327,  277,  328,
-      328,  328,  328,  274,  207,  343,  344,  456,  208,  367,
-      374,  457,  343,  346,  421,  600,  347,  601,  371,  351,
-      207,  352,  352,  352,  352,  458,  422,  274,  274,  274,
-      274,  278,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  274,  274, 1051,  274,  274,  319,  320,  348,
-      496,  293,  274,  274,  274,  367,  368,  411,  497,  411,
-
-      411,  343,  344,  329,  329,  329,  329,  396,  274,  397,
-      397,  397,  397,  596,  294,  318,  386,  353,  353,  353,
-      353,  269,  318,  444,  444,  318,  447,  447,  447,  318,
-      597,  330,  274,  274,  308,  331,  304,  304,  304,  304,
-      318,  398,  398,  398,  398,  354,  309,  310,  318,  355,
-      269,  311,  162,  312,  162,  162,  313,  516,  367,  370,
-      309,  508,  371,  310,  452,  453,  509,  163,  292,  399,
-      891,  312, 1050,  400,  412,  412,  412,  412,  892,  313,
-      300,  300,  300,  300,  300,  300, 1049,  300,  300,  300,
-      300,  300,  300,  300,  300,  372,  300,  300,  393,  342,
-
-      471,  472,  316,  300,  300,  300,  342,  635,  366,  342,
-     1048,  367,  368,  342,  247,  366,  247,  247,  366,  300,
-      339,  468,  366,  897,  342,  375,  469,  376,  376,  376,
-      376,  394,  342,  366,  413,  413,  413,  413,  947,  470,
-      636,  366,  339,  300,  300,  300,  300,  300,  300,  300,
-      300, 1047,  300,  300,  300,  300,  300,  300,  300,  300,
-      363,  300,  300,  899,  390,  452,  488,  316,  300,  300,
-      300,  390,  503,  503,  390,  367,  368, 1046,  390,  414,
-      414,  414,  414, 1045,  300,  415,  415,  415,  415,  390,
-      317,  377,  377,  377,  377,  521,  521,  390,  184,  184,
-
-      184,  184,  468,  184,  184,  184,  184,  526,  300,  300,
-      319,  320,  428,  300,  416,  387,  429,  177,  901,  378,
-      487,  269,  302,  379,  332, 1044,  328,  328,  328,  328,
-      416,  443,  443,  443,  443, 1043,  333,  334,  229,  319,
-      320,  335,  416,  336,  943,  230,  337,  319,  320,  445,
-      333,  445,  232,  334,  446,  446,  446,  446,  416,  319,
-      320,  336,  258,  259,  260,  258,  506,  506,  506,  337,
-      318,  318,  319,  320,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  408,  318,  318,  903,  229,
-      319,  322,  340,  318,  318,  318,  230,  205,  269,  181,
-
-      181,  181,  181,  232,  987,  229,  229,  319,  320,  318,
-      207, 1042,  230,  230,  208,  476,  476,  476,  476,  232,
-      232,  258,  259,  260,  258,  822,  207,  491,  491,  491,
-      491,  490, 1041,  318,  318,  318,  318,  319,  320,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      292,  318,  318, 1040,  229,  229,  477,  340,  318,  318,
-      318,  230,  230,  229,  229,  229,  230,  988,  232,  232,
-      230,  230,  230,  269,  318,  343,  344,  232,  232,  232,
-      341,  229,  272,  259,  273,  272,  343,  344,  230, 1039,
-      481,  272,  259,  273,  272,  232,  343,  344,  318,  318,
-
-      343,  344,  319,  326,  478,  479,  480,  343,  346,  498,
-     1038,  323,  483,  292,  356,  482,  352,  352,  352,  352,
-      524,  524,  524,  484,  343,  344,  357,  358,  319,  326,
-      315,  359,  895,  360,  367,  368,  361,  323,  319,  322,
-      357,  230,  323,  358,  270,  270,  270,  270,  269,  343,
-      350,  360,  282,  282,  282,  282,  367,  368,  347,  361,
-      342,  342,  343,  344,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  324,  342,  342,  305,  305,
-      305,  305,  364,  342,  342,  342, 1037,  285,  580,  281,
-      281,  281,  281,  581,  282,  282,  282,  282,  948,  342,
-
-      287,  504,  339,  504,  288,  499,  505,  505,  505,  505,
-      367,  368,  522,  985,  522, 1024,  287,  523,  523,  523,
-      523,  499, 1036,  342,  342,  342,  342,  343,  344,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      269,  342,  342,  367,  370,  319,  320,  364,  342,  342,
-      342,  502,  502,  502,  502,  205,  941,  298,  298,  298,
-      298,  292,  499,  944,  342,  319,  320,  949,  207,  269,
-      365,  363,  208,  319,  322,  343,  344,  323,  499,  319,
-      320,  367,  368, 1035,  207,  343,  350,  640,  342,  342,
-      367,  368,  530,  676,  347,  533,  533,  677,  308, 1034,
-
-      304,  304,  304,  304,  380, 1033,  376,  376,  376,  376,
-      324,  310,  531,  575,  575,  311,  381,  382,  319,  320,
-      641,  383,  544,  384,  444,  444,  385,  310,  319,  320,
-      381,  343,  344,  382,  329,  329,  329,  329,  319,  320,
-     1032,  384,  538,  942,  536,  536,  536,  539,  292,  385,
-      366,  366,  367,  368,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366, 1031,  366,  366,  305,  305,
-      305,  305,  388,  366,  366,  366,  617, 1030,  545,  517,
-      520,  520,  520,  520,  618,  319,  320,  619,  950,  366,
-      998,  517,  363,  343,  346,  517,  534,  347,  534,  367,
-
-      374,  535,  535,  535,  535,  343,  346,  517,  371,  347,
-      367,  368,  990,  366,  366,  366,  366,  367,  368,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      348,  366,  366,  988,  319,  320,  230,  388,  366,  366,
-      366,  986,  348,  269,  367,  370,  319,  320,  371, 1023,
-      329,  329,  329,  329,  366,  343,  344,  558,  343,  344,
-      389,  529,  532,  532,  532,  532,  503,  503,  367,  368,
-      811,  547,  547,  529,  550,  550,  550,  529,  366,  366,
-      401,  372,  397,  397,  397,  397,  951,  343,  344,  529,
-      387,  552,  402,  403,  343,  344,  553,  404,  411,  405,
-
-      411,  411,  406,  343,  344, 1022,  402,  367,  368,  403,
-      353,  353,  353,  353,  548,  559,  548,  405, 1021,  549,
-      549,  549,  549,  561,  561,  406,  390,  390, 1020,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  991,  390,  390,  343,  344,  367,  374,  409,  390,
-      390,  390,  578,  578,  578,  371,  521,  521,  367,  368,
-      353,  353,  353,  353,  952,  390,  343,  344,  387,  367,
-      370,  543, 1019,  371,  377,  377,  377,  377,  398,  398,
-      398,  398,  546,  546,  546,  546,  339,  543,  663,  390,
-      390,  390,  390,  543,  390,  390,  390,  390,  390,  390,
-
-      390,  390,  390,  390,  390,  390,  372,  390,  390,  543,
-      367,  368, 1018,  409,  390,  390,  390,  412,  412,  412,
-      412,  664,  367,  368,  575,  575,  377,  377,  377,  377,
-      390,  805,  806,  367,  368, 1017,  410,  557,  564,  564,
-      564,  413,  413,  413,  413,  414,  414,  414,  414,  560,
-      560,  560,  560,  557,  390,  390,  507,  507,  507,  507,
-      557,  415,  415,  415,  415,  507,  507,  507,  367,  368,
-      319,  320,  566,  447,  447,  447,  557,  567, 1016,  507,
-      507,  507,  507,  507,  507,  274,  274, 1015,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-
-      667,  274,  274,  367,  368,  747, 1014,  293,  274,  274,
-      274,  506,  506,  506,  562,  987,  562, 1025,  690,  563,
-      563,  563,  563,  401,  274,  397,  397,  397,  397,  446,
-      446,  446,  446,  668,  817,  818,  403,  576,  748,  576,
-      404, 1013,  577,  577,  577,  577,  319,  320,  274,  274,
-      274,  274,  403,  274,  274,  274,  510,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  511,  511,  511,  511,
-      511,  511,  511,  511,  511,  511,  511,  511,  511,  274,
-      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
-
-      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
-      511,  511,  511,  274,  274,  274,  274, 1012,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-     1011,  274,  274,  398,  398,  398,  398,  293,  274,  274,
-      274,  524,  524,  524,  571,  574,  574,  574,  574, 1010,
-      443,  443,  443,  443,  274, 1009,  571,  585,  985,  585,
-      571,  416,  586,  586,  586,  586,  446,  446,  446,  446,
-      319,  693,  571,  512,  319,  320,  269,  416,  274,  274,
-      525,  525,  525,  525, 1008,  229,  229,  229,  229,  525,
-      525,  525,  230,  230,  230,  230, 1007,  343,  344,  232,
-
-      232,  232,  232,  525,  525,  525,  525,  525,  525,  300,
-      300,  300,  300,  300,  300, 1006,  300,  300,  300,  300,
-      300,  300,  300,  300,  691,  300,  300, 1005,  229,  645,
-      229,  316,  300,  300,  300,  230, 1004,  230,  505,  505,
-      505,  505,  232, 1003,  232,  708,  319,  697,  300,  491,
-      491,  491,  491,  490,  658,  694,  658,  319,  320,  659,
-      659,  659,  659,  505,  505,  505,  505,  523,  523,  523,
-      523,  648,  300,  300,  300,  300,  300,  300,  300,  300,
-      474,  300,  300,  300,  300,  300,  300,  300,  300,  300,
-      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
-
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  300,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  300,  300,  300,
-      300,  300,  300,  300,  300, 1002,  300,  300,  300,  300,
-      300,  300,  300,  300, 1001,  300,  300,  319,  699,  229,
-      230,  316,  300,  300,  300,  229,  230,  269, 1000,  229,
-      953,  300,  230,  232,  408,  637,  230,  999,  300,  232,
-      683,  367,  368,  232,  319,  320,  751,  502,  502,  502,
-      502,  656,  578,  578,  578,  657,  649,  528,  499,  230,
-
-      533,  533,  300,  300,  319,  320,  269,  646,  319,  693,
-      644,  647,  694,  635,  499,  343,  715,  640,  332,  752,
-      328,  328,  328,  328,  712,  520,  520,  520,  520,  726,
-      663,  334,  678,  812,  678,  335,  517,  679,  679,  679,
-      679,  523,  523,  523,  523,  695,  636,  334,  319,  320,
-      641,  984,  517,  319,  320,  343,  344,  945,  343,  344,
-      319,  320,  315,  664,  537,  537,  537,  537,  989,  535,
-      535,  535,  535,  537,  537,  537,  535,  535,  535,  535,
-      667,  367,  368,  577,  577,  577,  577,  537,  537,  537,
-      537,  537,  537,  318,  318,  319,  320,  318,  318,  318,
-
-      318,  318,  318,  318,  318,  318,  318,  318,  709,  318,
-      318,  319,  320,  668,  315,  340,  318,  318,  318,  319,
-      320,  989,  688, 1024,  688,  343,  344,  689,  689,  689,
-      689,  727,  318,  343,  344,  536,  536,  536,  367,  368,
-      946,  547,  547,  983,  706,  315,  706,  343,  711,  707,
-      707,  707,  707,  982,  561,  561,  318,  318,  318,  318,
-      319,  320,  318,  318,  540,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  541,  541,  541,  541,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  318,  541,  541,
-
-      541,  541,  541,  541,  541,  541,  541,  541,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  541,  541,  541,
-      541,  318,  318,  318,  318,  319,  320,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  981,  318,
-      318,  319,  320,  367,  733,  340,  318,  318,  318,  343,
-      344,  980,  730,  343,  344,  343,  717,  532,  532,  532,
-      532,  979,  318,  319,  699,  367,  368,  700,  529,  546,
-      546,  546,  546,  978,  343,  344,  577,  577,  577,  577,
-      543,  542,  367,  729,  529,  747,  318,  318,  343,  344,
-      549,  549,  549,  549,  343,  344,  543,  343,  711,  954,
-
-      701,  712,  356,  408,  352,  352,  352,  352,  343,  344,
-      549,  549,  549,  549,  751,  358,  343,  717,  748,  359,
-      718,  986,  229,  229,  550,  550,  550,  367,  368,  230,
-      230,  358,  343,  344,  713,  977,  232,  232,  724,  269,
-      724,  367,  368,  725,  725,  725,  725,  752,  551,  551,
-      551,  551,  990,  719,  367,  735,  229,  551,  551,  551,
-      367,  729,  230,  230,  730,  586,  586,  586,  586,  269,
-      232,  551,  551,  551,  551,  551,  551,  342,  342,  343,
-      344,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  939,  342,  342,  367,  368,  731,  315,  364,
-
-      342,  342,  342,  367,  368,  804,  300,  367,  368,  976,
-      637,  560,  560,  560,  560,  683,  342,  367,  368,  564,
-      564,  564,  557,  563,  563,  563,  563,  586,  586,  586,
-      586,  319,  320,  563,  563,  563,  563,  997,  557, 1029,
-      342,  342,  342,  342,  343,  344,  342,  342,  554,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  555,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  342,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-
-      555,  555,  555,  555,  555,  342,  342,  342,  342,  343,
-      344,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  975,  342,  342,  574,  574,  574,  574,  364,
-      342,  342,  342,  974,  319,  697,  571,  367,  735,  319,
-      320,  736,  742,  694,  742,  973,  342,  743,  743,  743,
-      743,  972,  571,  229,  229,  659,  659,  659,  659,  971,
-      230,  230,  229,  339,  896,  556,  970,  232,  232,  230,
-      342,  342,  367,  368,  737,  969,  232,  659,  659,  659,
-      659,  679,  679,  679,  679,  968,  380,  967,  376,  376,
-      376,  376,  343,  344,  801,  802,  319,  320,  966,  382,
-
-      846,  319,  320,  383,  319,  320,  803,  679,  679,  679,
-      679,  319,  320,  847,  965,  382,  367,  368,  964,  848,
-      689,  689,  689,  689,  343,  344,  963,  689,  689,  689,
-      689,  992,  565,  565,  565,  565,  319,  320,  962,  827,
-      540,  565,  565,  565,  828,  319,  693,  363,  898,  694,
-      319,  693,  343,  344,  694,  565,  565,  565,  565,  565,
-      565,  366,  366,  367,  368,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  339,  366,  366,  319,
-      697,  961,  695,  388,  366,  366,  366,  695,  694,  343,
-      344,  367,  368,  343,  344,  831,  960,  343,  344,  959,
-
-      366,  554,  367,  368,  956,  707,  707,  707,  707,  707,
-      707,  707,  707,  343,  715,  367,  368,  957,  725,  725,
-      725,  725,  712,  958,  366,  366,  366,  366,  367,  368,
-      366,  366,  568,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  569,  569,  569,  569,  569,  569,  569,  569,
-      569,  569,  569,  569,  569,  366,  569,  569,  569,  569,
-      569,  569,  569,  569,  569,  569,  569,  569,  569,  569,
-      569,  569,  569,  569,  569,  569,  569,  569,  569,  366,
-      366,  366,  366,  367,  368,  366,  366,  366,  366,  366,
-
-      366,  366,  366,  366,  366,  366,  993,  366,  366,  343,
-      344,  343,  715,  388,  366,  366,  366,  955,  367,  368,
-      712,  367,  368,  319,  699,  319,  699,  700,  935,  700,
-      366,  343,  711,  343,  711,  712,  934,  712,  343,  717,
-      343,  717,  718,  933,  718,  932,  367,  368,  862,  570,
-      568,  363,  832,  931,  366,  366,  579,  579,  579,  579,
-      701,  835,  701,  863,  836,  579,  579,  579,  713,  864,
-      713,  743,  743,  743,  743,  719,  930,  719,  994,  579,
-      579,  579,  579,  579,  579,  390,  390,  929,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-
-      928,  390,  390,  367,  368,  367,  733,  409,  390,  390,
-      390,  230,  387,  900,  730,  927,  367,  733,  269,  725,
-      725,  725,  725,  363,  390,  730,  743,  743,  743,  743,
-      408,  902,  938,  229,  938,  938,  319,  320,  229,  938,
-      230,  938,  938,  343,  344,  230,  888,  232,  390,  390,
-      390,  390,  232,  390,  390,  390,  582,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  583,  583,  583,  583,
-      583,  583,  583,  583,  583,  583,  583,  583,  583,  390,
-      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
-
-      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
-      583,  583,  583,  390,  390,  390,  390,  926,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      995,  390,  390,  925,  230,  230,  924,  409,  390,  390,
-      390,  269,  269,  996,  319,  320,  992,  367,  729,  367,
-      729,  730,  997,  730,  390,  367,  735,  367,  735,  736,
-      229,  736,  229,  229,  923,  940,  998,  230,  922,  230,
-      230,  889,  921,  584,  232,  387,  232,  232,  390,  390,
-      507,  507,  507,  507,  731,  920,  731,  919,  387,  507,
-      507,  507,  737,  918,  737,  367,  368,  408,  917,  916,
-
-      936,  885,  883,  507,  507,  507,  507,  507,  507,  274,
-      274,  408,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  915,  274,  274,  985,  229,  914,
-      913,  670,  274,  274,  274,  230,  985,  912,  230,  986,
-      229,  986,  232,  229,  911,  269,  910,  230,  274,  909,
-      230,  908,  230,  907,  232,  906,  905,  232,  904,  269,
-      319,  320,  991,  817, 1026,  937,  343,  344,  993,  887,
-     1027,  805,  274,  274,  274,  274,  882,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  292,
-      274,  274,  292,  292,  292,  292,  293,  274,  274,  274,
-
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  274,  292,  292,  292,  292,  292,  292,
-      671,  292,  292,  292,  672,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  292,  292,  292,  274,  274,  525,
-      525,  525,  525,  881,  229,  229,  880,  879,  525,  525,
-      525,  230,  230,  343,  344,  994,  878,  877,  232,  232,
-      876,  875,  525,  525,  525,  525,  525,  525,  300,  300,
-      300,  300,  300,  300,  874,  300,  300,  300,  300,  300,
-      300,  300,  300,  873,  300,  300,  872,  871,  884,  870,
-      685,  300,  300,  300,  886,  367,  368,  995,  869, 1028,
-
-      367,  368,  996,  868,  867,  866,  865,  300,  861,  860,
-      859,  858,  857,  856,  855,  854,  853,  852,  851,  850,
-      849,  845,  844,  843,  842,  582,  747,  840,  839,  838,
-      834,  300,  300,  300,  300,  300,  300,  300,  300,  830,
-      300,  300,  300,  300,  300,  300,  300,  300,  315,  300,
-      300,  315,  315,  315,  315,  316,  300,  300,  300,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  300,  315,  315,  315,  315,  315,  315,  686,
-      315,  315,  315,  687,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  300,  300,  319,  320,
-
-      826,  474,  824,  823,  820,  819,  816,  510,  663,  814,
-      813,  810,  809,  808,  537,  537,  537,  537,  807,  474,
-      643,  635,  800,  537,  537,  537,  799,  798,  797,  796,
-      795,  792,  791,  790,  789,  788,  787,  537,  537,  537,
-      537,  537,  537,  318,  318,  319,  320,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  786,  318,
-      318,  785,  784,  783,  782,  703,  318,  318,  318,  781,
-      780,  779,  778,  777,  776,  775,  774,  773,  772,  771,
-      770,  769,  318,  768,  767,  766,  765,  764,  763,  762,
-      761,  760,  759,  758,  757,  747,  745,  744,  681,  680,
-
-      675,  674,  673,  663,  661,  660,  318,  318,  318,  318,
-      319,  320,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  339,  318,  318,  339,  339,  339,  339,
-      340,  318,  318,  318,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  339,  318,  339,  339,
-      339,  339,  339,  339,  704,  339,  339,  339,  705,  339,
-      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
-      339,  318,  318,  343,  344,  655,  654,  653,  652,  490,
-      617,  600,  596,  650,  643,  638,  635,  633,  632,  551,
-      551,  551,  551,  631,  630,  629,  628,  627,  551,  551,
-
-      551,  626,  625,  624,  623,  622,  621,  620,  616,  615,
-      614,  613,  551,  551,  551,  551,  551,  551,  342,  342,
-      343,  344,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  612,  342,  342,  611,  610,  609,  608,
-      721,  342,  342,  342,  607,  606,  605,  604,  603,  602,
-      599,  598,  595,  594,  593,  592,  591,  342,  590,  589,
-      588,  587,  573,  572,  393,  519,  518,  515,  514,  513,
-      501,  500,  277,  474,  495,  494,  490,  462,  460,  436,
-      433,  342,  342,  342,  342,  343,  344,  342,  342,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  363,  342,
-
-      342,  363,  363,  363,  363,  364,  342,  342,  342,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  342,  363,  363,  363,  363,  363,  363,  722,
-      363,  363,  363,  723,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  342,  342,  367,  368,
-      431,  486,  422,  485,  474,  269,  473,  467,  466,  463,
-      451,  450,  449,  442,  565,  565,  565,  565,  441,  440,
-      437,  427,  424,  565,  565,  565,  423,  420,  419,  418,
-      167,  407,  393,  391,  314,  269,  295,  565,  565,  565,
-      565,  565,  565,  366,  366,  367,  368,  366,  366,  366,
-
-      366,  366,  366,  366,  366,  366,  366,  366,  291,  366,
-      366,  277,  275,  246,  257,  739,  366,  366,  366,  167,
-      246,  257,  167,  174,  165, 1061,   96,   65,   57, 1061,
-     1061, 1061,  366, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061,  366,  366,  366,  366,
-      367,  368,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  387,  366,  366,  387,  387,  387,  387,
-      388,  366,  366,  366,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  366,  387,  387,
-
-      387,  387,  387,  387,  740,  387,  387,  387,  741,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  366,  366,  579,  579,  579,  579, 1061, 1061, 1061,
-     1061, 1061,  579,  579,  579, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061,  579,  579,  579,  579,
-      579,  579,  390,  390, 1061,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  390, 1061,  390,  390,
-     1061, 1061, 1061, 1061,  754,  390,  390,  390, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  390, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  390,  390,  390,  390, 1061,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  390,  408,  390,  390,  408,  408,  408,  408,  409,
-      390,  390,  390,  408,  408,  408,  408,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  390,  408,  408,  408,
-      408,  408,  408,  755,  408,  408,  408,  756,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
-      390,  390,  274,  274, 1061,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274, 1061,  274,  274,
-
-     1061, 1061, 1061, 1061,  670,  274,  274,  274, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  274, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  274,  274,  274,  274, 1061,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  292,  274,  274,  292,  292,  292,  292,  293,
-      274,  274,  274,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  292,  292,  274,  292,  292,  292,
-      292,  292,  292,  292,  292,  292,  815,  292,  292,  292,
-
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      274,  274,  300,  300,  300,  300,  300,  300, 1061,  300,
-      300,  300,  300,  300,  300,  300,  300, 1061,  300,  300,
-     1061, 1061, 1061, 1061,  685,  300,  300,  300, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  300, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  300,  300,  300,  300,  300,
-      300,  300,  300, 1061,  300,  300,  300,  300,  300,  300,
-      300,  300,  315,  300,  300,  315,  315,  315,  315,  316,
-
-      300,  300,  300,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  300,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  825,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      300,  300,  318,  318,  319,  320,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318, 1061,  318,  318,
-     1061, 1061, 1061, 1061,  703,  318,  318,  318, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  318, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061,  318,  318,  318,  318,  319,
-      320,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  339,  318,  318,  339,  339,  339,  339,  340,
-      318,  318,  318,  339,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  318,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  829,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
-      318,  318,  342,  342,  343,  344,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  342,  342, 1061,  342,  342,
-     1061, 1061, 1061, 1061,  721,  342,  342,  342, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  342, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  342,  342,  342,  342,  343,
-      344,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  342,  363,  342,  342,  363,  363,  363,  363,  364,
-      342,  342,  342,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  342,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  833,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-
-      342,  342,  366,  366,  367,  368,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366, 1061,  366,  366,
-     1061, 1061, 1061, 1061,  739,  366,  366,  366, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  366, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  366,  366,  366,  366,  367,
-      368,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  387,  366,  366,  387,  387,  387,  387,  388,
-      366,  366,  366,  387,  387,  387,  387,  387,  387,  387,
-
-      387,  387,  387,  387,  387,  387,  366,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  837,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      366,  366,  390,  390, 1061,  390,  390,  390,  390,  390,
-      390,  390,  390,  390,  390,  390,  390, 1061,  390,  390,
-     1061, 1061, 1061, 1061,  754,  390,  390,  390, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061,  390, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061,  390,  390,  390,  390, 1061,
-
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  390,  408,  390,  390,  408,  408,  408,  408,  409,
-      390,  390,  390,  408,  408,  408,  408,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  390,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  841,  408,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
-      390,  390,  274,  274, 1061,  274,  274,  274,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  292,  274,  274,
-      292,  292,  292,  292,  293,  274,  274,  274,  292,  292,
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-
-      292,  274,  292,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  890,  292,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  292,  274,  274,  300,  300,  300,
-      300,  300,  300, 1061,  300,  300,  300,  300,  300,  300,
-      300,  300,  315,  300,  300,  315,  315,  315,  315,  316,
-      300,  300,  300,  315,  315,  315,  315,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  300,  315,  315,  315,
-      315,  315,  315,  315,  315,  315,  315,  894,  315,  315,
+      160,  161,  160,  160,  160,  160,  160,  150,  150,  164,
+      164,  165,  166,  164,  164,  167,  164,  164,  164,  164,
+      168,  164,  169,  164,  169,  170,  164,  171,  172,  172,
+      172,  164,  173,  164,  164,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  164,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  175,  174,  174,  174,
+      174,  174,  164,  164,  178,  300,  178,  178,  178,  180,
+
+      178,  178,  196,  458,  197,  197,  197,  197,  459,  179,
+      198,  245,  196,  179,  197,  197,  197,  197,  246, 1089,
+      199,  200,  200,  200,  200,  248,  492,  201,  301,  202,
+      202,  202,  202,  202,  203,  202,  202,  202,  202,  202,
+      202,  202,  493,  202,  204,  205,  206,  202,  207,  208,
+      209,  202,  210,  211,  212,  213,  202,  214,  202,  215,
+      216,  217,  202,  202,  202,  218,  221,  245,  197,  197,
+      197,  197,  471,  245,  246,  245, 1018,  245,  222,  223,
+      246,  248,  246,  224,  246,  225,  472,  248,  226,  248,
+      260,  248,  222,  325,  292,  223,  221,  193,  197,  197,
+
+      197,  197,  327,  225,  280,  245,  280,  280, 1088,  223,
+      254,  226,  246,  224,  255,  249,  249,  249,  249,  248,
+      250,  264,  265,  826,  253,  223,  227,  256,  228,  629,
+      261,  229,  827,  245,  230,  231,  232,  233,  234,  235,
+      246,  245,  236,  246,  237,  238,  630,  248,  246,  262,
+      292,  262,  262,  264,  265,  248,  245,  262,  180,  262,
+      262,  487,  268,  246,  179,  269,  180,  269,  269,  488,
+      248,  251,  179,  294, 1087,  266,  267,  252,  196,  227,
+      197,  197,  197,  197,  183,  257,  425,  276,  231,  232,
+      277,  278,  235,  255,  268, 1094,  345,  346,  238,  280,
+
+      180,  280,  280,  281,  282,  283,  281,  281,  282,  283,
+      281,  264,  265,  202,  270, 1086,  202,  184,  202,  426,
+      271,  272,  273,  274,  466,  275,  467,  202,  202,  202,
+      285,  292,  285,  202,  285,  285,  196,  286,  197,  197,
+      197,  197,  295,  282,  296,  295, 1024,  200,  200,  200,
+      200,  221,  268,  197,  197,  197,  197,  295,  282,  296,
+      295,  345,  346,  468,  223,  469,  246,  549,  224,  293,
+      293,  293,  293,  292,  288,  289,  371,  372, 1085,  290,
+      223,  303,  364,  304,  304,  304,  304,  305,  305,  305,
+      305,  365,  318,  297,  318,  318,  318,  298,  318,  318,
+
+      297,  494,  324,  297,  324,  324,  495,  297,  200,  200,
+      200,  200,  345,  352,  343,  306,  343,  343,  297,  307,
+      308,  349,  304,  304,  304,  304,  297,  322,  322,  322,
+      322,  325,  309,  310,  371,  372,  320,  311,  325,  312,
+      321,  325,  313,  397,  398,  325,  309,  895,  328,  310,
+      329,  329,  329,  329,  371,  378,  325,  312,  368,  345,
+      369,  368,  896,  375,  325,  313,  297,  297,  897,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297, 1084,  297,  297,  330,  330,  330,  330,  316,  297,
+      297,  297,  633,  221,  634,  322,  322,  322,  322,  368,
+
+      345,  369,  368,  397,  398,  297,  223,  345,  346,  315,
+      224,  924,  331,  345,  348,  501,  332,  349,  397,  404,
+      502,  353,  223,  354,  354,  354,  354,  401, 1083,  297,
+      297,  297,  297,  503,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  365,  297,  297,  930,
+      350,  371,  372,  316,  297,  297,  297,  344,  394,  371,
+      395,  394,  345,  346,  344,  371,  374,  344,  501,  375,
+      297,  344,  390,  502,  183, 1082,  317,  454,  355,  355,
+      355,  355,  344,  394,  371,  395,  394,  397,  400,  455,
+      344,  401,  477,  477,  297,  297,  333, 1081,  329,  329,
+
+      329,  329,  376,  480,  480,  480,  356,  184,  334,  335,
+      357,  397,  398,  336,  443,  337,  443,  443,  338,  980,
+      371,  372,  334,  365,  402,  335,  420,  397,  421,  420,
+      485,  486,  416,  337,  379, 1080,  380,  380,  380,  380,
+      529,  338,  325,  325,  325,  325,  325,  325,  530,  325,
+      325,  325,  325,  325,  325,  325,  325, 1079,  325,  325,
+      420,  397,  421,  420,  341,  325,  325,  325,  397,  398,
+      428,  300,  429,  429,  429,  429,  504,  505,  371,  372,
+      391,  325,  405,  932,  406,  406,  406,  406,  443,  423,
+      443,  443,  264,  265,  381,  381,  381,  381,  178, 1020,
+
+      178,  178,  264,  265,  301,  325,  325,  325,  325,  325,
+      325,  325,  325,  179,  325,  325,  325,  325,  325,  325,
+      325,  325,  382,  325,  325, 1078,  383,  425,  370,  341,
+      325,  325,  325,  489,  396,  370,  246,  490,  370,  397,
+      398,  396,  370,  292,  396,  315,  325,  444,  396,  444,
+      444,  491,  342,  370,  292,  407,  407,  407,  407,  396,
+      426,  370,  445,  445,  445,  445, 1077,  396,  264,  265,
+      325,  325,  345,  346,  430,  430,  430,  430,  446,  446,
+      446,  446,  925,  408,  264,  265,  358,  409,  354,  354,
+      354,  354,  447,  447,  447,  447,  668,  422,  359,  360,
+
+      485,  521,  431,  361,  422,  362,  432,  422,  363,  536,
+      536,  422,  359, 1076,  245,  360,  448,  448,  448,  448,
+     1075,  246,  422,  362,  200,  200,  200,  200,  248,  669,
+      422,  363,  344,  344,  345,  346,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  673,  344,  344,
+      269,  245,  269,  269,  366,  344,  344,  344,  246,  221,
+      292,  197,  197,  197,  197,  248,  200,  200,  200,  200,
+      461,  344,  223, 1074,  462,  245,  224,  449,  463,  478,
+      674,  478,  246,  976,  479,  479,  479,  479,  223,  248,
+      539,  539,  539,  449, 1019,  344,  344,  344,  344,  345,
+
+      346,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  292,  344,  344,  264,  265,  512,  513,  366,
+      344,  344,  344,  476,  476,  476,  476,  461,  554,  554,
+      246,  462, 1073,  245,  449,  520,  344,  292,  345,  346,
+      246,  245,  367,  509,  509,  509,  509,  248,  246,  541,
+      449,  245,  245,  417,  542,  248,  934,  245,  246,  246,
+      344,  344,  371,  372,  246,  248,  248, 1072,  245,  501,
+      245,  248,  518,  531,  559,  246,  384,  246,  380,  380,
+      380,  380,  248,  280,  248,  280,  280,  514,  385,  386,
+      340,  510,  928,  387,  262,  388,  262,  262,  389,  345,
+
+      346,  511,  385,  345,  346,  386, 1071,  515,  318,  179,
+      318,  318,  517,  388,  345,  348,  516,  281,  282,  283,
+      281,  389,  370,  370,  371,  372,  370,  370,  370,  370,
+      370,  370,  370,  370,  370,  370,  370, 1070,  370,  370,
+      281,  282,  283,  281,  392,  370,  370,  370,  524,  524,
+      524,  524,  523,  246,  345,  346,  293,  293,  293,  293,
+      292,  370,  295,  282,  296,  295,  295,  282,  296,  295,
+      305,  305,  305,  305,  537,  324,  537,  324,  324,  538,
+      538,  538,  538,  371,  372,  370,  370,  370,  370,  371,
+      372,  370,  370,  370,  370,  370,  370,  370,  370,  370,
+
+      370,  370, 1069,  370,  370,  330,  330,  330,  330,  392,
+      370,  370,  370, 1018,  308, 1057,  304,  304,  304,  304,
+      371,  372,  305,  305,  305,  305,  370,  310,  557,  557,
+      557,  311,  393,  532,  535,  535,  535,  535,  325,  345,
+      352,  613,  193,  310, 1068,  532,  614,  327,  349,  532,
+      370,  370,  397,  398,  343,  292,  343,  343,  345,  352,
+      221,  532,  322,  322,  322,  322,  410,  349,  406,  406,
+      406,  406, 1067,  223,  371,  372,  292,  224,  411,  412,
+      345,  346,  854,  413, 1066,  414,  345,  346,  415,  223,
+      981,  555,  411,  555,  365,  412,  556,  556,  556,  556,
+
+      709,  345,  348,  414,  710,  349,  368,  345,  369,  368,
+     1065,  415,  396,  396,  397,  398,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  563,  396,  396,
+      371,  374,  292,  564,  418,  396,  396,  396,  350,  333,
+      292,  329,  329,  329,  329,  974,  330,  330,  330,  330,
+      315,  396,  335,  345,  346,  977,  336,  550,  345,  348,
+      371,  372,  349,  368,  345,  369,  368,  855,  335,  355,
+      355,  355,  355,  550, 1064,  396,  396,  396,  396,  397,
+      398,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396, 1063,  396,  396,  350,  345,  346,  879,  418,
+
+      396,  396,  396,  553,  553,  553,  553,  345,  346,  371,
+      378,  880,  566,  566,  550,  982,  396,  881,  375,  391,
+      345,  346,  419,  355,  355,  355,  355,  696,  371,  374,
+      550,  567,  375,  567,  562, 1031,  568,  568,  568,  568,
+      396,  396,  433,  700,  429,  429,  429,  429,  371,  374,
+      562, 1023,  375,  975,  434,  435,  345,  346,  315,  436,
+      697,  437,  371,  372,  438,  376,  345,  346,  434, 1025,
+      571,  435,  569,  569,  569,  572,  701,  371,  378,  437,
+      397,  398, 1021,  371,  372,  376,  375,  438,  422,  422,
+     1019,  422,  422,  422,  422,  422,  422,  422,  422,  422,
+
+      422,  422,  422, 1056,  422,  422,  345,  346,  292,  577,
+      441,  422,  422,  422,  365,  371,  372,  780,  371,  372,
+      397,  398,  565,  565,  565,  565, 1055,  422,  371,  372,
+      578,  580,  580,  562,  381,  381,  381,  381,  926,  371,
+      372,  397,  398,  585,  381,  381,  381,  381,  586,  562,
+      781,  422,  422,  422,  422,  576,  422,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  422,  422, 1054,  422,
+      422,  576,  371,  372, 1053,  441,  422,  422,  422,  394,
+      371,  395,  394, 1052,  371,  372,  397,  400,  579,  579,
+      579,  579,  422,  371,  372,  581, 1051,  581,  442,  576,
+
+      582,  582,  582,  582,  394,  371,  395,  394,  983,  583,
+      583,  583,  391,  397,  404,  576,  422,  422,  540,  540,
+      540,  540,  401,  397,  404,  397,  398,  540,  540,  540,
+      397,  400,  401, 1050,  401,  784,  397,  400,  397,  398,
+      401,  540,  540,  540,  540,  540,  540,  297,  297, 1049,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297, 1048,  297,  297,  397,  398,  402,  785,  316,
+      297,  297,  297,  402,  397,  398,  397,  398,  608,  608,
+     1047,  407,  407,  407,  407,  591,  297,  595, 1046,  595,
+      594,  594,  596,  596,  596,  596,  397,  398,  477,  477,
+
+      599,  420,  397,  421,  420,  600,  420,  397,  421,  420,
+      297,  297,  297,  297, 1045,  297,  297,  297,  543,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  544,  544,
+      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  297,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  297,  297,  297,  297, 1044,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  978,  297,  297,  397,  398,  340,  650,  316,
+
+      297,  297,  297,  397,  398,  979,  651,  397,  398,  652,
+      340,  407,  407,  407,  407, 1043,  297,  430,  430,  430,
+      430, 1042,  590,  597,  597,  597,  536,  536,  430,  430,
+      430,  430,  611,  611,  611,  545,  264,  265,  590,  604,
+      297,  297,  558,  558,  558,  558,  443, 1041,  443,  443,
+      592,  558,  558,  558,  609,  604,  609,  554,  554,  610,
+      610,  610,  610,  608,  608,  558,  558,  558,  558,  558,
+      558,  325,  325,  325,  325,  325,  325, 1040,  325,  325,
+      325,  325,  325,  325,  325,  325, 1018,  325,  325,  397,
+      398, 1039,  683,  341,  325,  325,  325,  246,  433, 1038,
+
+      429,  429,  429,  429,  292,  593,  593,  593,  593, 1037,
+      325,  435,  480,  480,  480,  436,  590,  444, 1036,  444,
+      444,  445,  445,  445,  445,  838,  839,  435,  446,  446,
+      446,  446,  590, 1035,  325,  325,  325,  325,  325,  325,
+      325,  325,  507,  325,  325,  325,  325,  325,  325,  325,
+      325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
+      325,  325,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  325,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  325,
+
+      325,  325,  325,  325,  325,  325,  325, 1034,  325,  325,
+      325,  325,  325,  325,  325,  325, 1033,  325,  325,  607,
+      607,  607,  607,  341,  325,  325,  325,  539,  539,  539,
+      604,  447,  447,  447,  447,  448,  448,  448,  448,  984,
+      325,  985,  618,  417,  618,  417,  604,  619,  619,  619,
+      619,  476,  476,  476,  476,  479,  479,  479,  479,  561,
+      850,  851,  449, 1032,  325,  325,  345,  346,  479,  479,
+      479,  479,  245, 1017,  245,  557,  557,  557,  449,  246,
+      358,  246,  354,  354,  354,  354,  248,  245,  248,  245,
+      668,  245,  245,  360,  246,  246,  246,  361,  246,  246,
+
+      245,  248,  292,  248, 1016,  248,  248,  246,  245,  360,
+      345,  346,  325,  246,  248,  246,  670,  345,  346,  677,
+      292,  716,  248,  669,  345,  346,  570,  570,  570,  570,
+      921,  678,  245,  566,  566,  570,  570,  570,  679,  246,
+      345,  346,  680,  673,  689,  682,  248, 1021,  690,  570,
+      570,  570,  570,  570,  570,  344,  344,  345,  346,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+     1015,  344,  344,  681,  724, 1014,  674,  366,  344,  344,
+      344,  524,  524,  524,  524,  523,  538,  538,  538,  538,
+      691, 1013,  691,  315,  344,  692,  692,  692,  692,  538,
+
+      538,  538,  538,  711, 1012,  711,  345,  726,  712,  712,
+      712,  712,  556,  556,  556,  556,  345,  346,  344,  344,
+      344,  344,  345,  346,  344,  344,  573,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  574,  574,  574,  574,
+      574,  574,  574,  574,  574,  574,  574,  574,  574,  344,
+      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
+      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
+      574,  574,  574,  344,  344,  344,  344,  345,  346,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+
+      696,  344,  344,  535,  535,  535,  535,  366,  344,  344,
+      344,  345,  346, 1011,  532,  553,  553,  553,  553,  556,
+      556,  556,  556,  986,  344,  700,  550,  440,  345,  346,
+      532,  345,  730,  697,  371,  372,  345,  346, 1010,  721,
+      727,  721,  550,  575,  722,  722,  722,  722,  344,  344,
+      371,  372,  565,  565,  565,  565,  345,  346,  701,  723,
+      611,  611,  611,  562,  384, 1009,  380,  380,  380,  380,
+      345,  346,  568,  568,  568,  568,  987,  386,  245,  562,
+      440,  387,  345,  346,  742,  246,  568,  568,  568,  568,
+      371,  372,  248,  386,  371,  372,  371,  748,  569,  569,
+
+      569,  739, 1020,  739, 1058,  745,  740,  740,  740,  740,
+      584,  584,  584,  584,  371,  372,  397,  398, 1008,  584,
+      584,  584,  345,  726,  371,  372,  727,  780,  345,  732,
+      580,  580,  733,  584,  584,  584,  584,  584,  584,  370,
+      370,  371,  372,  370,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370, 1026,  370,  370,  371,  372,  728,
+      781,  392,  370,  370,  370,  734,  760,  345,  732,  371,
+      372, 1007,  741,  579,  579,  579,  579, 1006,  370,  371,
+      372,  397,  766, 1005,  576,  582,  582,  582,  582, 1004,
+      763,  610,  610,  610,  610,  582,  582,  582,  582,  391,
+
+      576, 1003,  370,  370,  370,  370,  371,  372,  370,  370,
+      587,  370,  370,  370,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
+      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
+      588,  588,  588,  370,  588,  588,  588,  588,  588,  588,
+      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
+      588,  588,  588,  588,  588,  588,  588,  370,  370,  370,
+      370,  371,  372,  370,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370, 1002,  370,  370,  371,  372,  397,
+      398,  392,  370,  370,  370, 1027,  345,  346,  397,  398,
+
+      573,  397,  398,  583,  583,  583,  371,  744,  370,  784,
+      745, 1001,  371,  750,  594,  594,  751,  596,  596,  596,
+      596,  397,  762,  246,  245,  763, 1000,  589,  397,  398,
+      292,  246,  370,  370,  397,  398,  999,  759,  248,  757,
+      391,  757,  785,  746,  758,  758,  758,  758,  410,  752,
+      406,  406,  406,  406,  998,  397,  398,  844,  764,  997,
+      325,  412,  397,  768,  670,  413,  769,  397,  398,  716,
+      996,  593,  593,  593,  593,  397,  398,  412,  397,  398,
+      371,  372,  590,  596,  596,  596,  596,  610,  610,  610,
+      610,  597,  597,  597,  598,  598,  598,  598,  590,  770,
+
+      371,  744,  245,  598,  598,  598,  775,  440,  775,  246,
+      936,  776,  776,  776,  776, 1022,  248,  598,  598,  598,
+      598,  598,  598,  396,  396,  397,  398,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  995,  396,
+      396,  607,  607,  607,  607,  418,  396,  396,  396,  371,
+      372,  837,  604,  619,  619,  619,  619,  619,  619,  619,
+      619,  340,  396,  692,  692,  692,  692,  994,  604,  692,
+      692,  692,  692,  712,  712,  712,  712,  712,  712,  712,
+      712,  371,  750,  397,  398,  993,  396,  396,  396,  396,
+      397,  398,  396,  396,  601,  396,  396,  396,  396,  396,
+
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  602,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  602,  602,  396,  602,  602,
+      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+      602,  396,  396,  396,  396,  397,  398,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  992,  396,
+      396,  988,  245,  245,  968,  418,  396,  396,  396,  246,
+      246,  245,  345,  346,  397,  762,  248,  248,  246,  246,
+      345,  346,  396,  345,  346,  248,  292,  967,  722,  722,
+
+      722,  722,  966,  345,  730,  965,  722,  722,  722,  722,
+      964,  603,  727,  834,  835,  963,  396,  396,  612,  612,
+      612,  612, 1022,  845, 1057,  836,  962,  612,  612,  612,
+      345,  346,  961,  371,  372,  960,  860,  587,  959,  371,
+      372,  612,  612,  612,  612,  612,  612,  422,  422,  958,
+      422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
+      422,  422, 1028,  422,  422,  345,  730,  397,  398,  441,
+      422,  422,  422,  861,  727,  371,  372,  345,  726,  371,
+      372,  727,  864,  397,  768,  957,  422,  397,  398,  838,
+      265,  740,  740,  740,  740,  740,  740,  740,  740,  371,
+
+      748,  345,  346,  758,  758,  758,  758,  417,  745,  956,
+      422,  422,  422,  422,  728,  422,  422,  422,  615,  422,
+      422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  422,  422,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  422,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  422,  422,  422,  422,  955,
+      422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
+      422,  422, 1029,  422,  422,  371,  372,  371,  748,  441,
+
+      422,  422,  422, 1023,  397,  398,  745,  397,  398,  345,
+      726,  345,  732,  727,  954,  733,  422,  345,  732,  371,
+      744,  733,  953,  745,  371,  744,  371,  750,  745, 1030,
+      751, 1062,  397,  398,  952,  617,  601,  417,  865,  951,
+      422,  422,  540,  540,  540,  540,  728,  868,  734,  340,
+      869,  540,  540,  540,  734,  246,  746,  776,  776,  776,
+      776,  746,  292,  752,  950,  540,  540,  540,  540,  540,
+      540,  297,  297,  949,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  948,  297,  297,  947,
+      397,  398,  922,  703,  297,  297,  297,  776,  776,  776,
+
+      776,  371,  750,  397,  766,  751,  758,  758,  758,  758,
+      297,  946,  763,  397,  766,  345,  346,  365,  929,  371,
+      372,  945,  763,  371,  372,  391,  931,  397,  398,  397,
+      398,  417,  933,  944,  297,  297,  297,  297,  752,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  315,  297,  297,  315,  315,  315,  315,  316,  297,
+      297,  297,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  297,  315,  315,  315,  315,
+      315,  315,  704,  315,  315,  315,  705,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  297,
+
+      297,  558,  558,  558,  558,  440,  935,  943,  245,  942,
+      558,  558,  558,  397,  762,  246,  941,  763,  940,  397,
+      762,  939,  248,  763,  558,  558,  558,  558,  558,  558,
+      325,  325,  325,  325,  325,  325,  938,  325,  325,  325,
+      325,  325,  325,  325,  325, 1030,  325,  325,  345,  346,
+      764,  246,  718,  325,  325,  325,  764,  919,  292,  245,
+      245, 1019,  937,  989,  397,  768,  246,  246,  769,  325,
+      371,  372,  246,  248,  248,  971,  990,  971,  971,  292,
+      850,  972,  991,  971,  920,  971,  971,  345,  346, 1024,
+      440, 1059,  915,  325,  325,  325,  325,  325,  325,  325,
+
+      325,  770,  325,  325,  325,  325,  325,  325,  325,  325,
+      340,  325,  325,  340,  340,  340,  340,  341,  325,  325,
+      325,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  325,  340,  340,  340,  340,  340,
+      340,  719,  340,  340,  340,  720,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  325,  325,
+      345,  346, 1018,  246, 1019,  914,  245,  913,  245,  912,
+      292,  397,  398,  246,  911,  246,  570,  570,  570,  570,
+      248,  910,  248,  245,  245,  570,  570,  570,  397,  768,
+      246,  246,  769,  973, 1031,  909,  908,  248,  248,  570,
+
+      570,  570,  570,  570,  570,  344,  344,  345,  346,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      969,  344,  344,  907,  245,  770,  916,  736,  344,  344,
+      344,  246,  345,  346, 1025,  371,  372, 1027,  248,  440,
+      906,  371,  372, 1026,  344, 1060,  397,  398, 1028,  905,
+     1061,  397,  398, 1029,  904,  903,  902,  901,  900,  899,
+      898,  894,  893,  918,  892,  891,  890,  889,  344,  344,
+      344,  344,  345,  346,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  365,  344,  344,  365,  365,
+      365,  365,  366,  344,  344,  344,  365,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  344,
+      365,  365,  365,  365,  365,  365,  737,  365,  365,  365,
+      738,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  344,  344,  371,  372,  888,  887,  886,
+      885,  884,  883,  882,  878,  877,  876,  875,  615,  780,
+      873,  584,  584,  584,  584,  872,  245,  871,  245,  867,
+      584,  584,  584,  246,  863,  246,  859,  507,  857,  856,
+      248,  853,  248,  852,  584,  584,  584,  584,  584,  584,
+      370,  370,  371,  372,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370,  370,  970,  370,  370,  849,  543,
+
+      917,  696,  754,  370,  370,  370,  847,  846,  843,  842,
+      841,  840,  507,  676,  668,  833,  832,  831,  830,  370,
+      829,  828,  825,  824,  823,  822,  821,  820,  819,  818,
+      817,  816,  815,  814,  813,  812,  811,  810,  809,  808,
+      807,  806,  805,  370,  370,  370,  370,  371,  372,  370,
+      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
+      391,  370,  370,  391,  391,  391,  391,  392,  370,  370,
+      370,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  370,  391,  391,  391,  391,  391,
+      391,  755,  391,  391,  391,  756,  391,  391,  391,  391,
+
+      391,  391,  391,  391,  391,  391,  391,  391,  370,  370,
+      397,  398,  804,  803,  802,  801,  800,  799,  798,  797,
+      796,  795,  794,  793,  792,  791,  598,  598,  598,  598,
+      790,  780,  778,  777,  714,  598,  598,  598,  713,  708,
+      707,  706,  696,  694,  693,  688,  687,  686,  685,  598,
+      598,  598,  598,  598,  598,  396,  396,  397,  398,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      523,  396,  396,  650,  633,  629,  676,  772,  396,  396,
+      396,  671,  668,  666,  665,  664,  663,  662,  661,  660,
+      659,  658,  657,  656,  396,  655,  654,  653,  649,  648,
+
+      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
+      637,  636,  635,  632,  631,  628,  627,  626,  396,  396,
+      396,  396,  397,  398,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  417,  396,  396,  417,  417,
+      417,  417,  418,  396,  396,  396,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  396,
+      417,  417,  417,  417,  417,  417,  773,  417,  417,  417,
+      774,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  417,  396,  396,  612,  612,  612,  612,  625,
+      624,  623,  622,  621,  612,  612,  612,  620,  606,  605,
+
+      425,  552,  551,  548,  547,  546,  534,  533,  612,  612,
+      612,  612,  612,  612,  422,  422,  300,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  422,  422,  422,  507,
+      422,  422,  528,  527,  523,  495,  787,  422,  422,  422,
+      493,  469,  466,  464,  519,  455,  507,  292,  506,  500,
+      499,  496,  484,  422,  483,  482,  475,  474,  473,  470,
+      460,  457,  456,  453,  452,  451,  183,  439,  425,  423,
+      339,  292,  319,  314,  300,  298,  279,  422,  422,  422,
+      422,  183,  422,  422,  422,  422,  422,  422,  422,  422,
+      422,  422,  422,  422,  440,  422,  422,  440,  440,  440,
+
+      440,  441,  422,  422,  422,  440,  440,  440,  440,  440,
+      440,  440,  440,  440,  440,  440,  440,  440,  422,  440,
+      440,  440,  440,  440,  440,  788,  440,  440,  440,  789,
+      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
+      440,  440,  422,  422,  297,  297,  279,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  183,
+      297,  297,  190,  181, 1094, 1094,  703,  297,  297,  297,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094,  297, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094,  297,  297,  297,
+      297, 1094,  297,  297,  297,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  315,  297,  297,  315,  315,  315,
+      315,  316,  297,  297,  297,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  297,  315,
+      315,  315,  315,  315,  315,  315,  315,  315,  848,  315,
       315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
-      300,  300,  166, 1061,  166,  166,  166,  166,  166,  166,
+      315,  315,  297,  297,  325,  325,  325,  325,  325,  325,
+     1094,  325,  325,  325,  325,  325,  325,  325,  325, 1094,
+      325,  325, 1094, 1094, 1094, 1094,  718,  325,  325,  325,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094,  325, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094,  325,  325,  325,
+      325,  325,  325,  325,  325, 1094,  325,  325,  325,  325,
+      325,  325,  325,  325,  340,  325,  325,  340,  340,  340,
+      340,  341,  325,  325,  325,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  325,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  858,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+
+      340,  340,  325,  325,  344,  344,  345,  346,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344, 1094,
+      344,  344, 1094, 1094, 1094, 1094,  736,  344,  344,  344,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094,  344, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094,  344,  344,  344,
+      344,  345,  346,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  365,  344,  344,  365,  365,  365,
+      365,  366,  344,  344,  344,  365,  365,  365,  365,  365,
 
-      166,  166,  166,  169, 1061, 1061,  169,  169,  177, 1061,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  231,
-      231,  231,  231,  231,  231,  231,  231,  261,  261,  261,
-      261,  264, 1061,  264, 1061,  264,  264,  264,  264,  268,
-      268,  268,  268,  268,  268,  268,  274, 1061,  274,  274,
-      274,  274,  274,  274,  274,  274,  274,  276, 1061,  276,
-      276,  276,  276,  276,  276,  276,  276,  276,  279, 1061,
-      279,  279,  279,  279,  279,  279,  279,  279,  279,  292,
-     1061,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-      230,  230,  230,  230,  230,  230,  230,  300,  300, 1061,
-
-      300,  300,  300,  300,  300,  300,  300,  300,  301,  301,
-      301,  301,  301,  301,  301,  301,  301,  301,  301,  315,
-      315, 1061,  315,  315,  315,  315,  315,  315,  315,  315,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  321,  321,  321,  321,  321,  321,  321,  321,  321,
-      321,  321,  325,  325,  325,  325,  325,  325,  325,  325,
-      325,  325,  325,  339,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  339,  342,  342,  342,  342,  342,  342,
-      342,  342,  342,  342,  342,  345,  345,  345,  345,  345,
-      345,  345,  345,  345,  345,  345,  349,  349,  349,  349,
-
-      349,  349,  349,  349,  349,  349,  349,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  369,
-      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
-      373,  373,  373,  373,  373,  373,  373,  373,  373,  373,
-      373,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  390, 1061,  390,  390,  390,  390,  390,  390,
-      390,  390,  390,  392, 1061,  392,  392,  392,  392,  392,
-      392,  392,  392,  392,  395, 1061,  395,  395,  395,  395,
-      395,  395,  395,  395,  395,  408, 1061,  408,  408,  408,
-
-      408,  408,  408,  408,  408,  408,  169, 1061, 1061,  169,
-      169,  177, 1061,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  417, 1061, 1061,  417,  417,  417,  448, 1061,
-     1061,  448,  230,  230,  230,  230,  230,  230,  230,  231,
-      231,  231,  231,  231,  231,  231,  231,  475, 1061, 1061,
-     1061, 1061,  475,  475,  475,  475,  489,  489,  489,  489,
-      489,  489,  492,  492,  492,  492,  493, 1061,  493,  493,
-      493,  493,  268,  268,  268,  268,  268,  268,  268,  274,
-     1061,  274,  274,  274,  274,  274,  274,  274,  274,  274,
-      276, 1061,  276,  276,  276,  276,  276,  276,  276,  276,
-
-      276,  279, 1061,  279,  279,  279,  279,  279,  279,  279,
-      279,  279,  292, 1061,  292,  292,  292,  292,  292,  292,
-      292,  292,  292,  300,  300, 1061,  300,  300,  300,  300,
-      300,  300,  300,  300,  301,  301,  301,  301,  301,  301,
-      301,  301,  301,  301,  301,  315,  315, 1061,  315,  315,
-      315,  315,  315,  315,  315,  315,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  321,  321,  321,
-      321,  321,  321,  321,  321,  321,  321,  321,  325,  325,
-      325,  325,  325,  325,  325,  325,  325,  325,  325,  339,
-      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
-
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  345,  345,  345,  345,  345,  345,  345,  345,  345,
-      345,  345,  349,  349,  349,  349,  349,  349,  349,  349,
-      349,  349,  349,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  369,  369,  369,  369,  369,
-      369,  369,  369,  369,  369,  369,  373,  373,  373,  373,
-      373,  373,  373,  373,  373,  373,  373,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  387,  387,  390, 1061,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  392,
-
-     1061,  392,  392,  392,  392,  392,  392,  392,  392,  392,
-      395, 1061,  395,  395,  395,  395,  395,  395,  395,  395,
-      395,  408, 1061,  408,  408,  408,  408,  408,  408,  408,
-      408,  408,  169, 1061, 1061,  169,  169,  417, 1061, 1061,
-      417,  417,  417,  448, 1061, 1061,  448,  634, 1061,  634,
-      634,  634,  634,  634,  634,  634,  634,  634,  637, 1061,
-      637,  637,  637,  637,  637,  637,  637,  637,  637,  639,
-     1061,  639,  639,  639,  639,  639,  639,  639,  639,  639,
-      642,  642,  642,  642,  642,  642,  642,  231,  231,  231,
-      231,  231,  231,  231,  231,  489,  489,  489,  489,  489,
-
-      489,  651, 1061,  651,  651,  651,  651,  493, 1061,  493,
-      493,  493,  493,  268,  268,  268,  268,  268,  268,  268,
-      274, 1061,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  662, 1061,  662,  662,  662,  662,  662,  662,  662,
-      662,  662,  665, 1061,  665,  665,  665,  665,  665,  665,
-      665,  665,  665,  666, 1061,  666,  666,  666,  666,  666,
-      666,  666,  666,  666,  669, 1061,  669,  669,  669,  669,
-      669,  669,  669,  669,  669,  230,  230,  230,  230,  230,
-      230,  230,  300,  300, 1061,  300,  300,  300,  300,  300,
-      300,  300,  300,  682,  682,  682,  682,  682,  682,  682,
-
-      682,  682,  682,  682,  684,  684, 1061,  684,  684,  684,
-      684,  684,  684,  684,  684,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  692,  692,  696,  696,  696,
-      696,  696,  696,  696,  696,  696,  696,  696,  698,  698,
-      698,  698,  698,  698,  698,  698,  698,  698,  698,  702,
-      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
-      342,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      710,  710,  714,  714,  714,  714,  714,  714,  714,  714,
-
-      714,  714,  714,  716,  716,  716,  716,  716,  716,  716,
-      716,  716,  716,  716,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  728,  728,  732,  732,  732,
-      732,  732,  732,  732,  732,  732,  732,  732,  734,  734,
-      734,  734,  734,  734,  734,  734,  734,  734,  734,  738,
-      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
-      390, 1061,  390,  390,  390,  390,  390,  390,  390,  390,
-      390,  746, 1061,  746,  746,  746,  746,  746,  746,  746,
-
-      746,  746,  749, 1061,  749,  749,  749,  749,  749,  749,
-      749,  749,  749,  750, 1061,  750,  750,  750,  750,  750,
-      750,  750,  750,  750,  753, 1061,  753,  753,  753,  753,
-      753,  753,  753,  753,  753,  417, 1061, 1061,  417,  417,
-      417,  634, 1061,  634,  634,  634,  634,  634,  634,  634,
-      634,  634,  637, 1061,  637,  637,  637,  637,  637,  637,
-      637,  637,  637,  639, 1061,  639,  639,  639,  639,  639,
-      639,  639,  639,  639,  642,  642,  642,  642,  642,  642,
-      642,  231,  231,  231,  231,  231,  231,  231,  231,  651,
-     1061,  651,  651,  651,  651,  493, 1061,  493,  493,  493,
-
-      493,  268,  268,  268,  268,  268,  268,  268,  274, 1061,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  662,
-     1061,  662,  662,  662,  662,  662,  662,  662,  662,  662,
-      665, 1061,  665,  665,  665,  665,  665,  665,  665,  665,
-      665,  666, 1061,  666,  666,  666,  666,  666,  666,  666,
-      666,  666,  669, 1061,  669,  669,  669,  669,  669,  669,
-      669,  669,  669,  230,  230,  230,  230,  230,  230,  230,
-      300,  300, 1061,  300,  300,  300,  300,  300,  300,  300,
-      300,  682,  682,  682,  682,  682,  682,  682,  682,  682,
-      682,  682,  684,  684, 1061,  684,  684,  684,  684,  684,
-
-      684,  684,  684,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  692,  692,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  696,  696,  696,  696,  696,
-      696,  696,  696,  696,  696,  696,  698,  698,  698,  698,
-      698,  698,  698,  698,  698,  698,  698,  702,  702,  702,
-      702,  702,  702,  702,  702,  702,  702,  702,  342,  342,
-      342,  342,  342,  342,  342,  342,  342,  342,  342,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-      714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
-      714,  716,  716,  716,  716,  716,  716,  716,  716,  716,
-
-      716,  716,  720,  720,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  728,  728,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  732,  732,  732,  732,  732,
-      732,  732,  732,  732,  732,  732,  734,  734,  734,  734,
-      734,  734,  734,  734,  734,  734,  734,  738,  738,  738,
-      738,  738,  738,  738,  738,  738,  738,  738,  390, 1061,
-      390,  390,  390,  390,  390,  390,  390,  390,  390,  746,
-     1061,  746,  746,  746,  746,  746,  746,  746,  746,  746,
-      749, 1061,  749,  749,  749,  749,  749,  749,  749,  749,
-
-      749,  750, 1061,  750,  750,  750,  750,  750,  750,  750,
-      750,  750,  753, 1061,  753,  753,  753,  753,  753,  753,
-      753,  753,  753,  417, 1061, 1061,  417,  417,  417,  231,
-      231,  231,  231,  231,  231,  231,  231,  493, 1061,  493,
-      493,  493,  493,  268,  268,  268,  268,  268,  268,  268,
-      274, 1061,  274,  274,  274,  274,  274,  274,  274,  274,
-      274,  230,  230,  230,  230,  230,  230,  230,  300,  300,
-     1061,  300,  300,  300,  300,  300,  300,  300,  300,   23,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061
+      365,  365,  365,  365,  365,  365,  365,  365,  344,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  862,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  344,  344,  370,  370,  371,  372,  370,  370,
+      370,  370,  370,  370,  370,  370,  370,  370,  370, 1094,
+      370,  370, 1094, 1094, 1094, 1094,  754,  370,  370,  370,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094,  370, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094,  370,  370,  370,
+
+      370,  371,  372,  370,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370,  391,  370,  370,  391,  391,  391,
+      391,  392,  370,  370,  370,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  370,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  866,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  370,  370,  396,  396,  397,  398,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396, 1094,
+      396,  396, 1094, 1094, 1094, 1094,  772,  396,  396,  396,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+
+     1094, 1094, 1094,  396, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094,  396,  396,  396,
+      396,  397,  398,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  417,  396,  396,  417,  417,  417,
+      417,  418,  396,  396,  396,  417,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  396,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  870,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  396,  396,  422,  422, 1094,  422,  422,  422,
+
+      422,  422,  422,  422,  422,  422,  422,  422,  422, 1094,
+      422,  422, 1094, 1094, 1094, 1094,  787,  422,  422,  422,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094,  422, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094,  422,  422,  422,
+      422, 1094,  422,  422,  422,  422,  422,  422,  422,  422,
+      422,  422,  422,  422,  440,  422,  422,  440,  440,  440,
+      440,  441,  422,  422,  422,  440,  440,  440,  440,  440,
+      440,  440,  440,  440,  440,  440,  440,  440,  422,  440,
+
+      440,  440,  440,  440,  440,  440,  440,  440,  874,  440,
+      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
+      440,  440,  422,  422,  297,  297, 1094,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  297,  315,
+      297,  297,  315,  315,  315,  315,  316,  297,  297,  297,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  297,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  923,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  315,  297,  297,  325,
+      325,  325,  325,  325,  325, 1094,  325,  325,  325,  325,
+
+      325,  325,  325,  325,  340,  325,  325,  340,  340,  340,
+      340,  341,  325,  325,  325,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  325,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  927,
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+      340,  340,  325,  325,  182, 1094,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  185, 1094, 1094,  185,  185,
+      193, 1094,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  247,  247,  247,  247,  247,  247,  247,  247,  263,
+      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+
+      284,  284,  284,  284,  287, 1094,  287, 1094,  287,  287,
+      287,  287,  291,  291,  291,  291,  291,  291,  291,  297,
+     1094,  297,  297,  297,  297,  297,  297,  297,  297,  297,
+      299, 1094,  299,  299,  299,  299,  299,  299,  299,  299,
+      299,  302, 1094,  302,  302,  302,  302,  302,  302,  302,
+      302,  302,  315, 1094,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  246,  246,  246,  246,  246,  246,  246,
+      325,  325, 1094,  325,  325,  325,  325,  325,  325,  325,
+      325,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  340,  340, 1094,  340,  340,  340,  340,  340,
+
+      340,  340,  340,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  347,  347,  347,  347,  347,  347,
+      347,  347,  347,  347,  347,  351,  351,  351,  351,  351,
+      351,  351,  351,  351,  351,  351,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  370,  370,  370,
+      370,  370,  370,  370,  370,  370,  370,  370,  373,  373,
+      373,  373,  373,  373,  373,  373,  373,  373,  373,  377,
+      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+
+      396,  396,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  417,  417,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  422, 1094,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  424, 1094,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  427, 1094,  427,
+      427,  427,  427,  427,  427,  427,  427,  427,  440, 1094,
+      440,  440,  440,  440,  440,  440,  440,  440,  440,  185,
+     1094, 1094,  185,  185,  193, 1094,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  450, 1094, 1094,  450,  450,
+
+      450,  481, 1094, 1094,  481,  246,  246,  246,  246,  246,
+      246,  246,  247,  247,  247,  247,  247,  247,  247,  247,
+      508, 1094, 1094, 1094, 1094,  508,  508,  508,  508,  263,
+      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+      522,  522,  522,  522,  522,  522,  525,  525,  525,  525,
+      526, 1094,  526,  526,  526,  526,  291,  291,  291,  291,
+      291,  291,  291,  297, 1094,  297,  297,  297,  297,  297,
+      297,  297,  297,  297,  299, 1094,  299,  299,  299,  299,
+      299,  299,  299,  299,  299,  302, 1094,  302,  302,  302,
+      302,  302,  302,  302,  302,  302,  315, 1094,  315,  315,
+
+      315,  315,  315,  315,  315,  315,  315,  325,  325, 1094,
+      325,  325,  325,  325,  325,  325,  325,  325,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  340,
+      340, 1094,  340,  340,  340,  340,  340,  340,  340,  340,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  347,  347,  347,  347,  347,  347,  347,  347,  347,
+      347,  347,  351,  351,  351,  351,  351,  351,  351,  351,
+      351,  351,  351,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370,  370,  373,  373,  373,  373,  373,
+
+      373,  373,  373,  373,  373,  373,  377,  377,  377,  377,
+      377,  377,  377,  377,  377,  377,  377,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  417,  417,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  422, 1094,  422,  422,  422,  422,  422,  422,
+      422,  422,  422,  424, 1094,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  427, 1094,  427,  427,  427,  427,
+
+      427,  427,  427,  427,  427,  440, 1094,  440,  440,  440,
+      440,  440,  440,  440,  440,  440,  185, 1094, 1094,  185,
+      185,  450, 1094, 1094,  450,  450,  450,  481, 1094, 1094,
+      481,  667, 1094,  667,  667,  667,  667,  667,  667,  667,
+      667,  667,  670, 1094,  670,  670,  670,  670,  670,  670,
+      670,  670,  670,  672, 1094,  672,  672,  672,  672,  672,
+      672,  672,  672,  672,  675,  675,  675,  675,  675,  675,
+      675,  247,  247,  247,  247,  247,  247,  247,  247,  263,
+      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+      522,  522,  522,  522,  522,  522,  684, 1094,  684,  684,
+
+      684,  684,  526, 1094,  526,  526,  526,  526,  291,  291,
+      291,  291,  291,  291,  291,  297, 1094,  297,  297,  297,
+      297,  297,  297,  297,  297,  297,  695, 1094,  695,  695,
+      695,  695,  695,  695,  695,  695,  695,  698, 1094,  698,
+      698,  698,  698,  698,  698,  698,  698,  698,  699, 1094,
+      699,  699,  699,  699,  699,  699,  699,  699,  699,  702,
+     1094,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      246,  246,  246,  246,  246,  246,  246,  325,  325, 1094,
+      325,  325,  325,  325,  325,  325,  325,  325,  715,  715,
+      715,  715,  715,  715,  715,  715,  715,  715,  715,  717,
+
+      717, 1094,  717,  717,  717,  717,  717,  717,  717,  717,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  725,  725,  725,  725,  725,  725,  725,  725,  725,
+      725,  725,  729,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  370,  370,  370,  370,  370,
+      370,  370,  370,  370,  370,  370,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  749,  749,
+
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  753,
+      753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  761,  761,  761,  761,  761,  761,  761,  761,  761,
+      761,  761,  765,  765,  765,  765,  765,  765,  765,  765,
+      765,  765,  765,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  771,  771,  771,  771,  771,  771,
+      771,  771,  771,  771,  771,  422, 1094,  422,  422,  422,
+      422,  422,  422,  422,  422,  422,  779, 1094,  779,  779,
+      779,  779,  779,  779,  779,  779,  779,  782, 1094,  782,
+
+      782,  782,  782,  782,  782,  782,  782,  782,  783, 1094,
+      783,  783,  783,  783,  783,  783,  783,  783,  783,  786,
+     1094,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      450, 1094, 1094,  450,  450,  450,  667, 1094,  667,  667,
+      667,  667,  667,  667,  667,  667,  667,  670, 1094,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  672, 1094,
+      672,  672,  672,  672,  672,  672,  672,  672,  672,  675,
+      675,  675,  675,  675,  675,  675,  247,  247,  247,  247,
+      247,  247,  247,  247,  263,  263,  263,  263,  263,  263,
+      263,  263,  263,  263,  263,  684, 1094,  684,  684,  684,
+
+      684,  526, 1094,  526,  526,  526,  526,  291,  291,  291,
+      291,  291,  291,  291,  297, 1094,  297,  297,  297,  297,
+      297,  297,  297,  297,  297,  695, 1094,  695,  695,  695,
+      695,  695,  695,  695,  695,  695,  698, 1094,  698,  698,
+      698,  698,  698,  698,  698,  698,  698,  699, 1094,  699,
+      699,  699,  699,  699,  699,  699,  699,  699,  702, 1094,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,  246,
+      246,  246,  246,  246,  246,  246,  325,  325, 1094,  325,
+      325,  325,  325,  325,  325,  325,  325,  715,  715,  715,
+      715,  715,  715,  715,  715,  715,  715,  715,  717,  717,
+
+     1094,  717,  717,  717,  717,  717,  717,  717,  717,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
+      725,  729,  729,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  370,  370,  370,  370,  370,  370,
+      370,  370,  370,  370,  370,  743,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  749,  749,  749,
+
+      749,  749,  749,  749,  749,  749,  749,  749,  753,  753,
+      753,  753,  753,  753,  753,  753,  753,  753,  753,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      761,  761,  761,  761,  761,  761,  761,  761,  761,  761,
+      761,  765,  765,  765,  765,  765,  765,  765,  765,  765,
+      765,  765,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  771,  771,  771,  771,  771,  771,  771,
+      771,  771,  771,  771,  422, 1094,  422,  422,  422,  422,
+      422,  422,  422,  422,  422,  779, 1094,  779,  779,  779,
+      779,  779,  779,  779,  779,  779,  782, 1094,  782,  782,
+
+      782,  782,  782,  782,  782,  782,  782,  783, 1094,  783,
+      783,  783,  783,  783,  783,  783,  783,  783,  786, 1094,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  450,
+     1094, 1094,  450,  450,  450,  247,  247,  247,  247,  247,
+      247,  247,  247,  263,  263,  263,  263,  263,  263,  263,
+      263,  263,  263,  263,  526, 1094,  526,  526,  526,  526,
+      291,  291,  291,  291,  291,  291,  291,  297, 1094,  297,
+      297,  297,  297,  297,  297,  297,  297,  297,  246,  246,
+      246,  246,  246,  246,  246,  325,  325, 1094,  325,  325,
+      325,  325,  325,  325,  325,  325,   23, 1094, 1094, 1094,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094
     } ;
 
-static yyconst flex_int16_t yy_chk[7046] =
+static yyconst flex_int16_t yy_chk[7163] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1612,582 +1648,560 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    3,  220,    3,    3,    3,
-       29,   44,   44,    3,    3,  220,    3,    3,   13,    3,
-        3,    3,    6,   14,    6,    6,    3,    3,    3,    3,
-       13,   13,   13,   13,   35,   14,   14,   14,   14,   25,
-
-      196,   25,   25,   29,  196,    6,   35,   27,   27,   27,
-       27,    3,   33,    3,   25,   31,    3,   31,    3,   31,
-       31,    3,   27,    3,   45,   45,   33,    3,    3,    5,
+        1,    1,    1,    1,    1,    2,   33,    2,    2,   29,
+       35,    4,  236,    4,    4, 1088,    6,   40,    6,    6,
+       33,  236,   35,    8,   40,    8,    8,   55,    2,    3,
+       74,    3,    3,    3,    4,   44,   44,    3,    3,    6,
+
+        3,    3,   29,    3,    3,    3,    8,   45,   45,  108,
+        3,    3,    3,    3,   10,   13,   10,   10,   12, 1084,
+       12,   12,   16,   74,   16,   16,   55,   13,   13,   13,
+       13,   18,  108,   18,   18,    3,   20,    3,   20,   20,
+        3,   22,    3,   22,   22,    3,  212,    3,   46,   46,
+      212,    3,    3,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    7,    7,    7,    7,    7,    7,
 
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
+
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,   11,   11,   11,   11,   11,   11,
+        9,    9,    9,    9,    9,    9,    9,    9,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   11,   11,   11,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
 
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   14, 1083,   14,   14,   31,   14,   31,
+       82,   31,   31,   60, 1082,   60,   60,   82,  122,  122,
+       14,   14,   14,   14,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   17,   17,   17,   17,   17,   17,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   17,
+
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   17,   17,   17,   17,   17,   17,   17,   19,
-       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   21,   21,   21,   21,   21,   21,
+       19,   19,   19,   19,   19,   19,   19,   19,   19,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   21,   21,   36,
-     1055,   36,   36,   36,   36,   40,   38,   36,   38,   38,
-       38,   38,   40,  102,   38,   39,   39,   39,   39,   46,
-       46,   39, 1051,   39,   39,   39,   39,   39,   39,   39,
-       39,   39,   39,   39,   39,   39,  102,   39,   39,   39,
-       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   25,   91,   25,   25,   27,   27,
 
+       27,   27,   36,  209,   36,   36,   36,   36,  209,   25,
+       36,   47,   38,   27,   38,   38,   38,   38,   47, 1080,
+       38,   39,   39,   39,   39,   47,  233,   39,   91,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
-       41,   47,   41,   41,   41,   41,  200,   51,   47,   49,
-     1050,   70,   41,   41,   51,   47,   49,   41,   55,   41,
-      200,   51,   41,   49,   56,   58,   41,   58,   58,   41,
-       42,   78,   42,   42,   42,   42,  676,   41,   78,   48,
-      197,   52,  197,   42,   70,   41,   48,   42,   52,   48,
-       48,   48,   48,   48,   49,   52,  193,   55,   51,   42,
-       43,  193,   43,  676,   56,   43, 1049,   50,   43,   43,
-       43,   43,   43,   43,   50,   53,   43,  822,   43,   43,
-       54,   50,   53,  218,   52,   57,   57,   54,  218,   53,
-
-       59,   59,   59,   59,   54,   60,   64,   60,   60,   60,
-       60, 1047,   80,   64,   57,   50,   87,  822,   62,   80,
-       64,   50,   53,  114,  114,  113,   62,   62,   62,   62,
-       62,   62,  116,  116,   54,   53,   61,   62,   67,   67,
-       67,   67,   80,   64,   69,   69,   69,   69,   71,   87,
-       71,  217,   71,   71,   61,   61,  105,   61,  113,   61,
-      105,   61,   61,   61,   61,  105,   61,  217,   61,   61,
-       61,   74, 1046,   73,   61,   73,   73,   73,   73,  126,
-      126,   74,   74,   74,   74,   76, 1044,   76,   76,   76,
-       76,   81,   81,   81,   81,  128,  128,  198,   76,  198,
-
-       79,  627,   76,   79,   79,   79,   79,   79,   74,   74,
-      627,  118,  118,   74,   76,   82,   82,   82,   82,   89,
-      118,   89,   89,   89,   89,   90,   90,   90,   90,  123,
-      123,   92,   99,   99,   99,   99,  117,  117,   92,  153,
-      117,   92,  130,  130, 1043,   92,   98,   98,   98,   98,
-      123,  130,  166,   90,  138,  138,   92,   90,   91, 1040,
-       91,   91,   91,   91,   92,  107,  107,  107,  107,  109,
-       91,   91,  153,  117,   98,   91,  109,   91,   98,  109,
-       91,  140,  140,  109,   91,  166,  106,   91,  106,  106,
-      106,  106,  195,  107,  109,   91,  195,  107,  135,  135,
-
-      195,  257,  109,   91,   94,   94,  257,   94,   94,   94,
-       94,   94,   94,   94,   94,   94,   94,   94,   94,  135,
-       94,   94,  215,  119,  119,  268,   94,   94,   94,   94,
-      215,  100,  268,  100,  100,  100,  100,  119,  276,  119,
-      119,  119,  119,   94,  100,  131,  131,  216,  100,  142,
-      142,  216,  129,  129,  190,  430,  129,  430,  142,  131,
-      100,  131,  131,  131,  131,  216,  190,   94,   94,   95,
-       95,  276,   95,   95,   95,   95,   95,   95,   95,   95,
-       95,   95,   95,   95, 1037,   95,   95,  120,  120,  129,
-      267,   95,   95,   95,   95,  147,  147,  163,  267,  163,
-
-      163,  132,  132,  120,  120,  120,  120,  155,   95,  155,
-      155,  155,  155,  427,   95,  122,  147,  132,  132,  132,
-      132,  299,  122,  206,  206,  122,  209,  209,  209,  122,
-      427,  120,   95,   95,  108,  120,  108,  108,  108,  108,
-      122,  156,  156,  156,  156,  132,  108,  108,  122,  132,
-      821,  108,  162,  108,  162,  162,  108,  299,  141,  141,
-      108,  291,  141,  108,  214,  214,  291,  162,  816,  156,
-      816,  108, 1036,  156,  170,  170,  170,  170,  821,  108,
-      111,  111,  111,  111,  111,  111, 1035,  111,  111,  111,
-      111,  111,  111,  111,  111,  141,  111,  111,  392,  134,
-
-      228,  228,  111,  111,  111,  111,  134,  468,  146,  134,
-     1033,  143,  143,  134,  247,  146,  247,  247,  146,  111,
-      830,  223,  146,  830,  134,  143,  223,  143,  143,  143,
-      143,  392,  134,  146,  171,  171,  171,  171,  896,  223,
-      468,  146,  896,  111,  111,  112,  112,  112,  112,  112,
-      112, 1032,  112,  112,  112,  112,  112,  112,  112,  112,
-      834,  112,  112,  834,  158,  254,  254,  112,  112,  112,
-      112,  158,  286,  286,  158,  144,  144, 1031,  158,  172,
-      172,  172,  172, 1030,  112,  173,  173,  173,  173,  158,
-      112,  144,  144,  144,  144,  309,  309,  158,  180,  180,
-
-      180,  180,  314,  184,  184,  184,  184,  314,  112,  112,
-      121,  121,  250,  301,  184,  838,  250,  301,  838,  144,
-      250,  892,  301,  144,  121, 1023,  121,  121,  121,  121,
-      184,  205,  205,  205,  205, 1018,  121,  121,  231,  318,
-      318,  121,  205,  121,  892,  231,  121,  320,  320,  207,
-      121,  207,  231,  121,  207,  207,  207,  207,  205,  323,
-      323,  121,  258,  258,  258,  258,  289,  289,  289,  121,
-      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  842,  124,  124,  842,  235,
-      324,  324,  124,  124,  124,  124,  235,  181,  677,  181,
-
-      181,  181,  181,  235,  941,  233,  234,  335,  335,  124,
-      181, 1017,  233,  234,  181,  233,  233,  233,  233,  233,
-      234,  260,  260,  260,  260,  677,  181,  262,  262,  262,
-      262,  262, 1014,  124,  124,  125,  125,  125,  125,  125,
-      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
-      941,  125,  125, 1013,  236,  238,  234,  125,  125,  125,
-      125,  236,  238,  237,  240,  239,  271,  942,  236,  238,
-      237,  240,  239,  271,  125,  342,  342,  237,  240,  239,
-      125,  241,  272,  272,  272,  272,  344,  344,  241, 1011,
-      238,  273,  273,  273,  273,  241,  347,  347,  125,  125,
-
-      133,  133,  325,  325,  236,  237,  237,  348,  348,  271,
-     1010,  325,  240,  942,  133,  239,  133,  133,  133,  133,
-      312,  312,  312,  241,  359,  359,  133,  133,  326,  326,
-      826,  133,  826,  133,  366,  366,  133,  326,  321,  321,
-      133,  270,  321,  133,  270,  270,  270,  270,  270,  349,
-      349,  133,  280,  280,  280,  280,  368,  368,  349,  133,
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      136,  136,  136,  136,  136,  321,  136,  136,  303,  303,
-      303,  303,  136,  136,  136,  136, 1009,  281,  407,  281,
-      281,  281,  281,  407,  282,  282,  282,  282,  897,  136,
-
-      281,  287,  897,  287,  281,  282,  287,  287,  287,  287,
-      371,  371,  310,  985,  310,  985,  281,  310,  310,  310,
-      310,  282, 1007,  136,  136,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      893,  137,  137,  372,  372,  330,  330,  137,  137,  137,
-      137,  285,  285,  285,  285,  298,  890,  298,  298,  298,
-      298,  890,  285,  893,  137,  331,  331,  898,  298,  516,
-      137,  898,  298,  322,  322,  354,  354,  322,  285,  333,
-      333,  383,  383, 1006,  298,  350,  350,  474,  137,  137,
-      145,  145,  330,  516,  350,  333,  333,  516,  304, 1005,
-
-      304,  304,  304,  304,  145, 1004,  145,  145,  145,  145,
-      322,  304,  331,  402,  402,  304,  145,  145,  327,  327,
-      474,  145,  354,  145,  444,  444,  145,  304,  336,  336,
-      145,  355,  355,  145,  327,  327,  327,  327,  338,  338,
-     1002,  145,  338,  891,  336,  336,  336,  338,  891,  145,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  148,  148,  148,  148, 1001,  148,  148,  305,  305,
-      305,  305,  148,  148,  148,  148,  453, 1000,  355,  305,
-      308,  308,  308,  308,  453,  334,  334,  453,  899,  148,
-      998,  308,  899,  345,  345,  305,  334,  345,  334,  373,
-
-      373,  334,  334,  334,  334,  346,  346,  308,  373,  346,
-      378,  378,  990,  148,  148,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      345,  149,  149,  988,  329,  329,  656,  149,  149,  149,
-      149,  986,  346,  656,  369,  369,  332,  332,  369,  984,
-      329,  329,  329,  329,  149,  357,  357,  378,  360,  360,
-      149,  329,  332,  332,  332,  332,  503,  503,  379,  379,
-      656,  357,  357,  332,  360,  360,  360,  329,  149,  149,
-      157,  369,  157,  157,  157,  157,  900,  362,  362,  332,
-      900,  362,  157,  157,  351,  351,  362,  157,  411,  157,
-
-      411,  411,  157,  358,  358,  983,  157,  381,  381,  157,
-      351,  351,  351,  351,  358,  379,  358,  157,  982,  358,
-      358,  358,  358,  381,  381,  157,  160,  160,  981,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      160,  947,  160,  160,  353,  353,  374,  374,  160,  160,
-      160,  160,  405,  405,  405,  374,  521,  521,  375,  375,
-      353,  353,  353,  353,  901,  160,  356,  356,  901,  370,
-      370,  353,  979,  370,  375,  375,  375,  375,  396,  396,
-      396,  396,  356,  356,  356,  356,  947,  353,  508,  160,
-      160,  161,  161,  356,  161,  161,  161,  161,  161,  161,
-
-      161,  161,  161,  161,  161,  161,  370,  161,  161,  356,
-      377,  377,  978,  161,  161,  161,  161,  412,  412,  412,
-      412,  508,  384,  384,  575,  575,  377,  377,  377,  377,
-      161,  650,  650,  380,  380,  977,  161,  377,  384,  384,
-      384,  413,  413,  413,  413,  414,  414,  414,  414,  380,
-      380,  380,  380,  377,  161,  161,  290,  290,  290,  290,
-      380,  415,  415,  415,  415,  290,  290,  290,  386,  386,
-      530,  530,  386,  447,  447,  447,  380,  386,  976,  290,
-      290,  290,  290,  290,  290,  292,  292,  975,  292,  292,
-      292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
-
-      510,  292,  292,  382,  382,  580,  974,  292,  292,  292,
-      292,  506,  506,  506,  382,  987,  382,  987,  530,  382,
-      382,  382,  382,  397,  292,  397,  397,  397,  397,  445,
-      445,  445,  445,  510,  673,  673,  397,  403,  580,  403,
-      397,  973,  403,  403,  403,  403,  694,  694,  292,  292,
-      293,  293,  397,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-
-      293,  293,  293,  293,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  293,  293,  294,  294,  970,  294,  294,
-      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
-      969,  294,  294,  398,  398,  398,  398,  294,  294,  294,
-      294,  524,  524,  524,  398,  401,  401,  401,  401,  968,
-      443,  443,  443,  443,  294,  967,  401,  416,  943,  416,
-      398,  443,  416,  416,  416,  416,  446,  446,  446,  446,
-      695,  695,  401,  294,  531,  531,  943,  443,  294,  294,
-      313,  313,  313,  313,  965,  476,  478,  479,  480,  313,
-      313,  313,  476,  478,  479,  480,  963,  544,  544,  476,
-
-      478,  479,  480,  313,  313,  313,  313,  313,  313,  315,
-      315,  315,  315,  315,  315,  962,  315,  315,  315,  315,
-      315,  315,  315,  315,  531,  315,  315,  961,  481,  479,
-      483,  315,  315,  315,  315,  481,  960,  483,  504,  504,
-      504,  504,  481,  959,  483,  544,  539,  539,  315,  491,
-      491,  491,  491,  491,  499,  539,  499,  700,  700,  499,
-      499,  499,  499,  505,  505,  505,  505,  522,  522,  522,
-      522,  483,  315,  315,  316,  316,  316,  316,  316,  316,
+       39,   39,  233,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   41,   52,   41,   41,
+       41,   41,  216,   51,   52,   49,  976,   53,   41,   41,
+       51,   52,   49,   41,   53,   41,  216,   51,   41,   49,
+       56,   53,   41,  112,  976,   41,   42,  112,   42,   42,
+
+       42,   42,  112,   41,   67,   48,   67,   67, 1079,   42,
+       52,   41,   48,   42,   53,   48,   48,   48,   48,   48,
+       49,   69,   69,  660,   51,   42,   43,   53,   43,  460,
+       56,   43,  660,   50,   43,   43,   43,   43,   43,   43,
+       50,   54,   43,   84,   43,   43,  460,   50,   54,   57,
+       84,   57,   57,   59,   59,   54,   66,   58,   58,   58,
+       58,  231,   69,   66,   57,   61,   61,   61,   61,  231,
+       66,   50,   58,   84, 1077,   59,   59,   50,   62,   64,
+       62,   62,   62,   62,  121,   54,  167,   64,   64,   64,
+       64,   64,   64,   66,   59,   63,  124,  124,   64,   68,
+
+       68,   68,   68,   71,   71,   71,   71,   73,   73,   73,
+       73,   87,   87,   63,   63, 1076,   63,  121,   63,  167,
+       63,   63,   63,   63,  213,   63,  213,   63,   63,   63,
+       75,  323,   75,   63,   75,   75,   77,   78,   77,   77,
+       77,   77,   85,   85,   85,   85,  980,   78,   78,   78,
+       78,   80,   87,   80,   80,   80,   80,   86,   86,   86,
+       86,  131,  131,  214,   80,  214,   83,  323,   80,   83,
+       83,   83,   83,   83,   78,   78,  136,  136, 1073,   78,
+       80,   93,  131,   93,   93,   93,   93,   94,   94,   94,
+       94,  980,  100,   96,  100,  100,  101,  101,  101,  101,
+
+       96,  234,  109,   96,  109,  109,  234,   96,  104,  104,
+      104,  104,  126,  126,  120,   94,  120,  120,   96,   94,
+       95,  126,   95,   95,   95,   95,   96,  105,  105,  105,
+      105,  116,   95,   95,  138,  138,  104,   95,  116,   95,
+      104,  116,   95,  150,  150,  116,   95,  810,  113,   95,
+      113,  113,  113,  113,  140,  140,  116,   95,  134,  134,
+      134,  134,  810,  140,  116,   95,   98,   98,  810,   98,
+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+       98, 1070,   98,   98,  114,  114,  114,  114,   98,   98,
+       98,   98,  463,  106,  463,  106,  106,  106,  106,  135,
+
+      135,  135,  135,  152,  152,   98,  106,  127,  127,  849,
+      106,  849,  114,  125,  125,  239,  114,  125,  154,  154,
+      239,  127,  106,  127,  127,  127,  127,  154, 1069,   98,
+       98,   99,   99,  239,   99,   99,   99,   99,   99,   99,
+       99,   99,   99,   99,   99,   99,  863,   99,   99,  863,
+      125,  145,  145,   99,   99,   99,   99,  130,  148,  148,
+      148,  148,  128,  128,  130,  139,  139,  130,  279,  139,
+       99,  130,  145,  279,  182, 1068,   99,  206,  128,  128,
+      128,  128,  130,  149,  149,  149,  149,  153,  153,  206,
+      130,  153,  222,  222,   99,   99,  115, 1066,  115,  115,
+
+      115,  115,  139,  225,  225,  225,  128,  182,  115,  115,
+      128,  159,  159,  115,  176,  115,  176,  176,  115,  929,
+      141,  141,  115,  929,  153,  115,  162,  162,  162,  162,
+      230,  230,  159,  115,  141, 1065,  141,  141,  141,  141,
+      290,  115,  118,  118,  118,  118,  118,  118,  290,  118,
+      118,  118,  118,  118,  118,  118,  118, 1064,  118,  118,
+      163,  163,  163,  163,  118,  118,  118,  118,  155,  155,
+      169,  299,  169,  169,  169,  169,  244,  244,  142,  142,
+      867,  118,  155,  867,  155,  155,  155,  155,  177,  177,
+      177,  177,  263,  263,  142,  142,  142,  142,  178,  974,
+
+      178,  178,  265,  265,  299,  118,  118,  119,  119,  119,
+      119,  119,  119,  178,  119,  119,  119,  119,  119,  119,
+      119,  119,  142,  119,  119, 1063,  142,  424,  144,  119,
+      119,  119,  119,  232,  158,  144,  291,  232,  144,  156,
+      156,  158,  144,  291,  158,  974,  119,  179,  158,  179,
+      179,  232,  119,  144,  854,  156,  156,  156,  156,  158,
+      424,  144,  186,  186,  186,  186, 1056,  158,  266,  266,
+      119,  119,  129,  129,  170,  170,  170,  170,  187,  187,
+      187,  187,  854,  156,  267,  267,  129,  156,  129,  129,
+      129,  129,  188,  188,  188,  188,  501,  172,  129,  129,
+
+      276,  276,  170,  129,  172,  129,  170,  172,  129,  309,
+      309,  172,  129, 1051,  247,  129,  189,  189,  189,  189,
+     1050,  247,  172,  129,  196,  196,  196,  196,  247,  501,
+      172,  129,  132,  132,  132,  132,  132,  132,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  507,  132,  132,
+      269,  251,  269,  269,  132,  132,  132,  132,  251,  197,
+      925,  197,  197,  197,  197,  251,  200,  200,  200,  200,
+      211,  132,  197, 1047,  211,  253,  197,  200,  211,  223,
+      507,  223,  253,  925,  223,  223,  223,  223,  197,  253,
+      312,  312,  312,  200,  977,  132,  132,  133,  133,  133,
+
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      133,  133,  977,  133,  133,  268,  268,  253,  253,  133,
+      133,  133,  133,  221,  221,  221,  221,  272,  334,  334,
+      294,  272, 1046,  249,  221,  272,  133,  294,  344,  344,
+      249,  250,  133,  249,  249,  249,  249,  249,  250,  314,
+      221,  252,  254,  871,  314,  250,  871,  255,  252,  254,
+      133,  133,  143,  143,  255,  252,  254, 1044,  256,  339,
+      257,  255,  268,  294,  339,  256,  143,  257,  143,  143,
+      143,  143,  256,  280,  257,  280,  280,  254,  143,  143,
+      859,  250,  859,  143,  262,  143,  262,  262,  143,  346,
+
+      346,  252,  143,  349,  349,  143, 1043,  255,  318,  262,
+      318,  318,  257,  143,  350,  350,  256,  281,  281,  281,
+      281,  143,  146,  146,  146,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  146, 1042,  146,  146,
+      283,  283,  283,  283,  146,  146,  146,  146,  285,  285,
+      285,  285,  285,  293,  361,  361,  293,  293,  293,  293,
+      293,  146,  295,  295,  295,  295,  296,  296,  296,  296,
+      303,  303,  303,  303,  310,  324,  310,  324,  324,  310,
+      310,  310,  310,  370,  370,  146,  146,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+
+      147,  147, 1040,  147,  147,  328,  328,  328,  328,  147,
+      147,  147,  147, 1018,  304, 1018,  304,  304,  304,  304,
+      372,  372,  305,  305,  305,  305,  147,  304,  337,  337,
+      337,  304,  147,  305,  308,  308,  308,  308,  326,  351,
+      351,  439,  326,  304, 1039,  308,  439,  326,  351,  305,
+      147,  147,  157,  157,  343,  709,  343,  343,  352,  352,
+      322,  308,  322,  322,  322,  322,  157,  352,  157,  157,
+      157,  157, 1038,  322,  375,  375,  549,  322,  157,  157,
+      356,  356,  709,  157, 1037,  157,  357,  357,  157,  322,
+      930,  335,  157,  335,  930,  157,  335,  335,  335,  335,
+
+      549,  347,  347,  157,  549,  347,  368,  368,  368,  368,
+     1035,  157,  160,  160,  160,  160,  160,  160,  160,  160,
+      160,  160,  160,  160,  160,  160,  160,  356,  160,  160,
+      376,  376,  926,  357,  160,  160,  160,  160,  347,  329,
+      710,  329,  329,  329,  329,  923,  330,  330,  330,  330,
+      923,  160,  329,  353,  353,  926,  329,  330,  348,  348,
+      387,  387,  348,  369,  369,  369,  369,  710,  329,  353,
+      353,  353,  353,  330, 1034,  160,  160,  161,  161,  161,
+      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+      161,  161, 1033,  161,  161,  348,  359,  359,  794,  161,
+
+      161,  161,  161,  333,  333,  333,  333,  355,  355,  377,
+      377,  794,  359,  359,  333,  931,  161,  794,  377,  931,
+      360,  360,  161,  355,  355,  355,  355,  541,  373,  373,
+      333,  360,  373,  360,  355, 1031,  360,  360,  360,  360,
+      161,  161,  171,  543,  171,  171,  171,  171,  374,  374,
+      355, 1023,  374,  924,  171,  171,  362,  362,  924,  171,
+      541,  171,  382,  382,  171,  373,  364,  364,  171,  981,
+      364,  171,  362,  362,  362,  364,  543,  378,  378,  171,
+      396,  396, 1021,  383,  383,  374,  378,  171,  174,  174,
+     1019,  174,  174,  174,  174,  174,  174,  174,  174,  174,
+
+      174,  174,  174, 1017,  174,  174,  358,  358,  855,  382,
+      174,  174,  174,  174,  981,  385,  385,  613,  379,  379,
+      398,  398,  358,  358,  358,  358, 1016,  174,  381,  381,
+      383,  385,  385,  358,  379,  379,  379,  379,  855,  390,
+      390,  401,  401,  390,  381,  381,  381,  381,  390,  358,
+      613,  174,  174,  175,  175,  381,  175,  175,  175,  175,
+      175,  175,  175,  175,  175,  175,  175,  175, 1015,  175,
+      175,  381,  384,  384, 1014,  175,  175,  175,  175,  394,
+      394,  394,  394, 1012,  386,  386,  402,  402,  384,  384,
+      384,  384,  175,  388,  388,  386, 1011,  386,  175,  384,
+
+      386,  386,  386,  386,  395,  395,  395,  395,  932,  388,
+      388,  388,  932,  403,  403,  384,  175,  175,  313,  313,
+      313,  313,  403,  404,  404,  413,  413,  313,  313,  313,
+      399,  399,  404, 1010,  399,  615,  400,  400,  408,  408,
+      400,  313,  313,  313,  313,  313,  313,  315,  315, 1009,
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
+      315,  315, 1008,  315,  315,  405,  405,  399,  615,  315,
+      315,  315,  315,  400,  411,  411,  412,  412,  434,  434,
+     1007,  405,  405,  405,  405,  408,  315,  412, 1006,  412,
+      411,  411,  412,  412,  412,  412,  416,  416,  477,  477,
+
+      416,  420,  420,  420,  420,  416,  421,  421,  421,  421,
+      315,  315,  316,  316, 1003,  316,  316,  316,  316,  316,
       316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
       316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-
       316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
       316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
       316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  317,
-      317,  317,  317,  317,  317,  958,  317,  317,  317,  317,
-      317,  317,  317,  317,  957,  317,  317,  701,  701,  484,
-      498,  317,  317,  317,  317,  477,  484,  498,  956,  482,
-      902,  526,  477,  484,  902,  526,  482,  955,  317,  477,
-      526,  558,  558,  482,  533,  533,  582,  502,  502,  502,
-      502,  498,  578,  578,  578,  498,  484,  317,  502,  657,
-
-      533,  533,  317,  317,  328,  328,  657,  482,  538,  538,
-      477,  482,  538,  634,  502,  553,  553,  639,  328,  582,
-      328,  328,  328,  328,  553,  520,  520,  520,  520,  558,
-      662,  328,  517,  657,  517,  328,  520,  517,  517,  517,
-      517,  523,  523,  523,  523,  538,  634,  328,  337,  337,
-      639,  934,  520,  534,  534,  712,  712,  894,  545,  545,
-      535,  535,  894,  662,  337,  337,  337,  337,  945,  534,
-      534,  534,  534,  337,  337,  337,  535,  535,  535,  535,
-      666,  559,  559,  576,  576,  576,  576,  337,  337,  337,
-      337,  337,  337,  339,  339,  339,  339,  339,  339,  339,
-
-      339,  339,  339,  339,  339,  339,  339,  339,  545,  339,
-      339,  529,  529,  666,  945,  339,  339,  339,  339,  536,
-      536,  989,  529,  989,  529,  547,  547,  529,  529,  529,
-      529,  559,  339,  543,  543,  536,  536,  536,  561,  561,
-      895,  547,  547,  932,  543,  895,  543,  713,  713,  543,
-      543,  543,  543,  931,  561,  561,  339,  339,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
-      340,  340,  340,  341,  341,  341,  341,  341,  341,  341,
-      341,  341,  341,  341,  341,  341,  341,  341,  930,  341,
-      341,  532,  532,  567,  567,  341,  341,  341,  341,  718,
-      718,  929,  567,  546,  546,  719,  719,  532,  532,  532,
-      532,  927,  341,  540,  540,  730,  730,  540,  532,  546,
-      546,  546,  546,  926,  548,  548,  577,  577,  577,  577,
-      546,  341,  731,  731,  532,  746,  341,  341,  352,  352,
-      548,  548,  548,  548,  549,  549,  546,  552,  552,  903,
-
-      540,  552,  352,  903,  352,  352,  352,  352,  550,  550,
-      549,  549,  549,  549,  750,  352,  554,  554,  746,  352,
-      554,  944,  644,  645,  550,  550,  550,  557,  557,  644,
-      645,  352,  361,  361,  552,  925,  644,  645,  557,  944,
-      557,  736,  736,  557,  557,  557,  557,  750,  361,  361,
-      361,  361,  946,  554,  737,  737,  649,  361,  361,  361,
-      566,  566,  888,  649,  566,  585,  585,  585,  585,  888,
-      649,  361,  361,  361,  361,  361,  361,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  888,  363,  363,  560,  560,  566,  946,  363,
-
-      363,  363,  363,  564,  564,  649,  682,  562,  562,  924,
-      682,  560,  560,  560,  560,  682,  363,  563,  563,  564,
-      564,  564,  560,  562,  562,  562,  562,  586,  586,  586,
-      586,  827,  827,  563,  563,  563,  563,  997,  560,  997,
-      363,  363,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-
-      364,  364,  364,  364,  364,  364,  364,  365,  365,  365,
+      316,  316,  316,  316,  316,  316,  316,  317,  317, 1002,
+      317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
+      317,  317,  927,  317,  317,  407,  407,  927,  486,  317,
+
+      317,  317,  317,  409,  409,  928,  486,  414,  414,  486,
+      928,  407,  407,  407,  407, 1001,  317,  428,  428,  428,
+      428, 1000,  407,  414,  414,  414,  536,  536,  430,  430,
+      430,  430,  437,  437,  437,  317,  518,  518,  407,  430,
+      317,  317,  338,  338,  338,  338,  443,  998,  443,  443,
+      409,  338,  338,  338,  435,  430,  435,  554,  554,  435,
+      435,  435,  435,  608,  608,  338,  338,  338,  338,  338,
+      338,  340,  340,  340,  340,  340,  340,  996,  340,  340,
+      340,  340,  340,  340,  340,  340,  972,  340,  340,  410,
+      410,  995,  518,  340,  340,  340,  340,  972,  429,  994,
+
+      429,  429,  429,  429,  972,  410,  410,  410,  410,  993,
+      340,  429,  480,  480,  480,  429,  410,  444,  992,  444,
+      444,  445,  445,  445,  445,  683,  683,  429,  446,  446,
+      446,  446,  410,  991,  340,  340,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+      341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
+
+      341,  342,  342,  342,  342,  342,  342,  990,  342,  342,
+      342,  342,  342,  342,  342,  342,  989,  342,  342,  433,
+      433,  433,  433,  342,  342,  342,  342,  539,  539,  539,
+      433,  447,  447,  447,  447,  448,  448,  448,  448,  933,
+      342,  934,  449,  933,  449,  934,  433,  449,  449,  449,
+      449,  476,  476,  476,  476,  478,  478,  478,  478,  342,
+      706,  706,  476,  988,  342,  342,  354,  354,  479,  479,
+      479,  479,  509,  967,  510,  557,  557,  557,  476,  509,
+      354,  510,  354,  354,  354,  354,  509,  511,  510,  512,
+      667,  513,  514,  354,  511,  844,  512,  354,  513,  514,
+
+      515,  511,  844,  512,  965,  513,  514,  515,  517,  354,
+      363,  363,  559,  531,  515,  517,  559,  566,  566,  510,
+      531,  559,  517,  667,  564,  564,  363,  363,  363,  363,
+      844,  512,  516,  566,  566,  363,  363,  363,  515,  516,
+      727,  727,  515,  672,  531,  517,  516,  975,  531,  363,
+      363,  363,  363,  363,  363,  365,  365,  365,  365,  365,
       365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  923,  365,  365,  574,  574,  574,  574,  365,
-      365,  365,  365,  922,  696,  696,  574,  568,  568,  828,
-      828,  568,  571,  696,  571,  921,  365,  571,  571,  571,
-      571,  920,  574,  646,  647,  658,  658,  658,  658,  918,
-      646,  647,  648,  829,  829,  365,  917,  646,  647,  648,
-      365,  365,  376,  376,  568,  916,  648,  659,  659,  659,
-      659,  678,  678,  678,  678,  915,  376,  914,  376,  376,
-      376,  376,  831,  831,  646,  647,  690,  690,  913,  376,
-
-      761,  691,  691,  376,  688,  688,  648,  679,  679,  679,
-      679,  689,  689,  761,  912,  376,  385,  385,  911,  761,
-      688,  688,  688,  688,  832,  832,  910,  689,  689,  689,
-      689,  948,  385,  385,  385,  385,  703,  703,  909,  690,
-      703,  385,  385,  385,  691,  692,  692,  833,  833,  692,
-      693,  693,  708,  708,  693,  385,  385,  385,  385,  385,
-      385,  387,  387,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  948,  387,  387,  697,
-      697,  908,  692,  387,  387,  387,  387,  693,  697,  706,
-      706,  835,  835,  707,  707,  708,  907,  721,  721,  906,
-
-      387,  721,  724,  724,  905,  706,  706,  706,  706,  707,
-      707,  707,  707,  714,  714,  836,  836,  905,  724,  724,
-      724,  724,  714,  905,  387,  387,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
-      388,  389,  389,  389,  389,  389,  389,  389,  389,  389,
-
-      389,  389,  389,  389,  389,  389,  949,  389,  389,  709,
-      709,  715,  715,  389,  389,  389,  389,  904,  726,  726,
-      715,  727,  727,  698,  698,  699,  699,  698,  882,  699,
-      389,  710,  710,  711,  711,  710,  881,  711,  716,  716,
-      717,  717,  716,  879,  717,  878,  739,  739,  777,  389,
-      739,  949,  709,  876,  389,  389,  406,  406,  406,  406,
-      698,  726,  699,  777,  727,  406,  406,  406,  710,  777,
-      711,  742,  742,  742,  742,  716,  875,  717,  950,  406,
-      406,  406,  406,  406,  406,  408,  408,  874,  408,  408,
-      408,  408,  408,  408,  408,  408,  408,  408,  408,  408,
-
-      871,  408,  408,  725,  725,  732,  732,  408,  408,  408,
-      408,  811,  837,  837,  732,  870,  733,  733,  811,  725,
-      725,  725,  725,  950,  408,  733,  743,  743,  743,  743,
-      841,  841,  887,  885,  887,  887, 1026, 1026,  886,  938,
-      885,  938,  938, 1027, 1027,  886,  811,  885,  408,  408,
-      409,  409,  886,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-
-      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
-      409,  409,  409,  409,  409,  410,  410,  869,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      951,  410,  410,  868,  812,  889,  867,  410,  410,  410,
-      410,  812,  889,  952,  992,  992,  992,  728,  728,  729,
-      729,  728,  953,  729,  410,  734,  734,  735,  735,  734,
-      801,  735,  803,  883,  865,  889,  954,  801,  864,  803,
-      883,  812,  863,  410,  801,  951,  803,  883,  410,  410,
-      507,  507,  507,  507,  728,  862,  729,  861,  952,  507,
-      507,  507,  734,  860,  735, 1028, 1028,  953,  858,  857,
-
-      883,  803,  801,  507,  507,  507,  507,  507,  507,  511,
-      511,  954,  511,  511,  511,  511,  511,  511,  511,  511,
-      511,  511,  511,  511,  856,  511,  511,  939,  884,  855,
-      853,  511,  511,  511,  511,  884,  936,  852,  939,  937,
-      936,  940,  884,  937,  851,  939,  850,  936,  511,  849,
-      937,  848,  940,  847,  936,  846,  844,  937,  843,  940,
-      991,  991,  991,  818,  991,  884,  993,  993,  993,  809,
-      993,  806,  511,  511,  512,  512,  800,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  525,
-      525,  525,  525,  799,  802,  804,  798,  797,  525,  525,
-      525,  802,  804,  994,  994,  994,  796,  795,  802,  804,
-      794,  793,  525,  525,  525,  525,  525,  525,  527,  527,
-      527,  527,  527,  527,  792,  527,  527,  527,  527,  527,
-      527,  527,  527,  791,  527,  527,  790,  789,  802,  786,
-      527,  527,  527,  527,  804,  995,  995,  995,  785,  995,
-
-      996,  996,  996,  783,  781,  779,  778,  527,  776,  775,
-      774,  773,  772,  771,  770,  769,  768,  766,  765,  764,
-      763,  760,  758,  757,  756,  754,  749,  745,  744,  741,
-      723,  527,  527,  528,  528,  528,  528,  528,  528,  705,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  528,  528,  528,  528,  528,  528,  528,  537,  537,
-
-      687,  685,  681,  680,  675,  674,  672,  670,  665,  661,
-      660,  655,  654,  653,  537,  537,  537,  537,  652,  643,
-      642,  637,  633,  537,  537,  537,  632,  631,  630,  629,
-      628,  626,  625,  624,  623,  622,  621,  537,  537,  537,
-      537,  537,  537,  541,  541,  541,  541,  541,  541,  541,
-      541,  541,  541,  541,  541,  541,  541,  541,  619,  541,
-      541,  618,  617,  616,  615,  541,  541,  541,  541,  614,
-      613,  612,  611,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  541,  600,  599,  597,  596,  595,  594,  593,
-      592,  591,  590,  589,  588,  581,  573,  572,  519,  518,
-
-      515,  514,  513,  509,  501,  500,  541,  541,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
-      542,  542,  542,  551,  551,  497,  496,  495,  494,  489,
-      488,  487,  486,  485,  475,  472,  469,  467,  466,  551,
-      551,  551,  551,  465,  464,  463,  462,  461,  551,  551,
-
-      551,  460,  459,  458,  457,  456,  455,  454,  452,  451,
-      450,  449,  551,  551,  551,  551,  551,  551,  555,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  555,  555,  441,  555,  555,  440,  439,  438,  437,
-      555,  555,  555,  555,  436,  435,  434,  433,  432,  431,
-      429,  428,  426,  425,  424,  423,  422,  555,  421,  420,
-      419,  418,  400,  399,  395,  307,  306,  297,  296,  295,
-      284,  283,  279,  269,  266,  265,  261,  256,  255,  253,
-      252,  555,  555,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  565,  565,
-      251,  249,  248,  246,  232,  230,  229,  222,  221,  219,
-      213,  212,  211,  203,  565,  565,  565,  565,  202,  201,
-      199,  194,  192,  565,  565,  565,  191,  189,  188,  187,
-      177,  159,  154,  152,  110,  101,   96,  565,  565,  565,
-      565,  565,  565,  569,  569,  569,  569,  569,  569,  569,
-
-      569,  569,  569,  569,  569,  569,  569,  569,   93,  569,
-      569,   88,   86,   83,   77,  569,  569,  569,  569,   72,
-       65,   63,   34,   32,   28,   23,    8,    4,    2,    0,
-        0,    0,  569,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  569,  569,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  570,  570,  579,  579,  579,  579,    0,    0,    0,
-        0,    0,  579,  579,  579,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  579,  579,  579,  579,
-      579,  579,  583,  583,    0,  583,  583,  583,  583,  583,
-      583,  583,  583,  583,  583,  583,  583,    0,  583,  583,
-        0,    0,    0,    0,  583,  583,  583,  583,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  583,    0,    0,    0,    0,    0,    0,    0,    0,
+      964,  365,  365,  516,  564,  963,  672,  365,  365,  365,
+      365,  524,  524,  524,  524,  524,  537,  537,  537,  537,
+      532,  962,  532,  975,  365,  532,  532,  532,  532,  538,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  583,  583,  584,  584,    0,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  584,  584,  584,  584,  584,  584,  584,  584,
-      584,  584,  669,  669,    0,  669,  669,  669,  669,  669,
-      669,  669,  669,  669,  669,  669,  669,    0,  669,  669,
+      538,  538,  538,  550,  960,  550,  728,  728,  550,  550,
+      550,  550,  555,  555,  555,  555,  733,  733,  365,  365,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
 
-        0,    0,    0,    0,  669,  669,  669,  669,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  669,    0,    0,    0,    0,    0,    0,    0,    0,
+      695,  367,  367,  535,  535,  535,  535,  367,  367,  367,
+      367,  563,  563,  959,  535,  553,  553,  553,  553,  556,
+      556,  556,  556,  935,  367,  699,  553,  935,  562,  562,
+      535,  572,  572,  695,  578,  578,  565,  565,  958,  562,
+      572,  562,  553,  367,  562,  562,  562,  562,  367,  367,
+      380,  380,  565,  565,  565,  565,  567,  567,  699,  563,
+      611,  611,  611,  565,  380,  957,  380,  380,  380,  380,
+      568,  568,  567,  567,  567,  567,  936,  380,  677,  565,
+      936,  380,  569,  569,  578,  677,  568,  568,  568,  568,
+      576,  576,  677,  380,  389,  389,  586,  586,  569,  569,
+
+      569,  576, 1020,  576, 1020,  586,  576,  576,  576,  576,
+      389,  389,  389,  389,  580,  580,  592,  592,  956,  389,
+      389,  389,  571,  571,  577,  577,  571,  779,  573,  573,
+      580,  580,  573,  389,  389,  389,  389,  389,  389,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  982,  391,  391,  579,  579,  571,
+      779,  391,  391,  391,  391,  573,  592,  734,  734,  581,
+      581,  955,  577,  579,  579,  579,  579,  954,  391,  582,
+      582,  600,  600,  953,  579,  581,  581,  581,  581,  951,
+      600,  609,  609,  609,  609,  582,  582,  582,  582,  982,
+
+      579,  950,  391,  391,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  392,  392,  392,  392,  393,
+      393,  393,  393,  393,  393,  393,  393,  393,  393,  393,
+      393,  393,  393,  393,  949,  393,  393,  583,  583,  591,
+      591,  393,  393,  393,  393,  983,  736,  736,  594,  594,
+
+      736,  595,  595,  583,  583,  583,  585,  585,  393,  783,
+      585,  948,  587,  587,  594,  594,  587,  595,  595,  595,
+      595,  599,  599,  689,  678,  599,  947,  393,  590,  590,
+      689,  678,  393,  393,  406,  406,  946,  591,  678,  590,
+      983,  590,  783,  585,  590,  590,  590,  590,  406,  587,
+      406,  406,  406,  406,  945,  593,  593,  689,  599,  944,
+      715,  406,  601,  601,  715,  406,  601,  596,  596,  715,
+      943,  593,  593,  593,  593,  597,  597,  406,  415,  415,
+      745,  745,  593,  596,  596,  596,  596,  610,  610,  610,
+      610,  597,  597,  597,  415,  415,  415,  415,  593,  601,
+
+      746,  746,  682,  415,  415,  415,  604,  875,  604,  682,
+      875,  604,  604,  604,  604,  978,  682,  415,  415,  415,
+      415,  415,  415,  417,  417,  417,  417,  417,  417,  417,
+      417,  417,  417,  417,  417,  417,  417,  417,  942,  417,
+      417,  607,  607,  607,  607,  417,  417,  417,  417,  751,
+      751,  682,  607,  618,  618,  618,  618,  619,  619,  619,
+      619,  978,  417,  691,  691,  691,  691,  941,  607,  692,
+      692,  692,  692,  711,  711,  711,  711,  712,  712,  712,
+      712,  752,  752,  763,  763,  940,  417,  417,  418,  418,
+      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
+
+      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
+      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
+      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
+      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
+      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
+      418,  418,  418,  419,  419,  419,  419,  419,  419,  419,
+      419,  419,  419,  419,  419,  419,  419,  419,  939,  419,
+      419,  937,  679,  680,  915,  419,  419,  419,  419,  679,
+      680,  681,  721,  721,  764,  764,  679,  680,  681,  690,
+      722,  722,  419,  723,  723,  681,  690,  914,  721,  721,
+
+      721,  721,  912,  729,  729,  911,  722,  722,  722,  722,
+      909,  419,  729,  679,  680,  908,  419,  419,  438,  438,
+      438,  438, 1022,  690, 1022,  681,  907,  438,  438,  438,
+      724,  724,  904,  754,  754,  903,  723,  754,  902,  741,
+      741,  438,  438,  438,  438,  438,  438,  440,  440,  901,
+      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
+      440,  440,  984,  440,  440,  730,  730,  769,  769,  440,
+      440,  440,  440,  724,  730,  739,  739,  725,  725,  740,
+      740,  725,  741,  770,  770,  900,  440,  757,  757,  839,
+      839,  739,  739,  739,  739,  740,  740,  740,  740,  747,
+
+      747,  860,  860,  757,  757,  757,  757,  984,  747,  898,
+      440,  440,  441,  441,  725,  441,  441,  441,  441,  441,
+      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
+      441,  441,  441,  441,  441,  441,  441,  442,  442,  897,
+      442,  442,  442,  442,  442,  442,  442,  442,  442,  442,
+      442,  442,  985,  442,  442,  742,  742,  748,  748,  442,
+
+      442,  442,  442,  979,  759,  759,  748,  760,  760,  726,
+      726,  731,  731,  726,  896,  731,  442,  732,  732,  743,
+      743,  732,  895,  743,  744,  744,  749,  749,  744, 1030,
+      749, 1030,  772,  772,  894,  442,  772,  985,  742,  893,
+      442,  442,  540,  540,  540,  540,  726,  759,  731,  979,
+      760,  540,  540,  540,  732,  845,  743,  775,  775,  775,
+      775,  744,  845,  749,  891,  540,  540,  540,  540,  540,
+      540,  544,  544,  890,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  544,  889,  544,  544,  888,
+      758,  758,  845,  544,  544,  544,  544,  776,  776,  776,
+
+      776,  750,  750,  765,  765,  750,  758,  758,  758,  758,
+      544,  886,  765,  766,  766,  861,  861,  862,  862,  864,
+      864,  885,  766,  865,  865,  866,  866,  868,  868,  869,
+      869,  870,  870,  884,  544,  544,  545,  545,  750,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+
+      545,  558,  558,  558,  558,  874,  874,  883,  837,  882,
+      558,  558,  558,  761,  761,  837,  881,  761,  880,  762,
+      762,  879,  837,  762,  558,  558,  558,  558,  558,  558,
+      560,  560,  560,  560,  560,  560,  877,  560,  560,  560,
+      560,  560,  560,  560,  560,  986,  560,  560, 1059, 1059,
+      761,  921,  560,  560,  560,  560,  762,  837,  921,  918,
+      919,  973,  876,  938,  767,  767,  918,  919,  767,  560,
+     1060, 1060,  973,  918,  919,  920,  938,  920,  920,  973,
+      851,  921,  938,  971,  842,  971,  971, 1024, 1024, 1024,
+      986, 1024,  833,  560,  560,  561,  561,  561,  561,  561,
+
+      561,  767,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      570,  570,  969,  922,  970,  832,  969,  831,  970,  830,
+      922, 1061, 1061,  969,  829,  970,  570,  570,  570,  570,
+      969,  828,  970,  916,  834,  570,  570,  570,  768,  768,
+      916,  834,  768,  922,  987,  827,  826,  916,  834,  570,
+
+      570,  570,  570,  570,  570,  574,  574,  574,  574,  574,
+      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
+      916,  574,  574,  825,  836,  768,  834,  574,  574,  574,
+      574,  836, 1025, 1025, 1025, 1027, 1027, 1027,  836,  987,
+      824, 1026, 1026, 1026,  574, 1026, 1028, 1028, 1028,  823,
+     1028, 1029, 1029, 1029,  822,  819,  818,  816,  814,  812,
+      811,  809,  808,  836,  807,  806,  805,  804,  574,  574,
+      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+
+      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+      575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+      575,  575,  575,  575,  575,  584,  584,  803,  802,  801,
+      799,  798,  797,  796,  793,  791,  790,  789,  787,  782,
+      778,  584,  584,  584,  584,  777,  835,  774,  917,  756,
+      584,  584,  584,  835,  738,  917,  720,  718,  714,  713,
+      835,  708,  917,  707,  584,  584,  584,  584,  584,  584,
+      588,  588,  588,  588,  588,  588,  588,  588,  588,  588,
+      588,  588,  588,  588,  588,  917,  588,  588,  705,  703,
+
+      835,  698,  588,  588,  588,  588,  694,  693,  688,  687,
+      686,  685,  676,  675,  670,  666,  665,  664,  663,  588,
+      662,  661,  659,  658,  657,  656,  655,  654,  652,  651,
+      650,  649,  648,  647,  646,  645,  644,  642,  641,  640,
+      639,  638,  637,  588,  588,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      598,  598,  636,  635,  634,  633,  632,  630,  629,  628,
+      627,  626,  625,  624,  623,  622,  598,  598,  598,  598,
+      621,  614,  606,  605,  552,  598,  598,  598,  551,  548,
+      547,  546,  542,  534,  533,  530,  529,  528,  527,  598,
+      598,  598,  598,  598,  598,  602,  602,  602,  602,  602,
+      602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
+      522,  602,  602,  521,  520,  519,  508,  602,  602,  602,
+      602,  505,  502,  500,  499,  498,  497,  496,  495,  494,
+      493,  492,  491,  490,  602,  489,  488,  487,  485,  484,
+
+      483,  482,  474,  473,  472,  471,  470,  469,  468,  467,
+      466,  465,  464,  462,  461,  459,  458,  457,  602,  602,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  612,  612,  612,  612,  456,
+      455,  454,  453,  452,  612,  612,  612,  451,  432,  431,
+
+      427,  332,  331,  321,  320,  319,  307,  306,  612,  612,
+      612,  612,  612,  612,  616,  616,  302,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  292,
+      616,  616,  289,  288,  284,  278,  616,  616,  616,  616,
+      277,  275,  274,  273,  271,  270,  248,  246,  245,  238,
+      237,  235,  229,  616,  228,  227,  219,  218,  217,  215,
+      210,  208,  207,  205,  204,  203,  193,  173,  168,  166,
+      117,  107,  102,   97,   92,   90,   81,  616,  616,  617,
+      617,   76,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  702,  702,   65,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,   34,
+      702,  702,   32,   28,   23,    0,  702,  702,  702,  702,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  669,  669,  671,  671,    0,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      671,  671,  684,  684,  684,  684,  684,  684,    0,  684,
-      684,  684,  684,  684,  684,  684,  684,    0,  684,  684,
-        0,    0,    0,    0,  684,  684,  684,  684,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  684,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  684,  684,  686,  686,  686,
-      686,  686,  686,    0,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  702,  702,  702,  702,  702,  702,  702,  702,
-      702,  702,  702,  702,  702,  702,  702,    0,  702,  702,
-        0,    0,    0,    0,  702,  702,  702,  702,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  702,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  702,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,  702,  702,  704,  704,  704,
+        0,    0,    0,    0,    0,    0,    0,  702,  702,  704,
+      704,    0,  704,  704,  704,  704,  704,  704,  704,  704,
       704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
       704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
       704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
       704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
       704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  720,  720,  720,  720,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  720,  720,    0,  720,  720,
-        0,    0,    0,    0,  720,  720,  720,  720,    0,    0,
+      704,  704,  704,  704,  717,  717,  717,  717,  717,  717,
+        0,  717,  717,  717,  717,  717,  717,  717,  717,    0,
+      717,  717,    0,    0,    0,    0,  717,  717,  717,  717,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  720,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  717,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  720,  720,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-
-      722,  722,  738,  738,  738,  738,  738,  738,  738,  738,
-      738,  738,  738,  738,  738,  738,  738,    0,  738,  738,
-        0,    0,    0,    0,  738,  738,  738,  738,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  717,  717,  719,
+      719,  719,  719,  719,  719,    0,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+
+      719,  719,  719,  719,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,    0,
+      735,  735,    0,    0,    0,    0,  735,  735,  735,  735,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  738,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  735,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  738,  738,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      740,  740,  753,  753,    0,  753,  753,  753,  753,  753,
-      753,  753,  753,  753,  753,  753,  753,    0,  753,  753,
-        0,    0,    0,    0,  753,  753,  753,  753,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  735,  735,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  753,  753,  753,  753,  753,  753,
+      753,  753,  753,  753,  753,  753,  753,  753,  753,    0,
+      753,  753,    0,    0,    0,    0,  753,  753,  753,  753,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  753,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  753,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  753,  753,  755,  755,    0,
+        0,    0,    0,    0,    0,    0,    0,  753,  753,  755,
 
       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
@@ -2195,194 +2209,241 @@
       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
-      755,  755,  815,  815,    0,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  825,  825,  825,
-      825,  825,  825,    0,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825, 1062,    0, 1062, 1062, 1062, 1062, 1062, 1062,
-
-     1062, 1062, 1062, 1063,    0,    0, 1063, 1063, 1064,    0,
-     1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065,
-     1065, 1065, 1065, 1065, 1065, 1065, 1065, 1066, 1066, 1066,
-     1066, 1067,    0, 1067,    0, 1067, 1067, 1067, 1067, 1068,
-     1068, 1068, 1068, 1068, 1068, 1068, 1069,    0, 1069, 1069,
-     1069, 1069, 1069, 1069, 1069, 1069, 1069, 1070,    0, 1070,
-     1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1071,    0,
-     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1072,
-        0, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
-     1073, 1073, 1073, 1073, 1073, 1073, 1073, 1074, 1074,    0,
-
-     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075,
-     1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076,
-     1076,    0, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
-     1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
-     1077, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078,
-     1078, 1078, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
-     1079, 1079, 1079, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
-     1080, 1080, 1080, 1080, 1081, 1081, 1081, 1081, 1081, 1081,
-     1081, 1081, 1081, 1081, 1081, 1082, 1082, 1082, 1082, 1082,
-     1082, 1082, 1082, 1082, 1082, 1082, 1083, 1083, 1083, 1083,
-
-     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084, 1084, 1084,
-     1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1085, 1085,
-     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1086,
-     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1087, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
-     1088, 1088, 1089,    0, 1089, 1089, 1089, 1089, 1089, 1089,
-     1089, 1089, 1089, 1090,    0, 1090, 1090, 1090, 1090, 1090,
-     1090, 1090, 1090, 1090, 1091,    0, 1091, 1091, 1091, 1091,
-     1091, 1091, 1091, 1091, 1091, 1092,    0, 1092, 1092, 1092,
-
-     1092, 1092, 1092, 1092, 1092, 1092, 1093,    0,    0, 1093,
-     1093, 1094,    0, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
-     1094, 1094, 1095,    0,    0, 1095, 1095, 1095, 1096,    0,
-        0, 1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098,
-     1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,    0,    0,
-        0,    0, 1099, 1099, 1099, 1099, 1100, 1100, 1100, 1100,
-     1100, 1100, 1101, 1101, 1101, 1101, 1102,    0, 1102, 1102,
-     1102, 1102, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104,
-        0, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
-     1105,    0, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
-
-     1105, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
-     1106, 1106, 1107,    0, 1107, 1107, 1107, 1107, 1107, 1107,
-     1107, 1107, 1107, 1108, 1108,    0, 1108, 1108, 1108, 1108,
-     1108, 1108, 1108, 1108, 1109, 1109, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1109, 1110, 1110,    0, 1110, 1110,
-     1110, 1110, 1110, 1110, 1110, 1110, 1111, 1111, 1111, 1111,
-     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112,
-     1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1113, 1113,
-     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1114,
-     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
-
-     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
-     1115, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-     1116, 1116, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
-     1117, 1117, 1117, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
-     1118, 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119,
-     1119, 1119, 1119, 1119, 1119, 1120, 1120, 1120, 1120, 1120,
-     1120, 1120, 1120, 1120, 1120, 1120, 1121, 1121, 1121, 1121,
-     1121, 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122,
-     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123,    0,
-     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1124,
-
-        0, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
-     1125,    0, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
-     1125, 1126,    0, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
-     1126, 1126, 1127,    0,    0, 1127, 1127, 1128,    0,    0,
-     1128, 1128, 1128, 1129,    0,    0, 1129, 1130,    0, 1130,
-     1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1131,    0,
-     1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1132,
-        0, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
-     1133, 1133, 1133, 1133, 1133, 1133, 1133, 1134, 1134, 1134,
-     1134, 1134, 1134, 1134, 1134, 1135, 1135, 1135, 1135, 1135,
-
-     1135, 1136,    0, 1136, 1136, 1136, 1136, 1137,    0, 1137,
-     1137, 1137, 1137, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
-     1139,    0, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
-     1139, 1140,    0, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
-     1140, 1140, 1141,    0, 1141, 1141, 1141, 1141, 1141, 1141,
-     1141, 1141, 1141, 1142,    0, 1142, 1142, 1142, 1142, 1142,
-     1142, 1142, 1142, 1142, 1143,    0, 1143, 1143, 1143, 1143,
-     1143, 1143, 1143, 1143, 1143, 1144, 1144, 1144, 1144, 1144,
-     1144, 1144, 1145, 1145,    0, 1145, 1145, 1145, 1145, 1145,
-     1145, 1145, 1145, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
-
-     1146, 1146, 1146, 1146, 1147, 1147,    0, 1147, 1147, 1147,
-     1147, 1147, 1147, 1147, 1147, 1148, 1148, 1148, 1148, 1148,
-     1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1149, 1149,
-     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150, 1150,
-     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1151, 1151,
-     1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1152,
-     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
-     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
-     1153, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
-     1154, 1154, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
-
-     1155, 1155, 1155, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
-     1156, 1156, 1156, 1156, 1157, 1157, 1157, 1157, 1157, 1157,
-     1157, 1157, 1157, 1157, 1157, 1158, 1158, 1158, 1158, 1158,
-     1158, 1158, 1158, 1158, 1158, 1158, 1159, 1159, 1159, 1159,
-     1159, 1159, 1159, 1159, 1159, 1159, 1159, 1160, 1160, 1160,
-     1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1161, 1161,
-     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1162,
-     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
-     1163,    0, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
-     1163, 1164,    0, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
-
-     1164, 1164, 1165,    0, 1165, 1165, 1165, 1165, 1165, 1165,
-     1165, 1165, 1165, 1166,    0, 1166, 1166, 1166, 1166, 1166,
-     1166, 1166, 1166, 1166, 1167,    0, 1167, 1167, 1167, 1167,
-     1167, 1167, 1167, 1167, 1167, 1168,    0,    0, 1168, 1168,
-     1168, 1169,    0, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
-     1169, 1169, 1170,    0, 1170, 1170, 1170, 1170, 1170, 1170,
-     1170, 1170, 1170, 1171,    0, 1171, 1171, 1171, 1171, 1171,
-     1171, 1171, 1171, 1171, 1172, 1172, 1172, 1172, 1172, 1172,
-     1172, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1174,
-        0, 1174, 1174, 1174, 1174, 1175,    0, 1175, 1175, 1175,
-
-     1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177,    0,
-     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178,
-        0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
-     1179,    0, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
-     1179, 1180,    0, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
-     1180, 1180, 1181,    0, 1181, 1181, 1181, 1181, 1181, 1181,
-     1181, 1181, 1181, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
-     1183, 1183,    0, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
-     1183, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
-     1184, 1184, 1185, 1185,    0, 1185, 1185, 1185, 1185, 1185,
-
-     1185, 1185, 1185, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
-     1186, 1186, 1186, 1186, 1187, 1187, 1187, 1187, 1187, 1187,
-     1187, 1187, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188,
-     1188, 1188, 1188, 1188, 1188, 1188, 1189, 1189, 1189, 1189,
-     1189, 1189, 1189, 1189, 1189, 1189, 1189, 1190, 1190, 1190,
-     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191,
-     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192,
-     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
-     1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
-     1193, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+      755,  755,  755,  755,  771,  771,  771,  771,  771,  771,
+      771,  771,  771,  771,  771,  771,  771,  771,  771,    0,
+      771,  771,    0,    0,    0,    0,  771,  771,  771,  771,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,  771,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  771,  771,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  786,  786,    0,  786,  786,  786,
+
+      786,  786,  786,  786,  786,  786,  786,  786,  786,    0,
+      786,  786,    0,    0,    0,    0,  786,  786,  786,  786,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  786,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  786,  786,  788,
+      788,    0,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  848,  848,    0,  848,  848,  848,
+      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
+      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
+      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
+      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
+      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
+      848,  848,  848,  848,  848,  848,  848,  848,  848,  858,
+      858,  858,  858,  858,  858,    0,  858,  858,  858,  858,
+
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858, 1095,    0, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095, 1095, 1095, 1096,    0,    0, 1096, 1096,
+     1097,    0, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
+     1097, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,
+     1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+
+     1100, 1100, 1100, 1100, 1101,    0, 1101,    0, 1101, 1101,
+     1101, 1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1103,
+        0, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1104,    0, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
+     1104, 1105,    0, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1105, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
+     1108, 1108,    0, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+     1108, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1110, 1110,    0, 1110, 1110, 1110, 1110, 1110,
+
+     1110, 1110, 1110, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
+     1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112, 1112, 1112,
+     1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114, 1114,
+     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1116, 1116,
+     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+     1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
+     1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
+
+     1119, 1119, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
+     1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1123,    0, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1124,    0, 1124, 1124,
+     1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125,    0, 1125,
+     1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1126,    0,
+     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1127,
+        0,    0, 1127, 1127, 1128,    0, 1128, 1128, 1128, 1128,
+     1128, 1128, 1128, 1128, 1128, 1129,    0,    0, 1129, 1129,
+
+     1129, 1130,    0,    0, 1130, 1131, 1131, 1131, 1131, 1131,
+     1131, 1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1133,    0,    0,    0,    0, 1133, 1133, 1133, 1133, 1134,
+     1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+     1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136, 1136, 1136,
+     1137,    0, 1137, 1137, 1137, 1137, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1139,    0, 1139, 1139, 1139, 1139, 1139,
+     1139, 1139, 1139, 1139, 1140,    0, 1140, 1140, 1140, 1140,
+     1140, 1140, 1140, 1140, 1140, 1141,    0, 1141, 1141, 1141,
+     1141, 1141, 1141, 1141, 1141, 1141, 1142,    0, 1142, 1142,
+
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143,    0,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1144, 1144,
+     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1145,
+     1145,    0, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
+     1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+     1146, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1151, 1151, 1151, 1151, 1151,
+
+     1151, 1151, 1151, 1151, 1151, 1151, 1152, 1152, 1152, 1152,
+     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1153, 1153,
+     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1155,
+     1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1157, 1157, 1158,    0, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1158, 1159,    0, 1159, 1159, 1159, 1159, 1159,
+     1159, 1159, 1159, 1159, 1160,    0, 1160, 1160, 1160, 1160,
+
+     1160, 1160, 1160, 1160, 1160, 1161,    0, 1161, 1161, 1161,
+     1161, 1161, 1161, 1161, 1161, 1161, 1162,    0,    0, 1162,
+     1162, 1163,    0,    0, 1163, 1163, 1163, 1164,    0,    0,
+     1164, 1165,    0, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1166,    0, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1167,    0, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1167, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,
+     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
+     1171, 1171, 1171, 1171, 1171, 1171, 1172,    0, 1172, 1172,
+
+     1172, 1172, 1173,    0, 1173, 1173, 1173, 1173, 1174, 1174,
+     1174, 1174, 1174, 1174, 1174, 1175,    0, 1175, 1175, 1175,
+     1175, 1175, 1175, 1175, 1175, 1175, 1176,    0, 1176, 1176,
+     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177,    0, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178,    0,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179,
+        0, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1181, 1181,    0,
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1182,
+     1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1183,
+
+     1183,    0, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
+     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
+     1184, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
+     1185, 1185, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
+     1186, 1186, 1186, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188, 1188,
+     1188, 1188, 1188, 1188, 1188, 1189, 1189, 1189, 1189, 1189,
+     1189, 1189, 1189, 1189, 1189, 1189, 1190, 1190, 1190, 1190,
+     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191, 1191,
+     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1192, 1192,
 
-     1194, 1194, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
-     1195, 1195, 1195, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
-     1196, 1196, 1196, 1196, 1197, 1197, 1197, 1197, 1197, 1197,
-     1197, 1197, 1197, 1197, 1197, 1198, 1198, 1198, 1198, 1198,
-     1198, 1198, 1198, 1198, 1198, 1198, 1199, 1199, 1199, 1199,
-     1199, 1199, 1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200,
-     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201,    0,
-     1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1202,
-        0, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
-     1203,    0, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
-
-     1203, 1204,    0, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
-     1204, 1204, 1205,    0, 1205, 1205, 1205, 1205, 1205, 1205,
-     1205, 1205, 1205, 1206,    0,    0, 1206, 1206, 1206, 1207,
-     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208,    0, 1208,
-     1208, 1208, 1208, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
-     1210,    0, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
-     1210, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1212, 1212,
-        0, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1061, 1061, 1061, 1061, 1061
+     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1193,
+     1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+     1195, 1195, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+     1197, 1197, 1197, 1197, 1198, 1198, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1198, 1198, 1199,    0, 1199, 1199, 1199,
+     1199, 1199, 1199, 1199, 1199, 1199, 1200,    0, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201,    0, 1201,
+
+     1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1202,    0,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1203,
+        0, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+     1204,    0,    0, 1204, 1204, 1204, 1205,    0, 1205, 1205,
+     1205, 1205, 1205, 1205, 1205, 1205, 1205, 1206,    0, 1206,
+     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1207,    0,
+     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208,
+     1208, 1208, 1208, 1208, 1208, 1208, 1209, 1209, 1209, 1209,
+     1209, 1209, 1209, 1209, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1210, 1210, 1210, 1210, 1211,    0, 1211, 1211, 1211,
+
+     1211, 1212,    0, 1212, 1212, 1212, 1212, 1213, 1213, 1213,
+     1213, 1213, 1213, 1213, 1214,    0, 1214, 1214, 1214, 1214,
+     1214, 1214, 1214, 1214, 1214, 1215,    0, 1215, 1215, 1215,
+     1215, 1215, 1215, 1215, 1215, 1215, 1216,    0, 1216, 1216,
+     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217,    0, 1217,
+     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1218,    0,
+     1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1219,
+     1219, 1219, 1219, 1219, 1219, 1219, 1220, 1220,    0, 1220,
+     1220, 1220, 1220, 1220, 1220, 1220, 1220, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1222, 1222,
+
+        0, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1223,
+     1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
+     1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224,
+     1224, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225,
+     1225, 1225, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
+     1226, 1226, 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
+     1227, 1227, 1227, 1227, 1228, 1228, 1228, 1228, 1228, 1228,
+     1228, 1228, 1228, 1228, 1228, 1229, 1229, 1229, 1229, 1229,
+     1229, 1229, 1229, 1229, 1229, 1229, 1230, 1230, 1230, 1230,
+     1230, 1230, 1230, 1230, 1230, 1230, 1230, 1231, 1231, 1231,
+
+     1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1232, 1232,
+     1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1233,
+     1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
+     1235, 1235, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
+     1237, 1237, 1237, 1237, 1238,    0, 1238, 1238, 1238, 1238,
+     1238, 1238, 1238, 1238, 1238, 1239,    0, 1239, 1239, 1239,
+     1239, 1239, 1239, 1239, 1239, 1239, 1240,    0, 1240, 1240,
+
+     1240, 1240, 1240, 1240, 1240, 1240, 1240, 1241,    0, 1241,
+     1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1242,    0,
+     1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1243,
+        0,    0, 1243, 1243, 1243, 1244, 1244, 1244, 1244, 1244,
+     1244, 1244, 1244, 1245, 1245, 1245, 1245, 1245, 1245, 1245,
+     1245, 1245, 1245, 1245, 1246,    0, 1246, 1246, 1246, 1246,
+     1247, 1247, 1247, 1247, 1247, 1247, 1247, 1248,    0, 1248,
+     1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1249, 1249,
+     1249, 1249, 1249, 1249, 1249, 1250, 1250,    0, 1250, 1250,
+     1250, 1250, 1250, 1250, 1250, 1250, 1094, 1094, 1094, 1094,
+
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
+     1094, 1094
     } ;
 
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[149] =
+    {   0,
+0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0,     };
+
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
  */
@@ -2460,10 +2521,14 @@
 
 static void include_file(PARROT_INTERP, char *file_name, ARGMOD(void *yyscanner));
 
+static int handle_identifier(PARROT_INTERP, YYSTYPE *valp, ARGIN(const char *id));
+
 #define YY_DECL int yylex(YYSTYPE *valp,yyscan_t yyscanner,PARROT_INTERP)
 
 #define YYCHOP() (yytext[--yyleng] = '\0')
 
+#define SET_LINE_NUMBER (IMCC_INFO(interp)->line = yylineno)
+
 #define DUP_AND_RET(valp, token)             \
   do {                                       \
       if (valp) (valp)->s = mem_sys_strdup(yytext); \
@@ -2489,7 +2554,7 @@
 
 
 
-#line 2493 "compilers/imcc/imclexer.c"
+#line 2558 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2734,7 +2799,7 @@
 	register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 152 "compilers/imcc/imcc.l"
+#line 157 "compilers/imcc/imcc.l"
 
         /* for emacs "*/
         if (IMCC_INFO(interp)->expect_pasm == 1 && !IMCC_INFO(interp)->in_pod) {
@@ -2753,7 +2818,7 @@
             return 0;
         }
 
-#line 2757 "compilers/imcc/imclexer.c"
+#line 2822 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -2807,13 +2872,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 1062 )
+				if ( yy_current_state >= 1095 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 1061 );
+		while ( yy_current_state != 1094 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -2822,6 +2887,18 @@
 
 		YY_DO_BEFORE_ACTION;
 
+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+			{
+			int yyl;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+			}
+
 do_action:	/* This label is used only to access EOF actions. */
 
 		switch ( yy_act )
@@ -2834,24 +2911,29 @@
 			goto yy_find_action;
 
 case 1:
-/* rule 1 can match eol */
 YY_RULE_SETUP
-#line 170 "compilers/imcc/imcc.l"
+#line 175 "compilers/imcc/imcc.l"
+{ SET_LINE_NUMBER; }
+	YY_BREAK
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+#line 177 "compilers/imcc/imcc.l"
 {
+            SET_LINE_NUMBER;
             IMCC_INFO(interp)->frames->heredoc_rest = mem_sys_strdup(yytext);
             BEGIN(heredoc2);
     }
 	YY_BREAK
-case 2:
-/* rule 2 can match eol */
+case 3:
+/* rule 3 can match eol */
 YY_RULE_SETUP
-#line 175 "compilers/imcc/imcc.l"
+#line 183 "compilers/imcc/imcc.l"
 {
         /* heredocs have highest priority
          * arrange them before all wildcard state matches */
 
         /* Newline in the heredoc. Realloc and cat on. */
-        IMCC_INFO(interp)->line++;
         IMCC_INFO(interp)->heredoc_content =
             (char*)mem_sys_realloc(IMCC_INFO(interp)->heredoc_content,
                             strlen(IMCC_INFO(interp)->heredoc_content) +
@@ -2860,10 +2942,11 @@
                strlen(IMCC_INFO(interp)->heredoc_content), yytext);
     }
 	YY_BREAK
-case 3:
+case 4:
 YY_RULE_SETUP
-#line 189 "compilers/imcc/imcc.l"
+#line 196 "compilers/imcc/imcc.l"
 {
+        SET_LINE_NUMBER;
         /* Are we at the end of the heredoc? */
         if (STREQ(IMCC_INFO(interp)->heredoc_end, yytext)) {
             /* End of the heredoc. */
@@ -2886,7 +2969,7 @@
             yy_pop_state(yyscanner);
             yy_scan_string(IMCC_INFO(interp)->frames->heredoc_rest,yyscanner);
 
-            /* the EOF rule will increment the line number; decrement here */
+            /* not sure we need this decrement; more testing needed */
             IMCC_INFO(interp)->line--;
             return STRINGC;
         }
@@ -2901,10 +2984,10 @@
         }
     }
 	YY_BREAK
-case 4:
-/* rule 4 can match eol */
+case 5:
+/* rule 5 can match eol */
 YY_RULE_SETUP
-#line 227 "compilers/imcc/imcc.l"
+#line 235 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt3, yyscanner);
@@ -2915,68 +2998,66 @@
         return FILECOMMENT;
     }
 	YY_BREAK
-case 5:
+case 6:
 YY_RULE_SETUP
-#line 237 "compilers/imcc/imcc.l"
+#line 245 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt4, yyscanner);
     }
 	YY_BREAK
-case 6:
+case 7:
 YY_RULE_SETUP
-#line 242 "compilers/imcc/imcc.l"
+#line 250 "compilers/imcc/imcc.l"
 { yy_push_state(cmt2, yyscanner); }
 	YY_BREAK
-case 7:
+case 8:
 YY_RULE_SETUP
-#line 244 "compilers/imcc/imcc.l"
+#line 252 "compilers/imcc/imcc.l"
 { yy_push_state(cmt1, yyscanner);  }
 	YY_BREAK
-case 8:
+case 9:
 YY_RULE_SETUP
-#line 246 "compilers/imcc/imcc.l"
+#line 254 "compilers/imcc/imcc.l"
 {
-        IMCC_INFO(interp)->line = atoi(yytext);
+        yylineno = IMCC_INFO(interp)->line = atoi(yytext);
         yy_pop_state(yyscanner);
         yy_push_state(cmt4, yyscanner);
         return LINECOMMENT;
     }
 	YY_BREAK
-case 9:
-/* rule 9 can match eol */
+case 10:
+/* rule 10 can match eol */
 YY_RULE_SETUP
-#line 253 "compilers/imcc/imcc.l"
+#line 261 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 	YY_BREAK
-case 10:
-/* rule 10 can match eol */
+case 11:
+/* rule 11 can match eol */
 YY_RULE_SETUP
-#line 258 "compilers/imcc/imcc.l"
+#line 265 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
 	YY_BREAK
-case 11:
+case 12:
 YY_RULE_SETUP
-#line 268 "compilers/imcc/imcc.l"
+#line 274 "compilers/imcc/imcc.l"
 {
         yy_push_state(cmt5, yyscanner);
     }
 	YY_BREAK
-case 12:
-/* rule 12 can match eol */
+case 13:
+/* rule 13 can match eol */
 YY_RULE_SETUP
-#line 272 "compilers/imcc/imcc.l"
+#line 278 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
@@ -2984,512 +3065,513 @@
             yy_pop_state(yyscanner);
 
         IMCC_INFO(interp)->expect_pasm = 0;
-        IMCC_INFO(interp)->line++;
 
         return '\n';
     }
 	YY_BREAK
-case 13:
-/* rule 13 can match eol */
+case 14:
+/* rule 14 can match eol */
 YY_RULE_SETUP
-#line 285 "compilers/imcc/imcc.l"
+#line 290 "compilers/imcc/imcc.l"
 {
     /* this is a stand-alone =cut, but we're not in POD mode, so ignore.  */
-    IMCC_INFO(interp)->line++;
+    SET_LINE_NUMBER;
 }
 	YY_BREAK
-case 14:
+case 15:
+/* rule 15 can match eol */
 YY_RULE_SETUP
-#line 290 "compilers/imcc/imcc.l"
+#line 295 "compilers/imcc/imcc.l"
 {
+        SET_LINE_NUMBER;
         IMCC_INFO(interp)->in_pod = 1;
         yy_push_state(pod, yyscanner);
     }
 	YY_BREAK
-case 15:
-/* rule 15 can match eol */
+case 16:
+/* rule 16 can match eol */
 YY_RULE_SETUP
-#line 295 "compilers/imcc/imcc.l"
+#line 301 "compilers/imcc/imcc.l"
 {
+        SET_LINE_NUMBER;
         IMCC_INFO(interp)->in_pod = 0;
         yy_pop_state(yyscanner);
-        IMCC_INFO(interp)->line++;
     }
 	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 301 "compilers/imcc/imcc.l"
-{ /*ignore*/ }
-	YY_BREAK
 case 17:
-/* rule 17 can match eol */
 YY_RULE_SETUP
-#line 303 "compilers/imcc/imcc.l"
-{ IMCC_INFO(interp)->line++; }
+#line 307 "compilers/imcc/imcc.l"
+{ SET_LINE_NUMBER; }
 	YY_BREAK
 case 18:
+/* rule 18 can match eol */
 YY_RULE_SETUP
-#line 305 "compilers/imcc/imcc.l"
-return TK_LINE;
+#line 309 "compilers/imcc/imcc.l"
+{ /* ignore */ }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 306 "compilers/imcc/imcc.l"
-return TK_FILE;
+#line 311 "compilers/imcc/imcc.l"
+return TK_LINE;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 307 "compilers/imcc/imcc.l"
-return ANNOTATE;
+#line 312 "compilers/imcc/imcc.l"
+return TK_FILE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 308 "compilers/imcc/imcc.l"
-return LEXICAL;
+#line 313 "compilers/imcc/imcc.l"
+return ANNOTATE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 309 "compilers/imcc/imcc.l"
-return ARG;
+#line 314 "compilers/imcc/imcc.l"
+return LEXICAL;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 310 "compilers/imcc/imcc.l"
-return SUB;
+#line 315 "compilers/imcc/imcc.l"
+return ARG;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 311 "compilers/imcc/imcc.l"
-return ESUB;
+#line 316 "compilers/imcc/imcc.l"
+return SUB;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 312 "compilers/imcc/imcc.l"
-return PCC_BEGIN;
+#line 317 "compilers/imcc/imcc.l"
+return ESUB;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 313 "compilers/imcc/imcc.l"
-return PCC_END;
+#line 318 "compilers/imcc/imcc.l"
+return PCC_BEGIN;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 314 "compilers/imcc/imcc.l"
-return PCC_CALL;
+#line 319 "compilers/imcc/imcc.l"
+return PCC_END;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 315 "compilers/imcc/imcc.l"
-return NCI_CALL;
+#line 320 "compilers/imcc/imcc.l"
+return PCC_CALL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 316 "compilers/imcc/imcc.l"
-return METH_CALL;
+#line 321 "compilers/imcc/imcc.l"
+return NCI_CALL;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 317 "compilers/imcc/imcc.l"
-return INVOCANT;
+#line 322 "compilers/imcc/imcc.l"
+return METH_CALL;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 318 "compilers/imcc/imcc.l"
-return PCC_SUB;
+#line 323 "compilers/imcc/imcc.l"
+return INVOCANT;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 319 "compilers/imcc/imcc.l"
-return PCC_BEGIN_RETURN;
+#line 324 "compilers/imcc/imcc.l"
+return PCC_SUB;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 320 "compilers/imcc/imcc.l"
-return PCC_END_RETURN;
+#line 325 "compilers/imcc/imcc.l"
+return PCC_BEGIN_RETURN;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 321 "compilers/imcc/imcc.l"
-return PCC_BEGIN_YIELD;
+#line 326 "compilers/imcc/imcc.l"
+return PCC_END_RETURN;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 322 "compilers/imcc/imcc.l"
-return PCC_END_YIELD;
+#line 327 "compilers/imcc/imcc.l"
+return PCC_BEGIN_YIELD;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 324 "compilers/imcc/imcc.l"
-return METHOD;
+#line 328 "compilers/imcc/imcc.l"
+return PCC_END_YIELD;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 325 "compilers/imcc/imcc.l"
-return MULTI;
+#line 330 "compilers/imcc/imcc.l"
+return METHOD;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 326 "compilers/imcc/imcc.l"
-return MAIN;
+#line 331 "compilers/imcc/imcc.l"
+return MULTI;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 327 "compilers/imcc/imcc.l"
-return LOAD;
+#line 332 "compilers/imcc/imcc.l"
+return MAIN;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 328 "compilers/imcc/imcc.l"
-return INIT;
+#line 333 "compilers/imcc/imcc.l"
+return LOAD;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 329 "compilers/imcc/imcc.l"
-return IMMEDIATE;
+#line 334 "compilers/imcc/imcc.l"
+return INIT;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 330 "compilers/imcc/imcc.l"
-return POSTCOMP;
+#line 335 "compilers/imcc/imcc.l"
+return IMMEDIATE;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 331 "compilers/imcc/imcc.l"
-return ANON;
+#line 336 "compilers/imcc/imcc.l"
+return POSTCOMP;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 332 "compilers/imcc/imcc.l"
-return OUTER;
+#line 337 "compilers/imcc/imcc.l"
+return ANON;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 333 "compilers/imcc/imcc.l"
-return NEED_LEX;
+#line 338 "compilers/imcc/imcc.l"
+return OUTER;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 334 "compilers/imcc/imcc.l"
-return VTABLE_METHOD;
+#line 339 "compilers/imcc/imcc.l"
+return NEED_LEX;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 335 "compilers/imcc/imcc.l"
-return NS_ENTRY;
+#line 340 "compilers/imcc/imcc.l"
+return VTABLE_METHOD;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 336 "compilers/imcc/imcc.l"
-return UNIQUE_REG;
+#line 341 "compilers/imcc/imcc.l"
+return NS_ENTRY;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 337 "compilers/imcc/imcc.l"
-return SUB_INSTANCE_OF;
+#line 342 "compilers/imcc/imcc.l"
+return UNIQUE_REG;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 338 "compilers/imcc/imcc.l"
-return SUBID;
+#line 343 "compilers/imcc/imcc.l"
+return SUB_INSTANCE_OF;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 340 "compilers/imcc/imcc.l"
-return RESULT;
+#line 344 "compilers/imcc/imcc.l"
+return SUBID;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 341 "compilers/imcc/imcc.l"
-return GET_RESULTS;
+#line 346 "compilers/imcc/imcc.l"
+return RESULT;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 342 "compilers/imcc/imcc.l"
-return YIELDT;
+#line 347 "compilers/imcc/imcc.l"
+return GET_RESULTS;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 343 "compilers/imcc/imcc.l"
-return SET_YIELD;
+#line 348 "compilers/imcc/imcc.l"
+return YIELDT;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 344 "compilers/imcc/imcc.l"
-return RETURN;
+#line 349 "compilers/imcc/imcc.l"
+return SET_YIELD;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 345 "compilers/imcc/imcc.l"
-return SET_RETURN;
+#line 350 "compilers/imcc/imcc.l"
+return RETURN;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 346 "compilers/imcc/imcc.l"
-return TAILCALL;
+#line 351 "compilers/imcc/imcc.l"
+return SET_RETURN;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 347 "compilers/imcc/imcc.l"
-return LOADLIB;
+#line 352 "compilers/imcc/imcc.l"
+return TAILCALL;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 349 "compilers/imcc/imcc.l"
-return ADV_FLAT;
+#line 353 "compilers/imcc/imcc.l"
+return LOADLIB;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 350 "compilers/imcc/imcc.l"
-return ADV_SLURPY;
+#line 355 "compilers/imcc/imcc.l"
+return ADV_FLAT;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 351 "compilers/imcc/imcc.l"
-return ADV_OPTIONAL;
+#line 356 "compilers/imcc/imcc.l"
+return ADV_SLURPY;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 352 "compilers/imcc/imcc.l"
-return ADV_OPT_FLAG;
+#line 357 "compilers/imcc/imcc.l"
+return ADV_OPTIONAL;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 353 "compilers/imcc/imcc.l"
-return ADV_NAMED;
+#line 358 "compilers/imcc/imcc.l"
+return ADV_OPT_FLAG;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 354 "compilers/imcc/imcc.l"
-return ADV_ARROW;
+#line 359 "compilers/imcc/imcc.l"
+return ADV_NAMED;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 355 "compilers/imcc/imcc.l"
-return ADV_INVOCANT;
+#line 360 "compilers/imcc/imcc.l"
+return ADV_ARROW;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 356 "compilers/imcc/imcc.l"
-return ADV_CALL_SIG;
+#line 361 "compilers/imcc/imcc.l"
+return ADV_INVOCANT;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 358 "compilers/imcc/imcc.l"
+#line 362 "compilers/imcc/imcc.l"
+return ADV_CALL_SIG;
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 364 "compilers/imcc/imcc.l"
 return NAMESPACE;
 	YY_BREAK
-case 68:
+case 69:
 YY_RULE_SETUP
-#line 359 "compilers/imcc/imcc.l"
+#line 365 "compilers/imcc/imcc.l"
 return HLL;
 	YY_BREAK
-case 69:
+case 70:
 YY_RULE_SETUP
-#line 361 "compilers/imcc/imcc.l"
+#line 367 "compilers/imcc/imcc.l"
 return LOCAL;
 	YY_BREAK
-case 70:
+case 71:
 YY_RULE_SETUP
-#line 362 "compilers/imcc/imcc.l"
+#line 368 "compilers/imcc/imcc.l"
 return CONST;
 	YY_BREAK
-case 71:
+case 72:
 YY_RULE_SETUP
-#line 363 "compilers/imcc/imcc.l"
+#line 369 "compilers/imcc/imcc.l"
 return GLOBAL_CONST;
 	YY_BREAK
-case 72:
+case 73:
 YY_RULE_SETUP
-#line 364 "compilers/imcc/imcc.l"
+#line 370 "compilers/imcc/imcc.l"
 return PARAM;
 	YY_BREAK
-case 73:
+case 74:
 YY_RULE_SETUP
-#line 365 "compilers/imcc/imcc.l"
+#line 371 "compilers/imcc/imcc.l"
 return GOTO;
 	YY_BREAK
-case 74:
+case 75:
 YY_RULE_SETUP
-#line 366 "compilers/imcc/imcc.l"
+#line 372 "compilers/imcc/imcc.l"
 return IF;
 	YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 367 "compilers/imcc/imcc.l"
+#line 373 "compilers/imcc/imcc.l"
 return UNLESS;
 	YY_BREAK
-case 76:
+case 77:
 YY_RULE_SETUP
-#line 368 "compilers/imcc/imcc.l"
+#line 374 "compilers/imcc/imcc.l"
 return PNULL;
 	YY_BREAK
-case 77:
+case 78:
 YY_RULE_SETUP
-#line 369 "compilers/imcc/imcc.l"
+#line 375 "compilers/imcc/imcc.l"
 return INTV;
 	YY_BREAK
-case 78:
+case 79:
 YY_RULE_SETUP
-#line 370 "compilers/imcc/imcc.l"
+#line 376 "compilers/imcc/imcc.l"
 return FLOATV;
 	YY_BREAK
-case 79:
+case 80:
 YY_RULE_SETUP
-#line 372 "compilers/imcc/imcc.l"
+#line 378 "compilers/imcc/imcc.l"
 return PMCV;
 	YY_BREAK
-case 80:
+case 81:
 YY_RULE_SETUP
-#line 373 "compilers/imcc/imcc.l"
+#line 379 "compilers/imcc/imcc.l"
 return STRINGV;
 	YY_BREAK
-case 81:
+case 82:
 YY_RULE_SETUP
-#line 374 "compilers/imcc/imcc.l"
+#line 380 "compilers/imcc/imcc.l"
 return SHIFT_LEFT;
 	YY_BREAK
-case 82:
+case 83:
 YY_RULE_SETUP
-#line 375 "compilers/imcc/imcc.l"
+#line 381 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT;
 	YY_BREAK
-case 83:
+case 84:
 YY_RULE_SETUP
-#line 376 "compilers/imcc/imcc.l"
+#line 382 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT_U;
 	YY_BREAK
-case 84:
+case 85:
 YY_RULE_SETUP
-#line 377 "compilers/imcc/imcc.l"
+#line 383 "compilers/imcc/imcc.l"
 return LOG_AND;
 	YY_BREAK
-case 85:
+case 86:
 YY_RULE_SETUP
-#line 378 "compilers/imcc/imcc.l"
+#line 384 "compilers/imcc/imcc.l"
 return LOG_OR;
 	YY_BREAK
-case 86:
+case 87:
 YY_RULE_SETUP
-#line 379 "compilers/imcc/imcc.l"
+#line 385 "compilers/imcc/imcc.l"
 return LOG_XOR;
 	YY_BREAK
-case 87:
+case 88:
 YY_RULE_SETUP
-#line 380 "compilers/imcc/imcc.l"
+#line 386 "compilers/imcc/imcc.l"
 return RELOP_LT;
 	YY_BREAK
-case 88:
+case 89:
 YY_RULE_SETUP
-#line 381 "compilers/imcc/imcc.l"
+#line 387 "compilers/imcc/imcc.l"
 return RELOP_LTE;
 	YY_BREAK
-case 89:
+case 90:
 YY_RULE_SETUP
-#line 382 "compilers/imcc/imcc.l"
+#line 388 "compilers/imcc/imcc.l"
 return RELOP_GT;
 	YY_BREAK
-case 90:
+case 91:
 YY_RULE_SETUP
-#line 383 "compilers/imcc/imcc.l"
+#line 389 "compilers/imcc/imcc.l"
 return RELOP_GTE;
 	YY_BREAK
-case 91:
+case 92:
 YY_RULE_SETUP
-#line 384 "compilers/imcc/imcc.l"
+#line 390 "compilers/imcc/imcc.l"
 return RELOP_EQ;
 	YY_BREAK
-case 92:
+case 93:
 YY_RULE_SETUP
-#line 385 "compilers/imcc/imcc.l"
+#line 391 "compilers/imcc/imcc.l"
 return RELOP_NE;
 	YY_BREAK
-case 93:
+case 94:
 YY_RULE_SETUP
-#line 386 "compilers/imcc/imcc.l"
+#line 392 "compilers/imcc/imcc.l"
 return POW;
 	YY_BREAK
-case 94:
+case 95:
 YY_RULE_SETUP
-#line 388 "compilers/imcc/imcc.l"
+#line 394 "compilers/imcc/imcc.l"
 return CONCAT;
 	YY_BREAK
-case 95:
+case 96:
 YY_RULE_SETUP
-#line 389 "compilers/imcc/imcc.l"
+#line 395 "compilers/imcc/imcc.l"
 return DOT;
 	YY_BREAK
-case 96:
+case 97:
 YY_RULE_SETUP
-#line 391 "compilers/imcc/imcc.l"
+#line 397 "compilers/imcc/imcc.l"
 return PLUS_ASSIGN;
 	YY_BREAK
-case 97:
+case 98:
 YY_RULE_SETUP
-#line 392 "compilers/imcc/imcc.l"
+#line 398 "compilers/imcc/imcc.l"
 return MINUS_ASSIGN;
 	YY_BREAK
-case 98:
+case 99:
 YY_RULE_SETUP
-#line 393 "compilers/imcc/imcc.l"
+#line 399 "compilers/imcc/imcc.l"
 return MUL_ASSIGN;
 	YY_BREAK
-case 99:
+case 100:
 YY_RULE_SETUP
-#line 394 "compilers/imcc/imcc.l"
+#line 400 "compilers/imcc/imcc.l"
 return DIV_ASSIGN;
 	YY_BREAK
-case 100:
+case 101:
 YY_RULE_SETUP
-#line 395 "compilers/imcc/imcc.l"
+#line 401 "compilers/imcc/imcc.l"
 return MOD_ASSIGN;
 	YY_BREAK
-case 101:
+case 102:
 YY_RULE_SETUP
-#line 396 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
 return FDIV;
 	YY_BREAK
-case 102:
+case 103:
 YY_RULE_SETUP
-#line 397 "compilers/imcc/imcc.l"
+#line 403 "compilers/imcc/imcc.l"
 return FDIV_ASSIGN;
 	YY_BREAK
-case 103:
+case 104:
 YY_RULE_SETUP
-#line 398 "compilers/imcc/imcc.l"
+#line 404 "compilers/imcc/imcc.l"
 return BAND_ASSIGN;
 	YY_BREAK
-case 104:
+case 105:
 YY_RULE_SETUP
-#line 399 "compilers/imcc/imcc.l"
+#line 405 "compilers/imcc/imcc.l"
 return BOR_ASSIGN;
 	YY_BREAK
-case 105:
+case 106:
 YY_RULE_SETUP
-#line 400 "compilers/imcc/imcc.l"
+#line 406 "compilers/imcc/imcc.l"
 return BXOR_ASSIGN;
 	YY_BREAK
-case 106:
+case 107:
 YY_RULE_SETUP
-#line 401 "compilers/imcc/imcc.l"
+#line 407 "compilers/imcc/imcc.l"
 return SHR_ASSIGN;
 	YY_BREAK
-case 107:
+case 108:
 YY_RULE_SETUP
-#line 402 "compilers/imcc/imcc.l"
+#line 408 "compilers/imcc/imcc.l"
 return SHL_ASSIGN;
 	YY_BREAK
-case 108:
+case 109:
 YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 409 "compilers/imcc/imcc.l"
 return SHR_U_ASSIGN;
 	YY_BREAK
-case 109:
+case 110:
 YY_RULE_SETUP
-#line 404 "compilers/imcc/imcc.l"
+#line 410 "compilers/imcc/imcc.l"
 return CONCAT_ASSIGN;
 	YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 406 "compilers/imcc/imcc.l"
+#line 412 "compilers/imcc/imcc.l"
 {
         char *macro_name   = NULL;
         int   start_cond   = YY_START;
@@ -3533,16 +3615,18 @@
         return MACRO;
     }
 	YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 449 "compilers/imcc/imcc.l"
+#line 455 "compilers/imcc/imcc.l"
 {
+        /* the initial whitespace catcher misses this one */
+        SET_LINE_NUMBER;
         return read_macro(valp, interp, yyscanner);
     }
 	YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 453 "compilers/imcc/imcc.l"
+#line 461 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
 
@@ -3555,9 +3639,9 @@
         include_file(interp, yytext + 1, yyscanner);
     }
 	YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 465 "compilers/imcc/imcc.l"
+#line 473 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3580,11 +3664,10 @@
         return LABEL;
     }
 	YY_BREAK
-case 114:
+case 115:
 YY_RULE_SETUP
-#line 487 "compilers/imcc/imcc.l"
+#line 495 "compilers/imcc/imcc.l"
 {
-
         if (valp) {
             char *label;
             size_t len;
@@ -3604,14 +3687,14 @@
         return IDENTIFIER;
      }
 	YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 508 "compilers/imcc/imcc.l"
+#line 515 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 510 "compilers/imcc/imcc.l"
+#line 517 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3622,9 +3705,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 117:
+case 118:
 YY_RULE_SETUP
-#line 520 "compilers/imcc/imcc.l"
+#line 527 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = mem_sys_strdup(yytext + 1);
         int failed = expand_macro(interp, macro_name, yyscanner);
@@ -3635,34 +3718,34 @@
         }
     }
 	YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 532 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, FLOATC);
-	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 533 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, INTC);
+#line 539 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 534 "compilers/imcc/imcc.l"
+#line 540 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 535 "compilers/imcc/imcc.l"
+#line 541 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 542 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 538 "compilers/imcc/imcc.l"
+#line 543 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, INTC);
+	YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 545 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
@@ -3673,18 +3756,18 @@
         return STRINGC;
     }
 	YY_BREAK
-case 124:
+case 125:
 YY_RULE_SETUP
-#line 548 "compilers/imcc/imcc.l"
+#line 555 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
         return STRINGC;
     }
 	YY_BREAK
-case 125:
+case 126:
 YY_RULE_SETUP
-#line 554 "compilers/imcc/imcc.l"
+#line 561 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3713,9 +3796,9 @@
         yy_push_state(heredoc1, yyscanner);
     }
 	YY_BREAK
-case 126:
+case 127:
 YY_RULE_SETUP
-#line 582 "compilers/imcc/imcc.l"
+#line 589 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = mem_sys_strdup(yytext);
@@ -3724,9 +3807,9 @@
         return USTRINGC;
     }
 	YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 590 "compilers/imcc/imcc.l"
+#line 597 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3735,9 +3818,9 @@
         return IREG;
     }
 	YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 598 "compilers/imcc/imcc.l"
+#line 605 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3746,9 +3829,9 @@
         return NREG;
     }
 	YY_BREAK
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 606 "compilers/imcc/imcc.l"
+#line 613 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3757,9 +3840,9 @@
         return SREG;
     }
 	YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 614 "compilers/imcc/imcc.l"
+#line 621 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3768,17 +3851,17 @@
         return PREG;
     }
 	YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 622 "compilers/imcc/imcc.l"
+#line 629 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
     }
 	YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 627 "compilers/imcc/imcc.l"
+#line 634 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3790,52 +3873,26 @@
         return REG;
     }
 	YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 638 "compilers/imcc/imcc.l"
-{
-        if (!IMCC_INFO(interp)->is_def) {
-            SymReg *r = find_sym(interp, yytext);
-
-            if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
-                valp->sr = r;
-                return VAR;
-            }
-
-            if (IMCC_INFO(interp)->cur_unit
-            &&  IMCC_INFO(interp)->cur_unit->instructions
-            && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
-            &&  r->pcc_sub)
-            {
-                if (((r->pcc_sub->pragma & P_METHOD)
-                ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
-                &&   !strcmp(yytext, "self")) {
-                    valp->sr = mk_ident(interp, "self", 'P');
-                    IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
-                    return VAR;
-                }
-            }
-        }
-
-        valp->s = mem_sys_strdup(yytext);
-        return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
-    }
+#line 646 "compilers/imcc/imcc.l"
+{ return handle_identifier(interp, valp, yytext); }
 	YY_BREAK
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 667 "compilers/imcc/imcc.l"
+#line 648 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 669 "compilers/imcc/imcc.l"
+#line 650 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 674 "compilers/imcc/imcc.l"
+#line 655 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3848,31 +3905,34 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 685 "compilers/imcc/imcc.l"
+#line 666 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 136:
+case 137:
 YY_RULE_SETUP
-#line 687 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, ENDM);
+#line 668 "compilers/imcc/imcc.l"
+{
+        /* the initial whitespace catcher misses this one */
+        SET_LINE_NUMBER;
+        DUP_AND_RET(valp, ENDM);
+}
 	YY_BREAK
-case 137:
-/* rule 137 can match eol */
+case 138:
+/* rule 138 can match eol */
 YY_RULE_SETUP
-#line 689 "compilers/imcc/imcc.l"
+#line 674 "compilers/imcc/imcc.l"
 {
-        IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
     }
 	YY_BREAK
-case 138:
+case 139:
 YY_RULE_SETUP
-#line 694 "compilers/imcc/imcc.l"
+#line 678 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 696 "compilers/imcc/imcc.l"
+#line 680 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3897,9 +3957,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 140:
+case 141:
 YY_RULE_SETUP
-#line 720 "compilers/imcc/imcc.l"
+#line 704 "compilers/imcc/imcc.l"
 {
     if (valp) {
         if (!IMCC_INFO(interp)->cur_macro_name) {
@@ -3928,51 +3988,46 @@
     return IDENTIFIER;
 }
 	YY_BREAK
-case 141:
-YY_RULE_SETUP
-#line 748 "compilers/imcc/imcc.l"
-/* skip leading ws */;
-	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 749 "compilers/imcc/imcc.l"
+#line 732 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 750 "compilers/imcc/imcc.l"
+#line 733 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 751 "compilers/imcc/imcc.l"
+#line 734 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 752 "compilers/imcc/imcc.l"
+#line 735 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 753 "compilers/imcc/imcc.l"
+#line 736 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, MACRO);
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 754 "compilers/imcc/imcc.l"
+#line 737 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 755 "compilers/imcc/imcc.l"
+#line 738 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 757 "compilers/imcc/imcc.l"
+#line 740 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 3976 "compilers/imcc/imclexer.c"
+#line 4031 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4275,7 +4330,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 1062 )
+			if ( yy_current_state >= 1095 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4304,11 +4359,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 1062 )
+		if ( yy_current_state >= 1095 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1061);
+	yy_is_jam = (yy_current_state == 1094);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4346,6 +4401,10 @@
 
 	*--yy_cp = (char) c;
 
+    if ( c == '\n' ){
+        --yylineno;
+    }
+
 	yyg->yytext_ptr = yy_bp;
 	yyg->yy_hold_char = *yy_cp;
 	yyg->yy_c_buf_p = yy_cp;
@@ -4423,6 +4482,12 @@
 	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
 
 	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
+		   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
 
 	return c;
 }
@@ -5174,7 +5239,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 757 "compilers/imcc/imcc.l"
+#line 740 "compilers/imcc/imcc.l"
 
 
 
@@ -5236,6 +5301,9 @@
     frame->s.next             = (parser_state_t *)IMCC_INFO(interp)->frames;
     IMCC_INFO(interp)->frames = frame;
 
+    /* start at the effective *starting line* of the macro */
+    IMCC_INFO(interp)->line   = frame->s.line - 2;
+
     yy_scan_string(expansion,yyscanner);
 }
 
@@ -5491,9 +5559,6 @@
     IMCC_INFO(interp)->macro_buffer   = NULL;
     IMCC_INFO(interp)->cur_macro_name = NULL;
 
-    /* the ENDM rule doesn't set the line number */
-    IMCC_INFO(interp)->line--;
-
     return MACRO;
 }
 
@@ -5654,8 +5719,6 @@
             }
         }
 
-        /* let the normal EOF rules match line numbers */
-        IMCC_INFO(interp)->line = m->line - 1;
         scan_string(frame, m->expansion, yyscanner);
 
         return 1;
@@ -5705,14 +5768,18 @@
 scan_file(PARROT_INTERP, macro_frame_t *frame, FILE *file, void *yyscanner)
 {
     yyguts_t * const yyg      = (yyguts_t *)yyscanner;
+    const      int   oldline  = IMCC_INFO(interp)->line;
     frame->buffer             = YY_CURRENT_BUFFER;
     frame->s.next             = (parser_state_t *)IMCC_INFO(interp)->frames;
     IMCC_INFO(interp)->frames = frame;
     IMCC_INFO(interp)->state  = (parser_state_t *)IMCC_INFO(interp)->frames;
 
-    IMCC_INFO(interp)->line   = 1;
+    /* let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line   = 0;
 
     yy_switch_to_buffer(yy_create_buffer(file,YY_BUF_SIZE,yyscanner),yyscanner);
+
+    IMCC_INFO(interp)->line   = oldline;
 }
 
 void
@@ -5889,6 +5956,36 @@
     return yyg->yy_hold_char == '\0';
 }
 
+static int
+handle_identifier(PARROT_INTERP, YYSTYPE *valp, const char *text)
+{
+    if (!IMCC_INFO(interp)->is_def) {
+        SymReg *r = find_sym(interp, text);
+
+        if (r && (r->type & (VTIDENTIFIER|VT_CONSTP))) {
+            valp->sr = r;
+            return VAR;
+        }
+
+        if (IMCC_INFO(interp)->cur_unit
+        &&  IMCC_INFO(interp)->cur_unit->instructions
+        && (r = IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
+        &&  r->pcc_sub)
+        {
+            if (((r->pcc_sub->pragma & P_METHOD)
+            ||   (IMCC_INFO(interp)->cur_unit->is_vtable_method))
+            &&   !strcmp(text, "self")) {
+                valp->sr = mk_ident(interp, "self", 'P');
+                IMCC_INFO(interp)->cur_unit->type |= IMC_HAS_SELF;
+                return VAR;
+            }
+        }
+    }
+
+    valp->s = mem_sys_strdup(text);
+    return (!IMCC_INFO(interp)->is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
+}
+
 /*
  * Local variables:
  *   c-file-style: "parrot"

Modified: branches/ops_pct/compilers/imcc/imcparser.c
==============================================================================
--- branches/ops_pct/compilers/imcc/imcparser.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/imcparser.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1184,245 +1184,247 @@
    enum yytokentype {
      LOW_PREC = 258,
      PARAM = 259,
-     HLL = 260,
-     TK_LINE = 261,
-     TK_FILE = 262,
-     GOTO = 263,
-     ARG = 264,
-     IF = 265,
-     UNLESS = 266,
-     PNULL = 267,
-     SET_RETURN = 268,
-     SET_YIELD = 269,
-     ADV_FLAT = 270,
-     ADV_SLURPY = 271,
-     ADV_OPTIONAL = 272,
-     ADV_OPT_FLAG = 273,
-     ADV_NAMED = 274,
-     ADV_ARROW = 275,
-     NEW = 276,
-     ADV_INVOCANT = 277,
-     ADV_CALL_SIG = 278,
-     NAMESPACE = 279,
-     DOT_METHOD = 280,
-     SUB = 281,
-     SYM = 282,
-     LOCAL = 283,
-     LEXICAL = 284,
-     CONST = 285,
-     ANNOTATE = 286,
-     INC = 287,
-     DEC = 288,
-     GLOBAL_CONST = 289,
-     PLUS_ASSIGN = 290,
-     MINUS_ASSIGN = 291,
-     MUL_ASSIGN = 292,
-     DIV_ASSIGN = 293,
-     CONCAT_ASSIGN = 294,
-     BAND_ASSIGN = 295,
-     BOR_ASSIGN = 296,
-     BXOR_ASSIGN = 297,
-     FDIV = 298,
-     FDIV_ASSIGN = 299,
-     MOD_ASSIGN = 300,
-     SHR_ASSIGN = 301,
-     SHL_ASSIGN = 302,
-     SHR_U_ASSIGN = 303,
-     SHIFT_LEFT = 304,
-     SHIFT_RIGHT = 305,
-     INTV = 306,
-     FLOATV = 307,
-     STRINGV = 308,
-     PMCV = 309,
-     LOG_XOR = 310,
-     RELOP_EQ = 311,
-     RELOP_NE = 312,
-     RELOP_GT = 313,
-     RELOP_GTE = 314,
-     RELOP_LT = 315,
-     RELOP_LTE = 316,
-     RESULT = 317,
-     RETURN = 318,
-     TAILCALL = 319,
-     YIELDT = 320,
-     GET_RESULTS = 321,
-     POW = 322,
-     SHIFT_RIGHT_U = 323,
-     LOG_AND = 324,
-     LOG_OR = 325,
-     COMMA = 326,
-     ESUB = 327,
-     DOTDOT = 328,
-     PCC_BEGIN = 329,
-     PCC_END = 330,
-     PCC_CALL = 331,
-     PCC_SUB = 332,
-     PCC_BEGIN_RETURN = 333,
-     PCC_END_RETURN = 334,
-     PCC_BEGIN_YIELD = 335,
-     PCC_END_YIELD = 336,
-     NCI_CALL = 337,
-     METH_CALL = 338,
-     INVOCANT = 339,
-     MAIN = 340,
-     LOAD = 341,
-     INIT = 342,
-     IMMEDIATE = 343,
-     POSTCOMP = 344,
-     METHOD = 345,
-     ANON = 346,
-     OUTER = 347,
-     NEED_LEX = 348,
-     MULTI = 349,
-     VTABLE_METHOD = 350,
-     LOADLIB = 351,
-     SUB_INSTANCE_OF = 352,
-     SUBID = 353,
-     NS_ENTRY = 354,
-     UNIQUE_REG = 355,
-     LABEL = 356,
-     EMIT = 357,
-     EOM = 358,
-     IREG = 359,
-     NREG = 360,
-     SREG = 361,
-     PREG = 362,
-     IDENTIFIER = 363,
-     REG = 364,
-     MACRO = 365,
-     ENDM = 366,
-     STRINGC = 367,
-     INTC = 368,
-     FLOATC = 369,
-     USTRINGC = 370,
-     PARROT_OP = 371,
-     VAR = 372,
-     LINECOMMENT = 373,
-     FILECOMMENT = 374,
-     DOT = 375,
-     CONCAT = 376
+     SOL = 260,
+     HLL = 261,
+     TK_LINE = 262,
+     TK_FILE = 263,
+     GOTO = 264,
+     ARG = 265,
+     IF = 266,
+     UNLESS = 267,
+     PNULL = 268,
+     SET_RETURN = 269,
+     SET_YIELD = 270,
+     ADV_FLAT = 271,
+     ADV_SLURPY = 272,
+     ADV_OPTIONAL = 273,
+     ADV_OPT_FLAG = 274,
+     ADV_NAMED = 275,
+     ADV_ARROW = 276,
+     NEW = 277,
+     ADV_INVOCANT = 278,
+     ADV_CALL_SIG = 279,
+     NAMESPACE = 280,
+     DOT_METHOD = 281,
+     SUB = 282,
+     SYM = 283,
+     LOCAL = 284,
+     LEXICAL = 285,
+     CONST = 286,
+     ANNOTATE = 287,
+     INC = 288,
+     DEC = 289,
+     GLOBAL_CONST = 290,
+     PLUS_ASSIGN = 291,
+     MINUS_ASSIGN = 292,
+     MUL_ASSIGN = 293,
+     DIV_ASSIGN = 294,
+     CONCAT_ASSIGN = 295,
+     BAND_ASSIGN = 296,
+     BOR_ASSIGN = 297,
+     BXOR_ASSIGN = 298,
+     FDIV = 299,
+     FDIV_ASSIGN = 300,
+     MOD_ASSIGN = 301,
+     SHR_ASSIGN = 302,
+     SHL_ASSIGN = 303,
+     SHR_U_ASSIGN = 304,
+     SHIFT_LEFT = 305,
+     SHIFT_RIGHT = 306,
+     INTV = 307,
+     FLOATV = 308,
+     STRINGV = 309,
+     PMCV = 310,
+     LOG_XOR = 311,
+     RELOP_EQ = 312,
+     RELOP_NE = 313,
+     RELOP_GT = 314,
+     RELOP_GTE = 315,
+     RELOP_LT = 316,
+     RELOP_LTE = 317,
+     RESULT = 318,
+     RETURN = 319,
+     TAILCALL = 320,
+     YIELDT = 321,
+     GET_RESULTS = 322,
+     POW = 323,
+     SHIFT_RIGHT_U = 324,
+     LOG_AND = 325,
+     LOG_OR = 326,
+     COMMA = 327,
+     ESUB = 328,
+     DOTDOT = 329,
+     PCC_BEGIN = 330,
+     PCC_END = 331,
+     PCC_CALL = 332,
+     PCC_SUB = 333,
+     PCC_BEGIN_RETURN = 334,
+     PCC_END_RETURN = 335,
+     PCC_BEGIN_YIELD = 336,
+     PCC_END_YIELD = 337,
+     NCI_CALL = 338,
+     METH_CALL = 339,
+     INVOCANT = 340,
+     MAIN = 341,
+     LOAD = 342,
+     INIT = 343,
+     IMMEDIATE = 344,
+     POSTCOMP = 345,
+     METHOD = 346,
+     ANON = 347,
+     OUTER = 348,
+     NEED_LEX = 349,
+     MULTI = 350,
+     VTABLE_METHOD = 351,
+     LOADLIB = 352,
+     SUB_INSTANCE_OF = 353,
+     SUBID = 354,
+     NS_ENTRY = 355,
+     UNIQUE_REG = 356,
+     LABEL = 357,
+     EMIT = 358,
+     EOM = 359,
+     IREG = 360,
+     NREG = 361,
+     SREG = 362,
+     PREG = 363,
+     IDENTIFIER = 364,
+     REG = 365,
+     MACRO = 366,
+     ENDM = 367,
+     STRINGC = 368,
+     INTC = 369,
+     FLOATC = 370,
+     USTRINGC = 371,
+     PARROT_OP = 372,
+     VAR = 373,
+     LINECOMMENT = 374,
+     FILECOMMENT = 375,
+     DOT = 376,
+     CONCAT = 377
    };
 #endif
 /* Tokens.  */
 #define LOW_PREC 258
 #define PARAM 259
-#define HLL 260
-#define TK_LINE 261
-#define TK_FILE 262
-#define GOTO 263
-#define ARG 264
-#define IF 265
-#define UNLESS 266
-#define PNULL 267
-#define SET_RETURN 268
-#define SET_YIELD 269
-#define ADV_FLAT 270
-#define ADV_SLURPY 271
-#define ADV_OPTIONAL 272
-#define ADV_OPT_FLAG 273
-#define ADV_NAMED 274
-#define ADV_ARROW 275
-#define NEW 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 INC 287
-#define DEC 288
-#define GLOBAL_CONST 289
-#define PLUS_ASSIGN 290
-#define MINUS_ASSIGN 291
-#define MUL_ASSIGN 292
-#define DIV_ASSIGN 293
-#define CONCAT_ASSIGN 294
-#define BAND_ASSIGN 295
-#define BOR_ASSIGN 296
-#define BXOR_ASSIGN 297
-#define FDIV 298
-#define FDIV_ASSIGN 299
-#define MOD_ASSIGN 300
-#define SHR_ASSIGN 301
-#define SHL_ASSIGN 302
-#define SHR_U_ASSIGN 303
-#define SHIFT_LEFT 304
-#define SHIFT_RIGHT 305
-#define INTV 306
-#define FLOATV 307
-#define STRINGV 308
-#define PMCV 309
-#define LOG_XOR 310
-#define RELOP_EQ 311
-#define RELOP_NE 312
-#define RELOP_GT 313
-#define RELOP_GTE 314
-#define RELOP_LT 315
-#define RELOP_LTE 316
-#define RESULT 317
-#define RETURN 318
-#define TAILCALL 319
-#define YIELDT 320
-#define GET_RESULTS 321
-#define POW 322
-#define SHIFT_RIGHT_U 323
-#define LOG_AND 324
-#define LOG_OR 325
-#define COMMA 326
-#define ESUB 327
-#define DOTDOT 328
-#define PCC_BEGIN 329
-#define PCC_END 330
-#define PCC_CALL 331
-#define PCC_SUB 332
-#define PCC_BEGIN_RETURN 333
-#define PCC_END_RETURN 334
-#define PCC_BEGIN_YIELD 335
-#define PCC_END_YIELD 336
-#define NCI_CALL 337
-#define METH_CALL 338
-#define INVOCANT 339
-#define MAIN 340
-#define LOAD 341
-#define INIT 342
-#define IMMEDIATE 343
-#define POSTCOMP 344
-#define METHOD 345
-#define ANON 346
-#define OUTER 347
-#define NEED_LEX 348
-#define MULTI 349
-#define VTABLE_METHOD 350
-#define LOADLIB 351
-#define SUB_INSTANCE_OF 352
-#define SUBID 353
-#define NS_ENTRY 354
-#define UNIQUE_REG 355
-#define LABEL 356
-#define EMIT 357
-#define EOM 358
-#define IREG 359
-#define NREG 360
-#define SREG 361
-#define PREG 362
-#define IDENTIFIER 363
-#define REG 364
-#define MACRO 365
-#define ENDM 366
-#define STRINGC 367
-#define INTC 368
-#define FLOATC 369
-#define USTRINGC 370
-#define PARROT_OP 371
-#define VAR 372
-#define LINECOMMENT 373
-#define FILECOMMENT 374
-#define DOT 375
-#define CONCAT 376
+#define SOL 260
+#define HLL 261
+#define TK_LINE 262
+#define TK_FILE 263
+#define GOTO 264
+#define ARG 265
+#define IF 266
+#define UNLESS 267
+#define PNULL 268
+#define SET_RETURN 269
+#define SET_YIELD 270
+#define ADV_FLAT 271
+#define ADV_SLURPY 272
+#define ADV_OPTIONAL 273
+#define ADV_OPT_FLAG 274
+#define ADV_NAMED 275
+#define ADV_ARROW 276
+#define NEW 277
+#define ADV_INVOCANT 278
+#define ADV_CALL_SIG 279
+#define NAMESPACE 280
+#define DOT_METHOD 281
+#define SUB 282
+#define SYM 283
+#define LOCAL 284
+#define LEXICAL 285
+#define CONST 286
+#define ANNOTATE 287
+#define INC 288
+#define DEC 289
+#define GLOBAL_CONST 290
+#define PLUS_ASSIGN 291
+#define MINUS_ASSIGN 292
+#define MUL_ASSIGN 293
+#define DIV_ASSIGN 294
+#define CONCAT_ASSIGN 295
+#define BAND_ASSIGN 296
+#define BOR_ASSIGN 297
+#define BXOR_ASSIGN 298
+#define FDIV 299
+#define FDIV_ASSIGN 300
+#define MOD_ASSIGN 301
+#define SHR_ASSIGN 302
+#define SHL_ASSIGN 303
+#define SHR_U_ASSIGN 304
+#define SHIFT_LEFT 305
+#define SHIFT_RIGHT 306
+#define INTV 307
+#define FLOATV 308
+#define STRINGV 309
+#define PMCV 310
+#define LOG_XOR 311
+#define RELOP_EQ 312
+#define RELOP_NE 313
+#define RELOP_GT 314
+#define RELOP_GTE 315
+#define RELOP_LT 316
+#define RELOP_LTE 317
+#define RESULT 318
+#define RETURN 319
+#define TAILCALL 320
+#define YIELDT 321
+#define GET_RESULTS 322
+#define POW 323
+#define SHIFT_RIGHT_U 324
+#define LOG_AND 325
+#define LOG_OR 326
+#define COMMA 327
+#define ESUB 328
+#define DOTDOT 329
+#define PCC_BEGIN 330
+#define PCC_END 331
+#define PCC_CALL 332
+#define PCC_SUB 333
+#define PCC_BEGIN_RETURN 334
+#define PCC_END_RETURN 335
+#define PCC_BEGIN_YIELD 336
+#define PCC_END_YIELD 337
+#define NCI_CALL 338
+#define METH_CALL 339
+#define INVOCANT 340
+#define MAIN 341
+#define LOAD 342
+#define INIT 343
+#define IMMEDIATE 344
+#define POSTCOMP 345
+#define METHOD 346
+#define ANON 347
+#define OUTER 348
+#define NEED_LEX 349
+#define MULTI 350
+#define VTABLE_METHOD 351
+#define LOADLIB 352
+#define SUB_INSTANCE_OF 353
+#define SUBID 354
+#define NS_ENTRY 355
+#define UNIQUE_REG 356
+#define LABEL 357
+#define EMIT 358
+#define EOM 359
+#define IREG 360
+#define NREG 361
+#define SREG 362
+#define PREG 363
+#define IDENTIFIER 364
+#define REG 365
+#define MACRO 366
+#define ENDM 367
+#define STRINGC 368
+#define INTC 369
+#define FLOATC 370
+#define USTRINGC 371
+#define PARROT_OP 372
+#define VAR 373
+#define LINECOMMENT 374
+#define FILECOMMENT 375
+#define DOT 376
+#define CONCAT 377
 
 
 
@@ -1443,7 +1445,7 @@
 
 
 /* Line 214 of yacc.c  */
-#line 1436 "compilers/imcc/imcparser.c"
+#line 1438 "compilers/imcc/imcparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1455,7 +1457,7 @@
 
 
 /* Line 264 of yacc.c  */
-#line 1448 "compilers/imcc/imcparser.c"
+#line 1450 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1670,10 +1672,10 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   659
+#define YYLAST   686
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  139
+#define YYNTOKENS  140
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
@@ -1683,7 +1685,7 @@
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   376
+#define YYMAXUTOK   377
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1694,16 +1696,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        4,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   129,     2,     2,     2,   135,   136,     2,
-     126,   127,   133,   132,     2,   131,     2,   134,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   138,
-       2,   123,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   130,     2,     2,     2,   136,   137,     2,
+     127,   128,   134,   133,     2,   132,     2,   135,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   139,
+       2,   124,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   124,     2,   125,     2,     2,     2,     2,     2,     2,
+       2,   125,     2,   126,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     128,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,   137,     2,   130,     2,     2,     2,
+     129,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,   138,     2,   131,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1728,7 +1730,7 @@
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122
+     116,   117,   118,   119,   120,   121,   122,   123
 };
 
 #if YYDEBUG
@@ -1775,102 +1777,102 @@
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     140,     0,    -1,   141,    -1,   142,    -1,   141,   142,    -1,
-     162,    -1,   147,    -1,   164,    -1,   159,    -1,   111,     4,
-      -1,   143,    -1,   144,    -1,     4,    -1,   146,     4,    -1,
-      97,   113,     4,    -1,     7,   114,    72,   113,     4,    -1,
-       8,   113,     4,    -1,    32,   113,    72,   264,    -1,     6,
-     113,    -1,    -1,    31,   148,   223,   109,   123,   264,    -1,
-      -1,    31,   150,   114,   255,   123,   152,    -1,    -1,    31,
-     151,   113,   255,   123,   152,    -1,   113,    -1,   116,    -1,
-     154,    -1,   153,   154,    -1,   212,   155,     4,    -1,   111,
-       4,    -1,   120,    -1,   119,    -1,   162,    -1,   149,    -1,
-     143,    -1,    -1,   156,   117,   158,    -1,    -1,    78,   157,
-     186,   102,    -1,    13,   256,    -1,    30,   113,    72,   110,
-      -1,    -1,   249,    -1,    -1,   103,   160,   161,   104,    -1,
-      -1,   153,    -1,    25,   163,     4,    -1,   124,   257,   125,
-      -1,   124,   125,    -1,    -1,    -1,    -1,    27,   165,   252,
-     166,   186,     4,   167,   168,   181,    73,    -1,    -1,     4,
-      -1,   168,   169,     4,    -1,    -1,     5,   170,   171,    -1,
-     223,   109,   195,    -1,    95,   126,   179,   127,    -1,    93,
-     126,   113,   127,    -1,    93,   126,   109,   127,    -1,    96,
-      -1,    96,   126,   113,   127,    -1,    91,    -1,    91,   126,
-     152,   127,    -1,   100,    -1,   100,   126,   152,   127,    -1,
-      98,   126,   113,   127,    -1,    99,    -1,    99,   126,   152,
-     127,    -1,    -1,   179,    72,   180,    -1,   180,    -1,    52,
-      -1,    53,    -1,    55,    -1,    54,    -1,   109,    -1,   113,
-      -1,   124,   257,   125,    -1,    -1,   209,    -1,    -1,    75,
-       4,   183,   190,   185,   189,   184,   192,    76,    -1,    -1,
-     214,     4,    -1,    -1,    85,   256,     4,    -1,    -1,   187,
-      -1,   188,    -1,   187,   188,    -1,    87,    -1,    88,    -1,
-      86,    -1,    89,    -1,    90,    -1,    92,    -1,    94,    -1,
-     172,    -1,   173,    -1,   174,    -1,   175,    -1,   176,    -1,
-     177,    -1,   178,    -1,    77,   256,    72,   256,     4,    -1,
-      77,   256,     4,    -1,    83,   256,     4,    -1,    84,   248,
-       4,    -1,    84,   113,     4,    -1,    84,   248,    72,   256,
-       4,    -1,    84,   113,    72,   256,     4,    -1,    -1,   190,
-     191,     4,    -1,    10,   238,    -1,    -1,   192,   193,     4,
-      -1,    63,   248,   195,    -1,    -1,    29,   194,   223,   217,
-      -1,    -1,   195,   196,    -1,    17,    -1,    18,    -1,    19,
-      -1,    20,    -1,    20,   126,   113,   127,    -1,    20,   126,
-     116,   127,    -1,   101,    -1,    24,    -1,    -1,    79,     4,
-     198,   201,    80,    -1,   205,    -1,    -1,    81,     4,   200,
-     202,    82,    -1,    -1,   201,     4,    -1,   201,   203,     4,
-      -1,    -1,   202,     4,    -1,   202,   204,     4,    -1,    14,
-     256,   239,    -1,    15,   256,   239,    -1,    -1,   207,   126,
-     206,   208,   127,    -1,    64,    -1,    66,    -1,    -1,   238,
-      -1,   113,    21,   256,    -1,   208,    72,   238,    -1,   208,
-      72,   113,    21,   256,    -1,   211,    -1,   209,   211,    -1,
-      -1,   210,   215,    -1,   111,     4,    -1,   120,    -1,   119,
-      -1,   144,    -1,   145,    -1,    -1,   213,    -1,   213,   214,
-      -1,   214,    -1,   102,    -1,   212,   219,     4,    -1,     1,
-       4,    -1,   217,    -1,   216,    72,   217,    -1,   109,   218,
-      -1,    -1,   101,    -1,   225,    -1,   243,    -1,    -1,    29,
-     220,   223,   216,    -1,    30,   113,    72,   248,    -1,    30,
-     116,    72,   248,    -1,    -1,    31,   221,   223,   109,   123,
-     264,    -1,   149,    -1,    -1,    35,   222,   223,   109,   123,
-     264,    -1,    65,   235,    -1,     9,   254,    -1,   117,   249,
-      -1,    13,   256,    -1,   235,    -1,   182,    -1,   197,    -1,
-     199,    -1,    -1,    52,    -1,    53,    -1,    54,    -1,    55,
-      -1,   109,    -1,   248,   123,   256,    -1,   248,   123,   227,
-     256,    -1,   248,   123,   256,   228,   256,    -1,   248,   123,
-     256,   124,   257,   125,    -1,   248,   124,   257,   125,   123,
-     256,    -1,   248,   123,   128,   224,   124,   257,   125,    -1,
-     248,   123,   235,    -1,    -1,   126,   226,   242,   127,   123,
-     234,   126,   237,   127,    -1,   229,    -1,   231,    -1,   233,
-      -1,   248,   123,    13,    -1,   129,    -1,   130,    -1,   131,
-      -1,   131,    -1,   132,    -1,   133,    -1,   134,    -1,   135,
-      -1,    44,    -1,    68,    -1,   122,    -1,    57,    -1,    58,
-      -1,    59,    -1,    60,    -1,    61,    -1,    62,    -1,    50,
-      -1,    51,    -1,    69,    -1,    70,    -1,    71,    -1,    56,
-      -1,   136,    -1,   137,    -1,   130,    -1,    -1,    67,   230,
-     126,   242,   127,    -1,   248,   232,   256,    -1,    36,    -1,
-      37,    -1,    38,    -1,    39,    -1,    46,    -1,    45,    -1,
-      40,    -1,    41,    -1,    42,    -1,    43,    -1,    47,    -1,
-      48,    -1,    49,    -1,   248,   123,   117,   158,    -1,   109,
-      -1,   113,    -1,   116,    -1,   248,    -1,   248,   121,   253,
-      -1,   248,   121,   116,    -1,   248,   121,   113,    -1,   248,
-     121,   248,    -1,    -1,   234,   236,   126,   237,   127,    -1,
-      -1,   237,    72,   238,    -1,   238,    -1,   237,    72,   113,
-      21,   256,    -1,   256,    21,   256,    -1,   113,    21,   256,
-      -1,   256,   239,    -1,    -1,   239,   240,    -1,    16,    -1,
-      20,    -1,    24,    -1,    20,   126,   116,   127,    -1,    20,
-     126,   113,   127,    -1,   248,   195,    -1,   242,    72,   241,
-      -1,   242,    72,   113,    21,   248,    -1,   241,    -1,   113,
-      21,   248,    -1,    -1,   245,    -1,   244,    -1,    12,   256,
-     247,   256,     9,   254,    -1,    12,    13,   256,     9,   254,
-      -1,    12,   256,   246,   254,    -1,    11,   256,   246,   254,
-      -1,    11,   256,   247,   256,     9,   254,    -1,    11,    13,
-     256,     9,   254,    -1,    72,    -1,     9,    -1,    57,    -1,
-      58,    -1,    59,    -1,    60,    -1,    61,    -1,    62,    -1,
-     118,    -1,   263,    -1,    -1,   250,    -1,   250,    72,   251,
-      -1,   251,    -1,   255,    -1,   248,   124,   257,   125,    -1,
-     124,   259,   125,    -1,   253,    -1,   113,    -1,   116,    -1,
-     109,    -1,   117,    -1,   109,    -1,   117,    -1,   254,    -1,
-     256,    -1,   248,    -1,   264,    -1,    -1,   258,   261,    -1,
-      -1,   260,   261,    -1,   262,    -1,   261,   138,   262,    -1,
-     256,    -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,
-     110,    -1,   114,    -1,   115,    -1,   113,    -1,   116,    -1
+     141,     0,    -1,   142,    -1,   143,    -1,   142,   143,    -1,
+     163,    -1,   148,    -1,   165,    -1,   160,    -1,   112,     4,
+      -1,   144,    -1,   145,    -1,     4,    -1,   147,     4,    -1,
+      98,   114,     4,    -1,     8,   115,    73,   114,     4,    -1,
+       9,   114,     4,    -1,    33,   114,    73,   265,    -1,     7,
+     114,    -1,    -1,    32,   149,   224,   110,   124,   265,    -1,
+      -1,    32,   151,   115,   256,   124,   153,    -1,    -1,    32,
+     152,   114,   256,   124,   153,    -1,   114,    -1,   117,    -1,
+     155,    -1,   154,   155,    -1,   213,   156,     4,    -1,   112,
+       4,    -1,   121,    -1,   120,    -1,   163,    -1,   150,    -1,
+     144,    -1,    -1,   157,   118,   159,    -1,    -1,    79,   158,
+     187,   103,    -1,    14,   257,    -1,    31,   114,    73,   111,
+      -1,    -1,   250,    -1,    -1,   104,   161,   162,   105,    -1,
+      -1,   154,    -1,    26,   164,     4,    -1,   125,   258,   126,
+      -1,   125,   126,    -1,    -1,    -1,    -1,    28,   166,   253,
+     167,   187,     4,   168,   169,   182,    74,    -1,    -1,     4,
+      -1,   169,   170,     4,    -1,    -1,     5,   171,   172,    -1,
+     224,   110,   196,    -1,    96,   127,   180,   128,    -1,    94,
+     127,   114,   128,    -1,    94,   127,   110,   128,    -1,    97,
+      -1,    97,   127,   114,   128,    -1,    92,    -1,    92,   127,
+     153,   128,    -1,   101,    -1,   101,   127,   153,   128,    -1,
+      99,   127,   114,   128,    -1,   100,    -1,   100,   127,   153,
+     128,    -1,    -1,   180,    73,   181,    -1,   181,    -1,    53,
+      -1,    54,    -1,    56,    -1,    55,    -1,   110,    -1,   114,
+      -1,   125,   258,   126,    -1,    -1,   210,    -1,    -1,    76,
+       4,   184,   191,   186,   190,   185,   193,    77,    -1,    -1,
+     215,     4,    -1,    -1,    86,   257,     4,    -1,    -1,   188,
+      -1,   189,    -1,   188,   189,    -1,    88,    -1,    89,    -1,
+      87,    -1,    90,    -1,    91,    -1,    93,    -1,    95,    -1,
+     173,    -1,   174,    -1,   175,    -1,   176,    -1,   177,    -1,
+     178,    -1,   179,    -1,    78,   257,    73,   257,     4,    -1,
+      78,   257,     4,    -1,    84,   257,     4,    -1,    85,   249,
+       4,    -1,    85,   114,     4,    -1,    85,   249,    73,   257,
+       4,    -1,    85,   114,    73,   257,     4,    -1,    -1,   191,
+     192,     4,    -1,    11,   239,    -1,    -1,   193,   194,     4,
+      -1,    64,   249,   196,    -1,    -1,    30,   195,   224,   218,
+      -1,    -1,   196,   197,    -1,    18,    -1,    19,    -1,    20,
+      -1,    21,    -1,    21,   127,   114,   128,    -1,    21,   127,
+     117,   128,    -1,   102,    -1,    25,    -1,    -1,    80,     4,
+     199,   202,    81,    -1,   206,    -1,    -1,    82,     4,   201,
+     203,    83,    -1,    -1,   202,     4,    -1,   202,   204,     4,
+      -1,    -1,   203,     4,    -1,   203,   205,     4,    -1,    15,
+     257,   240,    -1,    16,   257,   240,    -1,    -1,   208,   127,
+     207,   209,   128,    -1,    65,    -1,    67,    -1,    -1,   239,
+      -1,   114,    22,   257,    -1,   209,    73,   239,    -1,   209,
+      73,   114,    22,   257,    -1,   212,    -1,   210,   212,    -1,
+      -1,   211,   216,    -1,   112,     4,    -1,   121,    -1,   120,
+      -1,   145,    -1,   146,    -1,    -1,   214,    -1,   214,   215,
+      -1,   215,    -1,   103,    -1,   213,   220,     4,    -1,     1,
+       4,    -1,   218,    -1,   217,    73,   218,    -1,   110,   219,
+      -1,    -1,   102,    -1,   226,    -1,   244,    -1,    -1,    30,
+     221,   224,   217,    -1,    31,   114,    73,   249,    -1,    31,
+     117,    73,   249,    -1,    -1,    32,   222,   224,   110,   124,
+     265,    -1,   150,    -1,    -1,    36,   223,   224,   110,   124,
+     265,    -1,    66,   236,    -1,    10,   255,    -1,   118,   250,
+      -1,    14,   257,    -1,   236,    -1,   183,    -1,   198,    -1,
+     200,    -1,    -1,    53,    -1,    54,    -1,    55,    -1,    56,
+      -1,   110,    -1,   249,   124,   257,    -1,   249,   124,   228,
+     257,    -1,   249,   124,   257,   229,   257,    -1,   249,   124,
+     257,   125,   258,   126,    -1,   249,   125,   258,   126,   124,
+     257,    -1,   249,   124,   129,   225,   125,   258,   126,    -1,
+     249,   124,   236,    -1,    -1,   127,   227,   243,   128,   124,
+     235,   127,   238,   128,    -1,   230,    -1,   232,    -1,   234,
+      -1,   249,   124,    14,    -1,   130,    -1,   131,    -1,   132,
+      -1,   132,    -1,   133,    -1,   134,    -1,   135,    -1,   136,
+      -1,    45,    -1,    69,    -1,   123,    -1,    58,    -1,    59,
+      -1,    60,    -1,    61,    -1,    62,    -1,    63,    -1,    51,
+      -1,    52,    -1,    70,    -1,    71,    -1,    72,    -1,    57,
+      -1,   137,    -1,   138,    -1,   131,    -1,    -1,    68,   231,
+     127,   243,   128,    -1,   249,   233,   257,    -1,    37,    -1,
+      38,    -1,    39,    -1,    40,    -1,    47,    -1,    46,    -1,
+      41,    -1,    42,    -1,    43,    -1,    44,    -1,    48,    -1,
+      49,    -1,    50,    -1,   249,   124,   118,   159,    -1,   110,
+      -1,   114,    -1,   117,    -1,   249,    -1,   249,   122,   254,
+      -1,   249,   122,   117,    -1,   249,   122,   114,    -1,   249,
+     122,   249,    -1,    -1,   235,   237,   127,   238,   128,    -1,
+      -1,   238,    73,   239,    -1,   239,    -1,   238,    73,   114,
+      22,   257,    -1,   257,    22,   257,    -1,   114,    22,   257,
+      -1,   257,   240,    -1,    -1,   240,   241,    -1,    17,    -1,
+      21,    -1,    25,    -1,    21,   127,   117,   128,    -1,    21,
+     127,   114,   128,    -1,   249,   196,    -1,   243,    73,   242,
+      -1,   243,    73,   114,    22,   249,    -1,   242,    -1,   114,
+      22,   249,    -1,    -1,   246,    -1,   245,    -1,    13,   257,
+     248,   257,    10,   255,    -1,    13,    14,   257,    10,   255,
+      -1,    13,   257,   247,   255,    -1,    12,   257,   247,   255,
+      -1,    12,   257,   248,   257,    10,   255,    -1,    12,    14,
+     257,    10,   255,    -1,    73,    -1,    10,    -1,    58,    -1,
+      59,    -1,    60,    -1,    61,    -1,    62,    -1,    63,    -1,
+     119,    -1,   264,    -1,    -1,   251,    -1,   251,    73,   252,
+      -1,   252,    -1,   256,    -1,   249,   125,   258,   126,    -1,
+     125,   260,   126,    -1,   254,    -1,   114,    -1,   117,    -1,
+     110,    -1,   118,    -1,   110,    -1,   118,    -1,   255,    -1,
+     257,    -1,   249,    -1,   265,    -1,    -1,   259,   262,    -1,
+      -1,   261,   262,    -1,   263,    -1,   262,   139,   263,    -1,
+     257,    -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,
+     111,    -1,   115,    -1,   116,    -1,   114,    -1,   117,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1918,8 +1920,8 @@
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "LOW_PREC", "'\\n'", "PARAM", "HLL",
-  "TK_LINE", "TK_FILE", "GOTO", "ARG", "IF", "UNLESS", "PNULL",
+  "$end", "error", "$undefined", "LOW_PREC", "'\\n'", "PARAM", "SOL",
+  "HLL", "TK_LINE", "TK_FILE", "GOTO", "ARG", "IF", "UNLESS", "PNULL",
   "SET_RETURN", "SET_YIELD", "ADV_FLAT", "ADV_SLURPY", "ADV_OPTIONAL",
   "ADV_OPT_FLAG", "ADV_NAMED", "ADV_ARROW", "NEW", "ADV_INVOCANT",
   "ADV_CALL_SIG", "NAMESPACE", "DOT_METHOD", "SUB", "SYM", "LOCAL",
@@ -1984,48 +1986,48 @@
      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
      354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
      364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,    61,    91,    93,    40,    41,   110,    33,
-     126,    45,    43,    42,    47,    37,    38,   124,    59
+     374,   375,   376,   377,    61,    91,    93,    40,    41,   110,
+      33,   126,    45,    43,    42,    47,    37,    38,   124,    59
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   139,   140,   141,   141,   142,   142,   142,   142,   142,
-     142,   142,   142,   143,   143,   144,   144,   145,   146,   148,
-     147,   150,   149,   151,   149,   152,   152,   153,   153,   154,
-     154,   154,   154,   154,   154,   154,   156,   155,   157,   155,
-     155,   155,   155,   158,   160,   159,   161,   161,   162,   163,
-     163,   165,   166,   167,   164,   168,   168,   168,   170,   169,
-     171,   172,   173,   173,   174,   174,   175,   175,   176,   176,
-     177,   178,   178,   179,   179,   179,   180,   180,   180,   180,
-     180,   180,   180,   181,   181,   183,   182,   184,   184,   185,
-     185,   186,   186,   187,   187,   188,   188,   188,   188,   188,
-     188,   188,   188,   188,   188,   188,   188,   188,   188,   189,
-     189,   189,   189,   189,   189,   189,   190,   190,   191,   192,
-     192,   193,   194,   193,   195,   195,   196,   196,   196,   196,
-     196,   196,   196,   196,   198,   197,   197,   200,   199,   201,
-     201,   201,   202,   202,   202,   203,   204,   206,   205,   207,
-     207,   208,   208,   208,   208,   208,   209,   209,   210,   211,
-     211,   211,   211,   211,   211,   212,   212,   213,   213,   214,
-     215,   215,   216,   216,   217,   218,   218,   219,   219,   220,
-     219,   219,   219,   221,   219,   219,   222,   219,   219,   219,
-     219,   219,   219,   219,   219,   219,   219,   223,   223,   223,
-     223,   224,   225,   225,   225,   225,   225,   225,   225,   226,
-     225,   225,   225,   225,   225,   227,   227,   227,   228,   228,
-     228,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-     228,   228,   228,   228,   228,   228,   228,   228,   228,   228,
-     228,   230,   229,   231,   232,   232,   232,   232,   232,   232,
-     232,   232,   232,   232,   232,   232,   232,   233,   234,   234,
-     234,   234,   234,   234,   234,   234,   236,   235,   237,   237,
-     237,   237,   237,   237,   238,   239,   239,   240,   240,   240,
-     240,   240,   241,   242,   242,   242,   242,   242,   243,   243,
-     244,   244,   244,   245,   245,   245,   246,   246,   247,   247,
-     247,   247,   247,   247,   248,   248,   249,   249,   250,   250,
-     251,   251,   251,   252,   252,   252,   253,   253,   254,   254,
-     255,   255,   256,   256,   258,   257,   260,   259,   261,   261,
-     262,   263,   263,   263,   263,   263,   264,   264,   264,   264
+       0,   140,   141,   142,   142,   143,   143,   143,   143,   143,
+     143,   143,   143,   144,   144,   145,   145,   146,   147,   149,
+     148,   151,   150,   152,   150,   153,   153,   154,   154,   155,
+     155,   155,   155,   155,   155,   155,   157,   156,   158,   156,
+     156,   156,   156,   159,   161,   160,   162,   162,   163,   164,
+     164,   166,   167,   168,   165,   169,   169,   169,   171,   170,
+     172,   173,   174,   174,   175,   175,   176,   176,   177,   177,
+     178,   179,   179,   180,   180,   180,   181,   181,   181,   181,
+     181,   181,   181,   182,   182,   184,   183,   185,   185,   186,
+     186,   187,   187,   188,   188,   189,   189,   189,   189,   189,
+     189,   189,   189,   189,   189,   189,   189,   189,   189,   190,
+     190,   190,   190,   190,   190,   190,   191,   191,   192,   193,
+     193,   194,   195,   194,   196,   196,   197,   197,   197,   197,
+     197,   197,   197,   197,   199,   198,   198,   201,   200,   202,
+     202,   202,   203,   203,   203,   204,   205,   207,   206,   208,
+     208,   209,   209,   209,   209,   209,   210,   210,   211,   212,
+     212,   212,   212,   212,   212,   213,   213,   214,   214,   215,
+     216,   216,   217,   217,   218,   219,   219,   220,   220,   221,
+     220,   220,   220,   222,   220,   220,   223,   220,   220,   220,
+     220,   220,   220,   220,   220,   220,   220,   224,   224,   224,
+     224,   225,   226,   226,   226,   226,   226,   226,   226,   227,
+     226,   226,   226,   226,   226,   228,   228,   228,   229,   229,
+     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+     229,   231,   230,   232,   233,   233,   233,   233,   233,   233,
+     233,   233,   233,   233,   233,   233,   233,   234,   235,   235,
+     235,   235,   235,   235,   235,   235,   237,   236,   238,   238,
+     238,   238,   238,   238,   239,   240,   240,   241,   241,   241,
+     241,   241,   242,   243,   243,   243,   243,   243,   244,   244,
+     245,   245,   245,   246,   246,   246,   247,   247,   248,   248,
+     248,   248,   248,   248,   249,   249,   250,   250,   251,   251,
+     252,   252,   252,   253,   253,   253,   254,   254,   255,   255,
+     256,   256,   257,   257,   259,   258,   261,   260,   262,   262,
+     263,   264,   264,   264,   264,   264,   265,   265,   265,   265
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -2152,79 +2154,79 @@
 #define YYPACT_NINF -424
 static const yytype_int16 yypact[] =
 {
-     219,  -424,   -86,   -55,   -62,   -58,  -424,  -424,    -8,  -424,
-      82,   163,   219,  -424,  -424,  -424,   169,  -424,  -424,  -424,
-    -424,  -424,    93,   171,    58,   184,    95,   166,   188,    70,
-    -424,  -424,  -424,  -424,    90,  -424,  -424,    81,   439,  -424,
+     212,  -424,   -90,   -80,   -21,   -28,  -424,  -424,     9,  -424,
+     118,   151,   212,  -424,  -424,  -424,   149,  -424,  -424,  -424,
+    -424,  -424,    93,   153,    32,   163,   154,   125,   171,   180,
+    -424,  -424,  -424,  -424,    68,  -424,  -424,    66,   441,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-     100,  -424,   109,  -424,   220,  -424,  -424,  -424,  -424,   160,
-    -424,   129,  -424,    67,   133,  -424,   232,  -424,  -424,  -424,
+      94,  -424,    89,  -424,   204,  -424,  -424,  -424,  -424,   247,
+    -424,   104,  -424,    13,   108,  -424,   209,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-      99,  -424,  -424,  -424,   421,   117,   131,   135,  -424,  -424,
-    -424,   439,   136,  -424,   250,   134,  -424,  -424,   439,  -424,
-    -424,  -424,  -424,  -424,   130,  -424,   132,  -424,   137,   142,
-     146,   147,   149,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-     251,   421,  -424,   115,   425,   425,  -424,   204,   421,  -424,
-     350,  -424,    48,   -19,   161,   164,   165,    48,    48,  -424,
-    -424,  -424,  -424,  -424,  -424,   159,  -424,   177,   182,   200,
-    -424,  -424,   179,  -424,   234,  -424,  -424,  -424,  -424,   180,
-     181,   183,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -64,
-    -424,   186,   190,   191,   192,   300,    48,    48,  -424,  -424,
-     196,   439,  -424,   350,  -424,  -424,  -424,   198,   161,  -424,
-    -424,  -424,  -424,  -424,  -424,    49,  -424,  -424,  -424,    99,
-     199,  -424,  -424,  -424,  -424,   213,   323,  -424,  -424,  -424,
-    -424,   324,   256,    60,     8,  -424,  -424,   166,   259,  -424,
-    -424,  -424,  -424,   328,   230,  -424,  -424,   224,   115,  -424,
-     -67,   253,   270,   439,  -424,    71,    42,  -424,  -424,   509,
-    -424,  -424,   330,   337,   338,  -424,  -424,  -424,   350,  -424,
-    -424,  -424,  -424,  -424,  -424,   223,   341,  -424,  -424,  -424,
-    -424,  -424,  -424,  -424,  -424,  -424,   405,  -424,  -424,  -424,
-     439,   229,   439,   229,  -424,   166,   278,   290,   166,   166,
-    -424,   243,   244,  -424,  -424,  -424,  -424,   523,  -424,  -424,
-     246,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-    -424,  -424,  -424,  -424,   379,    22,  -424,   439,     5,   364,
-    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -67,   439,
-     365,   -67,   439,   272,   247,   247,   280,   281,   523,  -424,
-    -424,  -424,   358,  -424,   -39,  -424,   453,   467,  -424,  -424,
-    -424,  -424,  -424,   261,   265,   350,   283,  -424,  -424,  -424,
-     439,  -424,    28,   369,   268,  -424,  -424,  -424,  -424,   271,
-    -424,  -424,  -424,   -67,  -424,   385,   -67,  -424,   389,   298,
-     329,  -424,  -424,  -424,   282,   284,   -36,     0,    27,    11,
-     247,   532,   285,     5,   382,   -27,  -424,  -424,   388,   -24,
-    -424,   393,  -424,  -424,   293,  -424,  -424,  -424,  -424,  -424,
+      75,  -424,  -424,  -424,   483,    91,   103,   114,  -424,  -424,
+    -424,   441,   115,  -424,   226,   113,  -424,  -424,   441,  -424,
+    -424,  -424,  -424,  -424,   106,  -424,   109,  -424,   119,   121,
+     122,   123,   124,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+     231,   483,  -424,    74,   255,   255,  -424,   172,   483,  -424,
+     426,  -424,   -40,   -69,   387,   141,   142,   -40,   -40,  -424,
+    -424,  -424,  -424,  -424,  -424,   133,  -424,   134,   152,   159,
+    -424,  -424,   145,  -424,   193,  -424,  -424,  -424,  -424,   146,
+     147,   148,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -58,
+    -424,   160,   161,   162,   174,   273,   -40,   -40,  -424,  -424,
+     156,   441,  -424,   426,  -424,  -424,  -424,   165,   387,  -424,
+    -424,  -424,  -424,  -424,  -424,    29,  -424,  -424,  -424,    75,
+     177,  -424,  -424,  -424,  -424,   166,   283,  -424,  -424,  -424,
+    -424,   300,   232,    34,    18,  -424,  -424,   125,   234,  -424,
+    -424,  -424,  -424,   304,   229,  -424,  -424,   203,    74,  -424,
+     -85,   272,   320,   441,  -424,    -7,    24,  -424,  -424,   535,
+    -424,  -424,   313,   314,   315,  -424,  -424,  -424,   426,  -424,
+    -424,  -424,  -424,  -424,  -424,   194,   318,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,  -424,  -424,   444,  -424,  -424,  -424,
+     441,   164,   441,   164,  -424,   125,   250,   253,   125,   125,
+    -424,   205,   215,  -424,  -424,  -424,  -424,   549,  -424,  -424,
+     227,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,  -424,   396,    54,  -424,   441,    38,   322,
+    -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,   -85,   441,
+     339,   -85,   441,   243,   222,   222,   245,   248,   549,  -424,
+    -424,  -424,   335,  -424,   -47,  -424,   479,   493,  -424,  -424,
+    -424,  -424,  -424,   233,   249,   426,   265,  -424,  -424,  -424,
+     441,  -424,   -18,   393,   251,  -424,  -424,  -424,  -424,   257,
+    -424,  -424,  -424,   -85,  -424,   375,   -85,  -424,   380,   290,
+     321,  -424,  -424,  -424,   269,   274,   -37,     2,     8,     4,
+     222,   558,   275,    38,   379,   -33,  -424,  -424,   381,   -27,
+    -424,   383,  -424,  -424,   281,  -424,  -424,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-     439,   301,    85,  -424,   -67,  -424,   -67,  -424,  -424,   272,
-     115,   115,  -424,   439,   439,   -37,   402,  -424,   439,  -424,
-     417,  -424,   439,  -424,   419,  -424,   413,  -424,   509,   439,
-     481,  -424,   162,   439,   495,  -424,   439,  -424,   310,  -424,
-     439,   309,   322,  -424,  -424,  -424,  -424,  -424,  -424,   457,
-     439,   439,   541,   133,  -424,  -424,  -424,  -424,  -424,   247,
-     336,  -424,   450,  -424,  -424,   347,  -424,  -424,  -424,   455,
-    -424,  -424,   352,  -424,  -424,  -424,  -424,  -424,    10,   475,
-      12,    26,  -424,   477,   162,   162,  -424,   467,   439,    86,
-     439,  -424,  -424,   439,  -424,  -424,   439,  -424,   439,    94,
-    -424,   -23,  -424,   355,   356,  -424,   486,   490,   494,  -424,
-     247,  -424,   514,  -424,  -424,  -424,  -424,  -424,  -424,   166,
-    -424,  -424,   272,     5,  -424
+     441,   284,    84,  -424,   -85,  -424,   -85,  -424,  -424,   243,
+      74,    74,  -424,   441,   441,   -12,   403,  -424,   441,  -424,
+     405,  -424,   441,  -424,   409,  -424,   392,  -424,   535,   441,
+     507,  -424,   131,   441,   521,  -424,   441,  -424,   271,  -424,
+     441,   289,   291,  -424,  -424,  -424,  -424,  -424,  -424,   416,
+     441,   441,   567,   108,  -424,  -424,  -424,  -424,  -424,   222,
+     294,  -424,   401,  -424,  -424,   297,  -424,  -424,  -424,   408,
+    -424,  -424,   299,  -424,  -424,  -424,  -424,  -424,     5,   442,
+       6,    17,  -424,   443,   131,   131,  -424,   493,   441,    85,
+     441,  -424,  -424,   441,  -424,  -424,   441,  -424,   441,    41,
+    -424,   -22,  -424,   329,   330,  -424,   445,   455,   456,  -424,
+     222,  -424,   457,  -424,  -424,  -424,  -424,  -424,  -424,   125,
+    -424,  -424,   243,    38,  -424
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -424,  -424,  -424,   510,    -1,  -161,  -424,  -424,  -424,  -424,
-     299,  -424,  -424,   -68,  -424,   465,  -424,  -424,  -424,   203,
-    -424,  -424,  -424,     3,  -424,  -424,  -424,  -424,  -424,  -424,
+    -424,  -424,  -424,   436,    10,  -166,  -424,  -424,  -424,  -424,
+     242,  -424,  -424,   -62,  -424,   412,  -424,  -424,  -424,   128,
+    -424,  -424,  -424,    23,  -424,  -424,  -424,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-    -424,   339,  -424,  -424,  -424,  -424,  -424,   397,  -424,   415,
+    -424,   279,  -424,  -424,  -424,  -424,  -424,   340,  -424,   353,
     -424,  -424,  -424,  -424,  -424,  -424,  -330,  -424,  -424,  -424,
     -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,  -424,
-    -424,  -424,   343,   348,  -424,   -63,  -424,  -424,  -423,  -424,
+    -424,  -424,   263,   282,  -424,   -63,  -424,  -424,  -423,  -424,
     -424,  -424,  -424,  -424,  -214,  -424,  -424,  -424,  -424,  -424,
-    -424,  -424,  -424,  -424,  -424,    89,  -226,  -424,    43,  -292,
-    -329,  -424,   170,   236,  -424,  -424,  -424,   292,   297,  -128,
-     331,  -424,   395,  -424,   286,  -219,   -47,   -38,  -164,  -424,
-    -424,  -424,   403,   478,  -424,  -116
+    -424,  -424,  -424,  -424,  -424,    31,  -225,  -424,   -30,  -320,
+    -344,  -424,   117,   167,  -424,  -424,  -424,   216,   235,  -128,
+     252,  -424,   316,  -424,   207,  -219,    -8,   -38,  -164,  -424,
+    -424,  -424,   328,   419,  -424,  -116
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -2234,203 +2236,209 @@
 #define YYTABLE_NINF -262
 static const yytype_int16 yytable[] =
 {
-      79,    96,   152,   227,   187,   383,   465,   141,   188,   223,
-     433,   269,  -165,   280,   512,   441,   515,  -165,   200,  -165,
-    -165,  -165,   356,   357,   358,   359,   442,    21,    57,   360,
-     517,   437,    62,   381,   209,   342,   381,  -165,  -165,  -165,
-     470,   438,   142,  -165,   386,   450,   471,   472,   454,   454,
-     143,    23,   209,   126,   204,   152,     3,     4,    57,    22,
-      79,   323,    62,   189,   326,   327,    24,     3,     4,   173,
-     174,   -42,  -165,  -165,  -165,  -165,     2,   145,   147,   351,
-      91,   205,   513,  -165,   516,   434,    30,  -165,   382,  -165,
-     160,   432,   205,   443,   161,     5,   266,    92,   518,   364,
-     451,    52,   367,   455,   533,    28,   361,   439,   196,   197,
-      53,   281,   268,  -165,  -165,  -165,  -165,  -165,  -165,   544,
-     152,  -165,   -83,   529,  -165,  -165,  -165,    68,    69,    70,
-      71,   245,    72,   -84,  -165,   343,    74,    75,   344,   345,
-      77,   468,   354,    79,   423,    93,   504,   425,   505,   304,
-     346,   347,   348,   349,  -261,   -23,   -21,   530,   483,   335,
-     206,   157,   490,    31,   158,    34,     2,     8,   207,   208,
-     531,   206,    53,    33,   -46,    35,   340,   352,   484,   207,
-     208,    54,   485,    36,   276,     5,   486,   277,    39,    55,
-      56,    52,    51,   271,   273,   274,   372,   373,   461,   523,
-     335,   462,   524,    66,    40,   463,    67,   464,    41,    85,
-     543,    42,    43,   162,   163,   164,   165,   152,    46,    47,
-      48,    49,   -23,     1,    88,     2,     3,     4,    73,    74,
-      75,    76,   309,    90,   320,    53,    97,    98,   310,   230,
-     123,   231,   232,   233,     5,   124,     6,   458,   125,   127,
-       7,   130,   445,   335,   129,   139,   132,     8,   133,   234,
-     235,   236,    53,   134,   -47,   237,   270,   353,   135,   355,
-     166,    54,   136,   137,   167,   138,   148,   171,   172,    55,
-      56,   365,   176,   272,   368,   168,   311,   312,   313,   314,
-     315,   316,   178,   492,   238,   239,   240,   241,   387,   391,
-     177,   317,   179,   182,   194,   242,   183,   184,   185,   243,
-     186,   244,   395,   190,   466,   467,     8,   191,   192,   193,
-     281,   198,     9,   202,   216,   542,   218,   219,   220,   221,
-      10,   228,   229,   267,   283,    68,    69,    70,    71,   245,
-      72,   284,   285,   246,   501,   289,   247,   248,    77,   288,
-     324,   506,    68,    69,    70,    71,   249,    72,    68,    69,
-      70,    71,   325,    72,   304,    77,    73,    74,    75,    76,
-     328,    77,   337,   363,   366,    68,    69,    70,    71,   380,
-      72,   369,   459,    73,    74,    75,    76,  -259,    77,   374,
-     375,  -260,   393,   421,   424,   387,   469,   422,   426,   427,
-     475,   429,   540,   449,   477,   430,   474,   431,   448,   453,
-     503,   481,   387,   396,   456,   488,   387,   457,   491,   397,
-     398,   476,   494,   478,   460,   399,   400,   401,   402,   403,
-     404,   405,   498,   499,   479,   493,   495,   406,   407,   408,
-     409,   291,   292,   293,   294,   295,   296,   297,   298,   496,
-     299,   300,   301,   302,   303,    68,    69,    70,    71,   142,
-      72,   497,   507,    73,    74,    75,    76,   143,    77,   391,
-     522,   508,   525,   509,   150,   526,   510,   511,   527,   514,
-     528,   520,   534,   535,    68,    69,    70,    71,    40,    72,
-     536,   410,   338,   411,   537,   339,    43,    77,   538,   412,
-     413,   414,   415,   416,   417,   418,   419,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   541,   110,
-     111,   112,    32,   250,    89,   149,   304,   203,   305,   306,
-      68,    69,    70,    71,   142,    72,   140,   480,    73,    74,
-      75,    76,   143,    77,    68,    69,    70,    71,   392,    72,
-     521,   447,    73,    74,    75,    76,   222,    77,    68,    69,
-      70,    71,   224,    72,   376,   321,   384,    74,    75,    76,
-     322,    77,    68,    69,    70,    71,   131,    72,   201,   286,
-     388,    74,    75,    76,   199,    77,    68,    69,    70,    71,
-     341,    72,     0,     0,   482,    74,    75,    76,     0,    77,
-      68,    69,    70,    71,     0,    72,     0,     0,   489,    74,
-      75,    76,     0,    77,    68,    69,    70,    71,   245,    72,
-       0,     0,   246,     0,     0,   247,     0,    77,    68,    69,
-      70,    71,     0,    72,     0,     0,   332,    68,    69,    70,
-      71,    77,    72,     0,     0,   446,    68,    69,    70,    71,
-      77,    72,     0,     0,   500,     0,     0,     0,     0,    77
+      79,    96,   152,   227,   187,   383,   465,   141,   441,   512,
+     515,   269,   437,   433,   280,   188,   386,   -42,   200,   223,
+     442,   517,  -165,   438,    21,   142,   381,    91,  -165,   209,
+    -165,  -165,  -165,   143,   204,    22,   381,     3,     4,    57,
+     450,   160,     3,     4,    92,   161,   454,   209,  -165,  -165,
+    -165,   454,    62,   126,  -165,   152,   356,   357,   358,   359,
+      79,   323,   205,   360,   326,   327,   470,   205,   342,    57,
+     189,   529,   471,   472,   157,   173,   174,   158,   513,   516,
+     351,   382,    62,  -165,  -165,  -165,  -165,   443,   434,   439,
+     518,   432,    93,    23,  -165,   451,   266,    24,  -165,   364,
+    -165,   455,   367,   -83,   304,   530,   533,   276,   -84,  -261,
+     277,   281,   268,   468,   196,   197,   145,   147,   531,   544,
+     152,    53,    30,    28,  -165,  -165,  -165,  -165,  -165,  -165,
+     483,   504,  -165,   505,   490,  -165,  -165,  -165,   -23,   -21,
+     361,   206,   354,    79,   423,  -165,   206,   425,   484,   207,
+     208,    31,   485,    33,   207,   208,   486,    35,    36,   335,
+      68,    69,    70,    71,   245,    72,    34,    39,   343,    74,
+      75,   344,   345,    77,   310,    51,   340,   352,    46,    47,
+      48,    49,    66,   346,   347,   348,   349,     2,    73,    74,
+      75,    76,    67,   271,   273,   274,   372,   373,   461,   523,
+     335,   462,   524,   -23,    85,   463,     5,   464,    88,    90,
+     543,    53,    52,    97,    98,   123,     1,   152,   124,     2,
+       3,     4,   311,   312,   313,   314,   315,   316,   125,   127,
+     129,   130,   309,   132,   320,   139,   133,   317,     5,   230,
+       6,   231,   232,   233,     7,   148,   134,   458,   135,   136,
+     137,   138,   445,   335,     2,   171,   172,   176,   177,   234,
+     235,   236,   179,   178,    40,   237,   183,   353,    41,   355,
+     182,    42,    43,     5,   184,   185,   186,   194,     8,    52,
+     218,   365,   198,    53,   368,   -46,   270,   219,   190,   191,
+     192,   202,    54,   492,   238,   239,   240,   241,   387,   391,
+      55,    56,   193,   216,   220,   242,   221,   228,   229,   243,
+       8,   244,   395,   267,   466,   467,     9,   283,   284,   285,
+     281,   288,   289,   324,    10,   542,   325,   304,    68,    69,
+      70,    71,   363,    72,   272,    68,    69,    70,    71,   245,
+      72,    77,   328,   246,   501,     8,   247,   248,    77,   366,
+      53,   506,   -47,   369,   337,   374,   249,   380,   375,    54,
+    -259,    68,    69,    70,    71,   142,    72,    55,    56,    73,
+      74,    75,    76,   143,    77,   393,  -260,   421,    68,    69,
+      70,    71,   459,    72,   422,   424,    73,    74,    75,    76,
+     426,    77,   427,   430,   429,   387,   469,   493,   431,   448,
+     475,   449,   540,   453,   477,   456,   457,   474,   460,   476,
+     503,   481,   387,   478,   479,   488,   387,   495,   491,   496,
+     497,   507,   494,   508,   509,   511,    68,    69,    70,    71,
+     510,    72,   498,   499,    73,    74,    75,    76,   396,    77,
+     162,   163,   164,   165,   397,   398,   514,   520,    32,   536,
+     399,   400,   401,   402,   403,   404,   405,   534,   535,   537,
+     538,   541,   406,   407,   408,   409,   250,   203,   149,   391,
+     522,    89,   525,   392,   140,   526,   222,   521,   527,   480,
+     528,   291,   292,   293,   294,   295,   296,   297,   298,   321,
+     299,   300,   301,   302,   303,   376,   224,   166,   447,   201,
+     286,   167,    68,    69,    70,    71,    40,    72,   322,   199,
+     338,   341,   168,   339,    43,    77,   410,   131,   411,     0,
+       0,     0,     0,     0,   412,   413,   414,   415,   416,   417,
+     418,   419,    68,    69,    70,    71,   142,    72,     0,     0,
+      73,    74,    75,    76,   143,    77,     0,    68,    69,    70,
+      71,   150,    72,     0,     0,    73,    74,    75,    76,     0,
+      77,     0,     0,     0,     0,     0,   304,     0,   305,   306,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,     0,   110,   111,   112,    68,    69,    70,    71,     0,
+      72,     0,     0,   384,    74,    75,    76,     0,    77,    68,
+      69,    70,    71,     0,    72,     0,     0,   388,    74,    75,
+      76,     0,    77,    68,    69,    70,    71,     0,    72,     0,
+       0,   482,    74,    75,    76,     0,    77,    68,    69,    70,
+      71,     0,    72,     0,     0,   489,    74,    75,    76,     0,
+      77,    68,    69,    70,    71,   245,    72,     0,     0,   246,
+       0,     0,   247,     0,    77,    68,    69,    70,    71,     0,
+      72,     0,     0,   332,    68,    69,    70,    71,    77,    72,
+       0,     0,   446,    68,    69,    70,    71,    77,    72,     0,
+       0,   500,     0,     0,     0,     0,    77
 };
 
 static const yytype_int16 yycheck[] =
 {
-      38,    64,   130,   217,   168,   335,   429,   123,    72,     1,
-      10,   230,     4,   239,     4,     4,     4,     9,   182,    11,
-      12,    13,    17,    18,    19,    20,    15,   113,    29,    24,
-       4,     4,    29,    72,   195,    13,    72,    29,    30,    31,
-      77,    14,   109,    35,   336,    72,    83,    84,    72,    72,
-     117,   113,   213,    91,     5,   183,     7,     8,    59,   114,
-      98,   275,    59,   127,   278,   279,   124,     7,     8,   137,
-     138,     4,    64,    65,    66,    67,     6,   124,   125,   305,
-      13,    32,    72,    75,    72,    85,     4,    79,   127,    81,
-     109,   127,    32,    82,   113,    25,   224,    30,    72,   318,
-     127,    31,   321,   127,   127,   113,   101,    80,   176,   177,
-     102,   239,   228,   105,   106,   107,   108,   109,   110,   542,
-     248,   113,    73,    29,   116,   117,   118,   105,   106,   107,
-     108,   109,   110,    73,   126,   113,   114,   115,   116,   117,
-     118,   433,   306,   181,   363,    78,   475,   366,   477,   121,
-     128,   129,   130,   131,   126,   113,   114,    63,   450,   287,
-     111,   113,   454,     0,   116,    72,     6,    97,   119,   120,
-      76,   111,   102,     4,   104,     4,   304,   305,    16,   119,
-     120,   111,    20,   125,   113,    25,    24,   116,     4,   119,
-     120,    31,     4,   231,   232,   233,   324,   325,   113,   113,
-     328,   116,   116,   113,   109,   424,   125,   426,   113,   109,
-     540,   116,   117,    52,    53,    54,    55,   345,    52,    53,
-      54,    55,   113,     4,     4,     6,     7,     8,   113,   114,
-     115,   116,   270,   104,   272,   102,     4,   138,     9,     9,
-     123,    11,    12,    13,    25,   114,    27,   411,   113,   113,
-      31,   117,   380,   381,     4,     4,   126,    97,   126,    29,
-      30,    31,   102,   126,   104,    35,    13,   305,   126,   307,
-     109,   111,   126,   126,   113,   126,    72,   113,   113,   119,
-     120,   319,   123,    13,   322,   124,    57,    58,    59,    60,
-      61,    62,   110,   457,    64,    65,    66,    67,   336,   337,
-     123,    72,   102,   124,     4,    75,    72,   127,   127,    79,
-     127,    81,   350,   127,   430,   431,    97,   127,   127,   127,
-     448,   125,   103,   125,   125,   539,   113,     4,     4,    73,
-     111,    72,     4,   109,     4,   105,   106,   107,   108,   109,
-     110,     4,     4,   113,   472,     4,   116,   117,   118,   126,
-      72,   479,   105,   106,   107,   108,   126,   110,   105,   106,
-     107,   108,    72,   110,   121,   118,   113,   114,   115,   116,
-     126,   118,   126,     9,     9,   105,   106,   107,   108,    21,
-     110,   109,   420,   113,   114,   115,   116,   126,   118,   109,
-     109,   126,   109,   125,     9,   433,   434,   126,     9,   101,
-     438,    72,   530,    21,   442,   123,     4,   123,   123,    21,
-     473,   449,   450,    44,    21,   453,   454,   124,   456,    50,
-      51,     4,   460,     4,   123,    56,    57,    58,    59,    60,
-      61,    62,   470,   471,    21,   125,   127,    68,    69,    70,
-      71,    36,    37,    38,    39,    40,    41,    42,    43,   127,
-      45,    46,    47,    48,    49,   105,   106,   107,   108,   109,
-     110,     4,   126,   113,   114,   115,   116,   117,   118,   507,
-     508,    21,   510,   126,   124,   513,    21,   125,   516,     4,
-     518,     4,   127,   127,   105,   106,   107,   108,   109,   110,
-       4,   122,   113,   124,     4,   116,   117,   118,     4,   130,
-     131,   132,   133,   134,   135,   136,   137,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,     4,    98,
-      99,   100,    12,   224,    59,   128,   121,   188,   123,   124,
-     105,   106,   107,   108,   109,   110,   121,   448,   113,   114,
-     115,   116,   117,   118,   105,   106,   107,   108,   345,   110,
-     507,   381,   113,   114,   115,   116,   213,   118,   105,   106,
-     107,   108,   214,   110,   328,   273,   113,   114,   115,   116,
-     273,   118,   105,   106,   107,   108,    98,   110,   183,   248,
-     113,   114,   115,   116,   181,   118,   105,   106,   107,   108,
-     304,   110,    -1,    -1,   113,   114,   115,   116,    -1,   118,
-     105,   106,   107,   108,    -1,   110,    -1,    -1,   113,   114,
-     115,   116,    -1,   118,   105,   106,   107,   108,   109,   110,
-      -1,    -1,   113,    -1,    -1,   116,    -1,   118,   105,   106,
-     107,   108,    -1,   110,    -1,    -1,   113,   105,   106,   107,
-     108,   118,   110,    -1,    -1,   113,   105,   106,   107,   108,
-     118,   110,    -1,    -1,   113,    -1,    -1,    -1,    -1,   118
+      38,    64,   130,   217,   168,   335,   429,   123,     4,     4,
+       4,   230,     4,    11,   239,    73,   336,     4,   182,     1,
+      16,     4,     4,    15,   114,   110,    73,    14,    10,   195,
+      12,    13,    14,   118,     5,   115,    73,     8,     9,    29,
+      73,   110,     8,     9,    31,   114,    73,   213,    30,    31,
+      32,    73,    29,    91,    36,   183,    18,    19,    20,    21,
+      98,   275,    33,    25,   278,   279,    78,    33,    14,    59,
+     128,    30,    84,    85,   114,   137,   138,   117,    73,    73,
+     305,   128,    59,    65,    66,    67,    68,    83,    86,    81,
+      73,   128,    79,   114,    76,   128,   224,   125,    80,   318,
+      82,   128,   321,    74,   122,    64,   128,   114,    74,   127,
+     117,   239,   228,   433,   176,   177,   124,   125,    77,   542,
+     248,   103,     4,   114,   106,   107,   108,   109,   110,   111,
+     450,   475,   114,   477,   454,   117,   118,   119,   114,   115,
+     102,   112,   306,   181,   363,   127,   112,   366,    17,   120,
+     121,     0,    21,     4,   120,   121,    25,     4,   126,   287,
+     106,   107,   108,   109,   110,   111,    73,     4,   114,   115,
+     116,   117,   118,   119,    10,     4,   304,   305,    53,    54,
+      55,    56,   114,   129,   130,   131,   132,     7,   114,   115,
+     116,   117,   126,   231,   232,   233,   324,   325,   114,   114,
+     328,   117,   117,   114,   110,   424,    26,   426,     4,   105,
+     540,   103,    32,     4,   139,   124,     4,   345,   115,     7,
+       8,     9,    58,    59,    60,    61,    62,    63,   114,   114,
+       4,   118,   270,   127,   272,     4,   127,    73,    26,    10,
+      28,    12,    13,    14,    32,    73,   127,   411,   127,   127,
+     127,   127,   380,   381,     7,   114,   114,   124,   124,    30,
+      31,    32,   103,   111,   110,    36,    73,   305,   114,   307,
+     125,   117,   118,    26,   128,   128,   128,     4,    98,    32,
+     114,   319,   126,   103,   322,   105,    14,     4,   128,   128,
+     128,   126,   112,   457,    65,    66,    67,    68,   336,   337,
+     120,   121,   128,   126,     4,    76,    74,    73,     4,    80,
+      98,    82,   350,   110,   430,   431,   104,     4,     4,     4,
+     448,   127,     4,    73,   112,   539,    73,   122,   106,   107,
+     108,   109,    10,   111,    14,   106,   107,   108,   109,   110,
+     111,   119,   127,   114,   472,    98,   117,   118,   119,    10,
+     103,   479,   105,   110,   127,   110,   127,    22,   110,   112,
+     127,   106,   107,   108,   109,   110,   111,   120,   121,   114,
+     115,   116,   117,   118,   119,   110,   127,   126,   106,   107,
+     108,   109,   420,   111,   127,    10,   114,   115,   116,   117,
+      10,   119,   102,   124,    73,   433,   434,   126,   124,   124,
+     438,    22,   530,    22,   442,    22,   125,     4,   124,     4,
+     473,   449,   450,     4,    22,   453,   454,   128,   456,   128,
+       4,   127,   460,    22,   127,   126,   106,   107,   108,   109,
+      22,   111,   470,   471,   114,   115,   116,   117,    45,   119,
+      53,    54,    55,    56,    51,    52,     4,     4,    12,     4,
+      57,    58,    59,    60,    61,    62,    63,   128,   128,     4,
+       4,     4,    69,    70,    71,    72,   224,   188,   128,   507,
+     508,    59,   510,   345,   121,   513,   213,   507,   516,   448,
+     518,    37,    38,    39,    40,    41,    42,    43,    44,   273,
+      46,    47,    48,    49,    50,   328,   214,   110,   381,   183,
+     248,   114,   106,   107,   108,   109,   110,   111,   273,   181,
+     114,   304,   125,   117,   118,   119,   123,    98,   125,    -1,
+      -1,    -1,    -1,    -1,   131,   132,   133,   134,   135,   136,
+     137,   138,   106,   107,   108,   109,   110,   111,    -1,    -1,
+     114,   115,   116,   117,   118,   119,    -1,   106,   107,   108,
+     109,   125,   111,    -1,    -1,   114,   115,   116,   117,    -1,
+     119,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,   125,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    -1,    99,   100,   101,   106,   107,   108,   109,    -1,
+     111,    -1,    -1,   114,   115,   116,   117,    -1,   119,   106,
+     107,   108,   109,    -1,   111,    -1,    -1,   114,   115,   116,
+     117,    -1,   119,   106,   107,   108,   109,    -1,   111,    -1,
+      -1,   114,   115,   116,   117,    -1,   119,   106,   107,   108,
+     109,    -1,   111,    -1,    -1,   114,   115,   116,   117,    -1,
+     119,   106,   107,   108,   109,   110,   111,    -1,    -1,   114,
+      -1,    -1,   117,    -1,   119,   106,   107,   108,   109,    -1,
+     111,    -1,    -1,   114,   106,   107,   108,   109,   119,   111,
+      -1,    -1,   114,   106,   107,   108,   109,   119,   111,    -1,
+      -1,   114,    -1,    -1,    -1,    -1,   119
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,     4,     6,     7,     8,    25,    27,    31,    97,   103,
-     111,   140,   141,   142,   143,   144,   146,   147,   159,   162,
-     164,   113,   114,   113,   124,   163,   165,   148,   113,   160,
-       4,     0,   142,     4,    72,     4,   125,   257,   258,     4,
-     109,   113,   116,   117,   252,   253,    52,    53,    54,    55,
-     223,     4,    31,   102,   111,   119,   120,   143,   149,   153,
-     154,   161,   162,   212,   213,   214,   113,   125,   105,   106,
-     107,   108,   110,   113,   114,   115,   116,   118,   248,   256,
-     261,   262,   263,   264,   166,   109,   150,   151,     4,   154,
-     104,    13,    30,    78,   155,   156,   214,     4,   138,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      98,    99,   100,   172,   173,   174,   175,   176,   177,   178,
-     186,   187,   188,   123,   114,   113,   256,   113,   157,     4,
-     117,   262,   126,   126,   126,   126,   126,   126,   126,     4,
-     188,   264,   109,   117,   254,   255,   256,   255,    72,   186,
-     124,   158,   248,   249,   250,   251,   255,   113,   116,   152,
-     109,   113,    52,    53,    54,    55,   109,   113,   124,   179,
-     180,   113,   113,   152,   152,   167,   123,   123,   110,   102,
-     259,   260,   124,    72,   127,   127,   127,   257,    72,   127,
-     127,   127,   127,   127,     4,   168,   152,   152,   125,   261,
-     257,   251,   125,   180,     5,    32,   111,   119,   120,   144,
-     145,   169,   181,   209,   210,   211,   125,   170,   113,     4,
-       4,    73,   211,     1,   212,   215,   171,   223,    72,     4,
-       9,    11,    12,    13,    29,    30,    31,    35,    64,    65,
-      66,    67,    75,    79,    81,   109,   113,   116,   117,   126,
-     149,   182,   197,   199,   205,   207,   219,   225,   229,   231,
-     233,   234,   235,   243,   244,   245,   248,   109,   264,   254,
-      13,   256,    13,   256,   256,   220,   113,   116,   221,   222,
-     235,   248,   230,     4,     4,     4,   249,   226,   126,     4,
-     236,    36,    37,    38,    39,    40,    41,    42,    43,    45,
-      46,    47,    48,    49,   121,   123,   124,   232,   195,   256,
-       9,    57,    58,    59,    60,    61,    62,    72,   246,   247,
-     256,   246,   247,   223,    72,    72,   223,   223,   126,   183,
-     198,   200,   113,   241,   242,   248,   206,   126,   113,   116,
-     248,   253,    13,   113,   116,   117,   128,   129,   130,   131,
-     227,   235,   248,   256,   257,   256,    17,    18,    19,    20,
-      24,   101,   196,     9,   254,   256,     9,   254,   256,   109,
-     216,   217,   248,   248,   109,   109,   242,   190,   201,   202,
-      21,    72,   127,   195,   113,   208,   238,   256,   113,   237,
-     238,   256,   158,   109,   224,   256,    44,    50,    51,    56,
-      57,    58,    59,    60,    61,    62,    68,    69,    70,    71,
-     122,   124,   130,   131,   132,   133,   134,   135,   136,   137,
-     228,   125,   126,   254,     9,   254,     9,   101,   218,    72,
-     123,   123,   127,    10,    85,   185,   191,     4,    14,    80,
-     203,     4,    15,    82,   204,   248,   113,   241,   123,    21,
-      72,   127,   239,    21,    72,   127,    21,   124,   257,   256,
-     123,   113,   116,   254,   254,   217,   264,   264,   238,   256,
-      77,    83,    84,   189,     4,   256,     4,   256,     4,    21,
-     234,   256,   113,   238,    16,    20,    24,   240,   256,   113,
-     238,   256,   257,   125,   256,   127,   127,     4,   256,   256,
-     113,   248,   184,   214,   239,   239,   248,   126,    21,   126,
-      21,   125,     4,    72,     4,     4,    72,     4,    72,   192,
-       4,   237,   256,   113,   116,   256,   256,   256,   256,    29,
-      63,    76,   193,   127,   127,   127,     4,     4,     4,   194,
-     248,     4,   223,   195,   217
+       0,     4,     7,     8,     9,    26,    28,    32,    98,   104,
+     112,   141,   142,   143,   144,   145,   147,   148,   160,   163,
+     165,   114,   115,   114,   125,   164,   166,   149,   114,   161,
+       4,     0,   143,     4,    73,     4,   126,   258,   259,     4,
+     110,   114,   117,   118,   253,   254,    53,    54,    55,    56,
+     224,     4,    32,   103,   112,   120,   121,   144,   150,   154,
+     155,   162,   163,   213,   214,   215,   114,   126,   106,   107,
+     108,   109,   111,   114,   115,   116,   117,   119,   249,   257,
+     262,   263,   264,   265,   167,   110,   151,   152,     4,   155,
+     105,    14,    31,    79,   156,   157,   215,     4,   139,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      99,   100,   101,   173,   174,   175,   176,   177,   178,   179,
+     187,   188,   189,   124,   115,   114,   257,   114,   158,     4,
+     118,   263,   127,   127,   127,   127,   127,   127,   127,     4,
+     189,   265,   110,   118,   255,   256,   257,   256,    73,   187,
+     125,   159,   249,   250,   251,   252,   256,   114,   117,   153,
+     110,   114,    53,    54,    55,    56,   110,   114,   125,   180,
+     181,   114,   114,   153,   153,   168,   124,   124,   111,   103,
+     260,   261,   125,    73,   128,   128,   128,   258,    73,   128,
+     128,   128,   128,   128,     4,   169,   153,   153,   126,   262,
+     258,   252,   126,   181,     5,    33,   112,   120,   121,   145,
+     146,   170,   182,   210,   211,   212,   126,   171,   114,     4,
+       4,    74,   212,     1,   213,   216,   172,   224,    73,     4,
+      10,    12,    13,    14,    30,    31,    32,    36,    65,    66,
+      67,    68,    76,    80,    82,   110,   114,   117,   118,   127,
+     150,   183,   198,   200,   206,   208,   220,   226,   230,   232,
+     234,   235,   236,   244,   245,   246,   249,   110,   265,   255,
+      14,   257,    14,   257,   257,   221,   114,   117,   222,   223,
+     236,   249,   231,     4,     4,     4,   250,   227,   127,     4,
+     237,    37,    38,    39,    40,    41,    42,    43,    44,    46,
+      47,    48,    49,    50,   122,   124,   125,   233,   196,   257,
+      10,    58,    59,    60,    61,    62,    63,    73,   247,   248,
+     257,   247,   248,   224,    73,    73,   224,   224,   127,   184,
+     199,   201,   114,   242,   243,   249,   207,   127,   114,   117,
+     249,   254,    14,   114,   117,   118,   129,   130,   131,   132,
+     228,   236,   249,   257,   258,   257,    18,    19,    20,    21,
+      25,   102,   197,    10,   255,   257,    10,   255,   257,   110,
+     217,   218,   249,   249,   110,   110,   243,   191,   202,   203,
+      22,    73,   128,   196,   114,   209,   239,   257,   114,   238,
+     239,   257,   159,   110,   225,   257,    45,    51,    52,    57,
+      58,    59,    60,    61,    62,    63,    69,    70,    71,    72,
+     123,   125,   131,   132,   133,   134,   135,   136,   137,   138,
+     229,   126,   127,   255,    10,   255,    10,   102,   219,    73,
+     124,   124,   128,    11,    86,   186,   192,     4,    15,    81,
+     204,     4,    16,    83,   205,   249,   114,   242,   124,    22,
+      73,   128,   240,    22,    73,   128,    22,   125,   258,   257,
+     124,   114,   117,   255,   255,   218,   265,   265,   239,   257,
+      78,    84,    85,   190,     4,   257,     4,   257,     4,    22,
+     235,   257,   114,   239,    17,    21,    25,   241,   257,   114,
+     239,   257,   258,   126,   257,   128,   128,     4,   257,   257,
+     114,   249,   185,   215,   240,   240,   249,   127,    22,   127,
+      22,   126,     4,    73,     4,     4,    73,     4,    73,   193,
+       4,   238,   257,   114,   117,   257,   257,   257,   257,    30,
+      64,    77,   194,   128,   128,   128,     4,     4,     4,   195,
+     249,     4,   224,   196,   218
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3795,7 +3803,7 @@
 /* Line 1455 of yacc.c  */
 #line 1496 "compilers/imcc/imcc.y"
     {
-           (yyval.t) = 0;
+           (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
@@ -3806,7 +3814,7 @@
 /* Line 1455 of yacc.c  */
 #line 1502 "compilers/imcc/imcc.y"
     {
-           (yyval.t) = 0;
+           (yyval.t) = P_NSENTRY;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
@@ -5853,7 +5861,7 @@
 
 
 /* Line 1455 of yacc.c  */
-#line 5846 "compilers/imcc/imcparser.c"
+#line 5854 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6093,26 +6101,19 @@
      * before the newline, and thus, line is the line *after* the
      * error. Instead of duplicating code for both cases (the 'newline' and
      * non-newline case, do the test twice; efficiency is not important when
-     * we have an error anyway.
-     */
+     * we have an error anyway. */
     if (!at_eof(yyscanner)) {
-        if (*chr == '\n') {
-            IMCC_INFO(interp)->line--;
-        }
-
         IMCC_warning(interp, "error:imcc:%s", s);
+
         /* don't print the current token if it is a newline */
-        if (*chr != '\n') {
+        if (*chr != '\n')
             IMCC_warning(interp, " ('%s')", chr);
-        }
-        IMCC_print_inc(interp);
-
-        if (*chr == '\n') {
-            IMCC_INFO(interp)->line++;
-        }
 
+        IMCC_print_inc(interp);
     }
-    else { /* scanner is at end of file; just to be sure, do not print "current" token. */
+
+    /* scanner is at EOF; just to be sure, don't print "current" token */
+    else {
         IMCC_warning(interp, "error:imcc:%s", s);
         IMCC_print_inc(interp);
     }

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

Modified: branches/ops_pct/compilers/imcc/instructions.c
==============================================================================
--- branches/ops_pct/compilers/imcc/instructions.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/instructions.c	Wed May  5 08:45:29 2010	(r46302)
@@ -275,13 +275,9 @@
 {
     ASSERT_ARGS(instruction_writes)
     const int f = ins->flags;
-    int i;
+    int j;
 
-    /*
-     * a get_results opcode is before the actual sub call
-     * but for the register allocator, the effect matters, thus
-     * postpone the effect after the invoke
-     */
+    /* a get_results opcode occurs after the actual sub call */
     if (ins->opnum == PARROT_OP_get_results_pc) {
         int i;
 
@@ -289,7 +285,7 @@
          * an ExceptionHandler, which doesn't have
          * a call next
          */
-        if (ins->next && (ins->next->type & ITPCCSUB))
+        if (ins->prev && (ins->prev->type & ITPCCSUB))
             return 0;
 
         for (i = ins->symreg_count - 1; i >= 0; --i) {
@@ -308,7 +304,7 @@
          * structure
          */
         while (ins && ins->opnum != PARROT_OP_get_results_pc)
-            ins = ins->prev;
+            ins = ins->next;
 
         if (!ins)
             return 0;
@@ -336,14 +332,15 @@
         return 0;
     }
 
-    for (i = 0; i < ins->symreg_count; i++)
-        if (f & (1 << (16 + i)))
-            if (ins->symregs[i] == r)
+    for (j = 0; j < ins->symreg_count; j++)
+        if (f & (1 << (16 + j)))
+            if (ins->symregs[j] == r)
                 return 1;
 
     return 0;
 }
 
+
 /*
 
 =item C<int get_branch_regno(const Instruction *ins)>
@@ -816,6 +813,8 @@
 
 =item C<static int e_file_close(PARROT_INTERP, void *param)>
 
+Close STDOUT
+
 =cut
 
 */
@@ -835,6 +834,8 @@
 =item C<static int e_file_emit(PARROT_INTERP, void *param, const IMC_Unit *unit,
 const Instruction *ins)>
 
+emit the Instruction C<ins> to the given IMC_Unit C<unit>, passing C<param>
+
 =cut
 
 */

Modified: branches/ops_pct/compilers/imcc/main.c
==============================================================================
--- branches/ops_pct/compilers/imcc/main.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/main.c	Wed May  5 08:45:29 2010	(r46302)
@@ -78,7 +78,7 @@
     int obj_file,
     ARGIN_NULLOK(const char *output_file),
     int argc,
-    ARGIN(char **argv))
+    ARGIN(const char **argv))
         __attribute__nonnull__(1)
         __attribute__nonnull__(5);
 
@@ -251,13 +251,6 @@
         if (strchr(opt->opt_arg, '2')) {
             IMCC_INFO(interp)->optimizer_level |= (OPT_PRE | OPT_CFG);
         }
-        if (strchr(opt->opt_arg, 't')) {
-#ifdef HAVE_COMPUTED_GOTO
-            *core = PARROT_CGP_CORE;
-#else
-            *core = PARROT_SWITCH_CORE;
-#endif
-        }
         break;
 
       default:
@@ -414,12 +407,6 @@
     if (opt_level & OPT_SUB)
         opt_desc[i++] = 'c';
 
-    if (PARROT_RUNCORE_JIT_OPS_TEST(interp->run_core))
-        opt_desc[i++] = 'j';
-
-    if (PARROT_RUNCORE_PREDEREF_OPS_TEST(interp->run_core))
-        opt_desc[i++] = 't';
-
     opt_desc[i] = '\0';
     return;
 }
@@ -462,7 +449,7 @@
 /*
 
 =item C<static void imcc_run_pbc(PARROT_INTERP, int obj_file, const char
-*output_file, int argc, char **argv)>
+*output_file, int argc, const char **argv)>
 
 Write out or run Parrot bytecode.
 
@@ -472,7 +459,7 @@
 
 static void
 imcc_run_pbc(PARROT_INTERP, int obj_file, ARGIN_NULLOK(const char *output_file),
-        int argc, ARGIN(char **argv))
+        int argc, ARGIN(const char **argv))
 {
     ASSERT_ARGS(imcc_run_pbc)
     if (IMCC_INFO(interp)->imcc_warn)
@@ -692,7 +679,7 @@
 
 /*
 
-=item C<int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, char
+=item C<int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char
 **argv)>
 
 Entry point of IMCC, as invoked by Parrot's main function.
@@ -705,7 +692,7 @@
 
 int
 imcc_run(PARROT_INTERP, ARGIN(const char *sourcefile), int argc,
-        ARGIN(char **argv))
+        ARGIN(const char **argv))
 {
     int                obj_file;
     yyscan_t           yyscanner   = IMCC_INFO(interp)->yyscanner;

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

Modified: branches/ops_pct/compilers/imcc/parser_util.c
==============================================================================
--- branches/ops_pct/compilers/imcc/parser_util.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/parser_util.c	Wed May  5 08:45:29 2010	(r46302)
@@ -383,14 +383,9 @@
     int emit)
 {
     ASSERT_ARGS(INS)
-    int i, op, len;
-    int dirs = 0;
-    Instruction *ins;
-    op_info_t   *op_info;
-    char fullname[64] = "", format[128] = "";
 
     if (STREQ(name, ".annotate")) {
-        ins = _mk_instruction(name, "", n, r, 0);
+        Instruction *ins = _mk_instruction(name, "", n, r, 0);
         if (emit)
             return emitb(interp, unit, ins);
         else
@@ -402,176 +397,183 @@
     ||  (STREQ(name, "get_params"))
     ||  (STREQ(name, "set_returns")))
         return var_arg_ins(interp, unit, name, r, n, emit);
+    else {
+        Instruction *ins;
+        int i, op, len;
+        int dirs = 0;
+        op_info_t   *op_info;
+        char fullname[64] = "", format[128] = "";
 
-    op_fullname(fullname, name, r, n, keyvec);
-    op = interp->op_lib->op_code(interp, fullname, 1);
-
-    /* maybe we have a fullname */
-    if (op < 0)
-        op = interp->op_lib->op_code(interp, name, 1);
-
-    /* still wrong, try reverse compare */
-    if (op < 0) {
-        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);
-        }
-    }
-
-    /* still wrong, try to find an existing op */
-    if (op < 0)
-        op = try_find_op(interp, unit, name, r, n, keyvec, emit);
-
-    if (op < 0) {
-        int ok = 0;
+        op_fullname(fullname, name, r, n, keyvec);
+        op = interp->op_lib->op_code(interp, fullname, 1);
 
-        /* check mixed constants */
-        ins = IMCC_subst_constants_umix(interp, unit, name, r, n + 1);
-        if (ins)
-            goto found_ins;
+        /* maybe we have a fullname */
+        if (op < 0)
+            op = interp->op_lib->op_code(interp, name, 1);
+
+        /* still wrong, try reverse compare */
+        if (op < 0) {
+            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);
+            }
+        }
+
+        /* still wrong, try to find an existing op */
+        if (op < 0)
+            op = try_find_op(interp, unit, name, r, n, keyvec, emit);
 
-        /* and finally multiple constants */
-        ins = IMCC_subst_constants(interp, unit, name, r, n + 1, &ok);
+        if (op < 0) {
+            int ok = 0;
 
-        if (ok) {
+            /* check mixed constants */
+            ins = IMCC_subst_constants_umix(interp, unit, name, r, n + 1);
             if (ins)
                 goto found_ins;
-            else
-                return NULL;
-        }
-    }
-    else
-        strcpy(fullname, name);
 
-    if (op < 0)
-        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)
-        IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                "arg count mismatch: op #%d '%s' needs %d given %d",
-                op, fullname, op_info->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]) {
-          case PARROT_ARGDIR_INOUT:
-            dirs |= 1 << (16 + i);
-            /* go on */
-          case PARROT_ARGDIR_IN:
-            dirs |= 1 << i ;
-            break;
-
-          case PARROT_ARGDIR_OUT:
-            dirs |= 1 << (16 + i);
-            break;
-
-          default:
-            PARROT_ASSERT(0);
-        };
-
-        if (keyvec & KEY_BIT(i)) {
-            /* XXX Assert that len > 2 */
-            len          = strlen(format) - 2;
-            PARROT_ASSERT(len >= 0);
-            format[len]  = '\0';
-            strcat(format, "[%s], ");
+            /* and finally multiple constants */
+            ins = IMCC_subst_constants(interp, unit, name, r, n + 1, &ok);
+
+            if (ok) {
+                if (ins)
+                    goto found_ins;
+                else
+                    return NULL;
+            }
         }
-        else if (r[i]->set == 'K')
-            strcat(format, "[%s], ");
         else
-            strcat(format, "%s, ");
-    }
+            strcpy(fullname, name);
+
+        if (op < 0)
+            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)
+            IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
+                    "arg count mismatch: op #%d '%s' needs %d given %d",
+                    op, fullname, op_info->op_count-1, n);
 
-    len = strlen(format);
-    if (len >= 2)
-        len -= 2;
+        /* XXX Speed up some by keep track of the end of format ourselves */
+        for (i = 0; i < n; i++) {
+            switch (op_info->dirs[i]) {
+              case PARROT_ARGDIR_INOUT:
+                dirs |= 1 << (16 + i);
+                /* go on */
+              case PARROT_ARGDIR_IN:
+                dirs |= 1 << i ;
+                break;
+
+              case PARROT_ARGDIR_OUT:
+                dirs |= 1 << (16 + i);
+                break;
+
+              default:
+                PARROT_ASSERT(0);
+            };
+
+            if (keyvec & KEY_BIT(i)) {
+                /* XXX Assert that len > 2 */
+                len          = strlen(format) - 2;
+                PARROT_ASSERT(len >= 0);
+                format[len]  = '\0';
+                strcat(format, "[%s], ");
+            }
+            else if (r[i]->set == 'K')
+                strcat(format, "[%s], ");
+            else
+                strcat(format, "%s, ");
+        }
 
-    format[len] = '\0';
+        len = strlen(format);
+        if (len >= 2)
+            len -= 2;
 
-    if (fmt && *fmt) {
-        strncpy(format, fmt, sizeof (format) - 1);
-        format[sizeof (format) - 1] = '\0';
-    }
+        format[len] = '\0';
 
-    IMCC_debug(interp, DEBUG_PARSER, "%s %s\t%s\n", name, format, fullname);
+        if (fmt && *fmt) {
+            strncpy(format, fmt, sizeof (format) - 1);
+            format[sizeof (format) - 1] = '\0';
+        }
 
-    /* make the instruction */
-    ins         = _mk_instruction(name, format, n, r, dirs);
-    ins->keys  |= keyvec;
+        IMCC_debug(interp, DEBUG_PARSER, "%s %s\t%s\n", name, format, fullname);
 
-    /* fill in oplib's info */
-    ins->opnum  = op;
-    ins->opsize = n + 1;
+        /* make the instruction */
+        ins         = _mk_instruction(name, format, n, r, dirs);
+        ins->keys  |= keyvec;
 
-    /* mark end as absolute branch */
-    if (STREQ(name, "end") || STREQ(name, "ret")) {
-        ins->type |= ITBRANCH | IF_goto;
-    }
-    else if (STREQ(name, "warningson")) {
-        /* emit a debug seg, if this op is seen */
-        PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
-    }
-    else if (STREQ(name, "yield")) {
-        if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
-            IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                "Cannot yield from non-continuation\n");
+        /* fill in oplib's info */
+        ins->opnum  = op;
+        ins->opsize = n + 1;
 
-        IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub
-            |= 1 | ITPCCYIELD;
-    }
-    else if ((strncmp(name, "invoke", 6) == 0) ||
-             (strncmp(name, "callmethod", 10) == 0)) {
-        if (IMCC_INFO(interp)->cur_unit->type & IMC_PCCSUB)
-            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
-    }
-
-    /* set up branch flags
-     * mark registers that are labels */
-    for (i = 0; i < op_info->op_count - 1; i++) {
-        if (op_info->labels[i])
-            ins->type |= ITBRANCH | (1 << i);
-        else {
-            if (r[i]->type == VTADDRESS)
+        /* mark end as absolute branch */
+        if (STREQ(name, "end") || STREQ(name, "ret")) {
+            ins->type |= ITBRANCH | IF_goto;
+        }
+        else if (STREQ(name, "warningson")) {
+            /* emit a debug seg, if this op is seen */
+            PARROT_WARNINGS_on(interp, PARROT_WARNINGS_ALL_FLAG);
+        }
+        else if (STREQ(name, "yield")) {
+            if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0])
                 IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
-                        "undefined identifier '%s'\n", r[i]->name);
+                    "Cannot yield from non-continuation\n");
+
+            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub
+                |= 1 | ITPCCYIELD;
         }
-    }
+        else if ((strncmp(name, "invoke", 6) == 0) ||
+                 (strncmp(name, "callmethod", 10) == 0)) {
+            if (IMCC_INFO(interp)->cur_unit->type & IMC_PCCSUB)
+                IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
+        }
+
+        /* set up branch flags
+         * mark registers that are labels */
+        for (i = 0; i < op_info->op_count - 1; i++) {
+            if (op_info->labels[i])
+                ins->type |= ITBRANCH | (1 << i);
+            else {
+                if (r[i]->type == VTADDRESS)
+                    IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
+                            "undefined identifier '%s'\n", r[i]->name);
+            }
+        }
+
+        if (op_info->jump) {
+            ins->type |= ITBRANCH;
+            /* TODO use opnum constants */
+            if (STREQ(name, "branch")
+            ||  STREQ(name, "tailcall")
+            ||  STREQ(name, "returncc"))
+                ins->type |= IF_goto;
+            else if (STREQ(fullname, "jump_i")
+                 ||  STREQ(fullname, "branch_i"))
+                IMCC_INFO(interp)->dont_optimize = 1;
+        }
+        else if (STREQ(name, "set") && n == 2) {
+            /* set Px, Py: both PMCs have the same address */
+            if (r[0]->set == r[1]->set && REG_NEEDS_ALLOC(r[1]))
+                ins->type |= ITALIAS;
+        }
+        else if (STREQ(name, "compile"))
+            ++IMCC_INFO(interp)->has_compile;
 
-    if (op_info->jump) {
-        ins->type |= ITBRANCH;
-        /* TODO use opnum constants */
-        if (STREQ(name, "branch")
-        ||  STREQ(name, "tailcall")
-        ||  STREQ(name, "returncc"))
-            ins->type |= IF_goto;
-        else if (STREQ(fullname, "jump_i")
-             ||  STREQ(fullname, "branch_i"))
-            IMCC_INFO(interp)->dont_optimize = 1;
-    }
-    else if (STREQ(name, "set") && n == 2) {
-        /* set Px, Py: both PMCs have the same address */
-        if (r[0]->set == r[1]->set && REG_NEEDS_ALLOC(r[1]))
-            ins->type |= ITALIAS;
-    }
-    else if (STREQ(name, "compile"))
-        ++IMCC_INFO(interp)->has_compile;
-
-  found_ins:
-    if (emit)
-        emitb(interp, unit, ins);
+      found_ins:
+        if (emit)
+            emitb(interp, unit, ins);
 
-    return ins;
+        return ins;
+    }
 }
 
 extern void* yy_scan_string(const char *);
@@ -654,7 +656,7 @@
     eval_number = ++eval_nr;
     UNLOCK(eval_nr_lock);
 
-    name = Parrot_sprintf_c(interp, "EVAL_" INTVAL_FMT, eval_number);
+    name   = Parrot_sprintf_c(interp, "EVAL_" INTVAL_FMT, eval_number);
     new_cs = PF_create_default_segs(interp, name, 0);
     old_cs = Parrot_switch_to_cs(interp, new_cs, 0);
 
@@ -708,11 +710,12 @@
         sub_data->seg        = new_cs;
         sub_data->start_offs = 0;
         sub_data->end_offs   = new_cs->base.size;
-        sub_data->name       = Parrot_str_copy(interp, name);
+        sub_data->name       = name;
 
         *error_message = NULL;
     }
     else {
+        PackFile_Segment_destroy(interp, (PackFile_Segment *)new_cs);
         *error_message = IMCC_INFO(interp)->error_message;
     }
 
@@ -934,11 +937,13 @@
     IMCC_push_parser_state(interp);
     {
         /* Store a copy, in order to know how to free it later */
-        char *copyname = mem_sys_strdup(fullname);
+        char *copyname                 = mem_sys_strdup(fullname);
         IMCC_INFO(interp)->state->file = copyname;
         ext                            = strrchr(copyname, '.');
     }
-    IMCC_INFO(interp)->line        = 1;
+
+    /* start over; let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line = 0;
 
     /*
      * the Parrot_str_compare() called from pmc_type() triggers GC

Modified: branches/ops_pct/compilers/imcc/pbc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/pbc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/pbc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -6,6 +6,7 @@
 #include "imc.h"
 #include "pbc.h"
 #include "parrot/packfile.h"
+#include "parrot/pmc_freeze.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 
@@ -78,7 +79,7 @@
         FUNC_MODIFIES(*r);
 
 PARROT_WARN_UNUSED_RESULT
-static int add_const_str(PARROT_INTERP, ARGIN(const SymReg *r))
+static int add_const_str(PARROT_INTERP, ARGIN(STRING *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -222,7 +223,7 @@
     , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_add_const_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(r))
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_add_const_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_add_const_table_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -832,7 +833,7 @@
                     interp->code->base.data[addr] = op;
 
                     if (nam->color < 0)
-                        nam->color = add_const_str(interp, nam);
+                        nam->color = add_const_str(interp, IMCC_string_from_reg(interp, nam));
 
                     interp->code->base.data[addr+2] = nam->color;
 
@@ -968,7 +969,7 @@
 
 /*
 
-=item C<static int add_const_str(PARROT_INTERP, const SymReg *r)>
+=item C<static int add_const_str(PARROT_INTERP, STRING *s)>
 
 Adds a constant string to constant_table.
 
@@ -978,36 +979,37 @@
 
 PARROT_WARN_UNUSED_RESULT
 static int
-add_const_str(PARROT_INTERP, ARGIN(const SymReg *r))
+add_const_str(PARROT_INTERP, ARGIN(STRING *s))
 {
     ASSERT_ARGS(add_const_str)
 
     PackFile_ConstTable *table = interp->code->const_table;
-    STRING * const s = IMCC_string_from_reg(interp, r);
-    int k = -1;
     int i;
+
     for (i = 0; i < table->const_count; ++i) {
         PackFile_Constant * const constant = table->constants[i];
         if (constant->type == PFC_STRING) {
             STRING * const sc = constant->u.string;
-            if (Parrot_charset_number_of_str(interp, s) ==
-                    Parrot_charset_number_of_str(interp, sc) &&
-                    Parrot_encoding_number_of_str(interp, s) ==
-                    Parrot_encoding_number_of_str(interp, sc) &&
-                    Parrot_str_equal(interp, s, sc)) {
-                k = i;
-                break;
+            if (Parrot_str_equal(interp, s, sc)
+            &&  Parrot_charset_number_of_str(interp, s)
+            ==  Parrot_charset_number_of_str(interp, sc)
+            &&  Parrot_encoding_number_of_str(interp, s)
+            ==  Parrot_encoding_number_of_str(interp, sc))
+            {
+                return i;
             }
         }
     }
-    if (k < 0) {
-        PackFile_Constant * constant;
-        k = add_const_table(interp);
-        constant = table->constants[k];
-        constant->type     = PFC_STRING;
-        constant->u.string = s;
+
+    /* otherwise... */
+    {
+        int                k        = add_const_table(interp);
+        PackFile_Constant *constant = table->constants[k];
+        constant->type              = PFC_STRING;
+        constant->u.string          = s;
+
+        return k;
     }
-    return k;
 }
 
 
@@ -1064,8 +1066,7 @@
     if (!pcc_sub->multi[0])
         return Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
 
-    multi_sig = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    VTABLE_set_integer_native(interp, multi_sig, n);
+    multi_sig = Parrot_pmc_new_init_int(interp, enum_class_FixedPMCArray, n);
     ct        = interp->code->const_table;
 
     for (i = 0; i < n; ++i) {
@@ -1082,10 +1083,9 @@
                 sig_pmc = Parrot_pmc_new(interp, enum_class_String);
                 VTABLE_set_string_native(interp, sig_pmc, type_name);
             }
-            else {
-                sig_pmc = Parrot_pmc_new(interp, enum_class_Integer);
-                VTABLE_set_integer_native(interp, sig_pmc, type_num);
-            }
+            else
+                sig_pmc = Parrot_pmc_new_init_int(interp,
+                        enum_class_Integer, type_num);
         }
         else {
             PARROT_ASSERT(r->set == 'K');
@@ -1193,7 +1193,6 @@
     ASSERT_ARGS(find_outer)
     subs_t      *s;
     PMC         *current;
-    STRING      *cur_name;
     char        *cur_name_str;
     Parrot_Sub_attributes *sub;
     size_t      len;
@@ -1227,7 +1226,6 @@
                    unit->outer->name);
 
     PMC_get_sub(interp, current, sub);
-    cur_name = sub->name;
 
     cur_name_str = Parrot_str_to_cstring(interp,  sub->name);
     if (strlen(cur_name_str) == len
@@ -1267,9 +1265,7 @@
     PMC                   *sub_pmc;
     Parrot_Sub_attributes *sub, *outer_sub;
 
-    const int            k            = add_const_table(interp);
     PackFile_ConstTable * const ct    = interp->code->const_table;
-    PackFile_Constant   * const pfc   = ct->constants[k];
     IMC_Unit            * const unit  =
         IMCC_INFO(interp)->globals->cs->subs->unit;
 
@@ -1280,8 +1276,6 @@
     int                  i;
     int                  ns_const = -1;
 
-    IMCC_INFO(interp)->globals->cs->subs->pmc_const = k;
-
     if (unit->_namespace) {
         /* strip namespace off from front */
         const char *real_name = strrchr(r->name, '@');
@@ -1331,7 +1325,7 @@
     PMC_get_sub(interp, sub_pmc, sub);
     Sub_comp_get_FLAGS(sub) |= (r->pcc_sub->pragma & SUB_COMP_FLAG_MASK);
 
-    r->color  = add_const_str(interp, r);
+    r->color  = add_const_str(interp, IMCC_string_from_reg(interp, r));
     sub->name = ct->constants[r->color]->u.string;
 
     /* If the unit has no subid, set the subid to match the name. */
@@ -1339,25 +1333,16 @@
         unit->subid = r;
     else {
         /* trim the quotes  */
+        char *oldname     = unit->subid->name;
         unit->subid->name = mem_sys_strdup(unit->subid->name + 1);
         unit->subid->name[strlen(unit->subid->name) - 1] = 0;
+        mem_sys_free(oldname);
 
         /* create string constant for it. */
-        unit->subid->color = add_const_str(interp, unit->subid);
+        unit->subid->color = add_const_str(interp, IMCC_string_from_reg(interp, unit->subid));
     }
 
     sub->subid = ct->constants[unit->subid->color]->u.string;
-
-#if 0
-    if (unit->subid) {
-        sub->subid = IMCC_string_from__STRINGC(interp, unit->subid);
-        UNIT_FREE_CHAR(unit->subid);
-        }
-    /* If the unit has no subid, set the subid to match the name. */
-    else
-        sub->subid = sub->name;
-#endif
-
     ns_pmc     = NULL;
 
     if (ns_const >= 0 && ns_const < ct->const_count) {
@@ -1397,7 +1382,7 @@
         STRING *vtable_name;
         INTVAL  vtable_index;
 
-        /* Work out the name of the vtable method. */
+        /* Work out the name of the vtable function. */
         if (unit->vtable_name) {
             vtable_name = Parrot_str_new(interp, unit->vtable_name + 1,
                     strlen(unit->vtable_name) - 2);
@@ -1406,14 +1391,13 @@
         else
             vtable_name = sub->name;
 
-        /* Check this is a valid vtable method to override. */
+        /* Check this is a valid vtable function to override. */
         vtable_index = Parrot_get_vtable_index(interp, vtable_name);
 
-        if (vtable_index == -1) {
+        if (vtable_index == -1)
             IMCC_fatal(interp, 1,
-                "'%S' is not a v-table method, but was used with :vtable.\n",
+                "'%S' is not a vtable, but was used with :vtable.\n",
                 vtable_name);
-        }
 
         /* TODO check for duplicates */
         sub->vtable_index = vtable_index;
@@ -1446,29 +1430,49 @@
 
     Parrot_store_sub_in_namespace(interp, sub_pmc);
 
-    pfc->type     = PFC_PMC;
-    pfc->u.key    = sub_pmc;
-    unit->sub_pmc = sub_pmc;
-
     if (sub->outer_sub)
         PMC_get_sub(interp, sub->outer_sub, outer_sub);
 
-    IMCC_debug(interp, DEBUG_PBC_CONST,
-            "add_const_pmc_sub '%s' flags %x color %d (%Ss) "
-            "lex_info %s :outer(%Ss)\n",
-            r->name, r->pcc_sub->pragma, k,
-            sub_pmc->vtable->whoami,
-            sub->lex_info ? "yes" : "no",
-            sub->outer_sub? outer_sub->name :
-            Parrot_str_new(interp, "*none*", 0));
-
     /*
-     * create entry in our fixup (=symbol) table
-     * the offset is the index in the constant table of this Sub
+     * store the sub's strings
+     * XXX these need to occur before the sub to support thawing properly
      */
-    PackFile_FixupTable_new_entry(interp, r->name, enum_fixup_sub, k);
+    {
+        PMC *strings = Parrot_freeze_strings(interp, sub_pmc);
+        int n = VTABLE_elements(interp, strings);
+        for (i = 0; i < n; i++) {
+            int unused = add_const_str(interp, VTABLE_get_string_keyed_int(interp, strings, i));
+        }
+    }
 
-    return k;
+    /* store the sub */
+    {
+        const int            k            = add_const_table(interp);
+        PackFile_Constant   * const pfc   = ct->constants[k];
+
+        pfc->type     = PFC_PMC;
+        pfc->u.key    = sub_pmc;
+        unit->sub_pmc = sub_pmc;
+
+        IMCC_INFO(interp)->globals->cs->subs->pmc_const = k;
+
+        IMCC_debug(interp, DEBUG_PBC_CONST,
+                "add_const_pmc_sub '%s' flags %x color %d (%Ss) "
+                "lex_info %s :outer(%Ss)\n",
+                r->name, r->pcc_sub->pragma, k,
+                sub_pmc->vtable->whoami,
+                sub->lex_info ? "yes" : "no",
+                sub->outer_sub? outer_sub->name :
+                Parrot_str_new(interp, "*none*", 0));
+
+        /*
+         * create entry in our fixup (=symbol) table
+         * the offset is the index in the constant table of this Sub
+         */
+        PackFile_FixupTable_new_entry(interp, r->name, enum_fixup_sub, k);
+
+        return k;
+    }
 }
 
 
@@ -1540,13 +1544,14 @@
 build_key(PARROT_INTERP, ARGIN(SymReg *key_reg))
 {
     ASSERT_ARGS(build_key)
-#define KEYLEN 21
-    SymReg   *reg;
+#define MAX_KEY_LEN 10
+#define MAX_KEYNAME_LEN 20
+    SymReg   *reg = key_reg->set == 'K' ? key_reg->nextkey : key_reg;
 
-    char      s_key[KEYLEN * 10];
-    opcode_t  key[KEYLEN];
+    char      s_key[MAX_KEY_LEN * MAX_KEYNAME_LEN];
+    opcode_t  key[MAX_KEY_LEN * 2 + 1];
     opcode_t  size;
-    int       key_length;     /* P0["hi;there"; S0; 2] has length 3 */
+    int       key_length = 0;     /* P0["hi;there"; S0; 2] has length 3 */
     int       k;
 
     /* 0 is length */
@@ -1556,15 +1561,14 @@
     char     *s  = s_key;
 
     *s           = 0;
-    reg          = key_reg->set == 'K' ? key_reg->nextkey : key_reg;
 
     for (key_length = 0; reg ; reg = reg->nextkey, key_length++) {
         SymReg *r = reg;
         int     type;
 
-        if ((pc - key - 2) >= KEYLEN)
+        if (key_length >= MAX_KEY_LEN)
             IMCC_fatal(interp, 1, "build_key:"
-                    "key too complex increase KEYLEN\n");
+                    "Key too long, increase MAX_KEY_LEN.\n");
 
         /* if key is a register, the original sym is in r->reg */
         type = r->type;
@@ -1876,7 +1880,7 @@
       case 'S':
         if (r->type & VT_CONSTP)
             r = r->reg;
-        r->color = add_const_str(interp, r);
+        r->color = add_const_str(interp, IMCC_string_from_reg(interp, r));
         break;
       case 'N':
         r->color = add_const_num(interp, r->name);

Modified: branches/ops_pct/compilers/imcc/pcc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/pcc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/pcc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2009, Parrot Foundation.
+ * Copyright (C) 2003-2010, Parrot Foundation.
  * $Id$
  */
 
@@ -416,7 +416,8 @@
     SymReg      *regs[2];
 
     /* if this sub is a method, unshift 'self' as first param */
-    if ((unit->type & IMC_HAS_SELF) || (sub->pcc_sub->pragma & (P_METHOD | P_VTABLE))) {
+    if ((unit->type & IMC_HAS_SELF)
+    ||  (sub->pcc_sub->pragma & (P_METHOD | P_VTABLE))) {
         SymReg *self = get_sym(interp, "self");
         if (!self) {
             self       = mk_symreg(interp, "self", 'P');
@@ -866,11 +867,6 @@
         return;
     }
 
-    /* handle return results */
-    n   = sub->pcc_sub->nret;
-    ins = pcc_get_args(interp, unit, ins, "get_results", n,
-            sub->pcc_sub->ret, sub->pcc_sub->ret_flags);
-
     /* insert the call */
     if (meth_call) {
         regs[0] = sub->pcc_sub->object;
@@ -899,6 +895,11 @@
     }
 
     ins->type |= ITPCCSUB;
+
+    /* handle return results */
+    n   = sub->pcc_sub->nret;
+    ins = pcc_get_args(interp, unit, ins, "get_results", n,
+            sub->pcc_sub->ret, sub->pcc_sub->ret_flags);
 }
 
 /*

Modified: branches/ops_pct/compilers/imcc/symreg.c
==============================================================================
--- branches/ops_pct/compilers/imcc/symreg.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/symreg.c	Wed May  5 08:45:29 2010	(r46302)
@@ -860,7 +860,6 @@
 int_overflows(ARGIN(const SymReg *r))
 {
     ASSERT_ARGS(int_overflows)
-    INTVAL i;
     int base;
     const char *digits;
 
@@ -883,10 +882,10 @@
 
     errno = 0;
     if (base == 10) {
-        i = strtol(digits, NULL, base);
+        (void)strtol(digits, NULL, base);
     }
     else {
-        i = strtoul(digits + 2, NULL, base);
+        (void)strtoul(digits + 2, NULL, base);
     }
 
     return errno ? 1 : 0;

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

Modified: branches/ops_pct/compilers/imcc/unit.h
==============================================================================
--- branches/ops_pct/compilers/imcc/unit.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/imcc/unit.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2003-2009, Parrot Foundation.
+ * Copyright (C) 2003-2010, Parrot Foundation.
  */
 
 #ifndef PARROT_IMCC_UNIT_H_GUARD
@@ -64,10 +64,10 @@
     int               first_avail[4];   /* INSP */
     SymReg           *outer;
     PMC              *sub_pmc;          /* this sub */
-    int               is_vtable_method; /* 1 if a v-table method */
+    int               is_vtable_method; /* 1 if a vtable */
     int               is_method;        /* 1 if a method */
     int               has_ns_entry_name;/* 1 if in ns */
-    char             *vtable_name;      /* v-table method name, if any */
+    char             *vtable_name;      /* vtable name, if any */
     char             *method_name;      /* method name, if any */
     char             *ns_entry_name;    /* ns entry name, if any */
     char             *instance_of;      /* PMC or class this is an instance of

Modified: branches/ops_pct/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/ops_pct/compilers/pct/src/PAST/Compiler.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pct/src/PAST/Compiler.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -102,7 +102,8 @@
     piropsig['splice']     = 'PPii'
     piropsig['split']      = 'Pss'
     piropsig['sub']        = 'PP+'
-    piropsig['substr']     = 'Ssiis'
+    piropsig['substr']     = 'Ssii'
+    piropsig['replace']    = 'Ssiis'
     piropsig['pow']        = 'NN+'
     piropsig['print']      = 'v*'
     piropsig['say']        = 'v*'
@@ -1150,7 +1151,7 @@
     name = node.'name'()
     if name goto call_by_name
     ##  our first child is the thing to be invoked, so make sure it's a PMC
-    substr signature, 1, 0, 'P'
+    signature = replace signature, 1, 0, 'P'
     (ops, posargs, namedargs) = self.'post_children'(node, 'signature'=>signature)
     goto children_done
   call_by_name:

Modified: branches/ops_pct/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/ops_pct/compilers/pct/src/PCT/HLLCompiler.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pct/src/PCT/HLLCompiler.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -55,11 +55,18 @@
 
     $S0  = '???'
     push_eh _handler
-    $P0  = _config()    # currently works in the build tree, but not in the install tree
-    $S0  = $P0['revision']
+    $P0  = _config()
+    $S0  = $P0['revision']   # also $I0 = P0['installed'] could be used
   _handler:
     pop_eh
-    $P2  = box 'This compiler is built with the Parrot Compiler Toolkit, parrot revision '
+    $P2  = box 'This compiler is built with the Parrot Compiler Toolkit, parrot '
+    if $S0 goto _revision_lab
+    $P2 .= 'version '
+    $S0 = $P0['VERSION']
+    goto _is_version
+  _revision_lab:
+    $P2 .= 'revision '
+  _is_version:
     $P2 .= $S0
     $P2 .= '.'
     setattribute self, '$version', $P2
@@ -921,7 +928,7 @@
 
   load_dumper:
     load_bytecode 'PCT/Dumper.pbc'
-    downcase $S0
+    $S0 = downcase $S0
     $P0 = get_hll_global ['PCT';'Dumper'], $S0
     .tailcall $P0(obj, name)
 .end

Modified: branches/ops_pct/compilers/pct/src/POST/Node.pir
==============================================================================
--- branches/ops_pct/compilers/pct/src/POST/Node.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pct/src/POST/Node.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -82,7 +82,7 @@
 .end
 
 
-=item get_string()   # vtable method
+=item get_string()
 
 Returns the result of the current node as a string.
 

Modified: branches/ops_pct/compilers/pge/PGE/Exp.pir
==============================================================================
--- branches/ops_pct/compilers/pge/PGE/Exp.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pge/PGE/Exp.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -163,7 +163,7 @@
     .local string returnop
     returnop = '.yield'
     code.'emit'(<<"        CODE", name, pirflags, namecorou, .INTERPINFO_CURRENT_SUB)
-      .sub %0 :method %1
+      .sub %0 :method :nsentry %1
           .param pmc adverbs   :slurpy :named
           .local pmc mob
           .const 'Sub' corou = %2
@@ -192,7 +192,7 @@
     ##   Initial code for a rule that cannot be backtracked into.
     returnop = '.return'
     code.'emit'(<<"        CODE", name, pirflags)
-      .sub %0 :method %1
+      .sub %0 :method :nsentry %1
           .param pmc adverbs      :unique_reg :slurpy :named
           .local pmc mob
           .local string target    :unique_reg
@@ -362,7 +362,7 @@
     args['I'] = ''
     $I0 = self['ignorecase']
     if $I0 == 0 goto ignorecase_end
-    args['I'] = 'downcase $S0'
+    args['I'] = '$S0 = downcase $S0'
     literal = downcase literal
   ignorecase_end:
 
@@ -718,7 +718,7 @@
 
 .namespace [ 'PGE';'Exp';'CGroup' ]
 
-.sub 'pir' :method
+.sub 'pir' :method :nsentry
     .param pmc code
     .param string label
     .param string next

Modified: branches/ops_pct/compilers/pge/PGE/OPTable.pir
==============================================================================
--- branches/ops_pct/compilers/pge/PGE/OPTable.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pge/PGE/OPTable.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -155,7 +155,7 @@
     unless $S0 goto with_looser
     $S0 = tokentable[$S0;'precedence']
     $S0 = clone $S0
-    substr $S0, -1, 0, '<'
+    $S0 = replace $S0, -1, 0, '<'
     token['precedence'] = $S0
   with_looser:
 
@@ -163,7 +163,7 @@
     unless $S0 goto with_tighter
     $S0 = tokentable[$S0;'precedence']
     $S0 = clone $S0
-    substr $S0, -1, 0, '>'
+    $S0 = replace $S0, -1, 0, '>'
     token['precedence'] = $S0
   with_tighter:
 
@@ -377,7 +377,7 @@
     goto key_array_1
   key_next:
     if key == '' goto token_nows
-    chopn key, 1
+    key = chopn key, 1
     goto key_loop
   token_nows:
     if pos == wspos goto oper_not_found

Modified: branches/ops_pct/compilers/pge/PGE/Perl6Regex.pir
==============================================================================
--- branches/ops_pct/compilers/pge/PGE/Perl6Regex.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pge/PGE/Perl6Regex.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1021,7 +1021,7 @@
     ##   by converting to <, <+, <-, or <!
     $S0 = substr op, -1, 1
     if $S0 != '[' goto parse_loop
-    chopn op, 1
+    op = chopn op, 1
     goto enum
 
   parse_loop:

Modified: branches/ops_pct/compilers/pge/PGE/Regex.pir
==============================================================================
--- branches/ops_pct/compilers/pge/PGE/Regex.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pge/PGE/Regex.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -37,7 +37,7 @@
 
 =cut
 
-.sub 'ident' :method
+.sub 'ident' :method :nsentry('ident')
     .param pmc adverbs         :slurpy :named
     .local string target
     .local pmc mob, mfrom, mpos

Modified: branches/ops_pct/compilers/pirc/Rules.mak
==============================================================================
--- branches/ops_pct/compilers/pirc/Rules.mak	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/Rules.mak	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,5 @@
 compilers/pirc/src/piremit$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/src/piremit.c \
         compilers/pirc/src/piremit.h \
         compilers/pirc/src/pircompunit.h \
         compilers/pirc/src/pircompiler.h \
@@ -13,6 +14,7 @@
         $(INC_DIR)/oplib/ops.h
 
 compilers/pirc/src/pirparser$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/src/pirparser.c \
         compilers/pirc/src/pircompiler.h \
         compilers/pirc/src/pircompunit.h \
         compilers/pirc/src/pirdefines.h \
@@ -30,6 +32,7 @@
         $(INC_DIR)/embed.h
 
 compilers/pirc/src/pirerr$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/src/pirerr.c \
         compilers/pirc/src/pircompiler.h \
         compilers/pirc/src/pircompunit.h \
         compilers/pirc/src/pirdefines.h \
@@ -44,6 +47,7 @@
         $(INC_DIR)/embed.h
 
 compilers/pirc/src/bcgen$(O) :  \
+  compilers/pirc/src/bcgen.c \
   compilers/pirc/src/pirsymbol.h \
   compilers/pirc/src/pircompiler.h \
   compilers/pirc/src/pirregalloc.h \
@@ -57,6 +61,7 @@
   include/pmc/pmc_namespace.h
 
 compilers/pirc/src/pirregalloc$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/src/pirregalloc.c \
         compilers/pirc/src/pircompiler.h \
         compilers/pirc/src/pircompunit.h \
         compilers/pirc/src/pirdefines.h \
@@ -66,25 +71,30 @@
         compilers/pirc/src/bcgen.h \
         $(INC_DIR)/embed.h
 
-compilers/pirc/heredoc/heredocmain$(O) : $(PARROT_H_HEADERS)
+compilers/pirc/heredoc/heredocmain$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/heredoc/heredocmain.c  \
 
 compilers/pirc/macro/macrolexer$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/macro/macrolexer.c  \
         compilers/pirc/macro/macro.h  \
         compilers/pirc/macro/lexer.h  \
         compilers/pirc/macro/macroparser.h
 
 compilers/pirc/macro/macroparser$(O) : $(PARROT_H_HEADERS) \
+        compilers/pirc/macro/macroparser.c  \
         compilers/pirc/macro/macro.h  \
         compilers/pirc/macro/lexer.h  \
         compilers/pirc/macro/macroparser.h \
         compilers/pirc/macro/macrolexer.h
 
 compilers/pirc/src/hdocprep$(O) : $(PARROT_H_HEADERS) \
-        $(INC_DIR)/embed.h compilers/pirc/src/pirheredoc.h
+        $(INC_DIR)/embed.h compilers/pirc/src/pirheredoc.h \
+        compilers/pirc/src/hdocprep.c
 
 compilers/pirc/src/main$(O) : \
         $(PARROT_H_HEADERS) \
         $(INC_DIR)/embed.h \
+        compilers/pirc/src/main.c \
         compilers/pirc/src/bcgen.h \
         compilers/pirc/src/pirparser.h \
         compilers/pirc/src/pircompiler.h \
@@ -101,6 +111,7 @@
 
 compilers/pirc/src/pircapi$(O) : \
         $(PARROT_H_HEADERS) \
+        compilers/pirc/src/pircapi.c \
         compilers/pirc/src/bcgen.h \
         compilers/pirc/src/pircompiler.h \
         compilers/pirc/src/pirparser.h \
@@ -116,6 +127,7 @@
         $(INC_DIR)/embed.h
 
 compilers/pirc/src/pircompiler$(O) : \
+        compilers/pirc/src/pircompiler.c \
         compilers/pirc/src/pircompiler.h \
         $(PARROT_H_HEADERS) \
         compilers/pirc/src/piryy.h \
@@ -129,6 +141,7 @@
         $(INC_DIR)/embed.h
 
 compilers/pirc/src/pircompunit$(O) : $(PARROT_H_HEADERS) \
+  compilers/pirc/src/pircompunit.c \
   compilers/pirc/src/pircompunit.h \
   compilers/pirc/src/pircompiler.h \
   compilers/pirc/src/pirsymbol.h \
@@ -145,6 +158,7 @@
   $(INC_DIR)/embed.h
 
 compilers/pirc/src/pirlexer$(O) : $(PARROT_H_HEADERS) \
+  compilers/pirc/src/pirlexer.c \
   compilers/pirc/src/pirparser.h \
   compilers/pirc/src/pirmacro.h \
   compilers/pirc/src/pirerr.h \
@@ -158,6 +172,7 @@
   $(INC_DIR)/embed.h
 
 compilers/pirc/src/pirmacro$(O) : $(PARROT_H_HEADERS) \
+  compilers/pirc/src/pirmacro.c \
   compilers/pirc/src/pirmacro.h \
   compilers/pirc/src/pircompunit.h \
   compilers/pirc/src/pircompiler.h \
@@ -168,6 +183,7 @@
   $(INC_DIR)/embed.h
 
 compilers/pirc/src/pirop$(O) : $(PARROT_H_HEADERS) \
+  compilers/pirc/src/pirop.c \
   compilers/pirc/src/pircompiler.h \
   compilers/pirc/src/pircompunit.h \
   compilers/pirc/src/pirop.h \
@@ -181,6 +197,7 @@
   $(INC_DIR)/embed.h
 
 compilers/pirc/src/pirpcc$(O) : $(PARROT_H_HEADERS) \
+  compilers/pirc/src/pirpcc.c \
   compilers/pirc/src/pirpcc.h \
   compilers/pirc/src/pircompiler.h \
   compilers/pirc/src/pirerr.h \
@@ -195,6 +212,7 @@
   $(INC_DIR)/embed.h
 
 compilers/pirc/src/pirsymbol$(O) : $(PARROT_H_HEADERS) \
+  compilers/pirc/src/pirsymbol.c \
   compilers/pirc/src/pircompiler.h \
   compilers/pirc/src/pirsymbol.h \
   compilers/pirc/src/piryy.h \

Modified: branches/ops_pct/compilers/pirc/src/pircompiler.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompiler.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pircompiler.c	Wed May  5 08:45:29 2010	(r46302)
@@ -33,9 +33,10 @@
 PARROT_WARN_UNUSED_RESULT
 static allocated_mem_ptrs * new_mem_ptrs_block(void);
 
-static void register_ptr(ARGIN(lexer_state *lexer), ARGIN(void *ptr))
+static void register_ptr(ARGMOD(lexer_state *lexer), ARGIN(void *ptr))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*lexer);
 
 static void store_string(
     ARGIN(lexer_state * const lexer),
@@ -98,7 +99,7 @@
 
 */
 static void
-register_ptr(ARGIN(lexer_state *lexer), ARGIN(void *ptr))
+register_ptr(ARGMOD(lexer_state *lexer), ARGIN(void *ptr))
 {
     ASSERT_ARGS(register_ptr)
     allocated_mem_ptrs *ptrs = lexer->mem_allocations;
@@ -106,7 +107,7 @@
     PARROT_ASSERT(ptrs);
 
     if (ptrs->allocs_in_this_block == NUM_MEM_ALLOCS_PER_BLOCK) {
-        allocated_mem_ptrs *newblock = new_mem_ptrs_block();
+        allocated_mem_ptrs * const newblock = new_mem_ptrs_block();
         newblock->next               = ptrs;
         lexer->mem_allocations       = newblock;
         ptrs                         = newblock;
@@ -118,8 +119,7 @@
 
 /*
 
-=item C<void * pir_mem_allocate_zeroed(lexer_state * const lexer, size_t
-numbytes)>
+=item C<void * pir_mem_allocate_zeroed(lexer_state *lexer, size_t numbytes)>
 
 Memory allocation function for all PIR internal functions. Memory is allocated
 through Parrot's allocation functions, but the pointer to the allocated memory
@@ -135,9 +135,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 void *
-pir_mem_allocate_zeroed(ARGIN(lexer_state * const lexer), size_t numbytes)
+pir_mem_allocate_zeroed(ARGMOD(lexer_state *lexer), size_t numbytes)
 {
-    void *ptr = mem_sys_allocate_zeroed(numbytes);
+    void * const ptr = mem_sys_allocate_zeroed(numbytes);
 
     totalmem += numbytes;
 

Modified: branches/ops_pct/compilers/pirc/src/pircompiler.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompiler.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pircompiler.h	Wed May  5 08:45:29 2010	(r46302)
@@ -215,10 +215,9 @@
 PARROT_MALLOC
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-void * pir_mem_allocate_zeroed(
-    ARGIN(lexer_state * const lexer),
-    size_t numbytes)
-        __attribute__nonnull__(1);
+void * pir_mem_allocate_zeroed(ARGMOD(lexer_state *lexer), size_t numbytes)
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*lexer);
 
 void pirwarning(
     ARGIN(lexer_state * const lexer),

Modified: branches/ops_pct/compilers/pirc/src/pircompunit.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompunit.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pircompunit.c	Wed May  5 08:45:29 2010	(r46302)
@@ -274,9 +274,9 @@
 =item C<void set_sub_vtable(lexer_state * const lexer, char const * vtablename)>
 
 Set the :vtable() flag argument to the current subroutine. If C<vtablename>
-is NULL, the name of the current sub is taken to be the vtable method name.
-If the vtable method name (either specified or the current sub's name) is
-in fact not a vtable method, an error message is emitted.
+is NULL, the name of the current sub is taken to be the vtable name.
+If the vtable name (either specified or the current sub's name) is
+not a valid vtable, an error message is emitted.
 
 =cut
 
@@ -290,15 +290,15 @@
     if (vtablename == NULL)  /* the sub's name I<is> the vtablename */
         vtablename = CURRENT_SUB(lexer)->info.subname;
 
-    /* get the index number of this vtable method */
+    /* get the index number of this vtable */
     vtable_index = Parrot_get_vtable_index(lexer->interp,
                                            Parrot_str_new(lexer->interp, vtablename,
                                                                strlen(vtablename)));
 
-    /* now check whether the method name actually a vtable method */
+    /* now check whether the method name actually a vtable */
     if (vtable_index == -1)
         yypirerror(lexer->yyscanner, lexer,
-                   "'%s' is not a vtable method but was used with :vtable flag", vtablename);
+                   "'%s' is not a vtable but was used with :vtable flag", vtablename);
 
     else {
         /* test for duplicate :vtable on a sub */
@@ -660,7 +660,7 @@
 
 /*
 
-=item C<target * new_target(lexer_state * const lexer)>
+=item C<target * new_target(lexer_state *lexer)>
 
 Create a new target node. The node's next pointer is initialized to itself.
 
@@ -670,16 +670,16 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-new_target(ARGIN(lexer_state * const lexer))
+new_target(ARGMOD(lexer_state *lexer))
 {
-    target *t       = pir_mem_allocate_zeroed_typed(lexer, target);
+    target * const t = pir_mem_allocate_zeroed_typed(lexer, target);
     t->key          = NULL;
     t->next         = t; /* circly linked list */
     return t;
 }
 
 /*
-=item C<void set_target_key(target * const t, key * const k)>
+=item C<void set_target_key(target *t, key *k)>
 
 Set the key C<k> on target C<t>. For instance:
 
@@ -691,15 +691,14 @@
 
 */
 void
-set_target_key(ARGIN(target * const t), ARGIN(key * const k))
+set_target_key(ARGMOD(target *t), ARGIN(key *k))
 {
     t->key = k;
 }
 
 /*
 
-=item C<target * target_from_symbol(lexer_state * const lexer, symbol * const
-sym)>
+=item C<target * target_from_symbol(lexer_state * lexer, symbol *sym)>
 
 Convert symbol C<sym> into a target node. The resulting target has
 a pointer to C<sym>.
@@ -710,10 +709,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-target_from_symbol(ARGIN(lexer_state * const lexer),
-        ARGIN(symbol * const sym))
+target_from_symbol(ARGMOD(lexer_state * lexer), ARGIN(symbol *sym))
 {
-    target *t  = new_target(lexer);
+    target * const t = new_target(lexer);
 
     t->flags   = sym->flags; /* copy the flags */
     t->info    = &sym->info;
@@ -738,7 +736,7 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-add_target(ARGIN(lexer_state * const lexer),
+add_target(SHIM(lexer_state * const lexer),
         ARGMOD(target *last), ARGIN(target * const t))
 {
     PARROT_ASSERT(last);
@@ -1429,7 +1427,7 @@
 
 /*
 
-=item C<unsigned get_operand_count(lexer_state * const lexer)>
+=item C<unsigned get_operand_count(lexer_state *lexer)>
 
 Returns the number of operands of the I<current> instruction.
 This function assumes there is an instruction in place
@@ -1440,7 +1438,7 @@
 */
 PARROT_WARN_UNUSED_RESULT
 unsigned
-get_operand_count(ARGIN(lexer_state * const lexer))
+get_operand_count(ARGIN(lexer_state *lexer))
 {
     unsigned count = 0;
     expression *first, *operand;

Modified: branches/ops_pct/compilers/pirc/src/pircompunit.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompunit.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pircompunit.h	Wed May  5 08:45:29 2010	(r46302)
@@ -439,10 +439,9 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target * add_target(
-    ARGIN(lexer_state * const lexer),
+    SHIM(lexer_state * const lexer),
     ARGMOD(target *last),
     ARGIN(target * const t))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*last);
@@ -522,7 +521,7 @@
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
-unsigned get_operand_count(ARGIN(lexer_state * const lexer))
+unsigned get_operand_count(ARGIN(lexer_state *lexer))
         __attribute__nonnull__(1);
 
 void get_operands(ARGIN(lexer_state * const lexer), int bitmask, ...)
@@ -619,8 +618,9 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-target * new_target(ARGIN(lexer_state * const lexer))
-        __attribute__nonnull__(1);
+target * new_target(ARGMOD(lexer_state *lexer))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*lexer);
 
 void push_operand(
     ARGIN(lexer_state * const lexer),
@@ -800,17 +800,17 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void set_target_key(ARGIN(target * const t), ARGIN(key * const k))
+void set_target_key(ARGMOD(target *t), ARGIN(key *k))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*t);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-target * target_from_symbol(
-    ARGIN(lexer_state * const lexer),
-    ARGIN(symbol * const sym))
+target * target_from_symbol(ARGMOD(lexer_state * lexer), ARGIN(symbol *sym))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(* lexer);
 
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
@@ -869,8 +869,7 @@
        PARROT_ASSERT_ARG(lexer) \
     , PARROT_ASSERT_ARG(name))
 #define ASSERT_ARGS_add_target __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(lexer) \
-    , PARROT_ASSERT_ARG(last) \
+       PARROT_ASSERT_ARG(last) \
     , PARROT_ASSERT_ARG(t))
 #define ASSERT_ARGS_annotate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(lexer) \

Modified: branches/ops_pct/compilers/pirc/src/pirlexer.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirlexer.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pirlexer.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,509 +1,17 @@
-#ifndef yypirHEADER_H
-#define yypirHEADER_H 1
-#define yypirIN_HEADER 1
-
-#line 6 "pirlexer.h"
-#line 2 "pir.l"
-
-/* ex: set ro ft=c:
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- *
- * This file is generated automatically by the Parrot build process
- * from the file compilers/pirc/new/pir.l.
- *
- * Any changes made here will be lost!
- *
-*/
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER STOP */
-
-#ifndef __STDC_VERSION__
-#  define __STDC_VERSION__ 0
-#endif
-
-#ifndef YY_NO_UNISTD_H
-#  define YY_NO_UNISTD_H
-#endif
-
-/* prevent warnings on undefined #defines: */
-#ifndef YY_MAIN
-#  define YY_MAIN 0
-#endif
-
-#ifndef YY_ALWAYS_INTERACTIVE
-#  define YY_ALWAYS_INTERACTIVE 0
-#endif
-
-#include <stdlib.h> /* for size_t */
-typedef size_t yy_size_t;
-#define YY_TYPEDEF_YY_SIZE_T
-
-
-
-
-#line 46 "pirlexer.h"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-/* %not-for-header */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* %if-c++-only */
-/* %endif */
-
-/* %if-c-only */
-    
-/* %endif */
-
-/* %if-c-only */
-
-/* %endif */
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-/* %if-c-only */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-/* %endif */
-
-/* %if-tables-serialization */
-/* %endif */
-/* end standard C headers. */
-
-/* %if-c-or-c++ */
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
+/*
+ * Copyright (C) 2010, Parrot Foundation.
+ * $Id$
  */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-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
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-/* %endif */
-
-/* %if-c++-only */
-/* %endif */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* %not-for-header */
-
-/* %not-for-header */
-
-/* %if-reentrant */
-
-/* An opaque pointer. */
-#ifndef YY_TYPEDEF_YY_SCANNER_T
-#define YY_TYPEDEF_YY_SCANNER_T
-typedef void* yyscan_t;
-#endif
-
-/* For convenience, these vars (plus the bison vars far below)
-   are macros in the reentrant scanner. */
-#define yyin yyg->yyin_r
-#define yyout yyg->yyout_r
-#define yyextra yyg->yyextra_r
-#define yyleng yyg->yyleng_r
-#define yytext yyg->yytext_r
-#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
-#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
-#define yy_flex_debug yyg->yy_flex_debug_r
-
-/* %endif */
-
-/* %if-not-reentrant */
-/* %endif */
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-/* %if-not-reentrant */
-/* %endif */
-
-/* %if-c-only */
-/* %if-not-reentrant */
-/* %endif */
-/* %endif */
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-/* %if-c-only */
-	FILE *yy_input_file;
-/* %endif */
-
-/* %if-c++-only */
-/* %endif */
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	yy_size_t yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %endif */
-
-/* %if-c-only Standard (non-C++) definition */
-
-/* %if-not-reentrant */
-/* %not-for-header */
 
-/* %endif */
+#ifndef PARROT_PIR_PIRLEXER_H_GUARD
+#define PARROT_PIR_PIRLEXER_H_GUARD
 
-void yypirrestart (FILE *input_file ,yyscan_t yyscanner );
-void yypir_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
-YY_BUFFER_STATE yypir_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
-void yypir_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
-void yypir_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
-void yypirpush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
-void yypirpop_buffer_state (yyscan_t yyscanner );
 
-YY_BUFFER_STATE yypir_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
-YY_BUFFER_STATE yypir_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-YY_BUFFER_STATE yypir_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
+#endif /* PARROT_PIR_PIRLEXER_H_GUARD */
 
-/* %endif */
-
-void *yypiralloc (yy_size_t ,yyscan_t yyscanner );
-void *yypirrealloc (void *,yy_size_t ,yyscan_t yyscanner );
-void yypirfree (void * ,yyscan_t yyscanner );
-
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
-/* Begin user sect3 */
-
-#define yypirwrap(n) 1
-#define YY_SKIP_YYWRAP
-
-#define FLEX_DEBUG
-
-#define yytext_ptr yytext_r
-
-/* %if-c-only Standard (non-C++) definition */
-
-/* %endif */
-
-#ifdef YY_HEADER_EXPORT_START_CONDITIONS
-#define INITIAL 0
-#define MACROHEAD 1
-#define MACROBODY 2
-#define MACROLOCAL 3
-#define MACROLABEL 4
-#define MACROEXPAND 5
-#define MACROCONST 6
-#define SCANSTR 7
-#define SCANMACRO 8
-#define STRINGEXPAND 9
-#define SPECIALSTART 10
-#define PASM 11
-
-#endif
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-/* %if-c-only */
-#include <unistd.h>
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-/* %if-c-only Reentrant structure and macros (non-C++). */
-/* %if-reentrant */
-
-/* %if-c-only */
-
-/* %endif */
-
-/* %if-reentrant */
-
-int yypirlex_init (yyscan_t* scanner);
-
-int yypirlex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
-
-/* %endif */
-
-/* %endif End reentrant structures and macros. */
-
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int yypirlex_destroy (yyscan_t yyscanner );
-
-int yypirget_debug (yyscan_t yyscanner );
-
-void yypirset_debug (int debug_flag ,yyscan_t yyscanner );
-
-YY_EXTRA_TYPE yypirget_extra (yyscan_t yyscanner );
-
-void yypirset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
-
-FILE *yypirget_in (yyscan_t yyscanner );
-
-void yypirset_in  (FILE * in_str ,yyscan_t yyscanner );
-
-FILE *yypirget_out (yyscan_t yyscanner );
-
-void yypirset_out  (FILE * out_str ,yyscan_t yyscanner );
-
-yy_size_t yypirget_leng (yyscan_t yyscanner );
-
-char *yypirget_text (yyscan_t yyscanner );
-
-int yypirget_lineno (yyscan_t yyscanner );
-
-void yypirset_lineno (int line_number ,yyscan_t yyscanner );
-
-/* %if-bison-bridge */
-
-YYSTYPE * yypirget_lval (yyscan_t yyscanner );
-
-void yypirset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
-
-/* %endif */
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
  */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yypirwrap (yyscan_t yyscanner );
-#else
-extern int yypirwrap (yyscan_t yyscanner );
-#endif
-#endif
-
-/* %not-for-header */
-
-/* %endif */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
-#endif
-
-#ifndef YY_NO_INPUT
-/* %if-c-only Standard (non-C++) definition */
-/* %not-for-header */
-
-/* %endif */
-#endif
-
-/* %if-c-only */
-
-/* %endif */
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* %if-tables-serialization structures and prototypes */
-/* %not-for-header */
-
-/* %not-for-header */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-/* %if-c-only Standard (non-C++) definition */
-
-extern int yypirlex \
-               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
-
-#define YY_DECL int yypirlex \
-               (YYSTYPE * yylval_param , yyscan_t yyscanner)
-/* %endif */
-/* %if-c++-only C++ definition */
-/* %endif */
-#endif /* !YY_DECL */
-
-/* %not-for-header */
-
-/* %if-c++-only */
-/* %not-for-header */
-
-/* %endif */
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-/* %if-c-only */
-/* %not-for-header */
-
-#undef YY_NEW_FILE
-#undef YY_FLUSH_BUFFER
-#undef yy_set_bol
-#undef yy_new_buffer
-#undef yy_set_interactive
-#undef YY_DO_BEFORE_ACTION
-
-#ifdef YY_DECL_IS_OURS
-#undef YY_DECL_IS_OURS
-#undef YY_DECL
-#endif
-
-#line 1199 "pir.l"
-
-
-#line 508 "pirlexer.h"
-#undef yypirIN_HEADER
-#endif /* yypirHEADER_H */

Modified: branches/ops_pct/compilers/pirc/src/pirparser.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirparser.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pirparser.c	Wed May  5 08:45:29 2010	(r46302)
@@ -411,31 +411,39 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 static void check_first_arg_direction(
-    lexer_state * const lexer,
-    NOTNULL(char const * const opname))
-        __attribute__nonnull__(2);
+    ARGMOD(lexer_state *lexer),
+    ARGIN(char const *opname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*lexer);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
+PARROT_MALLOC
 static char * concat_strings(
-    NOTNULL(lexer_state * const lexer),
-    NOTNULL(char const * a),
-    NOTNULL(char const * b))
+    ARGMOD(lexer_state *lexer),
+    ARGIN(const char * a),
+    ARGIN(const char * b))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*lexer);
 
 static void create_if_instr(
-    NOTNULL(lexer_state * const lexer),
+    ARGMOD(lexer_state *lexer),
     int invert,
     int hasnull,
-    NOTNULL(char const * const name),
-    NOTNULL(char const * const label))
+    ARGIN(const char *name),
+    ARGIN(const char *label))
         __attribute__nonnull__(1)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*lexer);
+
+static void do_strength_reduction(ARGMOD(lexer_state *lexer))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*lexer);
 
-static void do_strength_reduction(lexer_state * const lexer);
 PARROT_WARN_UNUSED_RESULT
 static int evaluate_i_i(int a, pir_rel_operator op, int b);
 
@@ -446,8 +454,11 @@
 static int evaluate_n_i(double a, pir_rel_operator op, int b);
 
 static void undeclared_symbol(
-    lexer_state * const lexer,
-    char const * const symbol);
+    ARGMOD(lexer_state *lexer),
+    ARGIN(char const *symbol))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*lexer);
 
 static void yy_reduce_print (
     YYSTYPE *yyvsp,
@@ -483,7 +494,8 @@
 static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar);
 static YYSIZE_T yytnamerr (char *yyres, const char *yystr);
 #define ASSERT_ARGS_check_first_arg_direction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(opname))
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(opname))
 #define ASSERT_ARGS_concat_strings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(lexer) \
     , PARROT_ASSERT_ARG(a) \
@@ -492,11 +504,14 @@
        PARROT_ASSERT_ARG(lexer) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(label))
-#define ASSERT_ARGS_do_strength_reduction __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_do_strength_reduction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
 #define ASSERT_ARGS_evaluate_i_i __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_evaluate_i_n __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_evaluate_n_i __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_undeclared_symbol __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_undeclared_symbol __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(symbol))
 #define ASSERT_ARGS_yy_reduce_print  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_yy_stack_print  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_yy_symbol_print  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -5510,8 +5525,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static constant *
-fold_s_s(yyscan_t yyscanner, NOTNULL(char const *a), pir_math_operator op, NOTNULL(char const *b)) {
-    lexer_state *lexer = (lexer_state *)yypirget_extra(yyscanner);
+fold_s_s(yyscan_t yyscanner, ARGIN(const char *a), pir_math_operator op, ARGIN(char const *b)) {
+    lexer_state * const lexer = (lexer_state *)yypirget_extra(yyscanner);
     switch (op) {
         case OP_CONCAT:
             return new_const(lexer, STRING_VAL, concat_strings(lexer, a, b));
@@ -5650,8 +5665,8 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-evaluate_s_s(NOTNULL(char const * const a), pir_rel_operator op, NOTNULL(char const * const b)) {
-    int result = strcmp(a, b); /* do /not/ use STREQ; we're interested in the result. */
+evaluate_s_s(ARGIN(const char *a), pir_rel_operator op, ARGIN(const char *b)) {
+    const int result = strcmp(a, b); /* do /not/ use STREQ; we're interested in the result. */
 
     switch (op) {
         case OP_NE:
@@ -5685,8 +5700,8 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-evaluate_s(NOTNULL(char const * const s)) {
-    int strlen_s = strlen(s);
+evaluate_s(ARGIN(char const *s)) {
+    const size_t strlen_s = strlen(s);
 
     if (strlen_s > 0) {
         if (strlen_s <= 3) { /* if strlen > 3, (max. nr of characters to represent "0")
@@ -5717,7 +5732,7 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-evaluate_c(NOTNULL(lexer_state * const lexer), NOTNULL(constant * const c)) {
+evaluate_c(ARGIN(lexer_state * const lexer), ARGIN(const constant *c)) {
     switch (c->type) {
         case INT_VAL:
             return (c->val.ival != 0);
@@ -5735,8 +5750,8 @@
 
 /*
 
-=item C<static char * concat_strings(lexer_state * const lexer, char const * a,
-char const * b)>
+=item C<static char * concat_strings(lexer_state *lexer, const char * a, const
+char * b)>
 
 Concatenates two strings into a new buffer. The new string is returned.
 
@@ -5745,12 +5760,13 @@
 */
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
+PARROT_MALLOC
 static char *
-concat_strings(NOTNULL(lexer_state * const lexer), NOTNULL(char const * a),
-               NOTNULL(char const * b))
+concat_strings(ARGMOD(lexer_state *lexer), ARGIN(const char * a),
+               ARGIN(const char * b))
 {
-    int strlen_a = strlen(a);
-    char *newstr = (char *)pir_mem_allocate_zeroed(lexer, (strlen_a + strlen(b) + 1)
+    const size_t strlen_a = strlen(a);
+    const char * const newstr = (char *)pir_mem_allocate_zeroed(lexer, (strlen_a + strlen(b) + 1)
                                                           * sizeof (char));
     strcpy(newstr, a);
     strcpy(newstr + strlen_a, b);
@@ -5761,8 +5777,8 @@
 
 /*
 
-=item C<static void create_if_instr(lexer_state * const lexer, int invert, int
-hasnull, char const * const name, char const * const label)>
+=item C<static void create_if_instr(lexer_state *lexer, int invert, int hasnull,
+const char *name, const char *label)>
 
 Create an C<if> or C<unless> instruction; if C<invert> is non-zero (true), the
 C<if> instruction is inverted, effectively becoming C<unless>.
@@ -5776,9 +5792,8 @@
 
 */
 static void
-create_if_instr(NOTNULL(lexer_state * const lexer), int invert, int hasnull,
-                NOTNULL(char const * const name),
-                NOTNULL(char const * const label))
+create_if_instr(ARGMOD(lexer_state *lexer), int invert, int hasnull,
+                ARGIN(const char *name), ARGIN(const char *label))
 {
     /* try to find the symbol; if it was declared it will be found; otherwise emit an error. */
     symbol *sym = find_symbol(lexer, name);
@@ -6009,7 +6024,7 @@
 
 /*
 
-=item C<static void do_strength_reduction(lexer_state * const lexer)>
+=item C<static void do_strength_reduction(lexer_state *lexer)>
 
 Implement strength reduction for the math operators C<add>, C<sub>, C<mul>, C<div> and C<fdiv>.
 If the current instruction is any of these, then the first two operands are checked; if both
@@ -6034,7 +6049,7 @@
 
 */
 static void
-do_strength_reduction(lexer_state * const lexer) {
+do_strength_reduction(ARGMOD(lexer_state *lexer)) {
     instruction *instr;
     expression  *arg1;
     expression  *arg2;
@@ -6138,13 +6153,13 @@
             break;
     }
 
-
+    return;
 }
 
 /*
 
-=item C<static void check_first_arg_direction(lexer_state * const lexer, char
-const * const opname)>
+=item C<static void check_first_arg_direction(lexer_state *lexer, char const
+*opname)>
 
 This function checks the first argument's  direction of the op C<opname>.
 If the direction is not C<OUT>, a syntax error is emitted. This function assumes
@@ -6164,7 +6179,7 @@
 
 */
 static void
-check_first_arg_direction(lexer_state * const lexer, NOTNULL(char const * const opname)) {
+check_first_arg_direction(ARGMOD(lexer_state *lexer), ARGIN(char const *opname)) {
     int dir_first_arg;
 
     /* op_count also counts the instruction itself, so must be at least 2 */
@@ -6174,7 +6189,7 @@
     if (!CURRENT_INSTRUCTION(lexer)->opinfo->dirs)
         fprintf(stderr, "no opinfo->dirs!\n");
     else {
-        op_info_t *opinfo = CURRENT_INSTRUCTION(lexer)->opinfo;
+        const op_info_t * const opinfo = CURRENT_INSTRUCTION(lexer)->opinfo;
 
         if (opinfo)
             dir_first_arg = CURRENT_INSTRUCTION(lexer)->opinfo->dirs[0];
@@ -6188,7 +6203,6 @@
     if (dir_first_arg != PARROT_ARGDIR_OUT)
         yypirerror(lexer->yyscanner, lexer, "cannot write first arg of op '%s' as a target "
                                             "(direction of argument is IN/INOUT).", opname);
-
 }
 
 
@@ -6214,12 +6228,10 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-check_op_args_for_symbols(lexer_state * const lexer) {
+check_op_args_for_symbols(ARGMOD(lexer_state *lexer)) {
     struct op_info_t  * opinfo;
     unsigned short      i;
     short               opcount;
-    unsigned            num_operands;
-    char               *fullopname;
     int                 opcode;
     int                 result;
     int                 label_bitmask = 0; /* an int is at least 32 bits;
@@ -6229,9 +6241,10 @@
                                             */
 
     /* iterate over all operands to set the type and PASM register on all target nodes, if any */
-    num_operands = get_operand_count(lexer);
+    const unsigned int num_operands = get_operand_count(lexer);
+
     for (i = 0; i < num_operands; i++) {
-        expression *operand = get_operand(lexer, i + 1); /* get_operand counts from 1 */
+        expression * const operand = get_operand(lexer, i + 1); /* get_operand counts from 1 */
 
         if (operand->type == EXPR_IDENT) { /* op_arg ::= identifier */
             /* the operand is an identifier, check now whether it was a symbol. If so,
@@ -6317,8 +6330,7 @@
 
 /*
 
-=item C<static void undeclared_symbol(lexer_state * const lexer, char const *
-const symbol)>
+=item C<static void undeclared_symbol(lexer_state *lexer, char const *symbol)>
 
 Report an error message saying that C<symbol> was not declared. Then test
 whether the symbol is perhaps a PASM register identifier. The user may have
@@ -6328,7 +6340,7 @@
 
 */
 static void
-undeclared_symbol(lexer_state * const lexer, char const * const symbol) {
+undeclared_symbol(ARGMOD(lexer_state *lexer), ARGIN(char const *symbol)) {
     if (TEST_FLAG(lexer->flags, LEXER_FLAG_PASMFILE)) {
         yypirerror(lexer->yyscanner, lexer,
                    "cannot use symbols in PASM mode ('%s')", symbol);

Modified: branches/ops_pct/compilers/pirc/src/pirsymbol.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirsymbol.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pirsymbol.c	Wed May  5 08:45:29 2010	(r46302)
@@ -73,10 +73,11 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static pir_reg * new_pir_reg(
-    ARGIN(lexer_state * const lexer),
+    ARGMOD(lexer_state *lexer),
     pir_type type,
     int regno)
-        __attribute__nonnull__(1);
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*lexer);
 
 static int next_register(ARGIN(lexer_state * const lexer), pir_type type)
         __attribute__nonnull__(1);
@@ -386,8 +387,7 @@
 
 /*
 
-=item C<symbol * find_symbol(lexer_state * const lexer, char const * const
-name)>
+=item C<symbol * find_symbol(lexer_state *lexer, const char *name)>
 
 Return the node for the symbol or NULL if the symbol
 is not defined. If an attempt is made to find a symbol,
@@ -400,8 +400,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 symbol *
-find_symbol(ARGIN(lexer_state * const lexer),
-        ARGIN(char const * const name))
+find_symbol(ARGMOD(lexer_state *lexer), ARGIN(const char *name))
 {
     ASSERT_ARGS(find_symbol)
     hashtable    *table    = &CURRENT_SUB(lexer)->symbols;
@@ -411,7 +410,7 @@
 
 
     while (buck) {
-        symbol *sym = bucket_symbol(buck);
+        symbol * const sym = bucket_symbol(buck);
 
         if (STREQ(sym->info.id.name, name)) {
 
@@ -441,8 +440,8 @@
 
 /*
 
-=item C<static pir_reg * new_pir_reg(lexer_state * const lexer, pir_type type,
-int regno)>
+=item C<static pir_reg * new_pir_reg(lexer_state *lexer, pir_type type, int
+regno)>
 
 Create a new PIR register node representing PIR/symbolic register
 identified by C<regno> and of type C<type>.
@@ -453,7 +452,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static pir_reg *
-new_pir_reg(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+new_pir_reg(ARGMOD(lexer_state *lexer), pir_type type, int regno)
 {
     ASSERT_ARGS(new_pir_reg)
     pir_reg *r = pir_mem_allocate_zeroed_typed(lexer, pir_reg);

Modified: branches/ops_pct/compilers/pirc/src/pirsymbol.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirsymbol.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/compilers/pirc/src/pirsymbol.h	Wed May  5 08:45:29 2010	(r46302)
@@ -130,11 +130,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-symbol * find_symbol(
-    ARGIN(lexer_state * const lexer),
-    ARGIN(char const * const name))
+symbol * find_symbol(ARGMOD(lexer_state *lexer), ARGIN(const char *name))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*lexer);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL

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

Modified: branches/ops_pct/config/auto/attributes.pm
==============================================================================
--- branches/ops_pct/config/auto/attributes.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/auto/attributes.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -40,8 +40,11 @@
     HASATTRIBUTE_PURE
     HASATTRIBUTE_UNUSED
     HASATTRIBUTE_WARN_UNUSED_RESULT
+    HASATTRIBUTE_HOT
+    HASATTRIBUTE_COLD
     HASATTRIBUTE_NEVER_WORKS
 );
+# HASATTRIBUTE_NEVER_WORKS is at the end just to prove that it's possible to fail.
 
 sub runstep {
     my ( $self, $conf ) = @_;

Modified: branches/ops_pct/config/auto/attributes/test_c.in
==============================================================================
--- branches/ops_pct/config/auto/attributes/test_c.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/auto/attributes/test_c.in	Wed May  5 08:45:29 2010	(r46302)
@@ -32,6 +32,16 @@
 purefunc(int x);
 
 
+__attribute__hot__
+int
+hotfunc(int x);
+
+
+__attribute__cold__
+int
+coldfunc(int x);
+
+
 static int
 useless(void) { int x __attribute__unused__; return 0; }
 

Deleted: branches/ops_pct/config/auto/cgoto.pm
==============================================================================
--- branches/ops_pct/config/auto/cgoto.pm	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,82 +0,0 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/auto/cgoto.pm - Computed C<goto>
-
-=head1 DESCRIPTION
-
-Determines whether the compiler supports computed C<goto>.
-
-=cut
-
-package auto::cgoto;
-
-use strict;
-use warnings;
-
-use base qw(Parrot::Configure::Step);
-
-use Parrot::Configure::Utils ':auto';
-
-sub _init {
-    my $self = shift;
-    return {
-        'description' => 'Does your compiler support computed goto',
-        'result'      => '',
-    };
-}
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    my $test = _probe_for_cgoto( $conf );
-
-    $self->_evaluate_cgoto($conf, $test);
-
-    return 1;
-}
-
-sub _probe_for_cgoto {
-    my $conf = shift;
-    my $cgoto = $conf->options->get('cgoto');
-    my $test;
-    if ( defined $cgoto ) {
-        $test = $cgoto;
-    }
-    else {
-        $conf->cc_gen('config/auto/cgoto/test_c.in');
-        $test = eval { $conf->cc_build(); 1; } || 0;
-        $conf->cc_clean();
-    }
-    return $test;
-}
-
-sub _evaluate_cgoto {
-    my ($self, $conf, $test) = @_;
-    my $verbose = $conf->options->get('verbose');
-    if ($test) {
-        $conf->data->set(
-            cg_flag => '-DHAVE_COMPUTED_GOTO'
-        );
-        print " (yes) " if $verbose;
-        $self->set_result('yes');
-    }
-    else {
-        $conf->data->set(
-            cg_flag   => ''
-        );
-        print " (no) " if $verbose;
-        $self->set_result('no');
-    }
-}
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

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

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

Modified: branches/ops_pct/config/auto/warnings.pm
==============================================================================
--- branches/ops_pct/config/auto/warnings.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/auto/warnings.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -113,6 +113,7 @@
         -Wcomment
         -Wdisabled-optimization
         -Wdiv-by-zero
+        -Wenum-compare
         -Wendif-labels
         -Wextra
         -Wformat
@@ -125,6 +126,7 @@
         -Winit-self
         -Winline
         -Winvalid-pch
+        -Wjump-misses-init
         -Wlogical-op
         -Wmissing-braces
         -Wmissing-field-initializers
@@ -137,7 +139,6 @@
         -Wpointer-sign
         -Wreturn-type
         -Wsequence-point
-        -Wno-shadow
         -Wsign-compare
         -Wstrict-aliasing
         -Wstrict-aliasing=2
@@ -154,7 +155,7 @@
     $gcc->{'basic'} = [ @gcc_or_gpp ];
     $gpp->{'basic'} = [ @gcc_or_gpp ];
 
-    # Add some gcc only warnings that would break g++
+    # Add some gcc-only warnings that would break g++
     push @{$gcc->{'basic'}}, qw(
         -Wbad-function-cast
         -Wc++-compat
@@ -173,7 +174,7 @@
 
     my $gcc_or_gpp_cage = [ qw(
         -std=c89
-        -Werror-implicit-function-declaration
+        -Werror=implicit-function-declaration
         -Wformat=2
         -Wlarger-than-4096
         -Wlong-long
@@ -193,63 +194,75 @@
     $gpp->{'cage'} = $gcc_or_gpp_cage;
 
     $gcc->{'todo'} = $gpp->{'todo'} = {
-        '-Wformat-nonliteral' => [
-            'src/spf_render.c',
-            'compilers/imcc/optimizer.c',
-        ],
-        '-Wstrict-prototypes' => [
-            'src/nci/extra_thunks.c',
-            'src/extra_nci_thunks.c',
-        ],
+        '-Wformat-nonliteral' => [ qw(
+            src/spf_render.c
+            compilers/imcc/optimizer.c
+        ) ],
+        '-Wstrict-prototypes' => [ qw(
+            src/nci/extra_thunks.c
+            src/extra_nci_thunks.c
+        ) ],
     };
 
     $gcc->{'never'} = $gpp->{'never'} = {
-        '-Wformat-nonliteral' => [
-            'compilers/imcc/imclexer.c',
-        ],
-        '-Wswitch-default' => [
-            'compilers/imcc/imclexer.c',
-        ],
-        '-Wcast-qual' => [
-            'compilers/imcc/imcparser.c',
-        ],
-        '-Wlogical-op' => [
-            'compilers/imcc/imcparser.c',
-        ],
+        '-Wformat-nonliteral' => [ qw(
+            compilers/imcc/imclexer.c
+        ) ],
+        '-Wswitch-default' => [ qw(
+            compilers/imcc/imclexer.c
+        ) ],
+        '-Wcast-qual' => [ qw(
+            compilers/imcc/imcparser.c
+        ) ],
+        '-Wlogical-op' => [ qw(
+            compilers/imcc/imcparser.c
+        ) ],
     };
 
+    # Warning flags docs
+    # http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/index.htm
+
     $icc->{'basic'} = [ qw(
-        -wd269
-        -wd1572
-        -wd1599
-        -wd181
-        -wd869
-        -wd981
-        -wd1419
-        -wd117
-        -wd810
-        -wd177
-        -wd1296
-        -Wall
-        -Wcheck
         -w2
         -Wabi
+        -Wall
+        -Wcheck
         -Wcomment
         -Wdeprecated
+        -Weffc++
+        -Wextra-tokens
+        -Wformat
+        -Wformat-security
         -Wmain
+        -Wmissing-declarations
         -Wmissing-prototypes
         -Wpointer-arith
+        -Wport
         -Wreturn-type
+        -Wshadow
         -Wstrict-prototypes
         -Wuninitialized
         -Wunknown-pragmas
         -Wunused-function
         -Wunused-variable
-    )];
+        -Wwrite-strings
+        ),
+        # Disable some warnings and notifications that are overly noisy
+        '-diag-disable 271',  # trailing comma is nonstandard
+        '-diag-disable 981',  # operands are evaluated in unspecified order
+        '-diag-disable 1572', # floating-point equality and inequality comparisons are unreliable
+        '-diag-disable 2259', # non-pointer conversion from "typeA" to "typeB" may lose significant bits
+    ];
+    $icc->{'cage'} = [
+        # http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/bldaps_cls/common/bldaps_svover.htm
+        '-diag-enable sc3',
+        '-diag-enable sc-include',
+    ];
 
     $data->{'warnings'}{'gcc'} = $gcc;
     $data->{'warnings'}{'g++'} = $gpp;
     $data->{'warnings'}{'icc'} = $icc;
+    $data->{'warnings'}{'clang'} = $gcc;
 
     ## end gcc/g++
 
@@ -269,6 +282,9 @@
     elsif ( $conf->option_or_data('cc') =~ /icc/ ) {
         $compiler = 'icc';
     }
+    elsif ( $conf->option_or_data('cc') =~ /clang/ ) {
+        $compiler = 'clang';
+    }
 
     if ($compiler eq '') {
         print "We do not (yet) probe for warnings for your compiler\n"
@@ -374,7 +390,7 @@
 
     $verbose and print "  output: $output\n";
 
-    if ( $output !~ /error|warning|not supported/i ) {
+    if ( $output !~ /\berror|warning|not supported|ignoring (unknown )?option\b/i ) {
         push @{$self->{'validated'}}, $warning;
         $verbose and print "    valid warning: '$warning'\n";
         return 1;

Copied: branches/ops_pct/config/auto/zlib.pm (from r46301, trunk/config/auto/zlib.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/config/auto/zlib.pm	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/config/auto/zlib.pm)
@@ -0,0 +1,90 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+config/auto/zlib.pm - Test for zlib library
+
+=head1 DESCRIPTION
+
+This library is linked to a dynamic PMC.
+
+=cut
+
+package auto::zlib;
+
+use strict;
+use warnings;
+
+use base qw(Parrot::Configure::Step);
+
+use Parrot::Configure::Utils ':auto';
+
+
+sub _init {
+    my $self = shift;
+    my %data;
+    $data{description} = q{Does your platform support zlib};
+    $data{result}      = q{};
+    return \%data;
+}
+
+sub runstep {
+    my ( $self, $conf ) = @_;
+
+    my ( $verbose, $without ) = $conf->options->get(
+        qw|
+            verbose
+            without-zlib
+        |
+    );
+
+    if ($without) {
+        $conf->data->set( has_zlib => 0 );
+        $self->set_result('no');
+        return 1;
+    }
+
+    my $osname = $conf->data->get('osname');
+
+    my $extra_libs = $self->_select_lib( {
+        conf            => $conf,
+        osname          => $osname,
+        cc              => $conf->data->get('cc'),
+        win32_nongcc    => 'zlib.lib',
+        default         => '-lz',
+    } );
+
+    $conf->cc_gen('config/auto/zlib/zlib_c.in');
+    eval { $conf->cc_build( q{}, $extra_libs); };
+    my $has_zlib = 0;
+    if ( !$@ ) {
+        my $test = $conf->cc_run();
+        $has_zlib = $self->_evaluate_cc_run($conf, $test, $has_zlib, $verbose);
+    }
+    $conf->data->set( has_zlib => $has_zlib );
+    $self->set_result($has_zlib ? 'yes' : 'no');
+
+    return 1;
+}
+
+sub _evaluate_cc_run {
+    my $self = shift;
+    my ($conf, $test, $has_zlib, $verbose) = @_;
+    if ( $test =~ m/^(\d\.\d\.\d)/ ) {
+        my $version = $1;
+        $has_zlib = 1;
+        print " (yes) " if $verbose;
+        $self->set_result("yes, $version");
+    }
+    return $has_zlib;
+}
+
+1;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/ops_pct/config/auto/zlib/zlib_c.in (from r46301, trunk/config/auto/zlib/zlib_c.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/config/auto/zlib/zlib_c.in	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/config/auto/zlib/zlib_c.in)
@@ -0,0 +1,27 @@
+/*
+  Copyright (C) 2010, Parrot Foundation.
+  $Id$
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <zlib.h>
+
+int
+main(int argc, char *argv[])
+{
+    if (0 == strcmp(ZLIB_VERSION, zlibVersion())) {
+        printf("%s\n", ZLIB_VERSION);
+        return EXIT_SUCCESS;
+    }
+    printf("not same version between include and library\n");
+    return EXIT_FAILURE;
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/config/gen/config_h/config_h.in
==============================================================================
--- branches/ops_pct/config/gen/config_h/config_h.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/config_h/config_h.in	Wed May  5 08:45:29 2010	(r46302)
@@ -152,10 +152,6 @@
 /* Oplib and dynamic ops related. */
 #define PARROT_CORE_OPLIB_NAME "core"
 #define PARROT_CORE_OPLIB_INIT Parrot_DynOp_core_ at MAJOR@_ at MINOR@_ at PATCH@
-#define PARROT_CORE_PREDEREF_OPLIB_INIT Parrot_DynOp_core_prederef_ at MAJOR@_ at MINOR@_ at PATCH@
-#define PARROT_CORE_SWITCH_OPLIB_INIT Parrot_DynOp_core_switch_ at MAJOR@_ at MINOR@_ at PATCH@
-#define PARROT_CORE_CG_OPLIB_INIT Parrot_DynOp_core_cg_ at MAJOR@_ at MINOR@_ at PATCH@
-#define PARROT_CORE_CGP_OPLIB_INIT Parrot_DynOp_core_cgp_ at MAJOR@_ at MINOR@_ at PATCH@
 
 /* ICU. */
 #define PARROT_HAS_ICU @has_icu@

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

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

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

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

Modified: branches/ops_pct/config/gen/core_pmcs.pm
==============================================================================
--- branches/ops_pct/config/gen/core_pmcs.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/core_pmcs.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -103,6 +103,8 @@
 /* HEADERIZER STOP */
 
 #include "parrot/parrot.h"
+#include "parrot/global_setup.h"
+
 
 END_C
 
@@ -110,15 +112,6 @@
 
     print {$OUT} <<'END_C';
 
-/* This isn't strictly true, but the headerizer should not bother */
-
-void Parrot_register_core_pmcs(PARROT_INTERP, NOTNULL(PMC *registry))
-    __attribute__nonnull__(1)
-    __attribute__nonnull__(2);
-
-extern void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass)
-    __attribute__nonnull__(1);
-
 void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass)
 {
     /* first the PMC with the highest enum
@@ -132,14 +125,14 @@
     print {$OUT} <<'END_C';
 }
 
-static void register_pmc(PARROT_INTERP, NOTNULL(PMC *registry), int pmc_id)
+static void register_pmc(PARROT_INTERP, ARGIN(PMC *registry), int pmc_id)
 {
     STRING * const key = interp->vtables[pmc_id]->whoami;
     VTABLE_set_integer_keyed_str(interp, registry, key, pmc_id);
 }
 
 void
-Parrot_register_core_pmcs(PARROT_INTERP, NOTNULL(PMC *registry))
+Parrot_register_core_pmcs(PARROT_INTERP, ARGIN(PMC *registry))
 {
 END_C
 

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

Modified: branches/ops_pct/config/gen/makefiles.pm
==============================================================================
--- branches/ops_pct/config/gen/makefiles.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/makefiles.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -48,10 +48,12 @@
             conditioned_lines => 1,
         },
 
-        'compilers/ncigen/Makefile'  =>
-            { SOURCE => 'compilers/ncigen/config/makefiles/ncigen.in' },
-        'src/dynpmc/Makefile'        =>
-            { SOURCE => 'config/gen/makefiles/dynpmc.in' },
+        'src/dynpmc/Rules.mak' => {
+             SOURCE => 'src/dynpmc/Rules.in',
+        },
+        'src/dynpmc/Defines.mak' => {
+             SOURCE => 'src/dynpmc/Defines.in',
+        },
         'editor/Makefile'            =>
             { SOURCE => 'config/gen/makefiles/editor.in' },
 

Modified: branches/ops_pct/config/gen/makefiles/docs.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/docs.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/makefiles/docs.in	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 # Setup of some commands
@@ -50,6 +50,22 @@
 html: all
 	$(PERL) -I../lib ../tools/docs/write_docs.pl --silent --version=$(VERSION)
 
+# The pdf target is to generate a parrot PDF document.
+# If you are missing the command 'pdflatex' then you have first to install a
+# LaTeX distribution with it. For Windows and UNIX downloads are for example
+# available from: http://miktex.org, http://tug.org/texlive or
+# http://www.ctan.org
+pdf: ../tools/docs/filename_and_chapter.pl
+	$(MKPATH) build/modified_pod
+	$(PERL) ../tools/docs/filename_and_chapter.pl
+	cd build && pdflatex parrot-book.tex && pdflatex parrot-book.tex
+
+#pdf-release: build/parrot-book.pdf
+#	cp build/parrot-book.pdf build/parrot-book-$$(date +"%Y.%m").pdf
+
+pdf-clean:
+	$(RM_RF) build
+
 html-clean:
 	$(RM_RF) html
 

Deleted: branches/ops_pct/config/gen/makefiles/dynpmc.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/dynpmc.in	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,307 +0,0 @@
-# Copyright (C) 2003-2009, Parrot Foundation.
-# $Id$
-
-PERL          = @perl@
-RM_F          = @rm_f@
-CP            = @cp@
-CHMOD         = @chmod@
-LOAD_EXT      = @load_ext@
-BUILD_DIR     = @build_dir@
-RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR   = $(BUILD_DIR)/runtime/parrot/dynext
-O             = @o@
-CC            = @cc@
-LD            = @ld@
-LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@
-LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
-LIBPARROT     = @libparrot_ldflags@
-
-BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
-BUILD_LIB_DIR   = $(BUILD_DIR)/blib/lib
-PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl
-INCLUDES        = -I$(BUILD_DIR)/include -I at build_dir@/include/pmc
-LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
-
-PMC2CD = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --dump
-PMC2CC = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --c
-
-# add your dynamic pmcs here
-PMC_TARGETS = \
-  dynlexpad$(LOAD_EXT) \
-  foo_group$(LOAD_EXT) \
-  pccmethod_test$(LOAD_EXT) \
-  rotest$(LOAD_EXT) \
-#IF(has_gdbm):  gdbmhash$(LOAD_EXT) \
-  rational$(LOAD_EXT) \
-#IF(has_crypto):  digest_group$(LOAD_EXT) \
-  subproxy$(LOAD_EXT)
-
-PMCS_DIGEST = \
-  md2.pmc \
-  md4.pmc \
-  md5.pmc \
-  ripemd160.pmc \
-  sha.pmc \
-  sha1.pmc \
-  sha256.pmc \
-  sha512.pmc
-
-OBJS_DIGEST = \
-  md2$(O) \
-  md4$(O) \
-  md5$(O) \
-  ripemd160$(O) \
-  sha$(O) \
-  sha1$(O) \
-  sha256$(O) \
-  sha512$(O)
-
-PMCS_FOO = \
-  foo.pmc \
-  foo2.pmc
-
-OBJS_FOO = \
-  foo$(O) \
-  foo2$(O)
-
-#IF(win32 and cc==gcc):LIB_GDBM = -llibgdbm
-#ELSIF(win32):LIB_GDBM = libgdbm.lib
-#ELSE:LIB_GDBM = -lgdbm
-
-#IF(win32 and cc==gcc):LIB_CRYPTO = -lcrypto
-#ELSIF(win32):LIB_CRYPTO = libcrypto.lib
-#ELSE:LIB_CRYPTO = -lcrypto
-
-CLEANUPS = \
-  "*.c" \
-  "pmc_*.h" \
-  "*_group.h" \
-  "*.dump" \
-#IF(o):  "*@o@" \
-#IF(win32):  "*.lib" \
-#IF(win32):  "*.pdb" \
-#IF(win32):  "*.ilk" \
-#IF(win32):  "*.exp" \
-#IF(win32):  "*.def" \
-#IF(win32):  "*.manifest" \
-#IF(load_ext):  "*@load_ext@"
-
-
-all : install
-
-install : $(PMC_TARGETS)
-#IF(cygwin or hpux):	$(CHMOD) 0775 *$(LOAD_EXT)
-	$(CP) *$(LOAD_EXT) $(INSTALL_DIR)
-#IF(cygwin or hpux):	$(CHMOD) 0775 $(INSTALL_DIR)/*$(LOAD_EXT)
-
-Makefile: ../../config/gen/makefiles/dynpmc.in
-	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::makefiles --target=src/dynpmc/Makefile
-
-dynlexpad$(LOAD_EXT): dynlexpad$(O)
-	$(LD) @ld_out at dynlexpad$(LOAD_EXT) dynlexpad$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-dynlexpad$(O): dynlexpad.c
-	$(CC) -c @cc_o_out at dynlexpad$(O) $(INCLUDES) $(CFLAGS) dynlexpad.c
-
-dynlexpad.c: dynlexpad.dump
-	$(PMC2CC) dynlexpad.pmc
-
-dynlexpad.dump: dynlexpad.pmc
-	$(PMC2CD) dynlexpad.pmc
-
-foo_group$(LOAD_EXT): $(OBJS_FOO) lib-foo_group$(O)
-	$(LD) @ld_out at foo_group$(LOAD_EXT) lib-foo_group$(O) $(OBJS_FOO) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-lib-foo_group$(O): foo_group.c
-	$(CC) -c @cc_o_out at lib-foo_group$(O) $(INCLUDES) $(CFLAGS) foo_group.c
-
-foo_group.c: $(OBJS_FOO)
-	$(PMC2C) --library foo_group --c $(PMCS_FOO)
-
-foo$(O): foo.c
-	$(CC) -c @cc_o_out at foo$(O) $(INCLUDES) $(CFLAGS) foo.c
-
-foo.c: foo.dump
-	$(PMC2CC) foo.pmc
-
-foo.dump: foo.pmc
-	$(PMC2CD) foo.pmc
-
-foo2$(O): foo.c foo2.c
-	$(CC) -c @cc_o_out at foo2$(O) $(INCLUDES) $(CFLAGS) foo2.c
-
-foo2.c: foo2.dump foo.pmc
-	$(PMC2CC) foo2.pmc
-
-foo2.dump: foo2.pmc foo.dump
-	$(PMC2CD) foo2.pmc
-
-pccmethod_test$(LOAD_EXT): pccmethod_test$(O)
-	$(LD) @ld_out at pccmethod_test$(LOAD_EXT) pccmethod_test$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-pccmethod_test$(O): pccmethod_test.c
-	$(CC) -c @cc_o_out at pccmethod_test$(O) $(INCLUDES) $(CFLAGS) pccmethod_test.c
-
-pccmethod_test.c: pccmethod_test.dump
-	$(PMC2CC) pccmethod_test.pmc
-
-pccmethod_test.dump: pccmethod_test.pmc
-	$(PMC2CD) pccmethod_test.pmc
-
-rotest$(LOAD_EXT): rotest$(O)
-	$(LD) @ld_out at rotest$(LOAD_EXT) rotest$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-rotest$(O): rotest.c
-	$(CC) -c @cc_o_out at rotest$(O) $(INCLUDES) $(CFLAGS) rotest.c
-
-rotest.c: rotest.dump
-	$(PMC2CC) rotest.pmc
-
-rotest.dump: rotest.pmc
-	$(PMC2CD) rotest.pmc
-
-gdbmhash$(LOAD_EXT): gdbmhash$(O)
-	$(LD) @ld_out at gdbmhash$(LOAD_EXT) gdbmhash$(O) $(LINKARGS) $(LIB_GDBM)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-gdbmhash$(O): gdbmhash.c
-	$(CC) -c @cc_o_out at gdbmhash$(O) $(INCLUDES) $(CFLAGS) gdbmhash.c
-
-gdbmhash.c: gdbmhash.dump
-	$(PMC2CC) gdbmhash.pmc
-
-gdbmhash.dump: gdbmhash.pmc
-	$(PMC2CD) gdbmhash.pmc
-
-rational$(LOAD_EXT): rational$(O)
-	$(LD) @ld_out at rational$(LOAD_EXT) rational$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-rational$(O): rational.c
-	$(CC) -c @cc_o_out at rational$(O) $(INCLUDES) $(CFLAGS) rational.c
-
-rational.c: rational.dump
-	$(PMC2CC) rational.pmc
-
-rational.dump: rational.pmc
-	$(PMC2CD) rational.pmc
-
-digest_group$(LOAD_EXT): $(OBJS_DIGEST) lib-digest_group$(O)
-	$(LD) @ld_out at digest_group$(LOAD_EXT) lib-digest_group$(O) $(OBJS_DIGEST) $(LINKARGS) $(LIB_CRYPTO)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-lib-digest_group$(O): digest_group.c
-	$(CC) -c @cc_o_out at lib-digest_group$(O) $(INCLUDES) $(CFLAGS) digest_group.c
-
-digest_group.c: $(OBJS_DIGEST)
-	$(PMC2C) --library digest_group --c $(PMCS_DIGEST)
-
-md2$(O): md2.c
-	$(CC) -c @cc_o_out at md2$(O) $(INCLUDES) $(CFLAGS) md2.c
-
-md2.c: md2.dump
-	$(PMC2CC) md2.pmc
-
-md2.dump: md2.pmc
-	$(PMC2CD) md2.pmc
-
-md4$(O): md4.c
-	$(CC) -c @cc_o_out at md4$(O) $(INCLUDES) $(CFLAGS) md4.c
-
-md4.c: md4.dump
-	$(PMC2CC) md4.pmc
-
-md4.dump: md4.pmc
-	$(PMC2CD) md4.pmc
-
-md5$(O): md5.c
-	$(CC) -c @cc_o_out at md5$(O) $(INCLUDES) $(CFLAGS) md5.c
-
-md5.c: md5.dump
-	$(PMC2CC) md5.pmc
-
-md5.dump: md5.pmc
-	$(PMC2CD) md5.pmc
-
-ripemd160$(O): ripemd160.c
-	$(CC) -c @cc_o_out at ripemd160$(O) $(INCLUDES) $(CFLAGS) ripemd160.c
-
-ripemd160.c: ripemd160.dump
-	$(PMC2CC) ripemd160.pmc
-
-ripemd160.dump: ripemd160.pmc
-	$(PMC2CD) ripemd160.pmc
-
-sha$(O): sha.c
-	$(CC) -c @cc_o_out at sha$(O) $(INCLUDES) $(CFLAGS) sha.c
-
-sha.c: sha.dump
-	$(PMC2CC) sha.pmc
-
-sha.dump: sha.pmc
-	$(PMC2CD) sha.pmc
-
-sha1$(O): sha1.c
-	$(CC) -c @cc_o_out at sha1$(O) $(INCLUDES) $(CFLAGS) sha1.c
-
-sha1.c: sha1.dump
-	$(PMC2CC) sha1.pmc
-
-sha1.dump: sha1.pmc
-	$(PMC2CD) sha1.pmc
-
-sha256$(O): sha256.c
-	$(CC) -c @cc_o_out at sha256$(O) $(INCLUDES) $(CFLAGS) sha256.c
-
-sha256.c: sha256.dump
-	$(PMC2CC) sha256.pmc
-
-sha256.dump: sha256.pmc
-	$(PMC2CD) sha256.pmc
-
-sha512$(O): sha512.c
-	$(CC) -c @cc_o_out at sha512$(O) $(INCLUDES) $(CFLAGS) sha512.c
-
-sha512.c: sha512.dump
-	$(PMC2CC) sha512.pmc
-
-sha512.dump: sha512.pmc
-	$(PMC2CD) sha512.pmc
-
-subproxy$(LOAD_EXT): subproxy$(O)
-	$(LD) @ld_out at subproxy$(LOAD_EXT) subproxy$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-subproxy$(O): subproxy.c
-	$(CC) -c @cc_o_out at subproxy$(O) $(INCLUDES) $(CFLAGS) subproxy.c
-
-subproxy.c: subproxy.dump
-	$(PMC2CC) subproxy.pmc
-
-subproxy.dump: subproxy.pmc
-	$(PMC2CD) subproxy.pmc
-
-
-test : all
-	cd ../.. && $(PERL) -Ilib t/harness t/dynpmc/*.t
-
-testclean :
-	$(RM_F) "../../t/dynpmc/*.pir"
-
-clean :
-	$(RM_F) $(CLEANUPS)
-
-realclean:
-	$(RM_F) $(CLEANUPS) Makefile
-
-distclean: realclean
-
-# Local variables:
-#   mode: makefile
-# End:
-# vim: ft=make:

Modified: branches/ops_pct/config/gen/makefiles/root.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/root.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/makefiles/root.in	Wed May  5 08:45:29 2010	(r46302)
@@ -68,6 +68,7 @@
 
 PERL             = @perl@
 CP               = @cp@
+MV               = @mv@
 CHMOD            = @chmod@
 MKPATH           = @mkpath@
 RM_F             = @rm_f@
@@ -84,7 +85,7 @@
 CC_SHARED        = @cc_shared@
 CC_O_OUT         = @cc_o_out@
 CC_WARN          = @ccwarn@
-CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
+CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @gc_flag@ @clock_best@ $(CC_SHARED)
 LINK_DYNAMIC     = @link_dynamic@
 LINK             = @link@
 LINKFLAGS        = @linkflags@ @link_debug@ @ld_debug@
@@ -114,17 +115,19 @@
 # generated by config/init/headers.pm
 NONGEN_HEADERS   = @TEMP_nongen_headers@
 
+# The headerizer
+HEADERIZER       = $(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl
+
+include src/dynpmc/Defines.mak
 include src/dynoplibs/Defines.mak
 include compilers/imcc/Defines.mak
 include compilers/pirc/Defines.mak
 include compilers/tge/Defines.mak
-include compilers/nqp/Defines.mak
 include compilers/pge/Defines.mak
 include compilers/pct/Defines.mak
 include compilers/opsc/Defines.mak
 include ext/nqp-rx/Defines.mak
 include compilers/data_json/Defines.mak
-include compilers/json/Defines.mak
 
 ###############################################################################
 #
@@ -141,18 +144,17 @@
 GEN_MAKEFILES = \
     Makefile \
     docs/Makefile \
-    compilers/ncigen/Makefile \
     editor/Makefile \
     ext/Makefile \
     src/dynoplibs/Rules.mak \
     src/dynoplibs/Defines.mak \
-    src/dynpmc/Makefile \
+    src/dynpmc/Rules.mak \
+    src/dynpmc/Defines.mak \
     compilers/imcc/Rules.mak
 
 GEN_CONFIGS = \
     $(INC_DIR)/config.h \
     $(INC_DIR)/platform.h \
-    $(INC_DIR)/platform_interface.h \
     $(INC_DIR)/platform_limits.h \
     $(INC_DIR)/has_header.h \
     $(INC_DIR)/feature.h \
@@ -168,28 +170,11 @@
 #IF(has_opengl):    src/glut_nci_thunks.nci \
 #IF(has_glut):    src/glut_callbacks.c \
     src/core_pmcs.c \
-#IF(has_crypto):    src/dynpmc/md2.pmc \
-#IF(has_crypto):    src/dynpmc/md4.pmc \
-#IF(has_crypto):    src/dynpmc/md5.pmc \
-#IF(has_crypto):    src/dynpmc/ripemd160.pmc \
-#IF(has_crypto):    src/dynpmc/sha.pmc \
-#IF(has_crypto):    src/dynpmc/sha1.pmc \
-#IF(has_crypto):    src/dynpmc/sha256.pmc \
-#IF(has_crypto):    src/dynpmc/sha512.pmc \
-#IF(has_crypto):    t/dynpmc/md2.t \
-#IF(has_crypto):    t/dynpmc/md4.t \
-#IF(has_crypto):    t/dynpmc/md5.t \
-#IF(has_crypto):    t/dynpmc/ripemd160.t \
-#IF(has_crypto):    t/dynpmc/sha.t \
-#IF(has_crypto):    t/dynpmc/sha1.t \
-#IF(has_crypto):    t/dynpmc/sha256.t \
-#IF(has_crypto):    t/dynpmc/sha512.t \
-    config_lib.pasm \
+    config_lib.pir \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
     compilers/imcc/imcc.l.flag \
-    src/ops/core_ops.c \
-    src/ops/core_ops_switch.c
+    src/ops/core_ops.c
 
 GEN_PASM_INCLUDES = \
 	runtime/parrot/include/cclass.pasm \
@@ -210,6 +195,7 @@
 	runtime/parrot/include/stdio.pasm \
 	runtime/parrot/include/socket.pasm \
 	runtime/parrot/include/libpaths.pasm \
+	runtime/parrot/include/dlopenflags.pasm \
 	runtime/parrot/include/longopt.pasm \
 	runtime/parrot/include/packfile_segments.pasm \
 	runtime/parrot/include/packfile_constants.pasm \
@@ -253,23 +239,23 @@
 GEN_HEADERS = \
     $(INC_DIR)/vtable.h \
     $(INC_DIR)/oplib/ops.h \
-    $(INC_DIR)/oplib/core_ops_switch.h \
     $(INC_DIR)/extend_vtable.h \
     $(INC_DIR)/pbcversion.h
 
 GEN_SOURCES = \
     src/nci.c \
     src/glut_nci_thunks.c \
-    src/core_ops_switch.c \
     src/parrot_config.c \
     src/null_config.c \
     src/install_config.c \
-    src/extend_vtable.c
+    src/extend_vtable.c \
+    src/extra_nci_thunks.c
 
 GEN_MODULES = \
     lib/Parrot/OpLib/core.pm
 
 GEN_LIBRARY = \
+    $(LIBRARY_DIR)/Archive/Tar.pbc \
     $(LIBRARY_DIR)/CGI/QueryHash.pbc \
     $(LIBRARY_DIR)/Crow.pbc \
     $(LIBRARY_DIR)/config.pbc \
@@ -293,7 +279,13 @@
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL.pbc \
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL_funcs.pbc \
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL/Math.pbc \
+    $(LIBRARY_DIR)/osutils.pbc \
     $(LIBRARY_DIR)/P6object.pbc \
+    $(LIBRARY_DIR)/ProfTest.pbc \
+    $(LIBRARY_DIR)/ProfTest/PIRProfile.pir \
+    $(LIBRARY_DIR)/ProfTest/NQPProfile.pir \
+    $(LIBRARY_DIR)/ProfTest/Matcher.pir \
+    $(LIBRARY_DIR)/ProfTest/Want.pir \
     $(LIBRARY_DIR)/parrotlib.pbc \
     $(LIBRARY_DIR)/pcore.pbc \
     $(LIBRARY_DIR)/pcre.pbc \
@@ -316,6 +308,9 @@
     $(LIBRARY_DIR)/Stream/Sub.pbc \
     $(LIBRARY_DIR)/Stream/Writer.pbc \
     $(LIBRARY_DIR)/String/Utils.pbc \
+    $(LIBRARY_DIR)/TAP/Formatter.pbc \
+    $(LIBRARY_DIR)/TAP/Harness.pbc \
+    $(LIBRARY_DIR)/TAP/Parser.pbc \
     $(LIBRARY_DIR)/Test/Builder/Output.pbc \
     $(LIBRARY_DIR)/Test/Builder/Test.pbc \
     $(LIBRARY_DIR)/Test/Builder/Tester.pbc \
@@ -341,6 +336,10 @@
 
 FLUID_FILES_2 = \
     $(GEN_LIBRARY) \
+    $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
+    $(LIBRARY_DIR)/ProfTest/NQPProfile.pbc \
+    $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
+    $(LIBRARY_DIR)/ProfTest/Want.pbc \
     runtime/parrot/include/parrotlib.pbc
 
 
@@ -406,12 +405,10 @@
         $(INC_DIR)/core_pmcs.h \
         $(INC_DIR)/compiler.h \
         $(INC_DIR)/cclass.h \
-        include/pmc/pmc_callcontext.h \
-        include/pmc/pmc_parrotinterpreter.h
+        include/pmc/pmc_callcontext.h
 
 # generated list of header files
 GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) \
-#IF(cg_flag): $(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h
 
 
 CHARSET_O_FILES   = @TEMP_charset_o@
@@ -435,10 +432,7 @@
 
 INTERP_O_FILES = \
     src/string/api$(O) \
-    \
     src/ops/core_ops$(O) \
-    src/ops/core_ops_switch$(O) \
-    \
 #IF(i386_has_gcc_cmpxchg):    src/atomic/gcc_x86$(O) \
     src/byteorder$(O) \
     src/string/charset$(O) \
@@ -502,7 +496,6 @@
     @TEMP_atomic_o@ \
     @TEMP_gc_o@ \
 #IF(platform_asm):    src/platform_asm$(O) \
-#IF(cg_flag):     src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O) \
 
 
 OPS_FILES = @ops@ $(GEN_OPSFILES)
@@ -525,6 +518,7 @@
 PIRC                = . at slash@pirc$(EXE)
 NQP_RX              = . at slash@parrot-nqp$(EXE)
 NCI_THUNK_GEN       = . at slash@parrot_nci_thunk_gen$(EXE)
+TAPIR               = . at slash@tapir$(EXE)
 
 # Installable executables
 INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
@@ -536,6 +530,7 @@
 INSTALLABLECONFIG    = . at slash@installable_parrot_config$(EXE)
 INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
 INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
+INSTALLABLETAPIR    = . at slash@installable_tapir$(EXE)
 
 # Libraries
 LIBPARROT_STATIC    = @blib_dir@/@libparrot_static@
@@ -545,7 +540,7 @@
 
 # This line controls whether a static or shared library is built
 # by Parrot's make.  It is not useful otherwise (e.g., in
-# lib/Parrot/Config/Generated.pm or config_lib.pasm).
+# lib/Parrot/Config/Generated.pm or config_lib.pir).
 LIBPARROT           = @libparrot_for_makefile_only@
 
 #IF(has_icu):ICU_SHARED  = @icu_shared@
@@ -576,10 +571,8 @@
 .c$(O) : # suffix rule (limited support)
 	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
-.s$(O) : # suffix rule (limited support)
-	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
-#UNLESS(win32).S$(O) : # suffix rule (limited support)
-#UNLESS(win32)	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32):.s$(O) : # suffix rule (limited support)
+#UNLESS(win32):	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .pir.pbc : # suffix rule (limited support)
 	$(PARROT) -o $@ $<
@@ -617,7 +610,6 @@
     $(TGE_LIB_PBCS) \
     $(PGE_LIB_PBCS) \
     $(PCT_LIB_PBCS) \
-    $(JSON_LIB_PBCS) \
     $(DATA_JSON_LIB_PBCS) \
     $(NQP_LIB_PBCS) \
     $(GEN_LIBRARY) \
@@ -630,7 +622,7 @@
     runtime/parrot/include/parrotlib.pbc \
     runtime/parrot/include/config.fpmc \
     $(LIBRARY_DIR)/Test/More.pbc \
-    dynpmc \
+    $(DYNPMC_TARGETS) \
     $(DYNOPLIBS_TARGETS)
 
 $(GEN_LIBRARY) : $(PARROT) $(GEN_PASM_INCLUDES)
@@ -680,6 +672,7 @@
 H2INC = $(BUILD_TOOLS_DIR)/h2inc.pl
 
 # classes PMC build utils and rules
+PMC2C  = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl @no_lines_flag@
 PMC2CD = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --dump @no_lines_flag@
 PMC2CC = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --c @no_lines_flag@
 PMC2CV = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --vtable @no_lines_flag@
@@ -768,15 +761,10 @@
 	@echo "  svnclobber:        *Dangerous*: remove everything not in svn."
 	@echo "  reconfig:          'clean' and redo configuration."
 	@echo ""
-	@echo "Dynamic PMCs:"
-	@echo "  dynpmc:            Proxy for default target of src/dynpmc/Makefile"
-	@echo "  dynpmc-test:       Proxy for target 'test' of src/dynpmc/Makefile"
-	@echo "  dynpmc-clean:      Proxy for target 'clean' of src/dynpmc/Makefile"
-	@echo ""
 	@echo "Fetch from source repository:"
 	@echo "  update:            svn update."
 	@echo "  status:            svn status."
-	@echo "  patch:             Create a patch to attach to https:////trac.parrot.org/"
+	@echo "  patch:             Create a patch to attach to https://trac.parrot.org/"
 	@echo ""
 	@echo "Development:"
 	@echo "  lint:              An alias for sunlint."
@@ -785,11 +773,12 @@
 	@echo "  splint:            Code checking with splint."
 	@echo "  splint-all:        Splint all of Parrot, for the masochist only."
 	@echo "  headerizer:        Recreate header files for C-source files"
-	@echo "  apilist:           Show list of PARROT_EXPORT functions"
+	@echo "  apilist:           Show list of PARROT_API functions"
+	@echo "  exportlist:        Show list of PARROT_EXPORT functions"
 	@echo "  malloclist:        Show list of PARROT_MALLOC functions"
 	@echo "  cover:             Run test suite coverage analysis."
 	@echo "  tags-vi:           Create tags for the vi editor."
-	@echo "  tags-emacs:        Create tags for the EMACS editor."
+	@echo "  tags-emacs:        Create tags for the Emacs editor."
 	@echo "  perlcritic:        Check Perl code with Perl::Critic."
 	@echo ""
 	@echo "Release:"
@@ -802,9 +791,9 @@
 
 world : all parrot_utils
 
-parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O)
+parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O) $(TAPIR)
 
-installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
+installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN) $(INSTALLABLETAPIR)
 
 bootstrap-ops : opsc
 	$(NQP_RX) compilers/opsc/ops2c.nqp
@@ -817,8 +806,9 @@
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
 
-runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
-	$(MINIPARROT) config_lib.pasm > $@
+runtime/parrot/include/config.fpmc : myconfig config_lib.pir \
+    runtime/parrot/include/datatypes.pasm $(MINIPARROT)
+	$(MINIPARROT) -Iruntime/parrot/include config_lib.pir > $@
 
 $(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
@@ -828,7 +818,7 @@
 	@rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS) $(LINK_DYNAMIC)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
-$(PBC_TO_EXE) : tools/dev/pbc_to_exe.pir runtime/parrot/library/config.pir $(PARROT)
+$(PBC_TO_EXE) : tools/dev/pbc_to_exe.pir runtime/parrot/library/config.pir $(PARROT) $(DYNEXT_DIR)/os$(LOAD_EXT)
 	$(PARROT) -o pbc_to_exe.pbc tools/dev/pbc_to_exe.pir
 	$(PARROT) pbc_to_exe.pbc pbc_to_exe.pbc
 
@@ -838,6 +828,12 @@
 $(NCI_THUNK_GEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc
 
+tapir.pbc : tools/dev/tapir.pir $(PARROT)
+	$(PARROT) -o tapir.pbc tools/dev/tapir.pir
+
+$(TAPIR) : tapir.pbc $(PARROT) $(PBC_TO_EXE)
+	$(PBC_TO_EXE) tapir.pbc
+
 $(PARROT_CONFIG) : tools/util/parrot-config.pir $(PARROT) $(PBC_TO_EXE)
 	$(PARROT) -o parrot_config.pbc tools/util/parrot-config.pir
 	$(PARROT) pbc_to_exe.pbc parrot_config.pbc
@@ -858,7 +854,7 @@
 
 $(INC_DIR)/context.h : include/pmc/pmc_callcontext.h
 
-$(INC_DIR)/pbcversion.h :
+$(INC_DIR)/pbcversion.h : PBC_COMPAT
 	$(PERL) $(BUILD_TOOLS_DIR)/pbcversion_h.pl > $(INC_DIR)/pbcversion.h
 
 src/parrot_config.c :  runtime/parrot/include/config.fpmc \
@@ -875,32 +871,37 @@
 	$(PERL) $(BUILD_TOOLS_DIR)/parrot_config_c.pl --mini > \
     src/null_config.c
 
-install_config.fpmc : myconfig config_lib.pasm $(PARROT)
+install_config.fpmc : myconfig config_lib.pir $(PARROT)
 	@echo "Invoking Parrot to generate install_config.fpmc"
-	$(PARROT) config_lib.pasm --install > $@
+	$(PARROT) config_lib.pir --install > $@
 
-src/parrot_config$(O) : $(PARROT_H_HEADERS)
+src/parrot_config$(O) : $(PARROT_H_HEADERS) src/parrot_config.c
 
-src/install_config$(O) : $(PARROT_H_HEADERS)
+src/install_config$(O) : $(PARROT_H_HEADERS) src/install_config.c
 
-src/null_config$(O) : $(PARROT_H_HEADERS)
+src/null_config$(O) : $(PARROT_H_HEADERS) src/null_config.c
 
-src/oo$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_class.h include/pmc/pmc_object.h src/oo.str $(INC_DIR)/oo_private.h
+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$(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)/scheduler_private.h \
+        $(INC_DIR)/runcore_api.h
 
-src/io/core$(O) : $(PARROT_H_HEADERS) src/io/io_private.h
+src/io/core$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/core.c
 
-src/io/socket_api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/api.str include/pmc/pmc_socket.h
+src/io/socket_api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
+    src/io/api.str include/pmc/pmc_socket.h src/io/socket_api.c
 
-src/io/socket_unix$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_socket.h src/io/io_private.h
+src/io/socket_unix$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_socket.h \
+    src/io/io_private.h src/io/socket_unix.c
 
 src/io/socket_win32$(O) : $(PARROT_H_HEADERS) \
         src/io/io_private.h \
-        include/pmc/pmc_socket.h
+        include/pmc/pmc_socket.h \
+        src/io/socket_win32.c
 
 O_FILES = \
     $(INTERP_O_FILES) \
@@ -953,11 +954,15 @@
 $(INSTALLABLENCITHUNKGEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE) src/install_config$(O)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc --install
 
+$(INSTALLABLETAPIR) : tapir.pbc $(PBC_TO_EXE) src/install_config$(O)
+	$(PBC_TO_EXE) tapir.pbc --install
+
 #
 # Parrot Debugger
 #
 
 src/parrot_debugger$(O) : $(INC_DIR)/embed.h \
+        src/parrot_debugger.c \
         $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h $(PARROT_H_HEADERS) compilers/imcc/parser.h \
         compilers/imcc/cfg.h \
@@ -987,7 +992,8 @@
 # Parrot Disassembler
 #
 
-src/pbc_disassemble$(O) : $(INC_DIR)/embed.h $(PARROT_H_HEADERS)
+src/pbc_disassemble$(O) : $(INC_DIR)/embed.h $(PARROT_H_HEADERS) \
+    src/pbc_disassemble.c
 
 $(DIS) : src/pbc_disassemble$(O) $(LIBPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1005,7 +1011,8 @@
 #
 # Parrot Dump
 #
-src/packdump$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_sub.h include/pmc/pmc_key.h
+src/packdump$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_sub.h \
+    include/pmc/pmc_key.h src/packdump.c
 
 $(PDUMP) : src/pbc_dump$(O) src/packdump$(O) $(LIBPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1014,7 +1021,7 @@
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
 src/pbc_dump$(O) : $(INC_DIR)/embed.h  $(INC_DIR)/oplib/ops.h \
-        $(PARROT_H_HEADERS)
+        $(PARROT_H_HEADERS) src/pbc_dump.c
 
 $(INSTALLABLEPDUMP) : src/pbc_dump$(O) src/packdump$(O) \
 	src/install_config$(O) $(LIBPARROT)
@@ -1044,6 +1051,46 @@
     @rpath_lib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
+#
+# Profiling runcore test supporting code
+#
+
+$(LIBRARY_DIR)/ProfTest.pbc: $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
+	$(LIBRARY_DIR)/ProfTest/NQPProfile.pbc $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
+	$(LIBRARY_DIR)/ProfTest/Want.pbc
+	$(PBC_MERGE) -o $@ $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
+	$(LIBRARY_DIR)/ProfTest/NQPProfile.pbc $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
+	$(LIBRARY_DIR)/ProfTest/Want.pbc
+
+
+$(LIBRARY_DIR)/ProfTest/PIRProfile.pbc: $(LIBRARY_DIR)/ProfTest/PIRProfile.pir
+	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/PIRProfile.pir
+
+$(LIBRARY_DIR)/ProfTest/PIRProfile.pir: $(LIBRARY_DIR)/ProfTest/PIRProfile.nqp $(NQP_RX)
+	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/PIRProfile.nqp > $@
+
+
+$(LIBRARY_DIR)/ProfTest/NQPProfile.pbc: $(LIBRARY_DIR)/ProfTest/NQPProfile.pir
+	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/NQPProfile.pir
+
+$(LIBRARY_DIR)/ProfTest/NQPProfile.pir: $(LIBRARY_DIR)/ProfTest/NQPProfile.nqp $(NQP_RX)
+	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/NQPProfile.nqp > $@
+
+
+$(LIBRARY_DIR)/ProfTest/Want.pbc: $(LIBRARY_DIR)/ProfTest/Want.pir
+	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/Want.pir
+
+$(LIBRARY_DIR)/ProfTest/Want.pir: $(LIBRARY_DIR)/ProfTest/Want.nqp $(NQP_RX)
+	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/Want.nqp > $@
+
+
+$(LIBRARY_DIR)/ProfTest/Matcher.pbc: $(LIBRARY_DIR)/ProfTest/Matcher.pir
+	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/Matcher.pir
+
+$(LIBRARY_DIR)/ProfTest/Matcher.pir: $(LIBRARY_DIR)/ProfTest/Matcher.nqp $(NQP_RX)
+	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/Matcher.nqp > $@
+
+
 
 ###############################################################################
 #
@@ -1094,6 +1141,9 @@
 runtime/parrot/include/libpaths.pasm : $(INC_DIR)/library.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/library.h $@
 
+runtime/parrot/include/dlopenflags.pasm : $(INC_DIR)/platform_interface.h $(H2INC)
+	$(PERL) $(H2INC) $(INC_DIR)/platform_interface.h $@
+
 runtime/parrot/include/datatypes.pasm : $(INC_DIR)/datatypes.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/datatypes.h $@
 
@@ -1179,59 +1229,59 @@
 #
 ###############################################################################
 
-src/byteorder$(O) : $(PARROT_H_HEADERS)
+src/byteorder$(O) : $(PARROT_H_HEADERS) src/byteorder.c
 
-src/datatypes$(O) : $(PARROT_H_HEADERS)
+src/datatypes$(O) : $(PARROT_H_HEADERS) src/datatypes.c
 
 src/extend_vtable$(O) : $(PARROT_H_HEADERS) \
-        $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h
+        $(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$(O) : $(PARROT_H_HEADERS) src/global_setup.str src/global_setup.c
 
-src/global$(O) : $(PARROT_H_HEADERS) src/global.str \
+src/global$(O) : $(PARROT_H_HEADERS) src/global.str src/global.c \
 	include/pmc/pmc_sub.h
 
-src/pmc$(O) : include/pmc/pmc_class.h \
+src/pmc$(O) : include/pmc/pmc_class.h src/pmc.c \
 	src/pmc.str $(PARROT_H_HEADERS)
 
-src/pmc_freeze$(O) : $(PARROT_H_HEADERS) src/pmc_freeze.str
+src/pmc_freeze$(O) : $(PARROT_H_HEADERS) src/pmc_freeze.str src/pmc_freeze.c
 
-src/hash$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h
+src/hash$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/hash.c
 
-src/library$(O) : $(PARROT_H_HEADERS) src/library.str \
+src/library$(O) : $(PARROT_H_HEADERS) src/library.str src/library.c\
         $(INC_DIR)/dynext.h
 
 $(INC_DIR)/extend_vtable.h src/extend_vtable.c src/vtable.h : src/vtable.tbl $(BUILD_TOOLS_DIR)/vtable_extend.pl lib/Parrot/Vtable.pm
 	$(PERL) $(BUILD_TOOLS_DIR)/vtable_extend.pl
 
-src/key$(O) : $(PARROT_H_HEADERS) src/key.str \
+src/key$(O) : $(PARROT_H_HEADERS) src/key.str src/key.c \
         include/pmc/pmc_key.h
 
-src/gc/mark_sweep$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
+src/gc/mark_sweep$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/mark_sweep.c
 
-src/gc/gc_ms$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
+src/gc/gc_ms$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/gc_ms.c
 
-src/gc/gc_inf$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
+src/gc/gc_inf$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/gc_inf.c
 
-src/gc/api$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
+src/gc/api$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/api.c
 
 src/gc/alloc_resources$(O) : $(PARROT_H_HEADERS) \
-        src/gc/gc_private.h
+        src/gc/gc_private.h src/gc/alloc_resources.c
 
-src/hll$(O) : $(PARROT_H_HEADERS) src/hll.str $(INC_DIR)/dynext.h
+src/hll$(O) : $(PARROT_H_HEADERS) src/hll.str $(INC_DIR)/dynext.h src/hll.c
 
-src/platform$(O) : $(PARROT_H_HEADERS)
+src/platform$(O) : $(PARROT_H_HEADERS) src/platform.c
 
 #IF(platform_asm):src/platform_asm$(O) : $(PARROT_H_HEADERS)
 #IF(platform_asm):
-src/core_pmcs$(O) : $(PARROT_H_HEADERS)
+src/core_pmcs$(O) : $(PARROT_H_HEADERS) src/core_pmcs.c
 
-src/runcore/trace$(O) : include/pmc/pmc_sub.h \
+src/runcore/trace$(O) : include/pmc/pmc_sub.h src/runcore/trace.c \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
 src/debug$(O) : $(INC_DIR)/embed.h $(INC_DIR)/extend.h \
-        $(PARROT_H_HEADERS) \
+        $(PARROT_H_HEADERS) src/debug.c \
         $(INC_DIR)/oplib/ops.h \
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         src/debug.str include/pmc/pmc_key.h \
@@ -1239,26 +1289,27 @@
         $(INC_DIR)/extend_vtable.h
 
 src/sub$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
-        src/sub.str \
+        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/private_cstring.h src/string/api.c
 
-src/string/primitives$(O) : $(PARROT_H_HEADERS)
+src/string/primitives$(O) : $(PARROT_H_HEADERS) src/string/primitives.c
 
-src/longopt$(O) : $(PARROT_H_HEADERS)
+src/longopt$(O) : $(PARROT_H_HEADERS) src/longopt.c
 
 src/dynext$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/dynext.h \
-        src/dynext.str include/pmc/pmc_parrotlibrary.h
+        src/dynext.str include/pmc/pmc_parrotlibrary.h src/dynext.c
 
 src/exceptions$(O) : $(PARROT_H_HEADERS) \
-        src/exceptions.str \
+        src/exceptions.str src/exceptions.c \
 	include/pmc/pmc_continuation.h
 
-src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h \
+src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h src/thread.c \
         include/pmc/pmc_sub.h \
-	include/pmc/pmc_parrotinterpreter.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 \
@@ -1266,14 +1317,15 @@
 	$(CC) $(CFLAGS) @optimize::src/extend.c@ @ccwarn::src/extend.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extend.c
 
 src/runcore/main$(O) : \
+	src/runcore/main.c \
 	src/runcore/main.str \
 	include/pmc/pmc_parrotlibrary.h \
         $(INC_DIR)/dynext.h $(INC_DIR)/oplib/core_ops.h \
-        $(INC_DIR)/oplib/core_ops_switch.h $(INC_DIR)/oplib/ops.h \
+        $(INC_DIR)/oplib/ops.h \
         $(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h \
         $(INC_DIR)/runcore_profiling.h
 
-src/runcore/profiling$(O) : src/runcore/profiling.str \
+src/runcore/profiling$(O) : src/runcore/profiling.str src/runcore/profiling.c \
 	include/pmc/pmc_sub.h \
 	include/pmc/pmc_namespace.h \
         $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h \
@@ -1282,25 +1334,30 @@
 
 src/call/args$(O) : \
         $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
+	src/call/args.c \
 	src/call/args.str \
 	include/pmc/pmc_key.h \
 	include/pmc/pmc_fixedintegerarray.h
 
-src/call/context_accessors$(O): $(PARROT_H_HEADERS)
+src/call/context_accessors$(O): $(PARROT_H_HEADERS) \
+        src/call/context_accessors.c
 
 src/call/pcc$(O) : $(INC_DIR)/oplib/ops.h \
         $(PARROT_H_HEADERS) \
         $(INC_DIR)/runcore_api.h \
+	src/call/pcc.c \
 	src/call/pcc.str \
 	include/pmc/pmc_key.h include/pmc/pmc_continuation.h
 
 src/call/context$(O) : $(PARROT_H_HEADERS) \
-	include/pmc/pmc_sub.h
+	include/pmc/pmc_sub.h src/call/context.c
 
 src/interp/inter_cb$(O) : $(PARROT_H_HEADERS) \
-	src/interp/inter_cb.str
+        include/pmc/pmc_parrotinterpreter.h \
+	src/interp/inter_cb.str src/interp/inter_cb.c
 
 src/interp/inter_misc$(O) : $(PARROT_H_HEADERS) \
+        src/interp/inter_misc.c \
         src/interp/inter_misc.str \
 	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
@@ -1314,6 +1371,8 @@
 
 src/interp/inter_create$(O) : $(PARROT_H_HEADERS) \
 	$(INC_DIR)/oplib/core_ops.h \
+	src/gc/gc_private.h \
+        src/interp/inter_create.c \
         src/interp/inter_create.str \
 	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
@@ -1326,33 +1385,43 @@
         $(INC_DIR)/runcore_api.h
 
 src/call/ops$(O) : $(INC_DIR)/oplib/ops.h \
-	$(PARROT_H_HEADERS) include/pmc/pmc_continuation.h
+	$(PARROT_H_HEADERS) include/pmc/pmc_continuation.h \
+        $(INC_DIR)/runcore_api.h src/call/ops.c
 
 src/io/api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
+        src/io/api.c \
         src/io/api.str include/pmc/pmc_filehandle.h \
-        include/pmc/pmc_stringhandle.h
+        include/pmc/pmc_stringhandle.h \
+        $(INC_DIR)/extend.h \
+        $(INC_DIR)/extend_vtable.h
 
-src/io/buffer$(O) : $(PARROT_H_HEADERS) src/io/io_private.h
+src/io/buffer$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/buffer.c
 
-src/io/portable$(O) : $(PARROT_H_HEADERS) src/io/io_private.h
+src/io/portable$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/portable.c
 
-src/io/unix$(O) : $(PARROT_H_HEADERS) src/io/io_private.h include/pmc/pmc_filehandle.h
+src/io/unix$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
+    include/pmc/pmc_filehandle.h src/io/unix.c
 
-src/io/utf8$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/string/unicode.h
+src/io/utf8$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/string/unicode.h \
+    src/io/utf8.c
 
-src/io/win32$(O) : $(PARROT_H_HEADERS) src/io/io_private.h include/pmc/pmc_filehandle.h
+src/io/win32$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
+    include/pmc/pmc_filehandle.h src/io/win32.c
 
-src/gc/alloc_memory$(O) : $(PARROT_H_HEADERS)
+src/gc/alloc_memory$(O) : $(PARROT_H_HEADERS) src/gc/alloc_memory.c
 
 src/main$(O) : $(INC_DIR)/imcc.h $(PARROT_H_HEADERS) \
-        $(INC_DIR)/embed.h
+        $(INC_DIR)/embed.h $(INC_DIR)/runcore_api.h src/gc/gc_private.h \
+        src/main.c
 
 src/multidispatch$(O) : \
+        src/multidispatch.c \
         src/multidispatch.str \
         $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS) \
 	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 \
@@ -1365,20 +1434,22 @@
         $(INC_DIR)/embed.h $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h \
         $(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h
 
-src/packfile/pf_items$(O) : $(PARROT_H_HEADERS)
+src/packfile/pf_items$(O) : $(PARROT_H_HEADERS) src/packfile/pf_items.c
 
-src/packout$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h
+src/packout$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/packout.c
 
 src/parrot$(O) : $(GENERAL_H_FILES)
 
 src/runcore/cores$(O) : src/runcore/cores.str \
+        src/runcore/cores.c \
 	include/pmc/pmc_sub.h \
         $(INC_DIR)/dynext.h $(INC_DIR)/embed.h $(INC_DIR)/oplib/core_ops.h \
-        $(INC_DIR)/oplib/core_ops_switch.h $(INC_DIR)/oplib/ops.h \
+        $(INC_DIR)/oplib/ops.h \
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
+        src/embed.c \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h \
         compilers/imcc/cfg.h \
@@ -1391,55 +1462,55 @@
 
 src/dataypes$(O) : $(GENERAL_H_FILES) src/dataypes.c
 
-src/exit$(O) : $(PARROT_H_HEADERS)
+src/exit$(O) : $(PARROT_H_HEADERS) src/exit.c
 
 src/nci/api$(O) : src/nci/api.str \
-        $(PARROT_H_HEADERS) \
-        include/pmc/pmc_unmanagedstruct.h \
-        include/pmc/pmc_nci.h
+        src/nci/api.c \
+        $(PARROT_H_HEADERS)
 
-src/nci/core_thunks$(O) : src/nci/core_thunks.str \
+src/nci/core_thunks$(O) : src/nci/core_thunks.c \
         $(PARROT_H_HEADERS) \
-        include/pmc/pmc_unmanagedstruct.h \
         include/pmc/pmc_nci.h
 
 ## SUFFIX OVERRIDE
-src/nci/extra_thunks$(O) : src/nci/extra_thunks.str \
+src/nci/extra_thunks$(O) : \
     $(PARROT_H_HEADERS) \
-    include/pmc/pmc_unmanagedstruct.h \
     include/pmc/pmc_nci.h \
     src/nci/extra_thunks.c
 	$(CC) $(CFLAGS) @optimize::src/nci/extra_thunks.c@ @ccwarn::src/nci/extra_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci/extra_thunks.c
 
 src/frame_builder$(O) : $(PARROT_H_HEADERS) src/frame_builder.h \
+        src/frame_builder.c \
         include/pmc/pmc_fixedintegerarray.h \
         include/pmc/pmc_unmanagedstruct.h \
         include/pmc/pmc_managedstruct.h \
         $(INC_DIR)/oplib/ops.h
 
-src/vtables$(O) : $(PARROT_H_HEADERS)
+src/vtables$(O) : $(PARROT_H_HEADERS) src/vtables.c
 
 ## SUFFIX OVERRIDE
-src/gc/system$(O) : $(PARROT_H_HEADERS)  src/gc/gc_private.h
+src/gc/system$(O) : $(PARROT_H_HEADERS)  src/gc/gc_private.h src/gc/system.c
 	$(CC) $(CFLAGS) @optimize::src/gc/system.c@ @ccwarn::src/gc/system.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/gc/system.c
 
 src/gc/gc_private.h : $(INC_DIR)/settings.h
 
-src/warnings$(O) : $(PARROT_H_HEADERS)
+src/gc/malloc$(O) : src/gc/malloc.c
+
+src/warnings$(O) : $(PARROT_H_HEADERS) src/warnings.c
 
-src/misc$(O) : $(PARROT_H_HEADERS)
+src/misc$(O) : $(PARROT_H_HEADERS) src/misc.c
 
-src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h
+src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h src/utils.c
 
 ## SUFFIX OVERRIDE
-src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str
+src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str src/spf_render.c
 	$(CC) $(CFLAGS) @optimize::src/spf_render.c@ @ccwarn::src/spf_render.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/spf_render.c
 
-src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str
+src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str src/spf_vtable.c
 
-src/string/encoding$(O) : $(PARROT_H_HEADERS)
+src/string/encoding$(O) : $(PARROT_H_HEADERS) src/string/encoding.c
 
-src/string/charset$(O) : $(PARROT_H_HEADERS) \
+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 \
@@ -1449,22 +1520,18 @@
         src/string/charset/iso-8859-1.h \
         src/string/charset/unicode.h
 
-src/pbc_merge$(O) : $(INC_DIR)/embed.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/io/filehandle$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_filehandle.h src/io/io_private.h
+src/io/filehandle$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_filehandle.h \
+    src/io/io_private.h src/io/filehandle.c
 
-src/dynpmc/subproxy$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
-  $(INC_DIR)/dynext.h include/pmc/pmc_subproxy.h \
-  include/pmc/pmc_sub.h include/pmc_default.h \
-  include/pmc/pmc_continuation.h include/pmc/pmc_callcontext.h \
-  include/pmc/pmc_default.h
+src/gc/malloc_trace$(O) : src/gc/malloc.c src/gc/malloc_trace.c
 
-src/gc/malloc_trace$(O) : src/gc/malloc.c
+src/packfile/pf_items$(O) : $(PARROT_H_HEADERS) src/packfile/pf_items.c
 
-src/packfile/pf_items$(O) : $(PARROT_H_HEADERS)
-
-src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h
+src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h \
+    src/atomic/gcc_x86.c
 
 # core_ops depends upon config.h so that it gets updated along with
 # updates to config.h's version numbers
@@ -1484,41 +1551,6 @@
 	include/pmc/pmc_continuation.h
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
 
-## SUFFIX OVERRIDE
-src/ops/core_ops_switch$(O) : $(GENERAL_H_FILES) src/ops/core_ops_switch.c \
-	include/pmc/pmc_parrotlibrary.h
-	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_switch.c@ @ccwarn::src/ops/core_ops_switch.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_switch.c
-
-$(INC_DIR)/oplib/core_ops_switch.h : src/ops/core_ops_switch.c
-
-src/ops/core_ops_switch.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl \
-	lib/Parrot/OpsFile.pm lib/Parrot/Op.pm $(INC_DIR)/config.h \
-	lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CSwitch.pm \
-	lib/Parrot/OpTrans/CPrederef.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --core @no_lines_flag@
-
-## SUFFIX OVERRIDE
-src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
-        include/pmc/pmc_parrotlibrary.h
-	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cg.c@ @ccwarn::src/ops/core_ops_cg.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cg.c
-
-## SUFFIX OVERRIDE
-src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
-        include/pmc/pmc_parrotlibrary.h
-	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cgp.c@ @ccwarn::src/ops/core_ops_cgp.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cgp.c
-
-src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
-
-$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
-
-src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
-
-$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
-
-src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
-
 @TEMP_gc_c@
 
 @TEMP_pmc_build@
@@ -1575,23 +1607,11 @@
 htmlhelp-clean :
 	$(MAKE) docs htmlhelp-clean
 
-###############################################################################
-#
-# dynamic PMC targets:
-#
-###############################################################################
-
-dynpmc : dynpmc.dummy
+pdf:
+	$(MAKE) docs pdf
 
-# XXX this dependancy is too broad, and should be narrowed down
-dynpmc.dummy : $(PARROT) $(INC_DIR)/parrot.h $(INC_DIR)/extend.h $(INC_DIR)/dynext.h $(PMC2C_FILES)
-	$(MAKE) src/dynpmc
-
-dynpmc-test : $(PARROT) $(INC_DIR)/parrot.h $(INC_DIR)/extend.h $(INC_DIR)/dynext.h
-	$(MAKE) src/dynpmc test
-
-dynpmc-clean :
-	$(MAKE) src/dynpmc clean
+pdf-clean:
+	$(MAKE) docs pdf-clean
 
 ###############################################################################
 #
@@ -1669,16 +1689,12 @@
 # integrating them in a single run is difficult.
 
 # Normal test package
-test : test_core nqp_test
+test : test_core
 
 # Test Parrot core.
 test_core: test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS)
 
-# Test the NQP compiler
-nqp_test : test_prep compilers/nqp/nqp.pbc
-	$(PERL) compilers/nqp/t/harness
-
 # run the test suite, create a TAP archive and send it off to smolder
 smolder_test : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) --archive --send-to-smolder
@@ -1696,20 +1712,17 @@
 check : test
 
 # Test various run cores and other stuff
-# 'testC', 'testg' and 'testj' are tested only
+# 'testg' and 'testj' are tested only
 # when the needed runcores are available
 fulltest :
 	- at make@ testb \
-#IF(cg_flag):	testC \
 	testf \
-#IF(cg_flag):	testg \
 	testr \
-	testS \
 	src_tests \
 	run_tests \
+	buildtools_tests \
 	perl_tests \
 	library_tests \
-	nqp_test \
 	codetest \
 	benchmark_tests \
 	manifest_tests \
@@ -1720,10 +1733,6 @@
 testb : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) -b $(RUNCORE_TEST_FILES)
 
-# CGP core
-testC : test_prep
-	$(PERL) t/harness $(EXTRA_TEST_ARGS) -C $(RUNCORE_TEST_FILES)
-
 # fast core
 testf : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) -f $(RUNCORE_TEST_FILES)
@@ -1744,18 +1753,6 @@
 testr : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) -r $(RUNCORE_TEST_FILES)
 
-# switched core
-testS : test_prep
-	$(PERL) t/harness $(EXTRA_TEST_ARGS) -S $(RUNCORE_TEST_FILES)
-
-# Computed goto jitted core - target retained, but falls back to standard core
-testCj : test_prep
-	$(PERL) t/harness $(EXTRA_TEST_ARGS) $(RUNCORE_TEST_FILES)
-
-# switched jitted core - target retained, but falls back to standard core
-testSj : test_prep
-	$(PERL) t/harness $(EXTRA_TEST_ARGS) $(RUNCORE_TEST_FILES)
-
 # test the EXEC stuff
 testexec: test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) --run-exec $(RUNCORE_TEST_FILES)
@@ -1824,20 +1821,20 @@
     dynext-clean \
 #IF(has_perldoc):    docs-clean \
 #IF(has_perldoc):    html-clean \
-    dynpmc-clean \
     examples-clean \
     ext-clean \
 #UNLESS(win32):    cover-clean \
     editor-clean
-	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
-    $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c
+	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c
 	$(RM_F) chartypes "*.s" "*~"
 	$(RM_F) $(FLUID_FILES_1)
 	$(RM_F) $(FLUID_FILES_2)
 	$(RM_RF) lib/Parrot/OpLib
-	$(RM_F) $(NQP_CLEANUPS) $(PGE_CLEANUPS) $(TGE_CLEANUPS) $(JSON_CLEANUPS)
+	$(RM_RF) runtime/parrot/languages/data_json
+	$(RM_F) $(NQP_CLEANUPS) $(PGE_CLEANUPS) $(TGE_CLEANUPS)
 	$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS) $(DATA_JSON_CLEANUPS)
-	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES) $(DYNOPLIBS_CLEANUPS)
+	$(RM_F) $(DYNOPLIBS_CLEANUPS) $(DYNPMC_CLEANUPS)
+	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES)
 
 prog-clean :
 	$(RM_F) \
@@ -1854,8 +1851,10 @@
     $(INSTALLABLECONFIG) \
     $(INSTALLABLENQP) \
     $(INSTALLABLENCITHUNKGEN) \
+    $(INSTALLABLETAPIR) \
     pbc_to_exe.pbc pbc_to_exe.c pbc_to_exe$(O) pbc_to_exe$(EXE) \
     $(NCI_THUNK_GEN) parrot_nci_thunk_gen.c parrot_nci_thunk_gen$(O) parrot_nci_thunk_gen.pbc \
+    tapir.pbc tapir.c tapir$(O) tapir$(EXE) \
     parrot_config$(EXE) parrot_config.c parrot_config$(O) parrot_config.pbc \
     compilers/imcc/main$(O) \
     $(PDUMP) src/pbc_dump$(O) src/packdump$(O) \
@@ -1881,7 +1880,7 @@
     src/string/private_cstring.h "src/pmc/*.c" "include/pmc/pmc_*.h" \
     "src/pmc/*.dump" vtable.dump "*.def" "*.lib" "*.exp"
 
-archclean: dynpmc-clean dynext-clean
+archclean: dynext-clean
 	$(RM_F) \
     $(O_FILES) \
     $(GEN_CONFIGS) \
@@ -2092,7 +2091,8 @@
 	rm -f *.ln
 	$(LINT) $(CC_INC) "-Iinclude/pmc" $(BSD_LINT_FLAGS) $(BSD_LINT_EXCLUSIONS) $(LINTABLE_CFILES)
 
-# For checking with splint see also http:////www.perlfoundation.org//parrot//index.cgi?splint
+# For checking with splint see also
+# http:////trac.parrot.org/parrot/wiki/splint
 # Splint: http:////splint.org
 SPLINT = splint
 
@@ -2104,7 +2104,7 @@
 # The dashes in the names don't make any difference to Splint, but I've
 # made them match how they are in the manual.  Otherwise, you might be
 # looking for "declundef", except that it's "decl-undef" in the docs.
-SPLINTFLAGS = \
+SPLINTFLAGS_BASE = \
     +standard \
     -hints \
     \
@@ -2126,14 +2126,16 @@
     +show-scan \
     +time-dist \
     \
+    +cpp-names \
     +ansi-reserved \
     +ansi-reserved-internal \
     -iso-reserved \
     -iso-reserved-internal \
-    -include-nest 10
+    -include-nest 10 \
 
 # Memory safety checks
-SPLINTFLAGS = $(SPLINTFLAGS) \
+# Transfer errors (-mem-trans) are too tough for us right now
+SPLINTFLAGS_MEMORY_SAFETY = \
     +bufferoverflow \
     +bufferoverflowhigh \
     +read-only-strings \
@@ -2141,9 +2143,19 @@
     +strict-destroy \
     +strict-use-released \
     +use-released \
+    -must-free \
+    -mustfreefresh \
+    -mustfreeonly \
+    +null \
+    +nullptrarith \
+    +nullret \
+    -ptr-arith \
+    +ptr-negate \
+    -zero-ptr \
+    -mem-trans
 
 # Macro safety checks
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_MACRO_SAFETY = \
     +macro-assign \
     +macro-empty \
     +macro-parens \
@@ -2152,63 +2164,44 @@
     +macro-unrecog \
 
 # Watch for unsafe comparisons
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_UNSAFE_COMPARISONS = \
     +bool-compare \
     +ptr-compare \
     +real-compare \
     +unsigned-compare
 
 # But allow us some slop in boolean comparisons
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_BOOLEAN_SLOP = \
     -pred-bool-int \
     -pred-bool-ptr \
     -pred-bool-others \
     -boolops \
 
-# Report qualifier mismatches only if dangerous
-SPLINTFLAGS = $(SPLINTFLAGS) \
+# const and other qualifiers
+# Report qualifier mismatches only if dangerous (+relax-quals)
+SPLINTFLAGS_QUALIFIERS = \
     +relax-quals
 
-# Memory checking
-SPLINTFLAGS = $(SPLINTFLAGS) \
-    -must-free \
-    -mustfreefresh \
-    -mustfreeonly \
-    +null \
-    +nullptrarith \
-    +nullret \
-    -ptr-arith \
-    +ptr-negate \
-    -zero-ptr \
-
-# Transfer errors are too tough for us right now
-SPLINTFLAGS = $(SPLINTFLAGS) \
-    -mem-trans
-
 # Symbol definitions
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_SYMBOL_DEFINITIONS = \
     +decl-undef \
     +incon-defs \
     +incon-defs-lib \
 
-# Check for conflicts with C++ compilers
-SPLINTFLAGS = $(SPLINTFLAGS) \
-    +cpp-names \
-
 # Format codes
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_FORMAT = \
     +format-code \
     +format-type \
 
 # Problems with evaluation and control structions
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_EVALUATION = \
     +controlnestdepth 15 \
-    +duplicate-case \
+    +duplicate-quals \
     +eval-order \
     +eval-order-uncon \
 
 # Types and stuff
-SPLINTFLAGS = $(SPLINTFLAGS) \
+SPLINTFLAGS_TYPES = \
     +char-index \
     +char-int \
     +enum-members \
@@ -2227,13 +2220,27 @@
 # added to splint target to simplify experimentation,
 # example: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
 
+SPLINTFLAGS_TEST =
+
+SPLINTFLAGS = \
+	$(SPLINTFLAGS_BASE) \
+	$(SPLINTFLAGS_MEMORY_SAFETY) \
+	$(SPLINTFLAGS_MACRO_SAFETY) \
+	$(SPLINTFLAGS_UNSAFE_COMPARISONS) \
+	$(SPLINTFLAGS_BOOLEAN_SLOP) \
+	$(SPLINTFLAGS_QUALIFIERS) \
+	$(SPLINTFLAGS_SYMBOL_DEFINITIONS) \
+	$(SPLINTFLAGS_FORMAT) \
+	$(SPLINTFLAGS_EVALUATION) \
+	$(SPLINTFLAGS_TYPES) \
+
 SPLINT_SOURCE = `echo $(O_FILES) | $(PERL) -pe @PQ at s/\.o/\.c/g at PQ@`
 
 splint-all : $(PARROT)
 	$(MKPATH) $(SPLINT_TMP)
-	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) \
+	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) \
 	$(SPLINT_SOURCE) \
-	$(SPLINT) $(CC_INC) $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) compilers/imcc/main.c
+	$(SPLINT) $(CC_INC) $(SPLINTFLAGS) compilers/imcc/main.c
 
 # "splint" is the less-thorough splint target.  For cage cleaning work,
 # you'll probably want to specify SPLINT_SOURCE rather than work on the
@@ -2242,7 +2249,7 @@
 
 splint : all
 	$(MKPATH) $(SPLINT_TMP)
-	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) \
+	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) \
 	+partial -DNDEBUG \
 	$(SPLINT_SOURCE) \
 		| grep -v 'Source code error generation point'
@@ -2270,16 +2277,12 @@
 cover: \
     cover.dummy \
     cover-testb \
-#IF(cg_flag):    cover-testC \
     cover-testf \
-#IF(cg_flag):    cover-testg \
     cover-testr \
-    cover-testS \
     cover-src \
     cover-run \
     cover-perl \
     cover-extra \
-    cover-nqp \
     cover-codingstd \
     cover-benchmark \
     cover-manifest \
@@ -2302,9 +2305,6 @@
 cover-testb: cover.dummy
 	- at make@ testb
 
-cover-testC: cover.dummy
-	- at make@ testC
-
 cover-testf: cover.dummy
 	- at make@ testf
 
@@ -2317,9 +2317,6 @@
 cover-testr: cover.dummy
 	- at make@ testr
 
-cover-testS: cover.dummy
-	- at make@ testS
-
 cover-src: cover.dummy
 	- at make@ src_tests
 
@@ -2332,9 +2329,6 @@
 cover-extra: cover.dummy
 	- at make@ library_tests
 
-cover-nqp: cover.dummy
-	- at make@ nqp_test
-
 cover-codingstd: cover.dummy
 	- at make@ codingstd_tests
 
@@ -2373,6 +2367,7 @@
     --destdir=$(DESTDIR) \
     --docdir=$(DOC_DIR) \
     --versiondir=$(VERSION_DIR) \
+    --pkgconfigdir=@PKGCONFIG_DIR@ \
     MANIFEST MANIFEST.generated
 
 install-dev-only: installable
@@ -2412,6 +2407,8 @@
 	grep -v DEVELOPING MANIFEST.real > MANIFEST
 	$(PERL) -lane 'print"parrot-$(VERSION)/$$F[0]"unless!length||/#/' MANIFEST | \
     tar -zcv -T - -f parrot-$(VERSION).tar.gz
+	$(PERL) -lane 'print"parrot-$(VERSION)/$$F[0]"unless!length||/#/' \
+             MANIFEST | tar -jcv -T - -f parrot-$(VERSION).tar.bz2
 	mv MANIFEST.real MANIFEST
 	rm parrot-$(VERSION)
 
@@ -2440,7 +2437,8 @@
     @ld_out@$@ src/nci_test$(O) $(C_LIBS)
 
 # for use by runtime/parrot/library/OpenGL.pir
-src/glut_callbacks$(O): $(GENERAL_H_FILES)
+src/glut_callbacks$(O): $(PARROT_H_HEADERS) \
+    $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h src/glut_callbacks.c
 
 src/glut_nci_thunks.c: $(NCI_THUNK_GEN)
 	$(NCI_THUNK_GEN) \
@@ -2449,7 +2447,9 @@
 	    --output=src/glut_nci_thunks.c \
 	    <src/glut_nci_thunks.nci
 
-src/glut_nci_thunks$(O): $(GENERAL_H_FILES)
+src/glut_nci_thunks$(O) : $(PARROT_H_HEADERS) \
+    src/glut_nci_thunks.c \
+    include/pmc/pmc_nci.h
 
 $(LIBGLUTCB_SO): $(LIBPARROT) src/glut_callbacks$(O) src/glut_nci_thunks$(O)
 	$(LD) $(LD_LOAD_FLAGS) $(LDFLAGS) \
@@ -2461,7 +2461,8 @@
 	    --output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
 
 ## SUFFIX OVERRIDE
-src/extra_nci_thunks$(O) : $(GENERAL_H_FILES) src/extra_nci_thunks.c
+src/extra_nci_thunks$(O) : $(PARROT_H_HEADERS) src/extra_nci_thunks.c \
+    include/pmc/pmc_nci.h
 	$(CC) $(CFLAGS) @optimize::src/extra_nci_thunks.c@ @ccwarn::src/extra_nci_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extra_nci_thunks.c
 
 $(EXTRANCITHUNKS_SO) : $(LIBPARROT) src/extra_nci_thunks$(O)
@@ -2478,7 +2479,7 @@
         --links=no --totals \
         -R --exclude=blib --exclude=.svn  \
         --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK \
+        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
         .
 
 # this works with an old etags (XEmacs 21.5*)
@@ -2495,11 +2496,11 @@
 tags-vi: tags.vi.dummy
 	$(RM_F) tags
 	@ctags@ \
-    --links=no --totals \
-    -R --exclude=blib --exclude=.svn  \
-    --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-    -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK \
-    .
+	--links=no --totals \
+	-R --exclude=blib --exclude=.svn  \
+	--languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
+	-I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
+	.
 	$(PERL) $(BUILD_TOOLS_DIR)/addopstags.pl $(OPS_FILES)
 
 tags.vi.dummy:
@@ -2511,6 +2512,7 @@
 
 # Andy's extra-cranky Perl::Critic checking for cage cleaners
 cagecritic:
+	@perl -MPerl::Critic::Bangs -e'$$min=q{1.04};die qq{You need Bangs $$min} unless $$Perl::Critic::Bangs::VERSION ge $$min'
 	perlcritic -1 --profile tools/util/perlcritic-cage.conf $(CRITIC_FILES)
 
 # This target will eventually create all the headers automatically.  If you
@@ -2520,30 +2522,33 @@
 
 HEADERIZER_O_FILES = \
     $(O_FILES) \
+    src/main$(O) \
     src/packdump$(O) \
     src/pbc_merge$(O) \
     $(PIRC_O_FILES)
 
 headerizer : src/core_pmcs.c
-	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl $(HEADERIZER_O_FILES) compilers/imcc/imcc.y
+	$(HEADERIZER) $(HEADERIZER_O_FILES) compilers/imcc/imcc.y
 
 apilist: src/core_pmcs.c
-	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl --macro=PARROT_EXPORT $(HEADERIZER_O_FILES)
+	$(HEADERIZER) --macro=PARROT_API $(HEADERIZER_O_FILES)
+
+exportlist: src/core_pmcs.c
+	$(HEADERIZER) --macro=PARROT_EXPORT $(HEADERIZER_O_FILES)
 
 malloclist: src/core_pmcs.c
-	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl --macro=PARROT_MALLOC $(HEADERIZER_O_FILES)
+	$(HEADERIZER) --macro=PARROT_MALLOC $(HEADERIZER_O_FILES)
 
+include src/dynpmc/Rules.mak
 include src/dynoplibs/Rules.mak
 include runtime/parrot/library/Rules.mak
 include compilers/imcc/Rules.mak
 include compilers/pirc/Rules.mak
-include compilers/nqp/Rules.mak
 include compilers/pge/Rules.mak
 include compilers/pct/Rules.mak
 include compilers/opsc/Rules.mak
 include compilers/tge/Rules.mak
 include compilers/data_json/Rules.mak
-include compilers/json/Rules.mak
 include ext/nqp-rx/Rules.mak
 
 # Local variables:

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

Modified: branches/ops_pct/config/gen/platform.pm
==============================================================================
--- branches/ops_pct/config/gen/platform.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -25,7 +25,6 @@
     my %data;
     $data{description} = q{Move platform files into place};
     $data{result}      = q{};
-    $data{platform_interface} = q{config/gen/platform/platform_interface.h};
     $data{coda} = <<'CODA';
 /*
  * Local variables:
@@ -52,10 +51,6 @@
 
     $self->_handle_asm($conf);
 
-    # interface is the same for all platforms
-    copy_if_diff( $self->{platform_interface},
-        "include/parrot/platform_interface.h" );
-
     $self->_set_limits($conf, $verbose);
 
     return 1;

Modified: branches/ops_pct/config/gen/platform/ansi/dl.c
==============================================================================
--- branches/ops_pct/config/gen/platform/ansi/dl.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/ansi/dl.c	Wed May  5 08:45:29 2010	(r46302)
@@ -23,14 +23,15 @@
 
 /*
 
-=item C<void * Parrot_dlopen(const char *filename)>
+=item C<void * Parrot_dlopen(const char *filename, SHIM(Parrot_dlopen_flags
+flags)>
 
 =cut
 
 */
 
 void *
-Parrot_dlopen(const char *filename)
+Parrot_dlopen(const char *filename, SHIM(Parrot_dlopen_flags flags))
 {
     Parrot_warn(NULL, PARROT_WARNINGS_PLATFORM_FLAG, "Parrot_dlopen not implemented");
     return NULL;

Modified: branches/ops_pct/config/gen/platform/generic/dl.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/dl.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/generic/dl.c	Wed May  5 08:45:29 2010	(r46302)
@@ -29,17 +29,18 @@
 
 /*
 
-=item C<void * Parrot_dlopen(const char *filename)>
+=item C<void * Parrot_dlopen(const char *filename, Parrot_dlopen_flags flags)>
 
 =cut
 
 */
 
 void *
-Parrot_dlopen(const char *filename)
+Parrot_dlopen(const char *filename, Parrot_dlopen_flags flags)
 {
 #ifdef PARROT_HAS_HEADER_DLFCN
-    return dlopen(filename, PARROT_DLOPEN_FLAGS);
+    return dlopen(filename, PARROT_DLOPEN_FLAGS
+                    | ((flags & Parrot_dlopen_global_FLAG) ? RTLD_GLOBAL : 0));
 #else
     return 0;
 #endif

Modified: branches/ops_pct/config/gen/platform/generic/env.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/env.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/generic/env.c	Wed May  5 08:45:29 2010	(r46302)
@@ -37,8 +37,8 @@
 void
 Parrot_setenv(PARROT_INTERP, STRING *str_name, STRING *str_value)
 {
-    char *name  = Parrot_str_to_cstring(interp, str_name);
-    char *value = Parrot_str_to_cstring(interp, str_value);
+    char * const name  = Parrot_str_to_cstring(interp, str_name);
+    char * const value = Parrot_str_to_cstring(interp, str_value);
 #ifdef PARROT_HAS_SETENV
     setenv(name, value, 1);
 #else
@@ -74,7 +74,7 @@
 void
 Parrot_unsetenv(PARROT_INTERP, STRING *str_name)
 {
-    char *name = Parrot_str_to_cstring(interp, str_name);
+    char * const name = Parrot_str_to_cstring(interp, str_name);
 #ifdef PARROT_HAS_UNSETENV
     unsetenv(name);
 #else
@@ -96,8 +96,8 @@
 char *
 Parrot_getenv(PARROT_INTERP, STRING *str_name)
 {
-    char *name  = Parrot_str_to_cstring(interp, str_name);
-    char *value = getenv(name);
+    char * const name  = Parrot_str_to_cstring(interp, str_name);
+    char        *value = getenv(name);
     Parrot_str_free_cstring(name);
     return value;
 }

Modified: branches/ops_pct/config/gen/platform/generic/exec.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/exec.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/generic/exec.c	Wed May  5 08:45:29 2010	(r46302)
@@ -55,7 +55,7 @@
     else {
         /* child */
         char * const cmd    = Parrot_str_to_cstring(interp, command);
-        int          status = execlp("sh", "sh", "-c", cmd, (void *)NULL);
+        const int    status = execlp("sh", "sh", "-c", cmd, (void *)NULL);
 
         /* if we get here, something's horribly wrong, but free anyway... */
         Parrot_str_free_cstring(cmd);

Modified: branches/ops_pct/config/gen/platform/generic/itimer.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/itimer.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/generic/itimer.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,6 +1,6 @@
 /*
+ * Copyright (C) 2004-2010, Parrot Foundation.
  * $Id$
- * Copyright (C) 2004-2009, Parrot Foundation.
  */
 
 /*
@@ -77,7 +77,7 @@
 */
 
 int
-get_sys_timer_ms(void *handle)
+get_sys_timer_ms(SHIM(void *handle))
 {
     struct itimerval ots;
     getitimer(ITIMER_REAL, &ots);

Deleted: branches/ops_pct/config/gen/platform/platform_interface.h
==============================================================================
--- branches/ops_pct/config/gen/platform/platform_interface.h	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,127 +0,0 @@
-/*
- * $Id$
- * Copyright (C) 2003-2008, Parrot Foundation.
- */
-
-#ifndef PARROT_PLATFORM_INTERFACE_H_GUARD
-#define PARROT_PLATFORM_INTERFACE_H_GUARD
-/*
-** platform_interface.h
-*/
-#include "parrot/config.h"
-#include "parrot/interpreter.h"
-
-/*
-** I/O:
-*/
-
-
-/*
-** Math:
-*/
-
-extern int Parrot_signbit(double x);
-#if NUMVAL_SIZE == 12
-int Parrot_signbit_l(long double x);
-#endif
-
-/*
-** Memory:
-*/
-
-void *Parrot_memalign(size_t align, size_t size);
-void *Parrot_memalign_if_possible(size_t align, size_t size);
-void Parrot_free_memalign(void *);
-
-#if !defined(PARROT_HAS_SOME_MEMALIGN)
-#  define Parrot_memalign_if_possible(a, s) malloc(s)
-#else
-#  define Parrot_memalign_if_possible(a, s) Parrot_memalign((a), (s))
-#endif
-
-#ifdef PARROT_HAS_EXEC_PROTECT
-void *mem_alloc_executable(size_t);
-void mem_free_executable(void *, size_t);
-void *mem_realloc_executable(void *, size_t, size_t);
-#else
-#  define mem_alloc_executable mem_internal_allocate
-#  define mem_free_executable(a, b) mem_internal_free(a)
-#  define mem_realloc_executable(a, b, c) mem_internal_realloc((a), (c))
-#endif
-
-/*
-** Time
-*/
-
-void Parrot_sleep(unsigned int seconds);
-void Parrot_usleep(unsigned int microseconds);
-INTVAL Parrot_intval_time(void);
-FLOATVAL Parrot_floatval_time(void);
-struct tm * Parrot_gmtime_r(const time_t *, struct tm *);
-struct tm * Parrot_localtime_r(const time_t *, struct tm *);
-char* Parrot_asctime_r(const struct tm*, char *);
-
-/*
- * Env
- */
-
-void Parrot_setenv(PARROT_INTERP, STRING *name, STRING *value);
-void Parrot_unsetenv(PARROT_INTERP, STRING *name);
-char * Parrot_getenv(PARROT_INTERP, STRING *name);
-
-/*
-** Dynamic Loading:
-*/
-
-void *Parrot_dlopen(const char *filename);
-const char *Parrot_dlerror(void);
-void *Parrot_dlsym(void *handle, const char *symbol);
-int Parrot_dlclose(void *handle);
-
-/*
- * signal handling
- */
-#ifndef PARROT_HAS_HEADER_SIGNAL
-#  define Parrot_set_sighandler(s, h)
-#endif
-
-/*
- * system timer
- */
-
-#ifdef PARROT_HAS_SOME_SYS_TIMER
-
-void * new_sys_timer_ms(void);
-void start_sys_timer_ms(void *handle, int ms);
-void stop_sys_timer_ms(void *handle);
-int get_sys_timer_ms(void *handle);
-
-#else
-
-#  define new_sys_timer_ms() NULL
-#  define start_sys_timer_ms(h, m)
-#  define stop_sys_timer_ms(h)
-#  define get_sys_timer_ms(h) 0
-
-#endif
-
-/*
- * high-resolution timer support
- */
-
-UHUGEINTVAL Parrot_hires_get_time(void);
-UINTVAL     Parrot_hires_get_tick_duration(void);
-
-
-struct parrot_string_t;
-INTVAL Parrot_Run_OS_Command(Interp*, struct parrot_string_t *);
-INTVAL Parrot_Run_OS_Command_Argv(Interp*, struct PMC *);
-
-#endif /* PARROT_PLATFORM_INTERFACE_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/ops_pct/config/gen/platform/win32/dl.c
==============================================================================
--- branches/ops_pct/config/gen/platform/win32/dl.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/win32/dl.c	Wed May  5 08:45:29 2010	(r46302)
@@ -23,7 +23,7 @@
 
 /*
 
-=item C<void * Parrot_dlopen(const char *filename)>
+=item C<void * Parrot_dlopen(const char *filename, Parrot_dlopen_flags flags)>
 
 Opens a dynamic library, and returns a system handle to that library.
 Returns Parrot_dlerror() on failure.
@@ -33,7 +33,7 @@
 */
 
 void *
-Parrot_dlopen(const char *filename)
+Parrot_dlopen(const char *filename, SHIM(Parrot_dlopen_flags flags))
 {
     return LoadLibrary(filename);
 }

Modified: branches/ops_pct/config/gen/platform/win32/env.c
==============================================================================
--- branches/ops_pct/config/gen/platform/win32/env.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/win32/env.c	Wed May  5 08:45:29 2010	(r46302)
@@ -46,8 +46,8 @@
 void
 Parrot_setenv(PARROT_INTERP, STRING *str_name, STRING *str_value)
 {
-    char * name  = Parrot_str_to_cstring(interp, str_name);
-    char * value = Parrot_str_to_cstring(interp, str_value);
+    char * const name  = Parrot_str_to_cstring(interp, str_name);
+    char * const value = Parrot_str_to_cstring(interp, str_value);
     assert(name  != NULL);
     assert(value != NULL);
 
@@ -99,9 +99,9 @@
 char *
 Parrot_getenv(PARROT_INTERP, ARGIN(STRING *str_name))
 {
-    char *name       = Parrot_str_to_cstring(interp, str_name);
-    const DWORD size = GetEnvironmentVariable(name, NULL, 0);
-    char *buffer     = NULL;
+    char * const name = Parrot_str_to_cstring(interp, str_name);
+    const DWORD size  = GetEnvironmentVariable(name, NULL, 0);
+    char *buffer      = NULL;
 
     if (size == 0) {
         Parrot_str_free_cstring(name);

Modified: branches/ops_pct/config/gen/platform/win32/exec.c
==============================================================================
--- branches/ops_pct/config/gen/platform/win32/exec.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/gen/platform/win32/exec.c	Wed May  5 08:45:29 2010	(r46302)
@@ -41,10 +41,9 @@
     DWORD status = 0;
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
-    int free_it = 0;
-    char* cmd = (char *)mem_sys_allocate(command->strlen + 4);
-    char* shell = Parrot_getenv(interp, Parrot_str_new(interp, "ComSpec", strlen("ComSpec")));
-    char* cmdin = Parrot_str_to_cstring(interp, command);
+    char* const cmd   = (char *)mem_sys_allocate(command->strlen + 4);
+    char* const shell = Parrot_getenv(interp, Parrot_str_new(interp, "ComSpec", strlen("ComSpec")));
+    char* const cmdin = Parrot_str_to_cstring(interp, command);
 
     strcpy(cmd, "/c ");
     strcat(cmd, cmdin);
@@ -67,7 +66,7 @@
     }
     CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);
-    if (free_it) free(shell);
+    Parrot_str_free_cstring(shell);
     mem_sys_free(cmd);
 
     /* Return exit code left shifted by 8 for POSIX emulation. */
@@ -108,8 +107,8 @@
 
     /* Now build command line. */
     for (i = 0; i < pmclen; i++) {
-        STRING *s = VTABLE_get_string_keyed_int(interp, cmdargs, i);
-        char *cs  = Parrot_str_to_cstring(interp, s);
+        STRING * const s  = VTABLE_get_string_keyed_int(interp, cmdargs, i);
+        char   * const cs = Parrot_str_to_cstring(interp, s);
         if (cmdlinepos + (int)s->strlen + 3 > cmdlinelen) {
             cmdlinelen += s->strlen + 4;
             cmdline = (char *)mem_sys_realloc(cmdline, cmdlinelen);

Modified: branches/ops_pct/config/init/defaults.pm
==============================================================================
--- branches/ops_pct/config/init/defaults.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/init/defaults.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -80,6 +80,7 @@
     my $ccdlflags = $Config{ccdlflags};
     $ccdlflags =~ s/\s*-Wl,-rpath,\S*//g if $conf->options->get('disable-rpath');
 
+    my $cc_option = $conf->options->get('cc');
     # We need a Glossary somewhere!
     $conf->data->set(
         debugging => $conf->options->get('debugging') ? 1 : 0,
@@ -92,23 +93,15 @@
 
         # Compiler -- used to turn .c files into object files.
         # (Usually cc or cl, or something like that.)
-        cc      => $Config{cc},
-        ccflags => $Config{ccflags},
-        ccwarn  => exists( $Config{ccwarn} ) ? $Config{ccwarn} : '',
+        cc      => $cc_option ? $cc_option : $Config{cc},
+        # If we specify a compiler, we can't use existing ccflags.
+        ccflags => $cc_option ? ''         : $Config{ccflags},
+        ccwarn  => '',
 
         # Flags used to indicate this object file is to be compiled
         # with position-independent code suitable for dynamic loading.
         cc_shared => $Config{cccdlflags},    # e.g. -fpic for GNU cc.
 
-        # C++ compiler -- used to compile parts of ICU.  ICU's configure
-        # will try to find a suitable compiler, but it prefers GNU c++ over
-        # a system c++, which might not be appropriate.  This setting
-        # allows you to override ICU's guess, but is otherwise currently
-        # unset.  Ultimately, it should be set to whatever ICU figures
-        # out, or parrot should look for it and always tell ICU what to
-        # use.
-        cxx => 'c++',
-
         # Linker, used to link object files (plus libraries) into
         # an executable.  It is usually $cc on Unix-ish systems.
         # VMS and Win32 might use "Link".
@@ -191,7 +184,7 @@
 
         # some utilities in Makefile
         cat       => '$(PERL) -MExtUtils::Command -e cat',
-        chmod     => '$(PERL) -MExtUtils::Command -e ExtUtils::Command::chmod',
+        chmod     => '$(PERL) -MExtUtils::Command -e chmod',
         cp        => '$(PERL) -MExtUtils::Command -e cp',
         mkpath    => '$(PERL) -MExtUtils::Command -e mkpath',
         mv        => '$(PERL) -MExtUtils::Command -e mv',
@@ -249,6 +242,8 @@
         no_lines_flag => $conf->options->get('no-line-directives') ? '--no-lines' : '',
 
         tempdir => File::Spec->tmpdir,
+
+        PKGCONFIG_DIR => $conf->options->get('pkgconfigdir') || '',
     );
 
     # TT #855:  Profiling options are too specific to GCC
@@ -281,7 +276,7 @@
             $archname =~ s/x86_64/i386/;
 
             # adjust gcc?
-            for my $cc qw(cc cxx link ld) {
+            for my $cc qw(cc link ld) {
                 $conf->data->add( ' ', $cc, '-m32' );
             }
 

Modified: branches/ops_pct/config/init/hints.pm
==============================================================================
--- branches/ops_pct/config/init/hints.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/init/hints.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2003, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME

Modified: branches/ops_pct/config/init/hints/cygwin.pm
==============================================================================
--- branches/ops_pct/config/init/hints/cygwin.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/init/hints/cygwin.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -36,6 +36,7 @@
     # this later causes problems, it might be worth revisiting.  A. Dougherty
     # 9/9/2002
     $conf->data->set(
+        cp                  => '/bin/cp', # ExtUtils::Command::cp broken cpan #56666
         build_dir           => $build_dir,
         ld                  => $conf->data->get('ld') eq 'ld2'
                                ? 'gcc' # do not use old perl5 linker helper

Modified: branches/ops_pct/config/init/hints/irix.pm
==============================================================================
--- branches/ops_pct/config/init/hints/irix.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/init/hints/irix.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -27,15 +27,12 @@
     $conf->data->set( libs => $libs );
 
     my $cc   = $conf->data->get('cc');
-    my $cxx  = $conf->data->get('cxx');
     my $ld   = $conf->data->get('ld');
     my $link = $conf->data->get('link');
     if ( $cc =~ /cc -64/ ) {
-        $cxx  = 'CC -64';
         $ld   = 'CC -64';
         $link = 'CC -64';
         $conf->data->set(
-            cxx  => $cxx,
             ld   => $ld,
             link => $link,
         );

Modified: branches/ops_pct/config/init/optimize.pm
==============================================================================
--- branches/ops_pct/config/init/optimize.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/init/optimize.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -74,17 +74,6 @@
     $conf->data->set( cc_debug => '' );
     $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
 
-    # per file overrides - not every compiler can optimize every file.
-
-    # The src/ops/core_ops*.c files are challenging to optimize.
-    # gcc can usually handle it, but don't assume any other compilers can,
-    # until there is specific evidence otherwise.
-    if ( ! defined($gccversion)) {
-        $conf->data->set('optimize::src/ops/core_ops_cg.c','');
-        $conf->data->set('optimize::src/ops/core_ops_cgp.c','');
-        $conf->data->set('optimize::src/ops/core_ops_switch.c','');
-    }
-
     # TT #405
     if ($conf->data->get('cpuarch') eq 'amd64') {
         $conf->data->set('optimize::src/gc/system.c','');

Modified: branches/ops_pct/config/inter/progs.pm
==============================================================================
--- branches/ops_pct/config/inter/progs.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/config/inter/progs.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -75,7 +75,7 @@
     my ($conf, $ask) = @_;
     # Set each variable individually so that hints files can use them as
     # triggers to help pick the correct defaults for later answers.
-    my ( $cc, $cxx, $link, $ld, $ccflags, $linkflags, $ldflags, $libs, $lex, $yacc );
+    my ( $cc, $link, $ld, $ccflags, $linkflags, $ldflags, $libs, $lex, $yacc );
     $cc = integrate( $conf->data->get('cc'), $conf->options->get('cc') );
     $cc = prompt( "What C compiler do you want to use?", $cc )
         if $ask;
@@ -124,9 +124,6 @@
         if $ask;
     $conf->data->set( libs => $libs );
 
-    $cxx = integrate( $conf->data->get('cxx'), $conf->options->get('cxx') );
-    $cxx = prompt( "What C++ compiler do you want to use?", $cxx ) if $ask;
-    $conf->data->set( cxx => $cxx );
     return ($conf, $cc);
 }
 

Modified: branches/ops_pct/docs/book/draft/appc_command_line_options.pod
==============================================================================
--- branches/ops_pct/docs/book/draft/appc_command_line_options.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/book/draft/appc_command_line_options.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -260,18 +260,6 @@
 
 Run with the I<fast core>.
 
-=item -R cgoto
-
-Run the I<computed goto core> (CGoto).
-
-=item -R cgp
-
-Run with the I<CGoto-Prederefed> core.
-
-=item -R switch
-
-Run with the I<Switched core>.
-
 =item -R gcdebug
 
 Performs a full GC run before every op dispatch

Modified: branches/ops_pct/docs/book/draft/ch07_dynpmcs.pod
==============================================================================
--- branches/ops_pct/docs/book/draft/ch07_dynpmcs.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/book/draft/ch07_dynpmcs.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -195,7 +195,7 @@
 =head3 VTABLE Functions Parameters
 
 VTABLE functions are defined just like ordinary C functions, almost. Here's
-a normal definition for a VTABLE method:
+a normal definition for a VTABLE function:
 
   VTABLE VTABLENAME (PARAMETERS) {
     /* ordinary C here, almost */

Modified: branches/ops_pct/docs/book/draft/chXX_hlls.pod
==============================================================================
--- branches/ops_pct/docs/book/draft/chXX_hlls.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/book/draft/chXX_hlls.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -211,9 +211,9 @@
 
 =over 4
 
-=item * VTable methods
+=item * VTable Functions
 
-VTable methods are the standard interface for PMC data types, and all PMCs
+VTable functions are the standard interface for PMC data types, and all PMCs
 have them. If the PMCs were written properly to satisfy this interface
 all the necessary information from those PMCs. Operate on the PMCs at the
 VTable level, and we can safely ignore the implementation details of them.

Modified: branches/ops_pct/docs/book/pir/ch04_variables.pod
==============================================================================
--- branches/ops_pct/docs/book/pir/ch04_variables.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/book/pir/ch04_variables.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -489,34 +489,35 @@
 When the offset position is negative, it counts backward from the end of the
 string. Thus an offset of -1 starts at the last character of the string.
 
-C<substr> also has a four-argument form, where the fourth argument is a string
-used to replace the substring. This variant modifies the source string and
-returns the removed substring.
+C<substr> no longer has a four-argument form, as in-place string operations
+have been removed.  There is a C<replace> operator which will perform the
+replacement and return a new_string without modifying the old_string.
+The arguments are new_string, old_string, offset, count and
+replacement_string.  The old_string is copied to the new_string with the
+replacement_string inserted from offset replacing the content for count
+characters.
 
-This example above replaces the substring "bc" in C<$S1> with the string "XYZ",
-and returns "bc" in C<$S0>:
+This example replaces the substring "bc" in C<$S1> with the string "XYZ",
+and returns "aXYZde" in C<$S0>, C<$S1> is not changed:
 
 =begin PIR_FRAGMENT
 
   $S1 = "abcde"
-  $S0 = substr $S1, 1, 2, "XYZ"
-  say $S0                        # prints "bc"
-  say $S1                        # prints "aXYZde"
+  $S0 = replace $S1, 1, 2, "XYZ"
+  say $S0                        # prints "aXYZde"
+  say $S1                        # prints "abcde"
 
 =end PIR_FRAGMENT
 
-When the offset position in a replacing C<substr> is one character beyond the
-original string length, C<substr> appends the replacement string just like the
+When the offset position in a C<replace> is one character beyond the original
+string length, C<replace> appends the replacement string just like the
 concatenation operator. If the replacement string is an empty string, the
-opcode removes the characters from the original string.
-
-If you don't need to capture the replaced string, an optimized version of
-C<substr> performs a replace without returning the removed substring:
+opcode removes the characters from the original string in the new string.
 
 =begin PIR_FRAGMENT
 
   $S1 = "abcde"
-  $S1 = substr 1, 2, "XYZ"
+  $S1 = replace $S1, 1, 2, "XYZ"
   say $S1                        # prints "aXYZde"
 
 =end PIR_FRAGMENT
@@ -897,10 +898,11 @@
 C<bors>X<bors opcode>, C<bands>X<bands opcode>, and C<bxors>X<bxors opcode>.
 These take string or string-like PMC arguments and perform the logical
 operation on each byte of the strings to produce the result string.
+Remember that in-place string operations are no longer available.
 
 =begin PIR_FRAGMENT
 
-  $S0 = bors $S1
+  $P0 = bors $P1
   $P0 = bands $P1
   $S0 = bors $S1, $S2
   $P0 = bxors $P1, $S2
@@ -970,9 +972,9 @@
 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<utf18>.
+C<utf8>, and C<utf16>.
 
-The C<binary:> charset treats the string as a buffer of raw unformatted
+The C<binary> charset 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/ops_pct/docs/configuration.pod
==============================================================================
--- branches/ops_pct/docs/configuration.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/configuration.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -123,10 +123,6 @@
 
 =over 4
 
-=item F<config/auto/cgoto.pm>
-
-    Does your compiler support computed goto...
-
 =item F<gen/config_h.pm>
 
     Generate C headers...
@@ -136,7 +132,7 @@
 Note that on non-interactive steps, the text I<done> will be printed after the
 description when the step finishes executing; for example, the user will see:
 
-    Does your compiler support computed goto..............done.
+    Determine flags for building shared libraries.....-fPIC
 
 =item C<result>
 

Modified: branches/ops_pct/docs/dev/infant.pod
==============================================================================
--- branches/ops_pct/docs/dev/infant.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/dev/infant.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -142,15 +142,15 @@
  + Fast mark phase (GC already manipulates the flags)
  - Generation count must be maintained
  - Disallows recursive opcode calls (necessary for eg implementing
-   vtable methods in pasm)
+   vtable functions in pasm)
  - Can temporarily use more memory (dead objects accumulate during the
    current generation)
 
 In order to allow recursive opcode calls, we could increment the generation
 count in more places and make sure nothing is left unanchored at those points,
 but that would gradually remove all advantages of this scheme and make it more
-difficult to call existing vtable methods (since you never know when they might
-start running pasm code.)
+difficult to call existing vtable functions (since you never know when they
+might start running pasm code.)
 
 =head2 Variant 5: generation stack
 

Modified: branches/ops_pct/docs/dev/pccmethods.pod
==============================================================================
--- branches/ops_pct/docs/dev/pccmethods.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/dev/pccmethods.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -10,7 +10,7 @@
 A C<PCCMETHOD> is a PMC method that follows Parrot Calling Conventions
 (a.k.a. PCC). This allows PIR code to call PMC methods using slurpy, named,
 and other types of arguments as specified in F<PDD03>. This offers flexibility
-not found in a PMC C<METHOD> or a vtable method using C calling conventions.
+not found in a PMC C<METHOD> or a vtable function using C calling conventions.
 
 C<PCCINVOKE> is used to call a method using the Parrot Calling Conventions.
 It uses the standard find_method/invoke approach that the callmethodcc opcode
@@ -113,7 +113,7 @@
 
 =head2 Performance
 
-When a C<METHOD> or vtable method is called, C<NCI> is used to map the
+When a C<METHOD> or vtable function is called, C<NCI> is used to map the
 arguments held in the current Parrot_Context onto the C calling conventions.
 That is, you still end up involving the Parrot Calling Conventions anyway,
 so there is no reason to expect a C<PCCMETHOD> to be any slower. It may well

Modified: branches/ops_pct/docs/dev/pmc_freeze.pod
==============================================================================
--- branches/ops_pct/docs/dev/pmc_freeze.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/dev/pmc_freeze.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -79,7 +79,7 @@
 =head2 The visit_info structure
 
 This structure holds all necessary information and function pointers specific
-to the desired functionality. It gets passed on to all vtable methods and
+to the desired functionality. It gets passed on to all vtable functions and
 callback functions.
 
 =head2 Working loop
@@ -99,7 +99,7 @@
 This is done by a callback function inside the B<visit_info> structure called
 B<visit_pmc_now>. It gets called initially to put the first item on the list
 and is called thereafter from all PMCs for contained PMCs inside the B<visit>
-vtable method.
+vtable function.
 
 
 =head2 The visit() vtable
@@ -140,19 +140,19 @@
 
 So after all we finally arrived at the point to actually perform the desired
 functionality. First the PMC-specific part is done inside F<pmc_freeze.c> then
-the specific vtable method B<freeze>, B<thaw>, whatever, is called, again via a
-function pointer called B<visit_action>.
+the specific vtable function B<freeze>, B<thaw>, whatever, is called, again
+via a function pointer called B<visit_action>.
 
 =head1 Freeze and thaw
 
 As stated PMCs are currently processed inside the core, PMC-specific parts are
-done by calling the PMCs vtable method. This parts could of course be moved to
+done by calling the PMCs vtable function. This parts could of course be moved to
 F<default.pmc> too, so that it's simpler to override the functionality.
 
 =head2 Serializer interface
 
 During initialization the B<visit_info>s B<image_io> data pointer is filled
-with an object having B<vtable> methods that remarkably look like a PMCs
+with an object having B<vtable> functions that remarkably look like a PMCs
 vtable. So B<io-E<gt>vtable-E<gt>push_integer> spits out an INTVAL to the
 frozen B<image>, while B<shift_integer> gets an INTVAL from the frozen stream.
 

Modified: branches/ops_pct/docs/dev/pmc_obj_design_meeting_notes.pod
==============================================================================
--- branches/ops_pct/docs/dev/pmc_obj_design_meeting_notes.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/dev/pmc_obj_design_meeting_notes.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -60,7 +60,7 @@
 statically calls the method in the current class.
 
 B<Recommendation>: Throughout the source, rename SELF to STATIC_SELF, and
-rename DYNSELF to SELF. Additionally, direct access to VTABLE methods should
+rename DYNSELF to SELF. Additionally, direct access to VTABLE functions should
 be reviewed, and SELF should be used where possible to increase clarity and
 maintainability (this is a good CAGE task.) Also, this should become a coding
 standard for PMCs.

Modified: branches/ops_pct/docs/dev/profiling.pod
==============================================================================
--- branches/ops_pct/docs/dev/profiling.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/dev/profiling.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -55,6 +55,19 @@
 profiling runcore to run more slowly.  By default, they are disabled.  Set this
 value to enable them.
 
+=item C<PARROT_PROFILING_CANONICAL_OUPUT> 
+
+When this is set, the profiling runcore will record all addresses as a single
+constant value and all times as 1.  This options is useful primarily for
+testing, where it's helpful to have a way to ensure that a given chunk of code
+will always produce exactly the same profile.  If you want this feature
+enabled, you also probably want to pass a fixed hash seed to Parrot via
+C<--hash-seed 1324> to avoid any non-deterministic behavior that hash seed
+randomization may cause.
+
+This variable is not useful apart from testing the profiling runcore and will
+most certainly not help you find hotspots in your code.
+
 =back
 
 =cut

Modified: branches/ops_pct/docs/embed.pod
==============================================================================
--- branches/ops_pct/docs/embed.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/embed.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -121,12 +121,6 @@
 
 =item PARROT_THR_THREAD_POOL
 
-=item PARROT_THR_TYPE_1
-
-=item PARROT_THR_TYPE_2
-
-=item PARROT_THR_TYPE_3
-
 =back
 
 See F<interpreter.h> for the definition of these flags (TODO: document flag
@@ -145,12 +139,6 @@
 
 =item PARROT_FAST_CORE
 
-=item PARROT_SWITCH_CORE
-
-=item PARROT_CGP_CORE
-
-=item PARROT_CGOTO_CORE
-
 =item PARROT_EXEC_CORE
 
 =item PARROT_GC_DEBUG_CORE
@@ -236,7 +224,7 @@
 Creates a "dummy" packfile in lieu of actually creating one from a bytecode
 file on disk.
 
-=item C<void Parrot_load_bytecode(PARROT_INTERP, const char *path)>
+=item C<void Parrot_load_bytecode(PARROT_INTERP, STRING *path)>
 
 Reads and load Parrot bytecode or PIR from the file referenced by C<path>.
 You should create a dummy packfile beforehand; see C<PackFile_new_dummy> for
@@ -1551,8 +1539,6 @@
 
 =item C<Parrot_store_sub_in_namespace>
 
-=item C<Parrot_str_append>
-
 =item C<Parrot_str_boolean>
 
 =item C<Parrot_str_byte_length>
@@ -1601,7 +1587,7 @@
 
 =item C<Parrot_str_indexed>
 
-=item C<Parrot_string_cstring>
+=item C<Parrot_str_cstring>
 
 =item C<Parrot_str_init>
 

Modified: branches/ops_pct/docs/intro.pod
==============================================================================
--- branches/ops_pct/docs/intro.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/intro.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -391,7 +391,7 @@
 
 =begin PIR_FRAGMENT
 
-  .local pmc result, factorial
+  .local int result
   result = factorial($I0)
 
 =end PIR_FRAGMENT

Modified: branches/ops_pct/docs/parrothist.pod
==============================================================================
--- branches/ops_pct/docs/parrothist.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/parrothist.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -104,4 +104,7 @@
 
  chromatic   2.0.0 *        2010-Jan-19     "Inevitable"
  darbelo     2.1.0          2010-Feb-16     "As Scheduled"
+ cotto       2.2.0          2010-Mar-16     "Like Clockwork"
+
+ Gerd        2.3.0 *        2010-Apr-20     "Samoan Lory"
 =cut

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

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

Modified: branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 6: Parrot Assembly Language (PASM)
@@ -7,6 +7,10 @@
 
 The format of Parrot's bytecode assembly language.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 Parrot's bytecode can be thought of as a form of machine language for a
@@ -172,8 +176,8 @@
 where register_type is 0x100, 0x200, 0x400, or 0x800 for PMC, string, integer,
 or number respectively. So N19 would be 0x413.
 
-B<Note>: Instructions tagged with a * will call a vtable method to handle the
-instruction if used on PMC registers.
+B<Note>: Instructions tagged with a * will call a vtable function to handle
+the instruction if used on PMC registers.
 
 In all cases, the letters x, y, and z refer to register numbers. The letter t
 refers to a generic register (P, S, I, or N). A lowercase p, s, i, or n means
@@ -244,7 +248,7 @@
 
     $foo = $bar;
 
-X's assign vtable method is invoked and it does whatever is appropriate.
+X's assign vtable function is invoked and it does whatever is appropriate.
 
 =item clone Px, Py
 
@@ -1006,186 +1010,10 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
 None.
 
-=head2 Version
-
-1.9
-
-=head3 Current
-
-    Maintainer: Dan Sugalski
-    Class: Internals
-    PDD Number: 6
-    Version: 1.9
-    Status: Developing
-    Last Modified: 28 February 2007
-    PDD Format: 1
-    Language: English
-
-=head3 History
-
-=over 4
-
-=item Version 1.9
-
-February 28, 2007
-
-=item Version 1.8
-
-December 11, 2002
-
-=item Version 1.7
-
-December 02, 2002
-
-=item Version 1.6
-
-November 05, 2001
-
-=item Version 1.5
-
-October 12, 2001
-
-=item Version 1.4
-
-September 24, 2001
-
-=item Version 1.3
-
-September 12, 2001
-
-=item Version 1.2
-
-August 25, 2001
-
-=item Version 1.1
-
-August 8, 2001
-
-=item version 1
-
-None. First version
-
-=back
-
-=head2 Changes
-
-=over 4
-
-=item Version 1.9
-
-=over 4
-
-=item * Removed remark on "upper case names reserved for directives"
-
-=item * Fixed ".sub" directive, should be ".pcc_sub"
-
-=item * Added constant directive in description.
-
-=item * Added grammar overview.
-
-=back
-
-=item Version 1.8
-
-=over 4
-
-=item * Added property ops
-
-=item * Fixed some bad register designations
-
-=item * Opened up opcode name character list to include numbers
-
-=back
-
-=item Version 1.7
-
-=over 4
-
-=item * Fixed stack ops; push, pop, and clear properly documented according to
-the engine's behaviour now.
-
-=back
-
-=item Version 1.6
-
-=over 4
-
-=item * Added GC opcodes
-
-=back
-
-=item Version 1.5
-
-=over 4
-
-=item * Now have a bsr in addition to a jsr
-
-=item * return is now ret
-
-=item * Added save and restore ops for saving and restoring individual
-registers
-
-=back
-
-=item Version 1.4
-
-=over 4
-
-=item * Conditional branches have just a true destination now
-
-=item * Added the I/O ops
-
-=item * Added in the threading ops
-
-=item * Added in the interpreter ops
-
-=back
-
-=item Version 1.3
-
-=over 4
-
-=item * Added in the low-level module loading ops
-
-=item * Added in transcendental functions and modulo
-
-=item * Finished the pad/global variable fetching bits
-
-=back
-
-=item Version 1.2
-
-We have an interpreter now! Yay! (Okay, a simple one, but still...) Changes
-made to reflect that.
-
-=item Version 1.1
-
-=over 4
-
-=item * Added in object
-
-=item * Changed remnants of "perl" to "Parrot"
-
-=item * Branch destination may be integer constant
-
-=item * Added L<Assembly Syntax> section
-
-=back
-
-=item Version 1.0
-
-None. First version
-
-=back
-
 =cut
 
 __END__

Modified: branches/ops_pct/docs/pdds/draft/pdd08_keys.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd08_keys.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/draft/pdd08_keys.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 8: PMC Keys
@@ -8,6 +8,10 @@
 This PDD aims to clear up the confusion regarding the implementation of keyed
 access to PMCs in Parrot.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 First, let's define some terminology. An C<aggregate PMC> is one which stores
@@ -91,9 +95,9 @@
 =head3 Aggregate and non-aggregate PMCs
 
 We've already said that what separates the aggregate PMCs from the
-non-aggregates is their implementation of the C<_keyed> vtable methods. So it
-is Hereby Decreed that the default vtable which everyone inherits from defines
-the C<_keyed> forms to throw an exception.
+non-aggregates is their implementation of the C<_keyed> vtable functions. So
+it is Hereby Decreed that the default vtable which everyone inherits from
+defines the C<_keyed> forms to throw an exception.
 
 =over 3
 
@@ -105,11 +109,11 @@
 
 =back
 
-=head3 C<_keyed> vtable methods
+=head3 C<_keyed> vtable functions
 
-So what of these magical C<_keyed> vtable methods? They are generated when you
-add the C<keyed> tag to the appropriate entry in F<src/vtable.tbl>. They are
-constructed by following B<every> C<PMC> argument with a second C<PMC>
+So what of these magical C<_keyed> vtable functions? They are generated when
+you add the C<keyed> tag to the appropriate entry in F<src/vtable.tbl>. They
+are constructed by following B<every> C<PMC> argument with a second C<PMC>
 argument which acts as the key for that argument; the name of the second
 C<PMC> argument is formed by adding C<_key> onto the end of the first C<PMC>
 argument.
@@ -123,8 +127,8 @@
 
     $a = @b[$c]
 
-use the same vtable method, reducing the multiplicity of methods.  Secondly, a
-three-argument C<assign> as suggested by the code above would be ambiguous -
+use the same vtable function, reducing the multiplicity of methods. Secondly,
+a three-argument C<assign> as suggested by the code above would be ambiguous -
 the code above uses 3 PMCs in different ways.
 
 Also, operations which take an aggregate key for one of their arguments should
@@ -265,44 +269,9 @@
 The type values shown above are actually the C<PARROT_ARG_*> values taken from
 F<include/parrot/op.h>.
 
-=head2 Version
-
-=head3 Current
-
-   Maintainer: Simon Cozens <simon at netthink.co.uk>
-   Class: Internals
-   PDD Number: 8
-   Version: 1.3
-   Status: Developing
-   Last Modified: 25 August, 2002
-   PDD Format: 1
-   Language: English
-
-=head3 History
-
-=over 4
-
-=item Sun Aug 25 11:14:43 GMT 2002 : Version 1.3
-
-Updated to reflect Dan's decision to change keys to use PMCs instead of a
-custom data structure. Also corrects documentation of multi-level keys and how
-they are compiled and work. tom at compton.nu.
-
-=item Thu Apr 25 18:30:36 UTC 2002 : Version 1.2
-
-Renamed C<KEY_PAIR> to C<KEY_ATOM>, updated to reflect changeover to linked
-list. - steve at fink.com
-
-=item Fri Mar  8 18:47:34 GMT 2002 : Version 1.1
-
-updated to reflect Dan's comments that non-aggregates also support C<_keyed>
-variant vtable methods.
-
-=back
-
 =head2 References
 
-To come.
+None.
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/draft/pdd10_embedding.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd10_embedding.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/draft/pdd10_embedding.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (c) 2001-2009, Parrot Foundation.
+# Copyright (c) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD10: Embedding and Extending
@@ -74,7 +74,7 @@
 
 =back
 
-=item * probably includes vtable methods on PMCs
+=item * probably includes vtable functions on PMCs
 
 =back
 
@@ -219,8 +219,9 @@
 Compiling source code generated or read from the host application is also
 possible:
 
-  Parrot_PMC Parrot_compile_string( Parrot_Interp, const char *compiler,
-                                                   const char *code );
+  Parrot_PMC Parrot_compile_string( Parrot_Interp, Parrot_String compiler,
+                                                   const char *code,
+                                                   Parrot_String error );
 
 The potential return values are the same as for loading code from disk.
 
@@ -244,17 +245,9 @@
 such that it is possible to load source code written in that language or pass
 source code to an interpreter successfully.
 
-=head2 Attachments
-
-Any associated documents.
-
-=head2 Footnotes
-
-List of footnotes to the text.
-
 =head2 References
 
-List of references.
+None.
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/draft/pdd11_extending.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd11_extending.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/draft/pdd11_extending.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 11: Extending
@@ -9,6 +9,10 @@
 Parrot for code written in C or other compiled languages. It provides about
 the same level of access to Parrot  that bytecode programs have.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 The API presents to C programs roughly the same interface presented to
@@ -198,6 +202,42 @@
 characters of C<value> to a Parrot_String and assigns the resulting string to
 the PMC stored at element <key> of the passed-in PMC.
 
+=item C<Parrot_PMC_push_float( interp, Parrot_PMC pmc, Parrot_Float value )>
+
+Push a float onto an aggregate PMC, such as a ResizablePMCArray.
+Returns void.
+
+=item C<Parrot_PMC_push_integer( interp, Parrot_PMC pmc, Parrot_Int value )>
+
+Push a integer onto an aggregate PMC, such as a ResizableIntegerArray.
+Returns void.
+
+=item C<Parrot_PMC_push_pmc( interp, Parrot_PMC pmc, Parrot_PMC value )>
+
+Push a PMC value onto an aggregate PMC, such as a ResizablePMCArray.
+Returns void.
+
+=item C<Parrot_PMC_push_string( interp, Parrot_PMC pmc, Parrot_String value )>
+
+Push a Parrot_String onto an aggregate PMC, such as a ResizableStringArray.
+Returns void.
+
+=item C<Parrot_PMC_pop_float( interp, Parrot_PMC pmc )>
+
+Pop a Parrot_Float off of an aggregate PMC and returns it.
+
+=item C<Parrot_PMC_pop_integer( interp, Parrot_PMC pmc )>
+
+Pop a Parrot_Int off of an aggregate PMC and returns it.
+
+=item C<Parrot_PMC_pop_pmc( interp, Parrot_PMC pmc )>
+
+Pop a PMC off of an aggregate PMC and returns it.
+
+=item C<Parrot_PMC_pop_string( interp, Parrot_PMC pmc )>
+
+Pop a Parrot_String off of an aggregate PMC and returns it.
+
 =back
 
 =head4 Creation and destruction
@@ -313,51 +353,10 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 F<docs/glossary.pod>
 
-=head2 Version
-
-=head3 Current
-
-    Maintainer:
-    Class: Internals
-    PDD Number: 11
-    Version: 1.0
-    Status: Developing
-    Last Modified: February 20, 2004
-    PDD Format: 1
-    Language: English
-
-=head3 History
-
-=over 4
-
-=item Version 1
-
-None. First version
-
-=back
-
-=head2 Changes
-
-=over 4
-
-=item Version 1.0
-
-None. First version
-
-=back
-
 =cut
 
 __END__

Modified: branches/ops_pct/docs/pdds/draft/pdd14_numbers.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd14_numbers.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/draft/pdd14_numbers.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 14: Numbers
@@ -574,10 +574,6 @@
 suitable opcodes.  Conversion to and from Parrot strings, conversion to and
 from floating point types, sprintf output of bignumbers.
 
-=head2 Attachments
-
-=head2 Footnotes
-
 =head2 References
 
 IBM's Standard Decimal Arithmetic, with tests

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

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

Modified: branches/ops_pct/docs/pdds/draft/pdd31_hll.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd31_hll.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/draft/pdd31_hll.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,17 +1,17 @@
-# Copyright (C) 2009, Parrot Foundation.
+# Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
 =head1 [DRAFT] PDD 31: HLL Compilers and Libraries
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This PDD describes the standard compiler API and support for
 cross-library communication between high-level languages (HLLs).
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 Parrot's support for HLL interoperability is primarily focused on
@@ -299,7 +299,7 @@
 
 =head2 References
 
-L<pdd21_namespaces.pod>
+F<pdd21_namespaces.pod>
 
 =cut
 

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

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

Modified: branches/ops_pct/docs/pdds/pdd03_calling_conventions.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd03_calling_conventions.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd03_calling_conventions.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 3: Calling Conventions
@@ -391,13 +391,9 @@
 
 =end PIR_FRAGMENT
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
-L<pdd23_exceptions.pod>
+F<pdd23_exceptions.pod>
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd07_codingstd.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd07_codingstd.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd07_codingstd.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 7: Conventions and Guidelines for Parrot Source Code
@@ -1006,7 +1006,7 @@
 
 =head2 References
 
-none
+None.
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd09_gc.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd09_gc.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd09_gc.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 9: Garbage Collection Subsystem
@@ -295,7 +295,7 @@
 subsystem, including how many GC runs have been completed, amount of memory
 allocated since the last run, and total memory allocated. This accounting
 information is updated by the GC system. The current block level for GC mark
-and sweep phases is stored in the C<Memory_Pools> structure. 
+and sweep phases is stored in the C<Memory_Pools> structure.
 (See L<Blocking GC>.)
 
 The pointer C<void *gc_private> is reserved for use by the currently active GC
@@ -303,18 +303,18 @@
 
 =head4 The Var_Size_Pool structure
 
-The C<Var_Size_Pool> structure is a simple memory pool. It contains a pointer 
+The C<Var_Size_Pool> structure is a simple memory pool. It contains a pointer
 to the top block of the allocated pool, the total allocated size of the pool,
-the block size, and some details on the reclamation characteristics of the 
+the block size, and some details on the reclamation characteristics of the
 pool.
 
 =head4 The Fixed_Size_Pool structure
 
-The C<Fixed_Size_Pool> structure is a richer memory pool for object 
-allocation. It tracks details like the number of allocated and free objects 
-in the pool, a list of free objects, and for the generational GC 
-implementation maintains linked lists of white, black, and gray PMCs. It 
-contains a pointer to a simple C<Var_Size_Pool> (the base storage of the 
+The C<Fixed_Size_Pool> structure is a richer memory pool for object
+allocation. It tracks details like the number of allocated and free objects
+in the pool, a list of free objects, and for the generational GC
+implementation maintains linked lists of white, black, and gray PMCs. It
+contains a pointer to a simple C<Var_Size_Pool> (the base storage of the
 pool). It holds function pointers for adding and retrieving free objects in
 the pool, and for allocating objects.
 
@@ -350,7 +350,7 @@
 
 =head4 Memory_Pools structure function pointers
 
-Each GC system declares 3 function pointers, stored in the Memory_Pools 
+Each GC system declares 3 function pointers, stored in the Memory_Pools
 structure.
 
 =over 4
@@ -421,8 +421,8 @@
 =item C<void (*finalize_gc_system) (Interp *)>
 
 Called during interpreter destruction. Free used resources and memory pools.
-All PMCs must be swept, and PMCs with custom destroy VTABLE methods must have
-those called.
+All PMCs must be swept, and PMCs with custom destroy VTABLE functions must
+have those called.
 
 =item C<void (*init_pool) (Interp *, Fixed_Size_Pool *)>
 
@@ -563,7 +563,7 @@
 The C<mark> vtable slot will be called during the GC mark phase. The mark
 function must call C<Parrot_gc_mark_PObj_alive> for all non-NULL objects
 (Buffers and PMCs) that PMC refers to. This flag is typically tested and the
-custom mark VTABLE method called from C<src/gc/api.c:mark_special>.
+custom mark VTABLE function called from C<src/gc/api.c:mark_special>.
 
 =item PObj_external_FLAG
 
@@ -602,36 +602,28 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 "Uniprocessor Garbage Collection Techniques"
-http://www.cs.rice.edu/~javaplt/311/Readings/wilson92uniprocessor.pdf
+L<http://www.cs.rice.edu/~javaplt/311/Readings/wilson92uniprocessor.pdf>
 
 "A unified theory of garbage collection":
-http://portal.acm.org/citation.cfm?id=1028982
+L<http://portal.acm.org/citation.cfm?id=1028982>
 
 "Scalable Locality-Conscious Multithreaded Memory Allocation":
-http://people.cs.vt.edu/~scschnei/papers/ismm06.pdf
+L<http://people.cs.vt.edu/~scschnei/papers/ismm06.pdf>
 
 "Parallel and concurrent garbage collectors":
-http://chaoticjava.com/posts/parallel-and-concurrent-garbage-collectors/
+L<http://chaoticjava.com/posts/parallel-and-concurrent-garbage-collectors/>
 
 "Region-Based Memory Management":
-http://www.irisa.fr/prive/talpin/papers/ic97.pdf
+L<http://www.irisa.fr/prive/talpin/papers/ic97.pdf>
 
 Dan's first musings on the GC subsystem:
-http://www.mail-archive.com/perl6-all@perl.org/msg14072.html
+L<http://www.mail-archive.com/perl6-all@perl.org/msg14072.html>
 
 Semi-timely and ordered destruction:
-http://www.sidhe.org/~dan/blog/archives/000199.html
+L<http://www.sidhe.org/~dan/blog/archives/000199.html>
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd15_objects.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd15_objects.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd15_objects.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 15: Objects and Classes
@@ -1630,11 +1630,6 @@
 
 =end html
 
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

Modified: branches/ops_pct/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd17_pmc.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd17_pmc.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,17 +1,17 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 17: Polymorphic Containers
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This PDD describes the internal structure and behavior of the Polymorphic
 Container (PMC) data type.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 PMCs implement all internal data types more complex than a simple integer,
@@ -48,7 +48,6 @@
         VTABLE *vtable;
         DPOINTER *data;
         PMC *_metadata;
-        struct _Sync *_synchronize;    # [Note: may be deprecated, see STM]
     }
 
 C<flags> holds a set of flags associated with the PMC; these are documented
@@ -1656,8 +1655,8 @@
 =head4 Array types
 
 Note that for the following types you can set the size of the array by using
-the VTABLE_set_integer_native() method. Assigning an integer to the array as a
-whole sets the array to that size.
+the VTABLE_set_integer_native() function. Assigning an integer to the array
+as a whole sets the array to that size.
 
 Size-changing operations (such as push, pop, shift, unshift, and splice)
 on statically-sized arrays will throw an exception.
@@ -1809,17 +1808,9 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-  docs/pmc2c.pod
+F<docs/pmc2c.pod>
 
 =cut
 

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

Modified: branches/ops_pct/docs/pdds/pdd19_pir.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd19_pir.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd19_pir.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,18 +1,17 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 19: Parrot Intermediate Representation (PIR)
 
-=head2 Version
-
-$Revision$
-
-
 =head2 Abstract
 
 This document outlines the architecture and core syntax of Parrot
 Intermediate Representation (PIR).
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 PIR is a stable, middle-level language intended both as a target for the
@@ -1444,18 +1443,9 @@
 
 =back
 
-
-=head2 Attachments
-
-N/A
-
-=head2 Footnotes
-
-N/A
-
 =head2 References
 
-N/A
+None.
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd20_lexical_vars.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd20_lexical_vars.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd20_lexical_vars.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,17 +1,17 @@
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 20: Lexical Variables
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 This document defines the requirements and implementation strategy for
 lexically scoped variables.
 
+=head2 Version
+
+$Revision$
+
 =head2 Synopsis
 
 =begin PIR
@@ -402,23 +402,9 @@
 
 TK.
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-=over 4
-
-=item [1]
-
-t/op/lexicals.t
-
-=back
+F<t/op/lexicals.t>
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd21_namespaces.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd21_namespaces.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd21_namespaces.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,16 +1,16 @@
-# Copyright (C) 2005-2007, Parrot Foundation.
+# Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 21: Namespaces
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 Description and implementation of Parrot namespaces.
 
+=head2 Version
+
+$Revision$
+
 =head2 Description
 
 =over 4
@@ -737,14 +737,6 @@
 
 =end PIR
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

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

Modified: branches/ops_pct/docs/pdds/pdd23_exceptions.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd23_exceptions.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd23_exceptions.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 23: Exceptions
@@ -447,20 +447,10 @@
 
 =end PIR_FRAGMENT
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-  src/ops/core.ops
-  src/exceptions.c
-  src/pmc/exception.pmc
-  src/pmc/exceptionhandler.pmc
+F<src/ops/core.ops>, F<src/exceptions.c>, F<src/pmc/exception.pmc>,
+F<src/pmc/exceptionhandler.pmc>
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd24_events.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd24_events.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd24_events.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 24: Events
@@ -368,17 +368,9 @@
 own implementations of timers, which may be used when performance on a
 particular platform is more important than portability.
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-src/events.c
+F<src/events.c>
 
 L<http://www.seas.upenn.edu/~lipeng/homepage/unify.html>
 

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

Modified: branches/ops_pct/docs/pdds/pdd26_ast.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd26_ast.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd26_ast.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation
+# Copyright (C) 2007-2010, Parrot Foundation
 # $Id$
 
 =head1 PDD 26: Compiler Tools - Abstract Syntax Tree
@@ -561,7 +561,7 @@
 
 =head2 References
 
-NA.
+None.
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd27_multiple_dispatch.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd27_multiple_dispatch.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd27_multiple_dispatch.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 27: Multiple Dispatch
@@ -256,15 +256,9 @@
 Multiple dispatch calls from within vtable functions call the
 C<Parrot_mmd_invoke> routine from the public MMD API.
 
-=head2 Attachments
-
-None.
-
 =head2 References
 
-docs/mmd.pod
-src/multidispatch.c
-src/pmc/multisub.pmc
+F<docs/mmd.pod>, F<src/multidispatch.c>, F<src/pmc/multisub.pmc>
 
 =cut
 

Modified: branches/ops_pct/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd28_strings.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd28_strings.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 28: Strings
@@ -379,13 +379,6 @@
 value of flags. If both string arguments are null, return a new string created
 according to the integer flags.
 
-=head4 Parrot_str_append (was string_append)
-
-Append one string to another and return the result. In the default case, the
-return value is the same as the first string argument (modifying that argument
-in place). If the first argument is COW or read-only, then the return value is
-a new string.
-
 =head4 Parrot_str_new (was string_from_cstring)
 
 Return a new string with the default encoding and character set. Accepts two
@@ -621,11 +614,10 @@
 Old Perl 5-style behavior where "aa" goes to "bb". Only useful for ASCII
 strings, and not terribly useful even there.
 
-=head4 Parrot_string_cstring
+=head4 Parrot_str_cstring
 
 Unsafe, and behavior handled by Parrot_str_to_cstring.
 
-
 =head4 Parrot_str_split
 
 Splits the string C<str> at the delimiter C<delim>.
@@ -826,15 +818,15 @@
 
 =head2 References
 
-http://sirviente.9grid.es/sources/plan9/sys/doc/utf.ps - Plan 9's Runes are
+L<http://sirviente.9grid.es/sources/plan9/sys/doc/utf.ps> - Plan 9's Runes are
 not dissimilar to NFG strings, and this is a good introduction to the Unicode
 world.
 
-http://www.unicode.org/reports/tr15/ - The Unicode Consortium's
+L<http://www.unicode.org/reports/tr15/> - The Unicode Consortium's
 explanation of different normalization forms.
 
-http://unicode.org/reports/tr29/ - "grapheme clusters" in the Unicode Standard
-Annex
+L<http://unicode.org/reports/tr29/> - "grapheme clusters" in the Unicode
+Standard Annex
 
 "Unicode: A Primer", Tony Graham - Arguably the most readable book on
 how Unicode works.

Modified: branches/ops_pct/docs/pdds/pdd30_install.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd30_install.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd30_install.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 =head1 PDD 30: Installation
@@ -7,8 +7,8 @@
 
 This PDD outlines Parrot's installation system and support. Parrot's core
 installation system will provide support for binary packages, a working C<make
-install> target, compiled installables, and FHS compliant search paths for the
-installables.
+install> target, compiled installables, and Filesystem Hierarchy Standard
+(FHS) compliant search paths for the installables.
 
 =head2 Version
 
@@ -33,9 +33,8 @@
 
 =head2 Description
 
-Parrot uses Filesystem Hierarchy Standard (FHS) compliant install directories
-by default. Each install location is configurable with options passed to the
-configure script.
+Parrot uses FHS compliant install directories by default. Each install
+location is configurable with options passed to the configure script.
 
 =over
 
@@ -84,7 +83,7 @@
 It is recommended that languages follow a standard pattern in installing their
 libraries so a bytecode compiled version of a module in the C<mylang> HLL
 named C<['Foo';'Bar']> is stored in
-F<usr/lib/parrot/E<lt>versionE<gt>/languages/E<lt>mylangE<gt>/library/Foo/Bar.pbc>
+F</usr/lib/parrot/E<lt>versionE<gt>/languages/E<lt>mylangE<gt>/library/Foo/Bar.pbc>
 
 =item F</usr/lib/parrot/E<lt>versionE<gt>/tools/>
 
@@ -115,7 +114,7 @@
 separate package), F<libgdm> and F<libreadline>.
 
 Building a language depends on a series of Parrot build tools, installed in
-F</usr/lib/parrot/E<lt>version/tools>. These tools will generally not be
+F</usr/lib/parrot/E<lt>versionE<gt>/tools>. These tools will generally not be
 included in the default C<parrot> package on most systems, languages will
 require a C<parrot-dev> package to be installed before they can be built.
 
@@ -161,14 +160,6 @@
 good choice, and can be combined with Autoconf, CMake, Perl, Python,
 etc. for more complex conditional builds).
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

Modified: branches/ops_pct/docs/pdds/pdd_template.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd_template.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pdds/pdd_template.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -1,16 +1,16 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 Design Document Template
 
-=head2 Version
-
-$Revision$
-
 =head2 Abstract
 
 Summary of the contents of the PDD.
 
+=head2 Version
+
+$Revision$
+
 =head2 Synopsis I<(optional)>
 
 Code snippets showing the semantics of the PDD (if applicable).
@@ -33,11 +33,11 @@
 
 =head2 Attachments
 
-Any associated documents.
+Any associated documents. (optional)
 
 =head2 Footnotes
 
-List of footnotes to the text.
+List of footnotes to the text. (optional)
 
 =head2 References
 

Modified: branches/ops_pct/docs/pmc.pod
==============================================================================
--- branches/ops_pct/docs/pmc.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pmc.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -37,11 +37,19 @@
 generate a struct containing all ATTRs, including those inherited via
 C<extends> declarations.  This struct will be named in the form
 C<Parrot_x_attributes>, where C<x> is the name of your PMC, e.g.
-C<Parrot_FixedIntegerArray_attributes>.  When creating a PMC that has one or
-more ATTRs, the C<Parrot_x_attributes> struct must be allocated and assigned to
-C<PMC_data> in the PMC's C<init()> and C<init_pmc()> VTABLE functions (if used)
-and it must be destroyed in the C<destroy()> VTABLE function.  PMCs with ATTRs
-also need to indicate that they need active destruction by calling
+C<Parrot_FixedIntegerArray_attributes>. 
+
+When creating a PMC that has one or more ATTRs, the C<Parrot_x_attributes>
+struct must be allocated and assigned to C<PMC_data>, and freed on PMC
+destruction. This can be done automatically by using the auto_attrs flag in
+the PMC declaration, or manually by using the manual_attrs flag. You must set
+one of those flags, a warning is emitted otherwise. In future releases
+auto_attrs will be the default.
+
+If manual_attrs is specified or assumed the struct must be manually allocated
+in the PMC's C<init()> and C<init_pmc()> VTABLE functions (if used)
+and it must be destroyed in the C<destroy()> VTABLE function, the PMC must
+also indicate that they need active destruction by calling
 C<PObj_custom_destroy_SET()> or C<PObj_custom_mark_destroy_SETALL()>.
 
 If your PMC only needs to store a single pointer, it can use C<PMC_data> directly.

Modified: branches/ops_pct/docs/pmc/documentation.pod
==============================================================================
--- branches/ops_pct/docs/pmc/documentation.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pmc/documentation.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -36,7 +36,8 @@
  F<docs/pdds/pdd21_namespaces.pod>.
 
  Exporter is not derived from any other PMC, and does not provide any
- standard interface--its interface consists solely of non-vtable methods.
+ standard interface--its interface consists solely of methods, not
+ vtable functions.
 
 The B<DESCRIPTION> section is further broken down as follows:
 

Modified: branches/ops_pct/docs/pmc2c.pod
==============================================================================
--- branches/ops_pct/docs/pmc2c.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/pmc2c.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -133,17 +133,28 @@
 
 =item 3.
 
-A list of vtable method implementations
+A list of attribute declarations:
+
+  ATTR INTVAL id;
+
+The ATTR declaration keyword is followed by the type of the attribute and the
+name of the attribute. Any valid C type is a valid attribute type, but only
+INTVAL, FLOATVAL, STRING *, and PMC * can be handled directly from PIR. Other
+types are generally only used by low-level internal PMCs.
 
 =item 4.
 
+A list of vtable function implementations
+
+=item 5.
+
 The final close C<}>
 
 =back
 
 =head2 Method Body Substitutions
 
-The vtable method bodies can use the following substitutions:
+The vtable function bodies can use the following substitutions:
 
 =over 4
 
@@ -157,11 +168,11 @@
 
 =item C<OtherClass.SELF.method(a,b,c)>
 
-Calls the static vtable method 'method' in C<OtherClass>.
+Calls the static vtable or method 'method' in C<OtherClass>.
 
 =item C<SELF.method(a,b,c)>
 
-Calls the vtable method 'method' using the dynamic type of C<SELF>.
+Calls the vtable or method 'method' using the dynamic type of C<SELF>.
 
 =item C<SELF(a,b,c)>
 
@@ -169,7 +180,7 @@
 
 =item C<STATICSELF.method(a,b,c)>
 
-Calls the vtable method 'method' using the static type of C<SELF> (in
+Calls the vtable or method 'method' using the static type of C<SELF> (in
 other words, calls another method defined in the same file).
 
 =item C<OtherClass.SUPER(a,b,c)>

Modified: branches/ops_pct/docs/porting_intro.pod
==============================================================================
--- branches/ops_pct/docs/porting_intro.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/porting_intro.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -13,39 +13,6 @@
 internals.  For each feature, a brief description of its purpose, hints on
 helping to port it, and pointers to more information are included.
 
-=head1 CGoto or CGP (CGoto Predereferenced)
-
-=head2 What it is
-
-"Computed goto" is a non-standard C feature that allows taking a pointer to an
-statement label (e.g. "LOOP:" ) using the unary && operator.  Certain Parrot
-runcores make use of this feature as an optimization.
-
-=head2 How to help
-
-If cgoto is not supported in Parrot by default on your platform, try to compile
-config/auto/cgoto/test_c.in with your C compiler and determine why it fails. If
-the compiler does not support the computed goto concept at all, this feature
-cannot be made to work (don't worry, there are other runcores).  However, if
-the compiler supports it but the test is inadequate, please submit a bug report
-describing how the implementation of this feature differs from what Parrot
-expects.
-
-Note that gcc supports this feature out of the box, though it sometimes
-struggles with it in low-memory situations.  Failures during compilation of
-core_ops_cg.c are frequently caused by insufficient resources rather than bugs
-in gcc or Parrot.
-
-=head2 References
-
-=over 4
-
-=item * F<config/auto/cgoto/test_c.in>
-
-=item * I<make testC>
-
-=back
-
 =head1 Threads
 
 =head2 What it is

Modified: branches/ops_pct/docs/project/debian_packaging_guide.pod
==============================================================================
--- branches/ops_pct/docs/project/debian_packaging_guide.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/project/debian_packaging_guide.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -82,36 +82,42 @@
 
 =item 6.
 
+Make sure you have C<quilt> installed. Run:
+
+  $ aptitude install quilt
+
+=item 7.
+
 Regenerate the debian/control file. From the
 ~/deb/parrot/parrot-<version>/ directory, run:
 
   $ debian/rules debian-control-stamp
 
-=item 7.
+=item 8.
 
 Install all dependencies:
 
   $ sudo /usr/lib/pbuilder/pbuilder-satisfydepends
 
-=item 8.
+=item 9.
 
 Build the packages. From ~/deb/parrot/parrot_<version>/, run:
 
   $ export DEBSIGN_KEYID="<gpg key id>"
   $ debuild
 
-=item 9.
+=item 10.
 
 Check the package for errors. From ~/deb/parrot, run:
 
   $ lintian -i parrot_<version>.changes
 
-=item 10.
+=item 11.
 
 Commit all changes made to the files in the debian/ directory to the Parrot
 repository.
 
-=item 11.
+=item 12.
 
 Upload the packages to http://alioth.debian.org. (If you don't have admin
 privileges, ask someone who does.) From any of the project pages, click on the
@@ -166,7 +172,7 @@
 =item 2.
 
 Set up a chroot environment for building packages. See
-<http://www.perlfoundation.org/parrot/index.cgi?debian_chroot_setup>.
+<http://trac.parrot.org/parrot/wiki/ChrootSetup>.
 
 =back
 

Modified: branches/ops_pct/docs/project/metacommitter_guide.pod
==============================================================================
--- branches/ops_pct/docs/project/metacommitter_guide.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/project/metacommitter_guide.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -66,11 +66,13 @@
 Congratulate the new member publicly by sending an email to
 parrot-dev at lists.parrot.org, and copying the new committer.
 
-
 The steps for the "languages" repository and Trac instance are the same,
 except the URLs are L<https://trac.parrot.org/languages/...> and the
 committer group is "languages_committers".
 
+Note that commit messages from the new member will be automatically held
+pending list-admin approval.
+
 =head2 To manage the list of Metacommitters
 
 Only existing Metacommitters can perform this activity.

Modified: branches/ops_pct/docs/project/release_manager_guide.pod
==============================================================================
--- branches/ops_pct/docs/project/release_manager_guide.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/project/release_manager_guide.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -66,7 +66,7 @@
 =item a
 
 Increment the version number in the following files:
-F<VERSION>, F<MANIFEST.generated>, F<META.yml>, F<README>.
+F<VERSION>, F<MANIFEST.generated>, F<README>.
 
 Also update the version number, date, and your name in the
 the file: F<docs/parrothist.pod>.
@@ -213,14 +213,15 @@
 
  $ mkdir ~/ftp/releases/devel/a.b.c
 
-If the release is in the stable series (L<Appendix 1 - Upcoming releases>)
-create the new directory in F<~/ftp/releases/stable> instead.
+If the release is in the supported series (L<Appendix 1 - Upcoming releases>)
+create the new directory in F<~/ftp/releases/supported> instead.
 
- $ mkdir ~/ftp/releases/stable/a.b.c
+ $ mkdir ~/ftp/releases/supported/a.b.c
 
-Copy the tarball from your machine into the new directory.
+Copy the different compressed tarballs from your machine into the new directory.
 
- $ scp parrot-a.b.c.tar.gz <USERNAME>@ftp-osl.osuosl.org:~/ftp/releases/devel/a.b.c/.
+ $ scp parrot-a.b.c.tar.gz parrot-a.b.c.tar.bz2 \
+   <USERNAME>@ftp-osl.osuosl.org:~/ftp/releases/devel/a.b.c/.
 
 (Or using C<wget> or whatever tool you prefer.)
 
@@ -282,10 +283,10 @@
 =item e
 
 Under "Administer" -> "Site building" -> "URL Redirects", change the URL for
-"release/current" to the FTP directory for the new release (for example,
-F<ftp://ftp.parrot.org/pub/parrot/releases/devel/0.8.1>). Also update
-the URL for "release/developer" or "release/supported" depending on
-which type of release this is.
+"release/current" to the FTP file for the new release (for example,
+F<ftp://ftp.parrot.org/pub/parrot/releases/devel/0.8.1/parrot-0.8.1.tar.gz>).
+Also update the URL for "release/developer" or "release/supported" depending
+on which type of release this is.
 
 =item f
 
@@ -293,9 +294,9 @@
 the resources/ and html/ directories created in docs/.
 ssh into the parrotvm, and in the
 webroot for docs.parrot.org, expand these into a release directory (e.g.
-1.4.0). in <webroot>/parrot, there are symbolic links for latest, stable,
+1.4.0). in <webroot>/parrot, there are symbolic links for latest, supported,
 and devel. Update the latest symlink to point to your new directory.
-If this is a stable release, also update the stable symlink. Do not delete
+If this is a supported release, also update the supported symlink. Do not delete
 any old copies of the docs.
 
 =back
@@ -393,11 +394,11 @@
 visible at
 L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.calendar.google.com>.
 
- - Mar 16, 2010 - 2.2  - cotto
- - Apr 20, 2010 - 2.3* - gerd
  - May 18, 2010 - 2.4  - whiteknight
  - Jun 15, 2010 - 2.5  - gerd
  - Jul 20, 2010 - 2.6* - coke
+ - Aug 17, 2010 - 2.7  - ??
+ - Sep 21, 2010 - 2.8  - gerd
 
 =cut
 

Modified: branches/ops_pct/docs/running.pod
==============================================================================
--- branches/ops_pct/docs/running.pod	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/docs/running.pod	Wed May  5 08:45:29 2010	(r46302)
@@ -135,13 +135,10 @@
 may be available on your system:
 
   slow, bounds  bounds checking core (default)
-  cgoto         computed goto core
-  cgp           computed goto-predereferenced core
-  fast          fast core (no bounds checking, profiling, or tracing)
   gcdebug       performs a full GC run before every op dispatch (good for
                 debugging GC problems)
-  switch        switch core
   trace         bounds checking core w/ trace info (see 'parrot --help-debug')
+  profiling     see F<docs/dev/profilling.pod>
 
 The C<jit>, C<switch-jit>, and C<cgp-jit> options are currently aliases for the
 C<fast>, C<switch>, and C<cgp> options, respectively.  We do not recommend
@@ -248,28 +245,6 @@
 The trace and profile cores are also based on the "slow" core, doing
 full bounds checking, and also printing runtime information to stderr.
 
-The switched core eschews these tiny op functions in favor of cases in a large
-switch statement:
-
-    switch_runcore( op ):
-        while ( op ):
-            switch *op:
-                case NOP:
-                    ...
-                case STORE:
-                    ...
-                ...
-
-Depending on the C compiler implementation, this may be faster than function
-calling.  On older systems, it may fail to compile altogether.
-
-The computed-goto ("cgoto") runcore avoids the overhead of function
-calls by jumping directly to the address where each opcode's function
-starts.  The computed-goto-prederef ("CGP") core takes this one step
-further by replacing opcode numbers in the bytecode with those opfunc
-addresses.  See "Predereferencing" in F<docs/glossary.pod> for a
-fuller explanation.
-
 =head1 Operation table
 
  Command Line          Action         Output

Modified: branches/ops_pct/editor/pir-mode.el
==============================================================================
--- branches/ops_pct/editor/pir-mode.el	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/editor/pir-mode.el	Wed May  5 08:45:29 2010	(r46302)
@@ -153,7 +153,7 @@
     "ManagedStruct" "MultiSub" "NCI" "NameSpace" "Null"
     "OS" "Object" "OrderedHash" "PMCProxy" "ParrotClass"
     "ParrotIO" "ParrotInterpreter" "ParrotLibrary" "ParrotObject"
-    "ParrotRunningThread" "ParrotThread" "Pointer"
+    "ParrotThread" "Pointer"
     "ResizableBooleanArray" "ResizableFloatArray" "ResizableIntegerArray"
     "ResizablePMCArray" "ResizableStringArray" "RetContinuation"
     "Role" "Scalar" "String" "Sub" "Super"

Modified: branches/ops_pct/examples/benchmarks/oo1.pir
==============================================================================
--- branches/ops_pct/examples/benchmarks/oo1.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/benchmarks/oo1.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -11,8 +11,6 @@
 # python oo1.py                 1.2 (first time)
 # python oo1.py                 0.51
 
-# parrot -R cgp oo1.pasm            -g           -O3
-
 # original list fixed           4.9     (leaks mem ~ 110 M used)
 # don't clone vtable            4.4
 # Dan's vtable cache            4.3           3.8
@@ -31,9 +29,6 @@
 # Dan's new object layout                     1.00
 
 
-# parrot -R cgp oo1-prop.pasm
-#   invokecc                                  0.75
-#   RetCont out of loop                       0.57
 # parrot -R jit oo1-prop.pasm                     0.54
 
 .namespace [ "Foo" ]

Modified: branches/ops_pct/examples/benchmarks/oo2.pir
==============================================================================
--- branches/ops_pct/examples/benchmarks/oo2.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/benchmarks/oo2.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -11,17 +11,11 @@
 # python oo2.py                               2.9 (first time)
 # python oo2.py                               2.4
 
-# parrot -R cgp oo2.pasm            -g           -O3
-#   with reuse regsave mem                    6.15
-# anchor P1                                   6.7
-# Dan's new object layout                     5.1
-
 # parrot -R jit oo2.pasm            -g           -O3
 #   with reuse regsave mem                    6.1
 # anchor P1                                   6.5
 # Dan's new object layout                     4.9
 
-# parrot -R cgp oo2-prop.pasm                     2.8
 # parrot -R jit oo2-prop.pasm                     2.6
 
 .namespace [ "Foo" ]

Copied: branches/ops_pct/examples/benchmarks/stress_strings.pir (from r46301, trunk/examples/benchmarks/stress_strings.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/examples/benchmarks/stress_strings.pir	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/examples/benchmarks/stress_strings.pir)
@@ -0,0 +1,43 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+examples/benchmarks/stress_strings.pir - GC strings stress-testing
+
+=head1 SYNOPSIS
+
+    % time ./parrot examples/benchmarks/stress_strings.pir
+
+=head1 DESCRIPTION
+
+Create a lots of strings. Some of them are long-lived, most of them are short lived.
+
+Main purpose - test compact_pool performance.
+
+=cut
+
+.sub 'main' :main
+    .local pmc rsa # array of long lived strings.
+
+    .local int i
+
+    rsa = new ['ResizableStringArray']
+    i = 0
+  loop:
+    $S0 = i         # allocate new string
+    $I0 = i % 10    # every 10th string is longlived
+    if $I0 goto inc_i
+    push rsa, $S0
+  inc_i:
+    inc i
+    if i < 10000000 goto loop
+
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/examples/c/test_main.c
==============================================================================
--- branches/ops_pct/examples/c/test_main.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/c/test_main.c	Wed May  5 08:45:29 2010	(r46302)
@@ -209,13 +209,6 @@
 static void
 usage(void)
 {
-#ifdef HAVE_COMPUTED_GOTO
-    const char* cgoto_info = "Deactivate computed goto";
-#else
-    const char* cgoto_info =
-        "Deactivate computed goto (not available on this platform)";
-#endif
-
     fprintf(stderr,
 "Usage: parrot [switches] [--] programfile [arguments]\n\
   -b  --bounds-checks           Activate bounds checks\n\
@@ -223,9 +216,6 @@
   -h  --help                    Display this message\n\
   -j  --jit                     Activate Just-In-Time compiler\n\
   -p  --profile                 Activate profiling\n\
-  -P  --predereferenced_core    Activate predereferencing\n\
-  -S  --switched_core           Activate switched core\n\
-  -g  --no-computed-goto        %s\n\
   -t  --trace                   Activate tracing\n\
   -v  --version                 Display version information\n\
   -.  --wait                    Wait for a keypress (gives Windows users\n\
@@ -233,8 +223,7 @@
       --gc-debug\n\
         Enable garbage collection debugging mode. This may also be enabled\n\
         by setting the environment variable $PARROT_GC_DEBUG to 1.\n\
-\n",
-            cgoto_info);
+\n");
 
     Parrot_exit(interp, 0);
 }

Modified: branches/ops_pct/examples/config/file/configcompiler
==============================================================================
--- branches/ops_pct/examples/config/file/configcompiler	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/config/file/configcompiler	Wed May  5 08:45:29 2010	(r46302)
@@ -50,7 +50,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/examples/config/file/configwithfatalstep
==============================================================================
--- branches/ops_pct/examples/config/file/configwithfatalstep	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/config/file/configwithfatalstep	Wed May  5 08:45:29 2010	(r46302)
@@ -42,7 +42,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/examples/embed/Makefile
==============================================================================
--- branches/ops_pct/examples/embed/Makefile	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/embed/Makefile	Wed May  5 08:45:29 2010	(r46302)
@@ -12,6 +12,7 @@
 
 CC = $(shell parrot_config cc)
 CCFLAGS = $(shell parrot_config ccflags)
+CCWARN = $(shell parrot_config ccwarn)
 LD = $(shell parrot_config ld)
 LD_OUT = $(shell parrot_config ld_out)
 LINKFLAGS = $(shell parrot_config inst_libparrot_linkflags) $(shell parrot_config rpath_lib)
@@ -28,7 +29,7 @@
 #-----------------------------------------------------------------------
 
 cotorra$(O): cotorra.c
-	$(CC) $(CCFLAGS) -c -I $(INCLUDEDIR) cotorra.c
+	$(CC) $(CCFLAGS) $(CCWARN) -c -I $(INCLUDEDIR) cotorra.c
 
 cotorra$(EXE): cotorra$(O)
 	$(LD) $(LD_OUT)cotorra$(EXE) cotorra$(O) $(CONFIG)$(O) $(LINKFLAGS)

Modified: branches/ops_pct/examples/embed/cotorra.c
==============================================================================
--- branches/ops_pct/examples/embed/cotorra.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/embed/cotorra.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2009, Parrot Foundation.
+Copyright (C) 2009-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -36,7 +36,7 @@
 Parrot_Run_core_t getruncore(const char *name);
 
 Parrot_String create_string(Parrot_Interp interp, const char *name);
-int cotorra_main(Parrot_Interp interp, int argc, char **argv);
+int cotorra_main(Parrot_Interp interp, int argc, const char **argv);
 
 /**********************************************************************/
 
@@ -108,10 +108,7 @@
 {
     static const struct runcoreinfo cores [] = {
         { PARROT_SLOW_CORE,     "slow" },
-        { PARROT_FAST_CORE,     "fast" },
-        { PARROT_CGOTO_CORE,    "cgoto" },
         { PARROT_GC_DEBUG_CORE, "gcdebug" },
-        { PARROT_SWITCH_CORE,   "switch" }
     };
     static const unsigned int n = sizeof (cores)/sizeof (struct runcoreinfo);
     unsigned int i;
@@ -147,7 +144,7 @@
 
 /*
 
-=item C<int cotorra_main(Parrot_Interp interp, int argc, char **argv)>
+=item C<int cotorra_main(Parrot_Interp interp, int argc, const char **argv)>
 
 Auxiliary function to minimize the size of main.
 
@@ -155,12 +152,13 @@
 
 */
 
-int cotorra_main(Parrot_Interp interp, int argc, char **argv)
+int cotorra_main(Parrot_Interp interp, int argc, const char **argv)
 {
-    char *source;
+    const char *source;
     Parrot_PackFile pf;
     const char *stname = NULL;
     const char *exec = NULL;
+    const char *module = NULL;
     int i;
 
     /* Incompatible options are not checked yet */
@@ -171,7 +169,7 @@
                 fail("Option needs argument");
             Parrot_set_trace(interp, getuintval(argv[i]));
         }
-        if (strcmp(argv[i], "--warnings") == 0) {
+        else if (strcmp(argv[i], "--warnings") == 0) {
             ++i;
             if (i >= argc)
                 fail("Option needs argument");
@@ -189,6 +187,12 @@
                 fail("Option needs argument");
             stname = argv[i];
         }
+        else if (strcmp(argv[i], "--load") == 0) {
+            ++i;
+            if (i >= argc)
+                fail("Option needs argument");
+            module = argv[i];
+        }
         else if (strcmp(argv[i], "--runcore") == 0) {
             ++i;
             if (i >= argc)
@@ -198,6 +202,8 @@
         else
             break;
     }
+    if (module)
+        Parrot_load_bytecode(interp, create_string(interp, module));
 
     if (exec) {
         Parrot_String compiler = create_string(interp, "PIR");
@@ -207,16 +213,16 @@
         return 0;
     }
 
-    if (i >= argc)
+    if (i >= argc && ! (module && stname))
         fail("No file to load");
     source = argv[i];
-
-    pf = Parrot_pbc_read(interp, source, 0);
-    if (! pf)
-        fail("Cannot load file");
-
-    Parrot_pbc_load(interp, pf);
-    Parrot_pbc_fixup_loaded(interp);
+    if (source && ! stname) {
+        pf = Parrot_pbc_read(interp, source, 0);
+        if (! pf)
+            fail("Cannot load file");
+        Parrot_pbc_load(interp, pf);
+        Parrot_pbc_fixup_loaded(interp);
+    }
 
     if (stname) {
         Parrot_PMC rootns = Parrot_get_root_namespace(interp);
@@ -224,7 +230,20 @@
         Parrot_PMC parrotns = Parrot_PMC_get_pmc_strkey(interp, rootns, parrotname);
         Parrot_String name = create_string(interp, stname);
         Parrot_PMC start = Parrot_PMC_get_pmc_strkey(interp, parrotns, name);
-        Parrot_ext_call(interp, start, "->");
+        if (Parrot_pmc_is_null(interp, start))
+            fail("start sub not found");
+        if (i < argc) {
+            int pos;
+            Parrot_PMC arg = Parrot_PMC_new(interp,
+                    Parrot_PMC_typenum(interp, "FixedStringArray"));
+            Parrot_PMC_set_intval(interp, arg, argc - i);
+            for (pos = 0; i < argc; ++i, ++pos) {
+                Parrot_PMC_set_string_intkey(interp, arg, pos, create_string(interp, argv[i]));
+            }
+            Parrot_ext_call(interp, start, "P->", arg);
+        }
+        else
+            Parrot_ext_call(interp, start, "->");
     }
     else {
         Parrot_runcode(interp, argc - i, argv + i);
@@ -235,7 +254,7 @@
 
 /*
 
-=item C<int main(int argc, char **argv)>
+=item C<int main(int argc, const char **argv)>
 
 Main function. Create the parrot interpreter and call cotorra_main.
 
@@ -243,7 +262,7 @@
 
 */
 
-int main(int argc, char **argv)
+int main(int argc, const char **argv)
 {
     Parrot_Interp interp;
     int r;

Modified: branches/ops_pct/examples/japh/japh3.pasm
==============================================================================
--- branches/ops_pct/examples/japh/japh3.pasm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/japh/japh3.pasm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
+# Copyright (C) 2004-2010, Parrot Foundation.
 # $Id$
 
 # the substr JaPH
@@ -6,10 +6,9 @@
     set S1, "Parrot "
     set S2, "another "
     set S3, "Just "
-    set S31, S0
-    substr S3, 5,  1, S2
-    substr S3, 13, 1, S1
-    substr S3, 20, 1, S0
+    replace S3, S3, 5,  1, S2
+    replace S3, S3, 13, 1, S1
+    replace S3, S3, 20, 1, S0
     print S3
     end
 

Modified: branches/ops_pct/examples/json/postalcodes.pir
==============================================================================
--- branches/ops_pct/examples/json/postalcodes.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/json/postalcodes.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #!../../parrot
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -64,11 +64,11 @@
     close sock
 
     $I1 = find_charset 'unicode'
-    trans_charset json_result, $I1
+    json_result = trans_charset json_result, $I1
 
     # Strip off http headers.
     $I0 = index json_result, "\r\n\r\n"
-    substr json_result, 0, $I0, ""
+    json_result = replace json_result, 0, $I0, ""
 
     load_language 'data_json'
     $P1 = compreg 'data_json'

Modified: branches/ops_pct/examples/languages/abc/setup.pir
==============================================================================
--- branches/ops_pct/examples/languages/abc/setup.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/languages/abc/setup.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -40,7 +40,7 @@
     $P1 = new 'Hash'
     $P1['src/gen_grammar.pir'] = 'src/parser/grammar.nqp'
     $P1['src/gen_actions.pir'] = 'src/parser/actions.nqp'
-    $P0['pir_nqp-rx'] = $P1
+    $P0['pir_nqprx'] = $P1
 
     $P2 = new 'Hash'
     $P3 = split "\n", <<'SOURCES'
@@ -58,6 +58,9 @@
     $P0['exe_pbc'] = $P4
     $P0['installable_pbc'] = $P4
 
+    # test
+    $P0['test_exec'] = 'perl'
+
     # dist
     $P4 = glob('t/abc_*')
     $P0['manifest_includes'] = $P4

Modified: branches/ops_pct/examples/languages/squaak/setup.pir
==============================================================================
--- branches/ops_pct/examples/languages/squaak/setup.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/languages/squaak/setup.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -43,7 +43,7 @@
 
     $P2 = new 'Hash'
     $P2['src/gen_actions.pir'] = 'src/parser/actions.pm'
-    $P0['pir_nqp'] = $P2
+    $P0['pir_nqprx'] = $P2
 
     $P3 = new 'Hash'
     $P4 = split "\n", <<'SOURCES'

Modified: branches/ops_pct/examples/languages/squaak/src/parser/actions.pm
==============================================================================
--- branches/ops_pct/examples/languages/squaak/src/parser/actions.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/languages/squaak/src/parser/actions.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -36,35 +36,35 @@
         my $past := @?BLOCK.shift();
 
         for $<stat_or_def> {
-            $past.push($($_));
+            $past.push($_.ast);
         }
         make $past;
     }
 }
 
 method stat_or_def($/, $key) {
-    make $( $/{$key} );
+    make $/{$key}.ast;
 }
 
 method statement($/, $key) {
-    make $( $/{$key} );
+    make $/{$key}.ast;
 }
 
 method if_statement($/) {
-    my $cond := $( $<expression> );
-    my $then := $( $<block> );
+    my $cond := $<expression>.ast;
+    my $then := $<block>.ast;
     my $past := PAST::Op.new( $cond, $then, :pasttype('if'), :node($/) );
 
     ## if there's an else clause, add it to the PAST node.
     if $<else> {
-        $past.push( $( $<else>[0] ) );
+        $past.push( $<else>[0].ast );
     }
     make $past;
 }
 
 method while_statement($/) {
-    my $cond := $( $<expression> );
-    my $body := $( $<block> );
+    my $cond := $<expression>.ast;
+    my $body := $<block>.ast;
     make PAST::Op.new( $cond, $body, :pasttype('while'), :node($/) );
 }
 
@@ -83,7 +83,7 @@
     our $?BLOCK;
     our @?BLOCK;
 
-    my $init := $( $<for_init> );
+    my $init := $<for_init>.ast;
 
     ## cache the name of the loop variable
     my $itername := $init.name();
@@ -100,7 +100,7 @@
     my $body := @?BLOCK.shift();
     $?BLOCK  := @?BLOCK[0];
     for $<statement> {
-        $body.push($($_));
+        $body.push( $_.ast );
     }
 
     ## if a step was specified, use that; otherwise, use the default of +1.
@@ -108,7 +108,7 @@
     ##
     my $step;
     if $<step> {
-        my $stepsize := $( $<step>[0] );
+        my $stepsize := $<step>[0].ast;
         $step := PAST::Op.new( $iter, $stepsize, :pirop('add'), :node($/) );
     }
     else { ## default is increment by 1
@@ -117,7 +117,7 @@
     $body.push($step);
 
     ## while loop iterator <= end-expression
-    my $cond := PAST::Op.new( $iter, $( $<expression> ), :name('infix:<=') );
+    my $cond := PAST::Op.new( $iter, $<expression>.ast, :name('infix:<=') );
     my $loop := PAST::Op.new( $cond, $body, :pasttype('while'), :node($/) );
 
     make PAST::Stmts.new( $init, $loop, :node($/) );
@@ -132,12 +132,12 @@
     $?BLOCK := PAST::Block.new( :blocktype('immediate'), :node($/) );
     @?BLOCK.unshift($?BLOCK);
 
-    my $iter := $( $<identifier> );
+    my $iter := $<identifier>.ast;
     ## set a flag that this identifier is being declared
     $iter.isdecl(1);
     $iter.scope('lexical');
     ## the identifier is initialized with this expression
-    $iter.viviself( $( $<expression> ) );
+    $iter.viviself( $<expression>.ast );
 
     ## enter the loop variable as a local into the symbol table.
     $?BLOCK.symbol($iter.name(), :scope('lexical'));
@@ -147,16 +147,16 @@
 
 method try_statement($/) {
     ## get the try block
-    my $try := $( $<try> );
+    my $try := $<try>.ast;
 
     ## create a new PAST::Stmts node for the catch block;
     ## note that no PAST::Block is created, as this currently
     ## has problems with the exception object. For now this will do.
     my $catch := PAST::Stmts.new( :node($/) );
-    $catch.push( $( $<catch> ) );
+    $catch.push( $<catch>.ast );
 
     ## get the exception identifier;
-    my $exc := $( $<exception> );
+    my $exc := $<exception>.ast;
     $exc.isdecl(1);
     $exc.scope('lexical');
     $exc.viviself( PAST::Val.new( :value(0) ) );
@@ -176,14 +176,14 @@
 method exception($/) {
     our $?BLOCK;
 
-    my $exc := $( $<identifier> );
+    my $exc := $<identifier>.ast;
     ## the exception identifier is local to the exception handler
     $?BLOCK.symbol($exc.name(), :scope('lexical'));
     make $exc;
 }
 
 method throw_statement($/) {
-    make PAST::Op.new( $( $<expression> ), :pirop('throw'), :node($/) );
+    make PAST::Op.new( $<expression>.ast, :pirop('throw'), :node($/) );
 }
 
 method block($/, $key) {
@@ -201,24 +201,24 @@
         $?BLOCK  := @?BLOCK[0];
 
         for $<statement> {
-            $past.push($($_));
+            $past.push( $_.ast );
         }
         make $past
     }
 }
 
 method return_statement($/) {
-    my $expr := $( $<expression> );
+    my $expr := $<expression>.ast;
     make PAST::Op.new( $expr, :pasttype('return'), :node($/) );
 }
 
 method do_block($/) {
-    make $( $<block> );
+    make $<block>.ast;
 }
 
 method assignment($/) {
-    my $rhs := $( $<expression> );
-    my $lhs := $( $<primary> );
+    my $rhs := $<expression>.ast;
+    my $lhs := $<primary>.ast;
     $lhs.lvalue(1);
     make PAST::Op.new( $lhs, $rhs, :pasttype('bind'), :node($/) );
 }
@@ -228,13 +228,13 @@
     our $?BLOCK;
 
     ## note that $<parameters> creates a new PAST::Block.
-    my $past := $( $<parameters> );
-    my $name := $( $<identifier> );
+    my $past := $<parameters>.ast;
+    my $name := $<identifier>.ast;
 
     ## set the function name
     $past.name( $name.name() );
     for $<statement> {
-        $past.push($($_));
+        $past.push( $_.ast );
     }
 
     ## remove the block from the scope stack
@@ -249,13 +249,13 @@
 method variable_declaration($/) {
     our $?BLOCK;
 
-    my $past := $( $<identifier> );
+    my $past := $<identifier>.ast;
     $past.isdecl(1);
     $past.scope('lexical');
 
     ## if there's an initialization value, use it to viviself the variable.
     if $<expression> {
-        $past.viviself( $( $<expression>[0] ) );
+        $past.viviself( $<expression>[0].ast );
     }
     else { ## otherwise initialize to undef.
         $past.viviself( 'Undef' );
@@ -281,7 +281,7 @@
 
     my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
     for $<identifier> {
-        my $param := $( $_ );
+        my $param := $_.ast;
         $param.scope('parameter');
         $past.push($param);
 
@@ -297,8 +297,8 @@
 }
 
 method sub_call($/) {
-    my $invocant := $( $<primary> );
-    my $past     := $( $<arguments> );
+    my $invocant := $<primary>.ast;
+    my $past     := $<arguments>.ast;
     ## set the invocant as the first child of the PAST::Op(:pasttype('call')) node
     $past.unshift( $invocant );
     make $past;
@@ -307,15 +307,15 @@
 method arguments($/) {
     my $past := PAST::Op.new( :pasttype('call'), :node($/) );
     for $<expression> {
-        $past.push($($_));
+        $past.push( $_.ast );
     }
     make $past;
 }
 
 method primary($/) {
-    my $past := $( $<identifier> );
+    my $past := $<identifier>.ast ;
     for $<postfix_expression> {
-        my $expr := $( $_ );
+        my $expr := $_.ast;
         ## set the current $past as the first child of $expr;
         ## $expr is either a key or an index; both are "keyed"
         ## variable access, where the first child is assumed
@@ -327,11 +327,11 @@
 }
 
 method postfix_expression($/, $key) {
-    make $( $/{$key} );
+    make $/{$key}.ast;
 }
 
 method key($/) {
-    my $key := $( $<expression> );
+    my $key := $<expression>.ast;
 
     make PAST::Var.new( $key, :scope('keyed'),
                               :vivibase('Hash'),
@@ -341,7 +341,7 @@
 }
 
 method member($/) {
-    my $member := $( $<identifier> );
+    my $member := $<identifier>.ast;
     ## x.y is syntactic sugar for x{"y"}, so stringify the identifier:
     my $key    := PAST::Val.new( :returns('String'), :value($member.name()), :node($/) );
 
@@ -353,7 +353,7 @@
 }
 
 method index($/) {
-    my $index := $( $<expression> );
+    my $index := $<expression>.ast;
 
     make PAST::Var.new( $index, :scope('keyed'),
                                 :vivibase('ResizablePMCArray'),
@@ -362,8 +362,8 @@
 }
 
 method named_field($/) {
-    my $past := $( $<expression> );
-    my $name := $( $<string_constant> );
+    my $past := $<expression>.ast;
+    my $name := $<string_constant>.ast;
     ## the passed expression is in fact a named argument,
     ## use the named() accessor to set that name.
     $past.named($name);
@@ -377,7 +377,7 @@
     ## (which is not a valid Squaak name)
     my $past := PAST::Op.new( :name('!array'), :pasttype('call'), :node($/) );
     for $<expression> {
-        $past.push($($_));
+        $past.push( $_.ast );
     }
     make $past;
 }
@@ -388,13 +388,13 @@
     ## !hash (which is not a valid Squaak name)
     my $past := PAST::Op.new( :name('!hash'), :pasttype('call'), :node($/) );
     for $<named_field> {
-        $past.push($($_));
+        $past.push( $_.ast );
     }
     make $past;
 }
 
 method term($/, $key) {
-    make $( $/{$key} );
+    make $/{$key}.ast;
 }
 
 method identifier($/) {
@@ -413,13 +413,13 @@
 }
 
 method string_constant($/) {
-    make PAST::Val.new( :value( $($<string_literal>) ), :returns('String'), :node($/) );
+    make PAST::Val.new( :value( $<string_literal>.ast ), :returns('String'), :node($/) );
 }
 
 ## Handle the operator precedence table.
 method expression($/, $key) {
     if ($key eq 'end') {
-        make $($<expr>);
+        make $<expr>.ast;
     }
     else {
         my $past := PAST::Op.new( :name($<type>),
@@ -429,7 +429,7 @@
                                   :node($/)
                                 );
         for @($/) {
-            $past.push( $($_) );
+            $past.push( $_.ast );
         }
         make $past;
     }

Modified: branches/ops_pct/examples/library/ncurses_life.pir
==============================================================================
--- branches/ops_pct/examples/library/ncurses_life.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/library/ncurses_life.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -478,7 +478,7 @@
     if count > 3 goto space
 
 star:
-    substr new_world, pos, 1, "*"
+    new_world = replace new_world, pos, 1, "*"
 
 space:    # is space already
     inc pos
@@ -608,10 +608,10 @@
     unless len goto out
     $S0 = substr line, 0,1
     eq $S0, "#", check_format
-    chopn line, 1        # \n
+    line = chopn line, 1        # \n
     dec len
     if format != PICTURE goto not_pic
-    substr world, pos, len, line
+    world = replace world, pos, len, line
     pos = pos + size
     goto loop
 
@@ -777,7 +777,7 @@
 
     # TODO abs/rel and bounds checking
     #world[c] = "*"
-    substr world, c, 1, "*"
+    world = replace world, c, 1, "*"
     if s < len goto lp2
 done:
 nok:

Modified: branches/ops_pct/examples/nci/Xlib.pir
==============================================================================
--- branches/ops_pct/examples/nci/Xlib.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/nci/Xlib.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -67,10 +67,12 @@
     if xlib goto store
 check2:
     xlib = loadlib 'libX11.so'
+    $I0 = defined xlib
     unless $I0 goto check3
     if xlib goto store
 check3:
     xlib = loadlib 'libX11.so.6'
+    $I0 = defined xlib
     unless $I0 goto check4
     if xlib goto store
 check4:

Modified: branches/ops_pct/examples/nci/xlibtest.pir
==============================================================================
--- branches/ops_pct/examples/nci/xlibtest.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/nci/xlibtest.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -285,12 +285,13 @@
     jsonfile = handle.'readall'()
     close handle
 
-    load_bytecode 'compilers/json/JSON.pbc'
-    .local pmc json
-    json = compreg 'JSON'
+    load_language 'data_json'
+    .local pmc json, jsonobject, jsondata
+    json = compreg 'data_json'
     .local pmc jsonobject
-    jsonobject = json(jsonfile)
-    listline = jsonobject [JKEY_LINES]
+    jsonobject = json.'compile'(jsonfile)
+    jsondata = jsonobject()
+    listline = jsondata [JKEY_LINES]
     goto finish
 
 failed:

Modified: branches/ops_pct/examples/pge/demo.pir
==============================================================================
--- branches/ops_pct/examples/pge/demo.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pge/demo.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2005-2009, Parrot Foundation.
+# Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
 .include "errors.pasm"
@@ -43,7 +43,7 @@
     $I0 = index x, "\n"
   get_cmd:
     $S0 = substr x, 0, $I0
-    chopn x, 1
+    x = chopn x, 1
     if $S0 == "next" goto match_next
     if $S0 == "regex" goto make_p6rule
     if $S0 == "glob" goto make_glob

Modified: branches/ops_pct/examples/pir/befunge/debug.pir
==============================================================================
--- branches/ops_pct/examples/pir/befunge/debug.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/befunge/debug.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -181,7 +181,7 @@
     print "bef> "
     $P0 = getstdin
     $S0 = readline $P0
-    chopn $S0, 1
+    $S0 = chopn $S0, 1
     $I0 = length $S0
 
     if $I0 == 0 goto DEBUG__INTERACT__NEXT
@@ -205,7 +205,7 @@
     goto DEBUG__INTERACT__LOOP
 
   DEBUG__INTERACT__BREAK:
-    substr $S0, 0, 6, ""
+    $S0 = replace $S0, 0, 6, ""
     $P0 = get_global "breakpoints"
     $P0[$S0] = 1
     set_global "breakpoints", $P0
@@ -218,7 +218,7 @@
     goto DEBUG__INTERACT__END
 
   DEBUG__INTERACT__DELETE:
-    substr $S0, 0, 7, ""
+    $S0 = replace $S0, 0, 7, ""
     $P0 = get_global "breakpoints"
     delete $P0[$S0]
     set_global "breakpoints", $P0

Modified: branches/ops_pct/examples/pir/befunge/io.pir
==============================================================================
--- branches/ops_pct/examples/pir/befunge/io.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/befunge/io.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -41,10 +41,10 @@
 
     $P1 = getstdin
     $S0 = readline $P1
-    chopn $S0, 1
+    $S0 = chopn $S0, 1
 
   _IO__INPUT_CHAR__SUBSTR:
-    $S1 = substr $S0, 0, 1, ""
+    $S1 = replace $S0, 0, 1, ""
     $P0 = $S0
     set_global "user_input", $P0
 
@@ -73,7 +73,7 @@
 
     $P1 = getstdin
     $S0 = readline $P1
-    chopn $S0, 1
+    $S0 = chopn $S0, 1
     len = length $S0
 
   _IO__INPUT_INT__PARSE_INPUT:
@@ -90,7 +90,7 @@
     if i < len goto _IO__INPUT_INT__NEXT_CHAR
 
   _IO__INPUT_INT__NAN:
-    substr $S0, 0, i, ""
+    $S0 = replace $S0, 0, i, ""
     $P0 = $S0
     set_global "user_input", $P0
 

Modified: branches/ops_pct/examples/pir/befunge/load.pir
==============================================================================
--- branches/ops_pct/examples/pir/befunge/load.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/befunge/load.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -34,7 +34,7 @@
 
     newline = index line, "\n"
     if newline < 0 goto LOAD__SKIP_CHOP
-    chopn line, 1
+    line = chopn line, 1
     LOAD__SKIP_CHOP:
     line     = _load__fit_str_to_80(line)
     playline = _load__str_to_array(line)
@@ -86,7 +86,7 @@
     concat str, $S0
 
     # truncate to 80 chars
-    substr str, 80, -1, ''
+    str = replace str, 80, -1, ''
 
     .return(str)
 .end

Modified: branches/ops_pct/examples/pir/befunge/setup.pir
==============================================================================
--- branches/ops_pct/examples/pir/befunge/setup.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/befunge/setup.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -55,6 +55,9 @@
     $P0['exe_pbc'] = $P3
     $P0['installable_pbc'] = $P3
 
+    # test
+    $P0['test_exec'] = 'perl'
+
     # dist
     $P4 = glob('*.bef')
     $P0['manifest_includes'] = $P4

Modified: branches/ops_pct/examples/pir/io.pir
==============================================================================
--- branches/ops_pct/examples/pir/io.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/io.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -37,6 +37,7 @@
     print $S0
 
     # now clean up after ourselves.
+    $P0 = loadlib 'os'
     $P1 = new "OS"
     $P1."rm"(test_fn)
 

Modified: branches/ops_pct/examples/pir/pirric.pir
==============================================================================
--- branches/ops_pct/examples/pir/pirric.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/pirric.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -102,57 +102,59 @@
     addparent cl, $P0
     set_global 'Literal', cl
 
-    .local pmc keywords
+    .local pmc keywords, methods
+    # Get methods hash to verify
+    methods = inspect runnerclass, 'methods'
     keywords = new 'Hash'
-    setkeyword(keywords, 'CLEAR')
-    setkeyword(keywords, 'CONT')
-    setkeyword(keywords, 'END')
-    setkeyword(keywords, 'EXIT')
-    setkeyword(keywords, 'ERROR')
-    setkeyword(keywords, 'FOR')
-    setkeyword(keywords, 'GOSUB')
-    setkeyword(keywords, 'GOTO')
-    setkeyword(keywords, 'IF')
-    setkeyword(keywords, 'LIST')
-    setkeyword(keywords, 'LOAD')
-    setkeyword(keywords, 'NEXT')
-    setkeyword(keywords, 'NEW')
-    setkeyword(keywords, 'ON')
-    setkeyword(keywords, 'PRINT')
-    setkeyword(keywords, 'REM')
-    setkeyword(keywords, 'RETURN')
-    setkeyword(keywords, 'RUN')
-    setkeyword(keywords, 'SAVE')
-    setkeyword(keywords, 'STOP')
-    setkeyword(keywords, 'TROFF')
-    setkeyword(keywords, 'TRON')
+    setkeyword(methods, keywords, 'CLEAR')
+    setkeyword(methods, keywords, 'CONT')
+    setkeyword(methods, keywords, 'END')
+    setkeyword(methods, keywords, 'EXIT')
+    setkeyword(methods, keywords, 'ERROR')
+    setkeyword(methods, keywords, 'FOR')
+    setkeyword(methods, keywords, 'GOSUB')
+    setkeyword(methods, keywords, 'GOTO')
+    setkeyword(methods, keywords, 'IF')
+    setkeyword(methods, keywords, 'LIST')
+    setkeyword(methods, keywords, 'LOAD')
+    setkeyword(methods, keywords, 'NEXT')
+    setkeyword(methods, keywords, 'NEW')
+    setkeyword(methods, keywords, 'ON')
+    setkeyword(methods, keywords, 'PRINT')
+    setkeyword(methods, keywords, 'REM')
+    setkeyword(methods, keywords, 'RETURN')
+    setkeyword(methods, keywords, 'RUN')
+    setkeyword(methods, keywords, 'SAVE')
+    setkeyword(methods, keywords, 'STOP')
+    setkeyword(methods, keywords, 'TROFF')
+    setkeyword(methods, keywords, 'TRON')
     set_global 'keywords', keywords
 
     .local pmc predefs
     predefs = new 'Hash'
-    setpredef(predefs, 'NEW')
-    setpredef(predefs, 'ISA')
-    setpredef(predefs, 'GETPARROTINTERP')
-    setpredef(predefs, 'CHR$', 'CHR_S')
-    setpredef(predefs, 'ASC')
-    setpredef(predefs, 'LEN')
-    setpredef(predefs, 'LEFT$', 'LEFT_S')
-    setpredef(predefs, 'RIGHT$', 'RIGHT_S')
-    setpredef(predefs, 'MID$', 'MID_S')
-    setpredef(predefs, 'COMPLEX')
-    setpredef(predefs, 'COMPREG')
-    setpredef(predefs, 'EXP')
-    setpredef(predefs, 'LN')
-    setpredef(predefs, 'SIN')
-    setpredef(predefs, 'SINH')
-    setpredef(predefs, 'COS')
-    setpredef(predefs, 'COSH')
-    setpredef(predefs, 'TAN')
-    setpredef(predefs, 'TANH')
-    setpredef(predefs, 'ASIN')
-    setpredef(predefs, 'ACOS')
-    setpredef(predefs, 'ATAN')
-    setpredef(predefs, 'SQR')
+    setpredef(methods, predefs, 'NEW')
+    setpredef(methods, predefs, 'ISA')
+    setpredef(methods, predefs, 'GETPARROTINTERP')
+    setpredef(methods, predefs, 'CHR$', 'CHR_S')
+    setpredef(methods, predefs, 'ASC')
+    setpredef(methods, predefs, 'LEN')
+    setpredef(methods, predefs, 'LEFT$', 'LEFT_S')
+    setpredef(methods, predefs, 'RIGHT$', 'RIGHT_S')
+    setpredef(methods, predefs, 'MID$', 'MID_S')
+    setpredef(methods, predefs, 'COMPLEX')
+    setpredef(methods, predefs, 'COMPREG')
+    setpredef(methods, predefs, 'EXP')
+    setpredef(methods, predefs, 'LN')
+    setpredef(methods, predefs, 'SIN')
+    setpredef(methods, predefs, 'SINH')
+    setpredef(methods, predefs, 'COS')
+    setpredef(methods, predefs, 'COSH')
+    setpredef(methods, predefs, 'TAN')
+    setpredef(methods, predefs, 'TANH')
+    setpredef(methods, predefs, 'ASIN')
+    setpredef(methods, predefs, 'ACOS')
+    setpredef(methods, predefs, 'ATAN')
+    setpredef(methods, predefs, 'SQR')
     set_global 'predefs', predefs
 
 # Create classes for control flow exceptions
@@ -252,6 +254,7 @@
 
 #-----------------------------------------------------------------------
 .sub setkeyword
+    .param pmc methods
     .param pmc keywords
     .param string key
 
@@ -259,10 +262,11 @@
     funcname = concat 'func_', key
 
     .local pmc func
-    func = get_global ['Runner'], funcname
+    func = methods[funcname]
     $I0 = defined func
     if $I0 goto good
-    say 'No func!'
+    print funcname
+    die ': No func!'
     exit 1
 good:
     keywords [key] = func
@@ -270,6 +274,7 @@
 
 #-----------------------------------------------------------------------
 .sub setpredef
+    .param pmc methods
     .param pmc predefs
     .param string key
     .param string name :optional
@@ -282,7 +287,7 @@
     funcname = concat 'predef_', name
 
     .local pmc func
-    func = get_global ['Runner'], funcname
+    func = methods[funcname]
     $I0 = defined func
     if $I0 goto good
     print funcname
@@ -416,7 +421,7 @@
 
     .local pmc vars, var
     vars = getattribute self, 'vars'
-    upcase varname
+    varname = upcase varname
     var = vars[varname]
     .return(var)
 .end
@@ -428,7 +433,7 @@
 
     .local pmc vars, var
     vars = getattribute self, 'vars'
-    upcase varname
+    varname = upcase varname
     vars[varname] = value
 .end
 
@@ -664,7 +669,7 @@
     $I0 = $P2
     $S0 = chr $I0
     $I1 = find_encoding 'utf8'
-    trans_encoding $S0, $I1
+    $S0 = trans_encoding $S0, $I1
     $P3 = new 'String'
     $P3 = $S0
     .return($P3)
@@ -1010,7 +1015,7 @@
     unless $I0 goto fail
 
     $S0 = token
-    upcase $S0
+    $S0 = upcase $S0
     #print $S0
 
 # Some predefined functions:
@@ -1668,7 +1673,7 @@
     key = 'PRINT'
 
 findkey:
-    upcase key
+    key = upcase key
     .local pmc keywords
     keywords = get_hll_global 'keywords'
     $I0 = keywords
@@ -1797,14 +1802,14 @@
     pvar = tokenizer.'get'()
     .local string var
     var = pvar
-    upcase var
+    var = upcase var
     $P0 = tokenizer.'get'()
     ne $P0, '=', fail
     .local pmc value
     value = self.'evaluate'(tokenizer)
     $P0 = tokenizer.'get'()
     $S0 = $P0
-    upcase $S0
+    $S0 = upcase $S0
     ne $S0, 'TO', fail
 
     .local pmc limit
@@ -1815,7 +1820,7 @@
     $I0 = defined $P0
     unless $I0 goto default_step
     $S0 = $P0
-    upcase $S0
+    $S0 = upcase $S0
     ne $S0, 'STEP', fail
     increment = self.'evaluate'(tokenizer)
     goto prepare
@@ -1896,7 +1901,7 @@
     $I0 = defined token
     unless $I0 goto fail
     $S0 = token
-    upcase $S0
+    $S0 = upcase $S0
     ne $S0, 'THEN', fail
 
     $I0 = defined arg
@@ -1917,7 +1922,7 @@
     $I0 = isa $P0, 'String'
     unless $I0 goto nextitem
     $S0 = $P0
-    upcase $S0
+    $S0 = upcase $S0
     eq $S0, 'ELSE', is_else
     eq $S0, 'IF', is_if
     goto nextitem
@@ -1959,7 +1964,7 @@
     $I1 = defined $P1
     unless $I1 goto fail
     $S1 = $P1
-    upcase $S1
+    $S1 = upcase $S1
     ne $S1, 'B', fail
     $S1 = arg
     pirric_aux_loadbytecode($S1)
@@ -2037,13 +2042,13 @@
     .local pmc token
     token = tokenizer.'get'()
     $S0 = token
-    upcase $S0
+    $S0 = upcase $S0
     if $S0 == 'ERROR' goto on_error
     goto fail
 on_error:
     token = tokenizer.'get'()
     $S0 = token
-    upcase $S0
+    $S0 = upcase $S0
     if $S0 == 'GOTO' goto on_error_goto
     if $S0 == 'EXIT' goto on_error_exit
     goto fail
@@ -2075,7 +2080,7 @@
 
 item:
     $S0 = arg
-    upcase $S0
+    $S0 = upcase $S0
     eq $S0, 'ELSE', endline
     arg = self.'evaluate'(tokenizer, arg)
 print_it:
@@ -2086,7 +2091,7 @@
     eq arg, ';', nextitem
     eq arg, ',', comma
     $S0 = arg
-    upcase $S0
+    $S0 = upcase $S0
     eq $S0, 'ELSE', endline
     SyntaxError()
 comma:
@@ -2103,7 +2108,7 @@
     $I0 = defined arg
     unless $I0 goto finish
     $S0 = arg
-    upcase $S0
+    $S0 = upcase $S0
     eq $S0, 'ELSE', finish
     goto item
 finish:

Modified: branches/ops_pct/examples/pir/quine_ord.pir
==============================================================================
--- branches/ops_pct/examples/pir/quine_ord.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/quine_ord.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2008, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 # ATT no autoexpanding svn markers please
 
 .sub quine :main
@@ -838,8 +838,8 @@
 push code_as_data, 45
 push code_as_data, 50
 push code_as_data, 48
+push code_as_data, 49
 push code_as_data, 48
-push code_as_data, 56
 push code_as_data, 44
 push code_as_data, 32
 push code_as_data, 80
@@ -1712,12 +1712,20 @@
 push code_as_data, 32
 push code_as_data, 32
 push code_as_data, 32
-push code_as_data, 115
-push code_as_data, 117
-push code_as_data, 98
-push code_as_data, 115
-push code_as_data, 116
+push code_as_data, 99
+push code_as_data, 111
+push code_as_data, 100
+push code_as_data, 101
+push code_as_data, 32
+push code_as_data, 61
+push code_as_data, 32
 push code_as_data, 114
+push code_as_data, 101
+push code_as_data, 112
+push code_as_data, 108
+push code_as_data, 97
+push code_as_data, 99
+push code_as_data, 101
 push code_as_data, 32
 push code_as_data, 99
 push code_as_data, 111
@@ -1906,6 +1914,40 @@
 push code_as_data, 44
 push code_as_data, 32
 push code_as_data, 49
+push code_as_data, 10
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 32
+push code_as_data, 99
+push code_as_data, 111
+push code_as_data, 100
+push code_as_data, 101
+push code_as_data, 32
+push code_as_data, 61
+push code_as_data, 32
+push code_as_data, 114
+push code_as_data, 101
+push code_as_data, 112
+push code_as_data, 108
+push code_as_data, 97
+push code_as_data, 99
+push code_as_data, 101
+push code_as_data, 32
+push code_as_data, 99
+push code_as_data, 111
+push code_as_data, 100
+push code_as_data, 101
+push code_as_data, 44
+push code_as_data, 32
+push code_as_data, 48
+push code_as_data, 44
+push code_as_data, 32
+push code_as_data, 49
 push code_as_data, 44
 push code_as_data, 32
 push code_as_data, 39
@@ -3530,7 +3572,7 @@
 
 DO_QUINE:
     # First print the stuff data section
-    print "# Copyright (C) 2006-2008, Parrot Foundation.\n"
+    print "# Copyright (C) 2006-2010, Parrot Foundation.\n"
     print "# ATT no autoexpanding svn markers please\n"
     print "\n"
     print ".sub quine :main\n"
@@ -3562,13 +3604,14 @@
     # Ignore everything up to end of data section
     .local int end_of_data_pos
     end_of_data_pos = index code, "# ------ End of data section ------"
-    substr code, 0, end_of_data_pos, ''
+    code = replace code, 0, end_of_data_pos, ''
 
     .local string char_string
     .local int    char_int
     SHIFT_NEXT_CHAR:
     unless code goto FINISH_SHIFT_CHARS
-        char_string = substr code, 0, 1, ''
+        char_string = substr code, 0, 1
+        code = replace code, 0, 1, ''
         char_int = ord char_string
         print 'push code_as_data, '
         print char_int

Modified: branches/ops_pct/examples/pir/substr.pir
==============================================================================
--- branches/ops_pct/examples/pir/substr.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/pir/substr.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -31,7 +31,7 @@
 WANE:   $I1 = length $S1
         print  $S1
         print  "\n"
-        chopn  $S1, 1
+        $S1 = chopn $S1, 1
         unless $I1 == $I3 goto WANE
 DONE:
 .end

Modified: branches/ops_pct/examples/sdl/mandel.pir
==============================================================================
--- branches/ops_pct/examples/sdl/mandel.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/sdl/mandel.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -556,9 +556,7 @@
 Optimized build
 
   [2] plain  runcore 64 bit                  3.0s
-  [2] -R cgp runcore 64 bit                  1.5s
   [2] plain  runcore 32 bit                  3.6s
-  [2] -R cgp runcore 32 bit                  1.6s
   [1] -R jit                                 1.1s
   [2] -R jit                                 0.8s
   [3] -R jit                                 0.5s

Modified: branches/ops_pct/examples/shootout/ack.pir
==============================================================================
--- branches/ops_pct/examples/shootout/ack.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/ack.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -3,7 +3,7 @@
 # $Id$
 # OUTPUT="Ack(3, 9) = 4093\n"
 #
-# ./parrot -Oc -R cgp-jit
+# ./parrot -Oc
 # RQ (Karl)
 # Seems to be an old benchmark, now deprecated by the shootout
 #

Modified: branches/ops_pct/examples/shootout/binarytrees.pir
==============================================================================
--- branches/ops_pct/examples/shootout/binarytrees.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/binarytrees.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!./parrot -R cgp
+#!./parrot
 # Copyright (C) 2005-2009, Parrot Foundation.
 # $Id$
 #

Modified: branches/ops_pct/examples/shootout/fasta.pir
==============================================================================
--- branches/ops_pct/examples/shootout/fasta.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/fasta.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!./parrot -R cgp
+#!./parrot
 # Copyright (C) 2005-2009, Parrot Foundation.
 # $Id$
 #

Modified: branches/ops_pct/examples/shootout/knucleotide.pir
==============================================================================
--- branches/ops_pct/examples/shootout/knucleotide.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/knucleotide.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2005-2009, Parrot Foundation.
+# Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
 .sub main :main
@@ -13,7 +13,7 @@
 	line = ''
 	.local string seq
 beginwhile_2:
-	chopn line, 1
+	line = chopn line, 1
 	seq .= line
 	line = readline stdin
 	$I0 = length line
@@ -21,7 +21,7 @@
 	$S0 = chopn line, -1
 	if $S0 != ">" goto beginwhile_2
 endwhile_2:
-	upcase seq
+	seq = upcase seq
 	sort_seq(seq, 1)
 	sort_seq(seq, 2)
 	find_seq(seq, "GGT")

Modified: branches/ops_pct/examples/shootout/partialsums.pir
==============================================================================
--- branches/ops_pct/examples/shootout/partialsums.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/partialsums.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!./parrot -R cgp
+#!./parrot
 # Copyright (C) 2006-2009, Parrot Foundation.
 # $Id$
 #

Modified: branches/ops_pct/examples/shootout/pidigits.pir
==============================================================================
--- branches/ops_pct/examples/shootout/pidigits.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/pidigits.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!./parrot -R cgp
+#!./parrot
 # Copyright (C) 2005-2009, Parrot Foundation.
 # $Id$
 #

Modified: branches/ops_pct/examples/shootout/random.pir
==============================================================================
--- branches/ops_pct/examples/shootout/random.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/random.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!./parrot -R cgp
+#!./parrot
 # Copyright (C) 2005-2009, Parrot Foundation.
 # $Id$
 #

Modified: branches/ops_pct/examples/shootout/recursive-2.pir
==============================================================================
--- branches/ops_pct/examples/shootout/recursive-2.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/recursive-2.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -6,7 +6,7 @@
 # Fib and Tak by Joshua Isom
 
 # use less registers (leo)
-# time ./parrot -Oc -R cgp-jit recursive-2.pir 11
+# time ./parrot -Oc recursive-2.pir 11
 # real 2.32 s   (AMD X2 at 2000)
 # modified default value to n=3. Karl Forner
 

Modified: branches/ops_pct/examples/shootout/recursive.pir
==============================================================================
--- branches/ops_pct/examples/shootout/recursive.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/recursive.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -5,7 +5,7 @@
 # Ack by Leopold Toetsch
 # Fib and Tak by Joshua Isom
 # modified default value to n=3. Karl Forner
-# ./parrot -Oc -R cgp-jit recursive.pir N
+# ./parrot -Oc recursive.pir N
 
 .sub main :main
 	.param pmc argv

Modified: branches/ops_pct/examples/shootout/regexdna.pir
==============================================================================
--- branches/ops_pct/examples/shootout/regexdna.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/regexdna.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
 .sub main :main
@@ -65,7 +65,7 @@
 	chunklen = length chunk
 	unless chunklen goto endwhile
 	# They don't say you have to match case insenitive...
-	downcase chunk
+	chunk = downcase chunk
 	seq .= chunk
 	goto beginwhile
 endwhile:
@@ -84,7 +84,7 @@
 	$I0 = $P0."from"()
 	$I1 = $P0."to"()
 	$I1 -= $I0
-	substr seq, $I0, $I1, ''
+	seq = replace seq, $I0, $I1, ''
 	goto stripfind
 endstripfind:
 	seqlen = length seq
@@ -140,7 +140,7 @@
 #	$I0 = $P0."from"()
 #	$I1 = $P0."to"()
 #	$I1 -= $I0
-#	substr seq, $I0, $I1, replacement
+#	seq = replace seq, $I0, $I1, replacement
 #	goto switchfind
 #endswitchfind:
 
@@ -164,7 +164,7 @@
 	$P0 = pop matches
 	$I0 = $P0[0]
 	$I1 = $P0[1]
-	substr seq, $I0, $I1, replacement
+	seq = replace seq, $I0, $I1, replacement
 	goto switchloop
 endswitchloop:
 #############################################

Modified: branches/ops_pct/examples/shootout/revcomp.pir
==============================================================================
--- branches/ops_pct/examples/shootout/revcomp.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/revcomp.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #!parrot
-# Copyright (C) 2005-2009, Parrot Foundation.
+# Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 # Reads from stdin a file in the format made by fasta.pir
 # ./parrot -R jit
@@ -54,7 +54,7 @@
 		print line
 		goto endif
 	else:
-		chopn line, 1
+		line = chopn line, 1
 		seq .= line
 	endif:
 	goto beginwhile

Modified: branches/ops_pct/examples/shootout/takfp.pir
==============================================================================
--- branches/ops_pct/examples/shootout/takfp.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/shootout/takfp.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,8 +1,8 @@
-#!./parrot -R cgp
+#!./parrot
 # Copyright (C) 2005-2009, Parrot Foundation.
 # $Id$
 #
-# ./parrot -R cgp takfp.pir N         (N = 10 for shootout)
+# ./parrot takfp.pir N         (N = 10 for shootout)
 # by Joshua Isom
 # changed default value to N=7 (shootout default before being deprecated)
 # anyway N=10 froze my laptop. Karl Forner

Modified: branches/ops_pct/examples/tutorial/23_string_ops_substr.pir
==============================================================================
--- branches/ops_pct/examples/tutorial/23_string_ops_substr.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/tutorial/23_string_ops_substr.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2009, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 String Operations (continued)
@@ -10,25 +10,28 @@
 position is left out, C<substr> returns all the characters until the
 end of the string.
 
-An optional fourth argument is a string that will be used to
-replace the characters between the start and end positions.
+C<substr> no longer provides an in-place replace, however there is a
+C<replace> operator that allows this type of operation to be performed,
+although not in-place.  The C<replace> operator assigns a new_srting,
+taking as arguments, the old_string, a start and end position, and a
+string to be inserted in between the start and end positions.
 
 =cut
 
 .sub main :main
 
-    $S0 = substr "abcde", 1, 2    # "bc"
-    say $S0
+    $S0 = substr "abcde", 1, 2
+    say $S0                         # "bc"
 
     set $S1, "abcde"
     $S0 = substr $S1, 1, 2
-    say $S0                   # "bc"
-    say $S1                   # "abcde"
+    say $S0                         # "bc"
+    say $S1                         # "abcde"
 
     set $S1, "abcde"
-    $S0 = substr $S1, 1, 2, "XYZ"
-    say $S0                       # "bc"
-    say $S1                       # "aXYZde"
+    $S0 = replace $S1, 1, 2, "XYZ"
+    say $S0                         # "aXYZde"
+    say $S1                         # "abcde"
 
 .end
 
@@ -37,4 +40,3 @@
 #   fill-column: 100
 # End:
 # vim: expandtab shiftwidth=4 ft=pir:
-

Modified: branches/ops_pct/examples/tutorial/40_file_ops.pir
==============================================================================
--- branches/ops_pct/examples/tutorial/40_file_ops.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/tutorial/40_file_ops.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,7 @@
     close filein
 
     # Be nice and remove the temporary file we created.
+    $P0 = loadlib 'os'
     $P1 = new ['OS']
     $P1.'rm'('40_file_ops_data.txt')
 .end

Modified: branches/ops_pct/examples/tutorial/56_defined.pir
==============================================================================
--- branches/ops_pct/examples/tutorial/56_defined.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/examples/tutorial/56_defined.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -26,7 +26,7 @@
 =pod
 
 Most PMC's, but not all, should return true for C<defined>.  It all
-depends on how the PMC implements its vtable method for C<defined>.
+depends on how the PMC implements its vtable function for C<defined>.
 For example the C<Undef> PMC always returns false (0) for C<defined>.
 
 =cut

Modified: branches/ops_pct/ext/Parrot-Embed/Build.PL
==============================================================================
--- branches/ops_pct/ext/Parrot-Embed/Build.PL	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/Parrot-Embed/Build.PL	Wed May  5 08:45:29 2010	(r46302)
@@ -1,3 +1,5 @@
+#! perl
+
 use strict;
 use warnings;
 
@@ -14,19 +16,19 @@
 diag( my $path_sep          = get_path_separator() );
 
 my $class = Module::Build->subclass(
-	code => <<"END_HERE",
-	use File::Spec;
+    code => <<"END_HERE",
+    use File::Spec;
 
-	sub ACTION_build
-	{
-		my \$self = shift;
-		my \@cmd  = ( qw( $parrot -o ),
-			map { File::Spec->catfile( 't', "greet.\$_" ) } qw( pbc pir ) );
+    sub ACTION_build
+    {
+        my \$self = shift;
+        my \@cmd  = ( qw( $parrot -o ),
+            map { File::Spec->catfile( 't', "greet.\$_" ) } qw( pbc pir ) );
 
-		system( \@cmd ) == 0 or die "Cannot compile PBC for test: \$?";
+        system( \@cmd ) == 0 or die "Cannot compile PBC for test: \$?";
 
-		\$self->SUPER::ACTION_build( \@_ );
-	}
+        \$self->SUPER::ACTION_build( \@_ );
+    }
 
     sub ACTION_test
     {
@@ -42,27 +44,27 @@
 );
 
 my $builder = $class->new(
-	module_name         => 'Parrot::Embed',
-	license             => 'perl',
-	dist_author         => 'chromatic <chromatic at wgz.org>',
-	dist_version_from   => 'lib/Parrot/Embed.pm',
-	build_requires =>
-	{
-		'Test::More'         => 0,
-		'ExtUtils::CBuilder' => 0,
-	},
-	add_to_cleanup       => [ 'Parrot-Embed-*' ],
+    module_name         => 'Parrot::Embed',
+    license             => 'perl',
+    dist_author         => 'chromatic <chromatic at wgz.org>',
+    dist_version_from   => 'lib/Parrot/Embed.pm',
+    build_requires =>
+    {
+        'Test::More'         => 0,
+        'ExtUtils::CBuilder' => 0,
+    },
+    add_to_cleanup       => [ 'Parrot-Embed-*' ],
     include_dirs         => [ $incp ],
-	extra_compiler_flags => $cflags,
-	extra_linker_flags   => $lflags,
+    extra_compiler_flags => $cflags,
+    extra_linker_flags   => $lflags,
 );
 
 $builder->create_build_script();
 
 sub in_parrot_tree
 {
-	my $cwd     = cwd();
-	return $cwd =~ /\bext\b.Parrot/;
+    my $cwd     = cwd();
+    return $cwd =~ /\bext\b.Parrot/;
 }
 
 sub get_dl_env_var
@@ -81,46 +83,48 @@
 
 sub get_compiler_flags
 {
-	my $in_parrot_tree = shift;
-	return get_flags_from_parrot_src() if $in_parrot_tree;
-	return get_flags_from_pkg_config() if $ENV{PKG_CONFIG_PATH};
+    my $in_parrot_tree = shift;
+    return get_flags_from_parrot_src() if $in_parrot_tree;
+    return get_flags_from_pkg_config() if $ENV{PKG_CONFIG_PATH};
 }
 
 sub get_flags_from_pkg_config
 {
-	require ExtUtils::PkgConfig;
-	my %pkg_info = ExtUtils::PkgConfig->find( 'parrot' );
-	return @pkg_info{qw( cflags libs )};
+    require ExtUtils::PkgConfig;
+    my %pkg_info = ExtUtils::PkgConfig->find( 'parrot' );
+    return @pkg_info{qw( cflags libs )};
 }
 
 sub get_flags_from_parrot_src
 {
-	my $updir = updir();
-	my $file  = catfile( $updir, $updir, 'parrot.pc' );
-	open( my $fh, '<', $file ) or die "Cannot read $file: $!\n";
-
-	my %vars;
-	while (<$fh>)
-	{
-		chomp;
-		last unless /\S/;
-		my ($var, $value) = split(/=/, $_);
-		$vars{$var}       = $value;
-	}
-
-	while (<$fh>)
-	{
-		chomp;
-		last unless /\S/;
-		my ($var, $value) =  split(/: /, $_);
-		$value            =~ s/\${(\w+)}/$vars{$1}/g;
-		$vars{$var}       =  $value;
-	}
+    my $updir   = updir();
+    my $basedir = Cwd::realpath( catdir( cwd(), $updir, $updir ) );
+    my $file    = catfile( $basedir, 'parrot.pc' );
+    open( my $fh, '<', $file ) or die "Cannot read $file: $!\n";
+
+    my %vars;
+    while (<$fh>)
+    {
+        chomp;
+        last unless /\S/;
+    }
+
+    $vars{libdir}     = catdir( $basedir, 'lib' );
+    $vars{includedir} = catdir( $basedir, 'include' );
+
+    while (<$fh>)
+    {
+        chomp;
+        last unless /\S/;
+        my ($var, $value) =  split(/: /, $_);
+        $value            =~ s/\${(\w+)}/$vars{$1}/g;
+        $vars{$var}       =  $value;
+    }
 
     $vars{Cflags} .= ' -I' . catdir( ($updir) x 2, 'include' );
     $vars{Libs}   .= $^O =~ /Win32/ ? ' ..\..\libparrot.lib' : " -L$libp";
 
-	return @vars{qw( Cflags Libs )};
+    return @vars{qw( Cflags Libs )};
 }
 
 sub get_paths
@@ -135,42 +139,42 @@
 
 sub get_parrot_path
 {
-	my $in_parrot_tree = shift;
-	return get_parrot_path_internal() if $in_parrot_tree;
-	return get_parrot_path_external();
+    my $in_parrot_tree = shift;
+    return get_parrot_path_internal() if $in_parrot_tree;
+    return get_parrot_path_external();
 }
 
 sub get_parrot_path_internal
 {
-	my $updir = updir();
-	my $path  = catfile(($updir) x 2, get_parrot_executable_name());
+    my $updir = updir();
+    my $path  = catfile(($updir) x 2, get_parrot_executable_name());
 
-	die "parrot apparently not built!\n" unless -e $path;
-	return $path;
+    die "parrot apparently not built!\n" unless -e $path;
+    return $path;
 }
 
 sub get_parrot_path_external
 {
-	my $parrot = get_parrot_executable_name();
+    my $parrot = get_parrot_executable_name();
 
-	for my $path ( path() )
-	{
-		my $file = catfile( $path, $parrot );
-		next unless -e $file;
-		return $file;
-	}
+    for my $path ( path() )
+    {
+        my $file = catfile( $path, $parrot );
+        next unless -e $file;
+        return $file;
+    }
 
-	die "parrot apparently not installed in \$PATH\n";
+    die "parrot apparently not installed in \$PATH\n";
 }
 
 sub get_parrot_executable_name
 {
-	return 'parrot' unless $^O =~ /Win32/;
-	return 'parrot.exe';
+    return 'parrot' unless $^O =~ /Win32/;
+    return 'parrot.exe';
 }
 
 sub diag
 {
-	return unless $ENV{PE_DEBUG};
-	print STDERR "<$_>\n" for @_;
+    return unless $ENV{PE_DEBUG};
+    print STDERR "<$_>\n" for @_;
 }

Modified: branches/ops_pct/ext/Parrot-Embed/MANIFEST
==============================================================================
--- branches/ops_pct/ext/Parrot-Embed/MANIFEST	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/Parrot-Embed/MANIFEST	Wed May  5 08:45:29 2010	(r46302)
@@ -1,7 +1,6 @@
 Build.PL
 Changes
 MANIFEST
-META.yml # Will be created by "make dist"
 README
 lib/Parrot/Embed.pm
 lib/Parrot/Embed.xs

Modified: branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs
==============================================================================
--- branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs	Wed May  5 08:45:29 2010	(r46302)
@@ -223,7 +223,7 @@
     pmc_actual = pmc->pmc;
     interp     = get_interp( pmc->interp );
     arg_string = Parrot_str_new_constant( interp, argument );
-    Parrot_ext_call( interp, pmc_actual, signature, arg_string, &out_pmc );
+    Parrot_pcc_invoke_sub_from_c_args( interp, pmc_actual, signature, arg_string, &out_pmc );
     RETVAL     = make_pmc( aTHX_ pmc->interp, out_pmc );
 OUTPUT:
     RETVAL

Modified: branches/ops_pct/ext/Parrot-Embed/t/interp.t
==============================================================================
--- branches/ops_pct/ext/Parrot-Embed/t/interp.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/Parrot-Embed/t/interp.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,12 +1,12 @@
 #!perl
 
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
 use strict;
 use warnings;
 
-use Test::More tests => 26;
+use Test::More tests => 23;
 use File::Spec;
 
 my $hello_pbc = File::Spec->catfile( 't', 'greet.pbc' );
@@ -45,7 +45,7 @@
     '... but again, not if there is no global of that name there' );
 
 can_ok( $global_greet, 'invoke' );
-my $pmc = $global_greet->invoke( 'PS', 'Bob' );
+my $pmc = $global_greet->invoke( 'S->P', 'Bob' );
 ok( $pmc, 'invoke() should return a PMC, given that signature' );
 
 is( $pmc->get_string(), 'Hello, Bob!', '... containing a string returned in the PMC' );
@@ -66,27 +66,35 @@
 ok( $eval, 'compile() should compile PIR code and return a PMC' );
 isa_ok( $eval, 'Parrot::PMC' );
 
+=for comment
+
 TODO:
 {
     local $TODO = 'compile_string() returns wrong results';
-    ok( !$interp->compile('blah'), '... but only for valid PIR' );
+    #  ok( !$interp->compile('blah'), '... but only for valid PIR' );
 }
 
-$pmc = $else_greet->invoke( 'P', '' );
+$pmc = $else_greet->invoke( 'S->P', '' );
 is( $pmc->get_string(), 'Hiya!', '... calling the passed-in subroutine' );
 
 my $foo = $interp->find_global('foo');
-$pmc = $foo->invoke( 'PS', 'BAR' );
+$pmc = $foo->invoke( 'S->P', 'BAR' );
 is( $pmc->get_string(), 'BAR FOO ',
     '... and compiled sub should work just like any other Sub pmc' );
 
+my $foo;
+
+=cut
+
+my $foo;
+
 {
     my $die_interp = $module->new($interp);
     eval { $die_interp->load_file($hello_pbc) };
     $foo = $die_interp->find_global('greet');
 }
 
-$pmc = $foo->invoke( 'PS', 'out of scope' );
+$pmc = $foo->invoke( 'S->P', 'out of scope' );
 is(
     $pmc->get_string(),
     'Hello, out of scope!',

Deleted: branches/ops_pct/ext/nqp-rx/.gitignore
==============================================================================
--- branches/ops_pct/ext/nqp-rx/.gitignore	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,15 +0,0 @@
-Makefile
-/parrot
-/parrot_install
-.*.swp
-*.c
-*.o
-Regex.pbc
-HLL.pbc
-P6Regex
-P6Regex.pbc
-nqp
-nqp.pbc
-src/gen/*.pir
-src/stage1
-src/stage2

Modified: branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -99,7 +99,7 @@
     sigil = substr $S0, 0, 1
     $I0 = index '$@%&', sigil
     if $I0 < 0 goto sigil_done
-    substr $S0, 0, 1, ''
+    $S0 = replace $S0, 0, 1, ''
     ns[0] = $S0
     $S0 = ns[-1]
     $S0 = concat sigil, $S0
@@ -468,7 +468,7 @@
 .end
 
 
-.sub 'quotemod_check' :method
+.sub 'quotemod_check' :method :nsentry
     .param string mod
 
     $P0 = find_dynamic_lex '%*QUOTEMOD'
@@ -522,7 +522,7 @@
 .end
 
 
-.sub 'split_words' :method
+.sub 'split_words' :method :nsentry
     .param string words
     .local int pos, eos
     .local pmc result
@@ -854,111 +854,117 @@
 ### .include 'gen/hllgrammar-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204683.33533")
+.sub "_block11"  :anon :subid("10_1272816829.8573")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
 .annotate "line", 5
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
-    $P296 = $P14()
+    $P339 = $P14()
 .annotate "line", 1
-    .return ($P296)
+    .return ($P339)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post94") :outer("10_1267204683.33533")
+.sub "" :load :init :subid("post103") :outer("10_1272816829.8573")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204683.33533" 
+    .const 'Sub' $P12 = "10_1272816829.8573" 
     .local pmc block
     set block, $P12
-    $P297 = get_root_global ["parrot"], "P6metaclass"
-    $P297."new_class"("HLL::Grammar", "Regex::Cursor" :named("parent"))
+    $P340 = get_root_global ["parrot"], "P6metaclass"
+    $P340."new_class"("HLL::Grammar", "Regex::Cursor" :named("parent"))
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block13"  :subid("11_1267204683.33533") :outer("10_1267204683.33533")
+.sub "_block13"  :subid("11_1272816829.8573") :outer("10_1272816829.8573")
 .annotate "line", 5
-    .const 'Sub' $P286 = "92_1267204683.33533" 
-    capture_lex $P286
-    .const 'Sub' $P279 = "90_1267204683.33533" 
-    capture_lex $P279
-    .const 'Sub' $P266 = "87_1267204683.33533" 
+    .const 'Sub' $P329 = "101_1272816829.8573" 
+    capture_lex $P329
+    .const 'Sub' $P322 = "99_1272816829.8573" 
+    capture_lex $P322
+    .const 'Sub' $P309 = "96_1272816829.8573" 
+    capture_lex $P309
+    .const 'Sub' $P277 = "91_1272816829.8573" 
+    capture_lex $P277
+    .const 'Sub' $P271 = "89_1272816829.8573" 
+    capture_lex $P271
+    .const 'Sub' $P266 = "87_1272816829.8573" 
     capture_lex $P266
-    .const 'Sub' $P261 = "85_1267204683.33533" 
-    capture_lex $P261
-    .const 'Sub' $P255 = "83_1267204683.33533" 
-    capture_lex $P255
-    .const 'Sub' $P249 = "81_1267204683.33533" 
+    .const 'Sub' $P260 = "85_1272816829.8573" 
+    capture_lex $P260
+    .const 'Sub' $P254 = "83_1272816829.8573" 
+    capture_lex $P254
+    .const 'Sub' $P249 = "81_1272816829.8573" 
     capture_lex $P249
-    .const 'Sub' $P244 = "79_1267204683.33533" 
+    .const 'Sub' $P244 = "79_1272816829.8573" 
     capture_lex $P244
-    .const 'Sub' $P239 = "77_1267204683.33533" 
+    .const 'Sub' $P239 = "77_1272816829.8573" 
     capture_lex $P239
-    .const 'Sub' $P234 = "75_1267204683.33533" 
+    .const 'Sub' $P234 = "75_1272816829.8573" 
     capture_lex $P234
-    .const 'Sub' $P229 = "73_1267204683.33533" 
+    .const 'Sub' $P229 = "73_1272816829.8573" 
     capture_lex $P229
-    .const 'Sub' $P224 = "71_1267204683.33533" 
+    .const 'Sub' $P224 = "71_1272816829.8573" 
     capture_lex $P224
-    .const 'Sub' $P219 = "69_1267204683.33533" 
+    .const 'Sub' $P219 = "69_1272816829.8573" 
     capture_lex $P219
-    .const 'Sub' $P208 = "65_1267204683.33533" 
+    .const 'Sub' $P208 = "65_1272816829.8573" 
     capture_lex $P208
-    .const 'Sub' $P195 = "63_1267204683.33533" 
+    .const 'Sub' $P195 = "63_1272816829.8573" 
     capture_lex $P195
-    .const 'Sub' $P183 = "61_1267204683.33533" 
+    .const 'Sub' $P183 = "61_1272816829.8573" 
     capture_lex $P183
-    .const 'Sub' $P176 = "59_1267204683.33533" 
+    .const 'Sub' $P176 = "59_1272816829.8573" 
     capture_lex $P176
-    .const 'Sub' $P167 = "57_1267204683.33533" 
+    .const 'Sub' $P167 = "57_1272816829.8573" 
     capture_lex $P167
-    .const 'Sub' $P160 = "55_1267204683.33533" 
+    .const 'Sub' $P160 = "55_1272816829.8573" 
     capture_lex $P160
-    .const 'Sub' $P151 = "53_1267204683.33533" 
+    .const 'Sub' $P151 = "53_1272816829.8573" 
     capture_lex $P151
-    .const 'Sub' $P144 = "51_1267204683.33533" 
+    .const 'Sub' $P144 = "51_1272816829.8573" 
     capture_lex $P144
-    .const 'Sub' $P135 = "49_1267204683.33533" 
+    .const 'Sub' $P135 = "49_1272816829.8573" 
     capture_lex $P135
-    .const 'Sub' $P128 = "47_1267204683.33533" 
+    .const 'Sub' $P128 = "47_1272816829.8573" 
     capture_lex $P128
-    .const 'Sub' $P121 = "45_1267204683.33533" 
+    .const 'Sub' $P121 = "45_1272816829.8573" 
     capture_lex $P121
-    .const 'Sub' $P111 = "43_1267204683.33533" 
+    .const 'Sub' $P111 = "43_1272816829.8573" 
     capture_lex $P111
-    .const 'Sub' $P103 = "41_1267204683.33533" 
+    .const 'Sub' $P103 = "41_1272816829.8573" 
     capture_lex $P103
-    .const 'Sub' $P93 = "40_1267204683.33533" 
+    .const 'Sub' $P93 = "40_1272816829.8573" 
     capture_lex $P93
-    .const 'Sub' $P87 = "38_1267204683.33533" 
+    .const 'Sub' $P87 = "38_1272816829.8573" 
     capture_lex $P87
-    .const 'Sub' $P82 = "36_1267204683.33533" 
+    .const 'Sub' $P82 = "36_1272816829.8573" 
     capture_lex $P82
-    .const 'Sub' $P74 = "34_1267204683.33533" 
+    .const 'Sub' $P74 = "34_1272816829.8573" 
     capture_lex $P74
-    .const 'Sub' $P68 = "32_1267204683.33533" 
+    .const 'Sub' $P68 = "32_1272816829.8573" 
     capture_lex $P68
-    .const 'Sub' $P62 = "30_1267204683.33533" 
+    .const 'Sub' $P62 = "30_1272816829.8573" 
     capture_lex $P62
-    .const 'Sub' $P56 = "28_1267204683.33533" 
+    .const 'Sub' $P56 = "28_1272816829.8573" 
     capture_lex $P56
-    .const 'Sub' $P23 = "14_1267204683.33533" 
+    .const 'Sub' $P23 = "14_1272816829.8573" 
     capture_lex $P23
-    .const 'Sub' $P15 = "12_1267204683.33533" 
+    .const 'Sub' $P15 = "12_1272816829.8573" 
     capture_lex $P15
 .annotate "line", 33
-    .const 'Sub' $P286 = "92_1267204683.33533" 
-    capture_lex $P286
+    .const 'Sub' $P329 = "101_1272816829.8573" 
+    capture_lex $P329
 .annotate "line", 5
-    .return ($P286)
+    .return ($P329)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "ws"  :subid("12_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx16_tgt
     .local int rx16_pos
@@ -1042,7 +1048,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__ws"  :subid("13_1267204683.33533") :method
+.sub "!PREFIX__ws"  :subid("13_1272816829.8573") :method
 .annotate "line", 5
     new $P18, "ResizablePMCArray"
     push $P18, ""
@@ -1051,7 +1057,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "termish"  :subid("14_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "termish"  :subid("14_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx24_tgt
     .local int rx24_pos
@@ -1061,7 +1067,7 @@
     .local pmc rx24_cur
     (rx24_cur, rx24_pos, rx24_tgt) = self."!cursor_start"()
     rx24_cur."!cursor_debug"("START ", "termish")
-    rx24_cur."!cursor_caparray"("prefixish", "postfixish")
+    rx24_cur."!cursor_caparray"("postfixish", "prefixish")
     .lex unicode:"$\x{a2}", rx24_cur
     .local pmc match
     .lex "$/", match
@@ -1143,7 +1149,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__termish"  :subid("15_1267204683.33533") :method
+.sub "!PREFIX__termish"  :subid("15_1272816829.8573") :method
 .annotate "line", 5
     new $P26, "ResizablePMCArray"
     push $P26, ""
@@ -1152,7 +1158,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term"  :subid("16_1267204683.33533") :method
+.sub "term"  :subid("16_1272816829.8573") :method
 .annotate "line", 13
     $P33 = self."!protoregex"("term")
     .return ($P33)
@@ -1160,7 +1166,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term"  :subid("17_1267204683.33533") :method
+.sub "!PREFIX__term"  :subid("17_1272816829.8573") :method
 .annotate "line", 13
     $P35 = self."!PREFIX__!protoregex"("term")
     .return ($P35)
@@ -1168,7 +1174,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infix"  :subid("18_1267204683.33533") :method
+.sub "infix"  :subid("18_1272816829.8573") :method
 .annotate "line", 14
     $P37 = self."!protoregex"("infix")
     .return ($P37)
@@ -1176,7 +1182,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infix"  :subid("19_1267204683.33533") :method
+.sub "!PREFIX__infix"  :subid("19_1272816829.8573") :method
 .annotate "line", 14
     $P39 = self."!PREFIX__!protoregex"("infix")
     .return ($P39)
@@ -1184,7 +1190,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefix"  :subid("20_1267204683.33533") :method
+.sub "prefix"  :subid("20_1272816829.8573") :method
 .annotate "line", 15
     $P41 = self."!protoregex"("prefix")
     .return ($P41)
@@ -1192,7 +1198,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefix"  :subid("21_1267204683.33533") :method
+.sub "!PREFIX__prefix"  :subid("21_1272816829.8573") :method
 .annotate "line", 15
     $P43 = self."!PREFIX__!protoregex"("prefix")
     .return ($P43)
@@ -1200,7 +1206,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfix"  :subid("22_1267204683.33533") :method
+.sub "postfix"  :subid("22_1272816829.8573") :method
 .annotate "line", 16
     $P45 = self."!protoregex"("postfix")
     .return ($P45)
@@ -1208,7 +1214,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfix"  :subid("23_1267204683.33533") :method
+.sub "!PREFIX__postfix"  :subid("23_1272816829.8573") :method
 .annotate "line", 16
     $P47 = self."!PREFIX__!protoregex"("postfix")
     .return ($P47)
@@ -1216,7 +1222,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "circumfix"  :subid("24_1267204683.33533") :method
+.sub "circumfix"  :subid("24_1272816829.8573") :method
 .annotate "line", 17
     $P49 = self."!protoregex"("circumfix")
     .return ($P49)
@@ -1224,7 +1230,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__circumfix"  :subid("25_1267204683.33533") :method
+.sub "!PREFIX__circumfix"  :subid("25_1272816829.8573") :method
 .annotate "line", 17
     $P51 = self."!PREFIX__!protoregex"("circumfix")
     .return ($P51)
@@ -1232,7 +1238,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postcircumfix"  :subid("26_1267204683.33533") :method
+.sub "postcircumfix"  :subid("26_1272816829.8573") :method
 .annotate "line", 18
     $P53 = self."!protoregex"("postcircumfix")
     .return ($P53)
@@ -1240,7 +1246,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postcircumfix"  :subid("27_1267204683.33533") :method
+.sub "!PREFIX__postcircumfix"  :subid("27_1272816829.8573") :method
 .annotate "line", 18
     $P55 = self."!PREFIX__!protoregex"("postcircumfix")
     .return ($P55)
@@ -1248,7 +1254,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term:sym<circumfix>"  :subid("28_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "term:sym<circumfix>"  :subid("28_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx57_tgt
     .local int rx57_pos
@@ -1306,7 +1312,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1267204683.33533") :method
+.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1272816829.8573") :method
 .annotate "line", 5
     $P59 = self."!PREFIX__!subrule"("circumfix", "")
     new $P60, "ResizablePMCArray"
@@ -1316,7 +1322,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infixish"  :subid("30_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "infixish"  :subid("30_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx63_tgt
     .local int rx63_pos
@@ -1374,7 +1380,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("31_1267204683.33533") :method
+.sub "!PREFIX__infixish"  :subid("31_1272816829.8573") :method
 .annotate "line", 5
     $P65 = self."!PREFIX__!subrule"("OPER=infix", "")
     new $P66, "ResizablePMCArray"
@@ -1384,7 +1390,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefixish"  :subid("32_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "prefixish"  :subid("32_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx69_tgt
     .local int rx69_pos
@@ -1447,7 +1453,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefixish"  :subid("33_1267204683.33533") :method
+.sub "!PREFIX__prefixish"  :subid("33_1272816829.8573") :method
 .annotate "line", 5
     $P71 = self."!PREFIX__!subrule"("OPER=prefix", "")
     new $P72, "ResizablePMCArray"
@@ -1457,7 +1463,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfixish"  :subid("34_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "postfixish"  :subid("34_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx75_tgt
     .local int rx75_pos
@@ -1531,7 +1537,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfixish"  :subid("35_1267204683.33533") :method
+.sub "!PREFIX__postfixish"  :subid("35_1272816829.8573") :method
 .annotate "line", 5
     $P77 = self."!PREFIX__!subrule"("OPER=postcircumfix", "")
     $P78 = self."!PREFIX__!subrule"("OPER=postfix", "")
@@ -1543,7 +1549,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm"  :subid("36_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "nullterm"  :subid("36_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx83_tgt
     .local int rx83_pos
@@ -1594,7 +1600,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm"  :subid("37_1267204683.33533") :method
+.sub "!PREFIX__nullterm"  :subid("37_1272816829.8573") :method
 .annotate "line", 5
     new $P85, "ResizablePMCArray"
     push $P85, ""
@@ -1603,7 +1609,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm_alt"  :subid("38_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "nullterm_alt"  :subid("38_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 5
     .local string rx88_tgt
     .local int rx88_pos
@@ -1661,7 +1667,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm_alt"  :subid("39_1267204683.33533") :method
+.sub "!PREFIX__nullterm_alt"  :subid("39_1272816829.8573") :method
 .annotate "line", 5
     $P90 = self."!PREFIX__!subrule"("term", "")
     new $P91, "ResizablePMCArray"
@@ -1671,11 +1677,11 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nulltermish"  :subid("40_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "nulltermish"  :subid("40_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     new $P95, 'ExceptionHandler'
     set_addr $P95, control_94
-    $P95."handle_types"(58)
+    $P95."handle_types"(57)
     push_eh $P95
     .lex "self", self
     find_lex $P98, "self"
@@ -1698,7 +1704,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_delimited"  :subid("41_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_delimited"  :subid("41_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx104_tgt
     .local int rx104_pos
@@ -1780,7 +1786,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_delimited"  :subid("42_1267204683.33533") :method
+.sub "!PREFIX__quote_delimited"  :subid("42_1272816829.8573") :method
 .annotate "line", 33
     $P106 = self."!PREFIX__!subrule"("starter", "")
     new $P107, "ResizablePMCArray"
@@ -1790,7 +1796,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_atom"  :subid("43_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_atom"  :subid("43_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx112_tgt
     .local int rx112_pos
@@ -1881,7 +1887,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_atom"  :subid("44_1267204683.33533") :method
+.sub "!PREFIX__quote_atom"  :subid("44_1272816829.8573") :method
 .annotate "line", 33
     new $P114, "ResizablePMCArray"
     push $P114, ""
@@ -1890,7 +1896,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decint"  :subid("45_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "decint"  :subid("45_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx122_tgt
     .local int rx122_pos
@@ -1962,7 +1968,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decint"  :subid("46_1267204683.33533") :method
+.sub "!PREFIX__decint"  :subid("46_1272816829.8573") :method
 .annotate "line", 33
     new $P124, "ResizablePMCArray"
     push $P124, ""
@@ -1971,7 +1977,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("47_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "decints"  :subid("47_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx129_tgt
     .local int rx129_pos
@@ -1980,7 +1986,7 @@
     .local int rx129_rep
     .local pmc rx129_cur
     (rx129_cur, rx129_pos, rx129_tgt) = self."!cursor_start"()
-    rx129_cur."!cursor_debug"("START ", "hexints")
+    rx129_cur."!cursor_debug"("START ", "decints")
     rx129_cur."!cursor_caparray"("decint")
     .lex unicode:"$\x{a2}", rx129_cur
     .local pmc match
@@ -2037,8 +2043,8 @@
     goto rxquantr133_loop
   rxquantr133_done:
   # rx pass
-    rx129_cur."!cursor_pass"(rx129_pos, "hexints")
-    rx129_cur."!cursor_debug"("PASS  ", "hexints", " at pos=", rx129_pos)
+    rx129_cur."!cursor_pass"(rx129_pos, "decints")
+    rx129_cur."!cursor_debug"("PASS  ", "decints", " at pos=", rx129_pos)
     .return (rx129_cur)
   rx129_fail:
 .annotate "line", 33
@@ -2048,14 +2054,14 @@
     jump $I10
   rx129_done:
     rx129_cur."!cursor_fail"()
-    rx129_cur."!cursor_debug"("FAIL  ", "hexints")
+    rx129_cur."!cursor_debug"("FAIL  ", "decints")
     .return (rx129_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("48_1267204683.33533") :method
+.sub "!PREFIX__decints"  :subid("48_1272816829.8573") :method
 .annotate "line", 33
     new $P131, "ResizablePMCArray"
     push $P131, ""
@@ -2064,7 +2070,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexint"  :subid("49_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "hexint"  :subid("49_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx136_tgt
     .local int rx136_pos
@@ -2145,7 +2151,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexint"  :subid("50_1267204683.33533") :method
+.sub "!PREFIX__hexint"  :subid("50_1272816829.8573") :method
 .annotate "line", 33
     new $P138, "ResizablePMCArray"
     push $P138, ""
@@ -2154,7 +2160,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("51_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "hexints"  :subid("51_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx145_tgt
     .local int rx145_pos
@@ -2238,7 +2244,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("52_1267204683.33533") :method
+.sub "!PREFIX__hexints"  :subid("52_1272816829.8573") :method
 .annotate "line", 33
     new $P147, "ResizablePMCArray"
     push $P147, ""
@@ -2247,7 +2253,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octint"  :subid("53_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "octint"  :subid("53_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx152_tgt
     .local int rx152_pos
@@ -2328,7 +2334,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octint"  :subid("54_1267204683.33533") :method
+.sub "!PREFIX__octint"  :subid("54_1272816829.8573") :method
 .annotate "line", 33
     new $P154, "ResizablePMCArray"
     push $P154, ""
@@ -2337,7 +2343,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octints"  :subid("55_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "octints"  :subid("55_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx161_tgt
     .local int rx161_pos
@@ -2421,7 +2427,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octints"  :subid("56_1267204683.33533") :method
+.sub "!PREFIX__octints"  :subid("56_1272816829.8573") :method
 .annotate "line", 33
     new $P163, "ResizablePMCArray"
     push $P163, ""
@@ -2430,7 +2436,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binint"  :subid("57_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "binint"  :subid("57_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx168_tgt
     .local int rx168_pos
@@ -2511,7 +2517,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binint"  :subid("58_1267204683.33533") :method
+.sub "!PREFIX__binint"  :subid("58_1272816829.8573") :method
 .annotate "line", 33
     new $P170, "ResizablePMCArray"
     push $P170, ""
@@ -2520,7 +2526,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binints"  :subid("59_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "binints"  :subid("59_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx177_tgt
     .local int rx177_pos
@@ -2604,7 +2610,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binints"  :subid("60_1267204683.33533") :method
+.sub "!PREFIX__binints"  :subid("60_1272816829.8573") :method
 .annotate "line", 33
     new $P179, "ResizablePMCArray"
     push $P179, ""
@@ -2613,7 +2619,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "integer"  :subid("61_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "integer"  :subid("61_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx184_tgt
     .local int rx184_pos
@@ -2761,7 +2767,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__integer"  :subid("62_1267204683.33533") :method
+.sub "!PREFIX__integer"  :subid("62_1272816829.8573") :method
 .annotate "line", 33
     $P186 = self."!PREFIX__!subrule"("VALUE=decint", "")
     $P187 = self."!PREFIX__!subrule"("VALUE=decint", "0d")
@@ -2779,7 +2785,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "dec_number"  :subid("63_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "dec_number"  :subid("63_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx196_tgt
     .local int rx196_pos
@@ -2958,7 +2964,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__dec_number"  :subid("64_1267204683.33533") :method
+.sub "!PREFIX__dec_number"  :subid("64_1272816829.8573") :method
 .annotate "line", 33
     new $P198, "ResizablePMCArray"
     push $P198, ""
@@ -2969,7 +2975,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "escale"  :subid("65_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "escale"  :subid("65_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx209_tgt
     .local int rx209_pos
@@ -3046,7 +3052,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__escale"  :subid("66_1267204683.33533") :method
+.sub "!PREFIX__escale"  :subid("66_1272816829.8573") :method
 .annotate "line", 33
     new $P211, "ResizablePMCArray"
     push $P211, "e"
@@ -3056,7 +3062,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape"  :subid("67_1267204683.33533") :method
+.sub "quote_escape"  :subid("67_1272816829.8573") :method
 .annotate "line", 79
     $P216 = self."!protoregex"("quote_escape")
     .return ($P216)
@@ -3064,7 +3070,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape"  :subid("68_1267204683.33533") :method
+.sub "!PREFIX__quote_escape"  :subid("68_1272816829.8573") :method
 .annotate "line", 79
     $P218 = self."!PREFIX__!protoregex"("quote_escape")
     .return ($P218)
@@ -3072,7 +3078,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<backslash>"  :subid("69_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<backslash>"  :subid("69_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx220_tgt
     .local int rx220_pos
@@ -3134,7 +3140,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1272816829.8573") :method
 .annotate "line", 33
     new $P222, "ResizablePMCArray"
     push $P222, "\\\\"
@@ -3143,7 +3149,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<stopper>"  :subid("71_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<stopper>"  :subid("71_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx225_tgt
     .local int rx225_pos
@@ -3212,7 +3218,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1272816829.8573") :method
 .annotate "line", 33
     new $P227, "ResizablePMCArray"
     push $P227, "\\"
@@ -3221,7 +3227,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<bs>"  :subid("73_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<bs>"  :subid("73_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx230_tgt
     .local int rx230_pos
@@ -3283,7 +3289,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1272816829.8573") :method
 .annotate "line", 33
     new $P232, "ResizablePMCArray"
     push $P232, "\\b"
@@ -3292,7 +3298,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<nl>"  :subid("75_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<nl>"  :subid("75_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx235_tgt
     .local int rx235_pos
@@ -3354,7 +3360,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1272816829.8573") :method
 .annotate "line", 33
     new $P237, "ResizablePMCArray"
     push $P237, "\\n"
@@ -3363,7 +3369,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<cr>"  :subid("77_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<cr>"  :subid("77_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx240_tgt
     .local int rx240_pos
@@ -3425,7 +3431,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1272816829.8573") :method
 .annotate "line", 33
     new $P242, "ResizablePMCArray"
     push $P242, "\\r"
@@ -3434,7 +3440,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<tab>"  :subid("79_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<tab>"  :subid("79_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx245_tgt
     .local int rx245_pos
@@ -3496,7 +3502,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1272816829.8573") :method
 .annotate "line", 33
     new $P247, "ResizablePMCArray"
     push $P247, "\\t"
@@ -3505,7 +3511,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<hex>"  :subid("81_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<ff>"  :subid("81_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
     .local string rx250_tgt
     .local int rx250_pos
@@ -3514,7 +3520,7 @@
     .local int rx250_rep
     .local pmc rx250_cur
     (rx250_cur, rx250_pos, rx250_tgt) = self."!cursor_start"()
-    rx250_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    rx250_cur."!cursor_debug"("START ", "quote_escape:sym<ff>")
     .lex unicode:"$\x{a2}", rx250_cur
     .local pmc match
     .lex "$/", match
@@ -3536,57 +3542,21 @@
     set_addr $I10, rxscan253_loop
     rx250_cur."!mark_push"(0, rx250_pos, $I10)
   rxscan253_done:
-.annotate "line", 88
-  # rx literal  unicode:"\\x"
+.annotate "line", 87
+  # rx literal  "\\f"
     add $I11, rx250_pos, 2
     gt $I11, rx250_eos, rx250_fail
     sub $I11, rx250_pos, rx250_off
     substr $S10, rx250_tgt, $I11, 2
-    ne $S10, unicode:"\\x", rx250_fail
+    ne $S10, "\\f", rx250_fail
     add rx250_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx250_cur."!cursor_pos"(rx250_pos)
     $P10 = rx250_cur."quotemod_check"("b")
     unless $P10, rx250_fail
-  alt254_0:
-.annotate "line", 89
-    set_addr $I10, alt254_1
-    rx250_cur."!mark_push"(0, rx250_pos, $I10)
-  # rx subrule "hexint" subtype=capture negate=
-    rx250_cur."!cursor_pos"(rx250_pos)
-    $P10 = rx250_cur."hexint"()
-    unless $P10, rx250_fail
-    rx250_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexint")
-    rx250_pos = $P10."pos"()
-    goto alt254_end
-  alt254_1:
-  # rx literal  "["
-    add $I11, rx250_pos, 1
-    gt $I11, rx250_eos, rx250_fail
-    sub $I11, rx250_pos, rx250_off
-    substr $S10, rx250_tgt, $I11, 1
-    ne $S10, "[", rx250_fail
-    add rx250_pos, 1
-  # rx subrule "hexints" subtype=capture negate=
-    rx250_cur."!cursor_pos"(rx250_pos)
-    $P10 = rx250_cur."hexints"()
-    unless $P10, rx250_fail
-    rx250_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("hexints")
-    rx250_pos = $P10."pos"()
-  # rx literal  "]"
-    add $I11, rx250_pos, 1
-    gt $I11, rx250_eos, rx250_fail
-    sub $I11, rx250_pos, rx250_off
-    substr $S10, rx250_tgt, $I11, 1
-    ne $S10, "]", rx250_fail
-    add rx250_pos, 1
-  alt254_end:
-.annotate "line", 87
   # rx pass
-    rx250_cur."!cursor_pass"(rx250_pos, "quote_escape:sym<hex>")
-    rx250_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx250_pos)
+    rx250_cur."!cursor_pass"(rx250_pos, "quote_escape:sym<ff>")
+    rx250_cur."!cursor_debug"("PASS  ", "quote_escape:sym<ff>", " at pos=", rx250_pos)
     .return (rx250_cur)
   rx250_fail:
 .annotate "line", 33
@@ -3596,211 +3566,238 @@
     jump $I10
   rx250_done:
     rx250_cur."!cursor_fail"()
-    rx250_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    rx250_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<ff>")
     .return (rx250_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<hex>"  :subid("82_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<ff>"  :subid("82_1272816829.8573") :method
 .annotate "line", 33
     new $P252, "ResizablePMCArray"
-    push $P252, unicode:"\\x"
+    push $P252, "\\f"
     .return ($P252)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<oct>"  :subid("83_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<hex>"  :subid("83_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
-    .local string rx256_tgt
-    .local int rx256_pos
-    .local int rx256_off
-    .local int rx256_eos
-    .local int rx256_rep
-    .local pmc rx256_cur
-    (rx256_cur, rx256_pos, rx256_tgt) = self."!cursor_start"()
-    rx256_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
-    .lex unicode:"$\x{a2}", rx256_cur
+    .local string rx255_tgt
+    .local int rx255_pos
+    .local int rx255_off
+    .local int rx255_eos
+    .local int rx255_rep
+    .local pmc rx255_cur
+    (rx255_cur, rx255_pos, rx255_tgt) = self."!cursor_start"()
+    rx255_cur."!cursor_debug"("START ", "quote_escape:sym<hex>")
+    .lex unicode:"$\x{a2}", rx255_cur
     .local pmc match
     .lex "$/", match
-    length rx256_eos, rx256_tgt
-    set rx256_off, 0
-    lt rx256_pos, 2, rx256_start
-    sub rx256_off, rx256_pos, 1
-    substr rx256_tgt, rx256_tgt, rx256_off
-  rx256_start:
+    length rx255_eos, rx255_tgt
+    set rx255_off, 0
+    lt rx255_pos, 2, rx255_start
+    sub rx255_off, rx255_pos, 1
+    substr rx255_tgt, rx255_tgt, rx255_off
+  rx255_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan259_done
-    goto rxscan259_scan
-  rxscan259_loop:
-    ($P10) = rx256_cur."from"()
+    ne $I10, -1, rxscan258_done
+    goto rxscan258_scan
+  rxscan258_loop:
+    ($P10) = rx255_cur."from"()
     inc $P10
-    set rx256_pos, $P10
-    ge rx256_pos, rx256_eos, rxscan259_done
-  rxscan259_scan:
-    set_addr $I10, rxscan259_loop
-    rx256_cur."!mark_push"(0, rx256_pos, $I10)
-  rxscan259_done:
-.annotate "line", 92
-  # rx literal  "\\o"
-    add $I11, rx256_pos, 2
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 2
-    ne $S10, "\\o", rx256_fail
-    add rx256_pos, 2
+    set rx255_pos, $P10
+    ge rx255_pos, rx255_eos, rxscan258_done
+  rxscan258_scan:
+    set_addr $I10, rxscan258_loop
+    rx255_cur."!mark_push"(0, rx255_pos, $I10)
+  rxscan258_done:
+.annotate "line", 89
+  # rx literal  unicode:"\\x"
+    add $I11, rx255_pos, 2
+    gt $I11, rx255_eos, rx255_fail
+    sub $I11, rx255_pos, rx255_off
+    substr $S10, rx255_tgt, $I11, 2
+    ne $S10, unicode:"\\x", rx255_fail
+    add rx255_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."quotemod_check"("b")
-    unless $P10, rx256_fail
-  alt260_0:
-.annotate "line", 93
-    set_addr $I10, alt260_1
-    rx256_cur."!mark_push"(0, rx256_pos, $I10)
-  # rx subrule "octint" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."octint"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octint")
-    rx256_pos = $P10."pos"()
-    goto alt260_end
-  alt260_1:
+    rx255_cur."!cursor_pos"(rx255_pos)
+    $P10 = rx255_cur."quotemod_check"("b")
+    unless $P10, rx255_fail
+  alt259_0:
+.annotate "line", 90
+    set_addr $I10, alt259_1
+    rx255_cur."!mark_push"(0, rx255_pos, $I10)
+  # rx subrule "hexint" subtype=capture negate=
+    rx255_cur."!cursor_pos"(rx255_pos)
+    $P10 = rx255_cur."hexint"()
+    unless $P10, rx255_fail
+    rx255_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexint")
+    rx255_pos = $P10."pos"()
+    goto alt259_end
+  alt259_1:
   # rx literal  "["
-    add $I11, rx256_pos, 1
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 1
-    ne $S10, "[", rx256_fail
-    add rx256_pos, 1
-  # rx subrule "octints" subtype=capture negate=
-    rx256_cur."!cursor_pos"(rx256_pos)
-    $P10 = rx256_cur."octints"()
-    unless $P10, rx256_fail
-    rx256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("octints")
-    rx256_pos = $P10."pos"()
+    add $I11, rx255_pos, 1
+    gt $I11, rx255_eos, rx255_fail
+    sub $I11, rx255_pos, rx255_off
+    substr $S10, rx255_tgt, $I11, 1
+    ne $S10, "[", rx255_fail
+    add rx255_pos, 1
+  # rx subrule "hexints" subtype=capture negate=
+    rx255_cur."!cursor_pos"(rx255_pos)
+    $P10 = rx255_cur."hexints"()
+    unless $P10, rx255_fail
+    rx255_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("hexints")
+    rx255_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx256_pos, 1
-    gt $I11, rx256_eos, rx256_fail
-    sub $I11, rx256_pos, rx256_off
-    substr $S10, rx256_tgt, $I11, 1
-    ne $S10, "]", rx256_fail
-    add rx256_pos, 1
-  alt260_end:
-.annotate "line", 91
+    add $I11, rx255_pos, 1
+    gt $I11, rx255_eos, rx255_fail
+    sub $I11, rx255_pos, rx255_off
+    substr $S10, rx255_tgt, $I11, 1
+    ne $S10, "]", rx255_fail
+    add rx255_pos, 1
+  alt259_end:
+.annotate "line", 88
   # rx pass
-    rx256_cur."!cursor_pass"(rx256_pos, "quote_escape:sym<oct>")
-    rx256_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx256_pos)
-    .return (rx256_cur)
-  rx256_fail:
-.annotate "line", 33
-    (rx256_rep, rx256_pos, $I10, $P10) = rx256_cur."!mark_fail"(0)
-    lt rx256_pos, -1, rx256_done
-    eq rx256_pos, -1, rx256_fail
+    rx255_cur."!cursor_pass"(rx255_pos, "quote_escape:sym<hex>")
+    rx255_cur."!cursor_debug"("PASS  ", "quote_escape:sym<hex>", " at pos=", rx255_pos)
+    .return (rx255_cur)
+  rx255_fail:
+.annotate "line", 33
+    (rx255_rep, rx255_pos, $I10, $P10) = rx255_cur."!mark_fail"(0)
+    lt rx255_pos, -1, rx255_done
+    eq rx255_pos, -1, rx255_fail
     jump $I10
-  rx256_done:
-    rx256_cur."!cursor_fail"()
-    rx256_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
-    .return (rx256_cur)
+  rx255_done:
+    rx255_cur."!cursor_fail"()
+    rx255_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<hex>")
+    .return (rx255_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<oct>"  :subid("84_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<hex>"  :subid("84_1272816829.8573") :method
 .annotate "line", 33
-    new $P258, "ResizablePMCArray"
-    push $P258, "\\o"
-    .return ($P258)
+    new $P257, "ResizablePMCArray"
+    push $P257, unicode:"\\x"
+    .return ($P257)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<chr>"  :subid("85_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<oct>"  :subid("85_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
-    .local string rx262_tgt
-    .local int rx262_pos
-    .local int rx262_off
-    .local int rx262_eos
-    .local int rx262_rep
-    .local pmc rx262_cur
-    (rx262_cur, rx262_pos, rx262_tgt) = self."!cursor_start"()
-    rx262_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
-    .lex unicode:"$\x{a2}", rx262_cur
+    .local string rx261_tgt
+    .local int rx261_pos
+    .local int rx261_off
+    .local int rx261_eos
+    .local int rx261_rep
+    .local pmc rx261_cur
+    (rx261_cur, rx261_pos, rx261_tgt) = self."!cursor_start"()
+    rx261_cur."!cursor_debug"("START ", "quote_escape:sym<oct>")
+    .lex unicode:"$\x{a2}", rx261_cur
     .local pmc match
     .lex "$/", match
-    length rx262_eos, rx262_tgt
-    set rx262_off, 0
-    lt rx262_pos, 2, rx262_start
-    sub rx262_off, rx262_pos, 1
-    substr rx262_tgt, rx262_tgt, rx262_off
-  rx262_start:
+    length rx261_eos, rx261_tgt
+    set rx261_off, 0
+    lt rx261_pos, 2, rx261_start
+    sub rx261_off, rx261_pos, 1
+    substr rx261_tgt, rx261_tgt, rx261_off
+  rx261_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan265_done
-    goto rxscan265_scan
-  rxscan265_loop:
-    ($P10) = rx262_cur."from"()
+    ne $I10, -1, rxscan264_done
+    goto rxscan264_scan
+  rxscan264_loop:
+    ($P10) = rx261_cur."from"()
     inc $P10
-    set rx262_pos, $P10
-    ge rx262_pos, rx262_eos, rxscan265_done
-  rxscan265_scan:
-    set_addr $I10, rxscan265_loop
-    rx262_cur."!mark_push"(0, rx262_pos, $I10)
-  rxscan265_done:
-.annotate "line", 95
-  # rx literal  "\\c"
-    add $I11, rx262_pos, 2
-    gt $I11, rx262_eos, rx262_fail
-    sub $I11, rx262_pos, rx262_off
-    substr $S10, rx262_tgt, $I11, 2
-    ne $S10, "\\c", rx262_fail
-    add rx262_pos, 2
+    set rx261_pos, $P10
+    ge rx261_pos, rx261_eos, rxscan264_done
+  rxscan264_scan:
+    set_addr $I10, rxscan264_loop
+    rx261_cur."!mark_push"(0, rx261_pos, $I10)
+  rxscan264_done:
+.annotate "line", 93
+  # rx literal  "\\o"
+    add $I11, rx261_pos, 2
+    gt $I11, rx261_eos, rx261_fail
+    sub $I11, rx261_pos, rx261_off
+    substr $S10, rx261_tgt, $I11, 2
+    ne $S10, "\\o", rx261_fail
+    add rx261_pos, 2
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx262_cur."!cursor_pos"(rx262_pos)
-    $P10 = rx262_cur."quotemod_check"("b")
-    unless $P10, rx262_fail
-  # rx subrule "charspec" subtype=capture negate=
-    rx262_cur."!cursor_pos"(rx262_pos)
-    $P10 = rx262_cur."charspec"()
-    unless $P10, rx262_fail
-    rx262_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("charspec")
-    rx262_pos = $P10."pos"()
+    rx261_cur."!cursor_pos"(rx261_pos)
+    $P10 = rx261_cur."quotemod_check"("b")
+    unless $P10, rx261_fail
+  alt265_0:
+.annotate "line", 94
+    set_addr $I10, alt265_1
+    rx261_cur."!mark_push"(0, rx261_pos, $I10)
+  # rx subrule "octint" subtype=capture negate=
+    rx261_cur."!cursor_pos"(rx261_pos)
+    $P10 = rx261_cur."octint"()
+    unless $P10, rx261_fail
+    rx261_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octint")
+    rx261_pos = $P10."pos"()
+    goto alt265_end
+  alt265_1:
+  # rx literal  "["
+    add $I11, rx261_pos, 1
+    gt $I11, rx261_eos, rx261_fail
+    sub $I11, rx261_pos, rx261_off
+    substr $S10, rx261_tgt, $I11, 1
+    ne $S10, "[", rx261_fail
+    add rx261_pos, 1
+  # rx subrule "octints" subtype=capture negate=
+    rx261_cur."!cursor_pos"(rx261_pos)
+    $P10 = rx261_cur."octints"()
+    unless $P10, rx261_fail
+    rx261_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("octints")
+    rx261_pos = $P10."pos"()
+  # rx literal  "]"
+    add $I11, rx261_pos, 1
+    gt $I11, rx261_eos, rx261_fail
+    sub $I11, rx261_pos, rx261_off
+    substr $S10, rx261_tgt, $I11, 1
+    ne $S10, "]", rx261_fail
+    add rx261_pos, 1
+  alt265_end:
+.annotate "line", 92
   # rx pass
-    rx262_cur."!cursor_pass"(rx262_pos, "quote_escape:sym<chr>")
-    rx262_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx262_pos)
-    .return (rx262_cur)
-  rx262_fail:
-.annotate "line", 33
-    (rx262_rep, rx262_pos, $I10, $P10) = rx262_cur."!mark_fail"(0)
-    lt rx262_pos, -1, rx262_done
-    eq rx262_pos, -1, rx262_fail
+    rx261_cur."!cursor_pass"(rx261_pos, "quote_escape:sym<oct>")
+    rx261_cur."!cursor_debug"("PASS  ", "quote_escape:sym<oct>", " at pos=", rx261_pos)
+    .return (rx261_cur)
+  rx261_fail:
+.annotate "line", 33
+    (rx261_rep, rx261_pos, $I10, $P10) = rx261_cur."!mark_fail"(0)
+    lt rx261_pos, -1, rx261_done
+    eq rx261_pos, -1, rx261_fail
     jump $I10
-  rx262_done:
-    rx262_cur."!cursor_fail"()
-    rx262_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
-    .return (rx262_cur)
+  rx261_done:
+    rx261_cur."!cursor_fail"()
+    rx261_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<oct>")
+    .return (rx261_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<chr>"  :subid("86_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<oct>"  :subid("86_1272816829.8573") :method
 .annotate "line", 33
-    new $P264, "ResizablePMCArray"
-    push $P264, "\\c"
-    .return ($P264)
+    new $P263, "ResizablePMCArray"
+    push $P263, "\\o"
+    .return ($P263)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charname"  :subid("87_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "quote_escape:sym<chr>"  :subid("87_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
-    .const 'Sub' $P276 = "89_1267204683.33533" 
-    capture_lex $P276
     .local string rx267_tgt
     .local int rx267_pos
     .local int rx267_off
@@ -3808,7 +3805,7 @@
     .local int rx267_rep
     .local pmc rx267_cur
     (rx267_cur, rx267_pos, rx267_tgt) = self."!cursor_start"()
-    rx267_cur."!cursor_debug"("START ", "charname")
+    rx267_cur."!cursor_debug"("START ", "quote_escape:sym<chr>")
     .lex unicode:"$\x{a2}", rx267_cur
     .local pmc match
     .lex "$/", match
@@ -3819,73 +3816,39 @@
     substr rx267_tgt, rx267_tgt, rx267_off
   rx267_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan271_done
-    goto rxscan271_scan
-  rxscan271_loop:
+    ne $I10, -1, rxscan270_done
+    goto rxscan270_scan
+  rxscan270_loop:
     ($P10) = rx267_cur."from"()
     inc $P10
     set rx267_pos, $P10
-    ge rx267_pos, rx267_eos, rxscan271_done
-  rxscan271_scan:
-    set_addr $I10, rxscan271_loop
-    rx267_cur."!mark_push"(0, rx267_pos, $I10)
-  rxscan271_done:
-  alt272_0:
-.annotate "line", 97
-    set_addr $I10, alt272_1
+    ge rx267_pos, rx267_eos, rxscan270_done
+  rxscan270_scan:
+    set_addr $I10, rxscan270_loop
     rx267_cur."!mark_push"(0, rx267_pos, $I10)
-.annotate "line", 98
-  # rx subrule "integer" subtype=capture negate=
+  rxscan270_done:
+.annotate "line", 96
+  # rx literal  "\\c"
+    add $I11, rx267_pos, 2
+    gt $I11, rx267_eos, rx267_fail
+    sub $I11, rx267_pos, rx267_off
+    substr $S10, rx267_tgt, $I11, 2
+    ne $S10, "\\c", rx267_fail
+    add rx267_pos, 2
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx267_cur."!cursor_pos"(rx267_pos)
-    $P10 = rx267_cur."integer"()
+    $P10 = rx267_cur."quotemod_check"("b")
     unless $P10, rx267_fail
-    rx267_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("integer")
-    rx267_pos = $P10."pos"()
-    goto alt272_end
-  alt272_1:
-.annotate "line", 99
-  # rx enumcharlist negate=0 
-    ge rx267_pos, rx267_eos, rx267_fail
-    sub $I10, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I10, 1
-    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
-    lt $I11, 0, rx267_fail
-    inc rx267_pos
-  # rx rxquantf273 ** 0..*
-    set_addr $I10, rxquantf273_loop
-    rx267_cur."!mark_push"(0, rx267_pos, $I10)
-    goto rxquantf273_done
-  rxquantf273_loop:
-  # rx enumcharlist negate=1 
-    ge rx267_pos, rx267_eos, rx267_fail
-    sub $I10, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I10, 1
-    index $I11, "],#", $S10
-    ge $I11, 0, rx267_fail
-    inc rx267_pos
-    set_addr $I10, rxquantf273_loop
-    rx267_cur."!mark_push"($I274, rx267_pos, $I10)
-  rxquantf273_done:
-  # rx enumcharlist negate=0 
-    ge rx267_pos, rx267_eos, rx267_fail
-    sub $I10, rx267_pos, rx267_off
-    substr $S10, rx267_tgt, $I10, 1
-    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)", $S10
-    lt $I11, 0, rx267_fail
-    inc rx267_pos
-.annotate "line", 100
-  # rx subrule "before" subtype=zerowidth negate=
+  # rx subrule "charspec" subtype=capture negate=
     rx267_cur."!cursor_pos"(rx267_pos)
-    .const 'Sub' $P276 = "89_1267204683.33533" 
-    capture_lex $P276
-    $P10 = rx267_cur."before"($P276)
+    $P10 = rx267_cur."charspec"()
     unless $P10, rx267_fail
-  alt272_end:
-.annotate "line", 97
+    rx267_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("charspec")
+    rx267_pos = $P10."pos"()
   # rx pass
-    rx267_cur."!cursor_pass"(rx267_pos, "charname")
-    rx267_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx267_pos)
+    rx267_cur."!cursor_pass"(rx267_pos, "quote_escape:sym<chr>")
+    rx267_cur."!cursor_debug"("PASS  ", "quote_escape:sym<chr>", " at pos=", rx267_pos)
     .return (rx267_cur)
   rx267_fail:
 .annotate "line", 33
@@ -3895,499 +3858,954 @@
     jump $I10
   rx267_done:
     rx267_cur."!cursor_fail"()
-    rx267_cur."!cursor_debug"("FAIL  ", "charname")
+    rx267_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<chr>")
     .return (rx267_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charname"  :subid("88_1267204683.33533") :method
+.sub "!PREFIX__quote_escape:sym<chr>"  :subid("88_1272816829.8573") :method
 .annotate "line", 33
-    $P269 = self."!PREFIX__!subrule"("integer", "")
-    new $P270, "ResizablePMCArray"
-    push $P270, "Z"
-    push $P270, "Y"
-    push $P270, "X"
-    push $P270, "W"
-    push $P270, "V"
-    push $P270, "U"
-    push $P270, "T"
-    push $P270, "S"
-    push $P270, "R"
-    push $P270, "Q"
-    push $P270, "P"
-    push $P270, "O"
-    push $P270, "N"
-    push $P270, "M"
-    push $P270, "L"
-    push $P270, "K"
-    push $P270, "J"
-    push $P270, "I"
-    push $P270, "H"
-    push $P270, "G"
-    push $P270, "F"
-    push $P270, "E"
-    push $P270, "D"
-    push $P270, "C"
-    push $P270, "B"
-    push $P270, "A"
-    push $P270, "z"
-    push $P270, "y"
-    push $P270, "x"
-    push $P270, "w"
-    push $P270, "v"
-    push $P270, "u"
-    push $P270, "t"
-    push $P270, "s"
-    push $P270, "r"
-    push $P270, "q"
-    push $P270, "p"
-    push $P270, "o"
-    push $P270, "n"
-    push $P270, "m"
-    push $P270, "l"
-    push $P270, "k"
-    push $P270, "j"
-    push $P270, "i"
-    push $P270, "h"
-    push $P270, "g"
-    push $P270, "f"
-    push $P270, "e"
-    push $P270, "d"
-    push $P270, "c"
-    push $P270, "b"
-    push $P270, "a"
-    push $P270, $P269
-    .return ($P270)
+    new $P269, "ResizablePMCArray"
+    push $P269, "\\c"
+    .return ($P269)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "quote_escape:sym<0>"  :subid("89_1272816829.8573") :method :outer("11_1272816829.8573")
+.annotate "line", 33
+    .local string rx272_tgt
+    .local int rx272_pos
+    .local int rx272_off
+    .local int rx272_eos
+    .local int rx272_rep
+    .local pmc rx272_cur
+    (rx272_cur, rx272_pos, rx272_tgt) = self."!cursor_start"()
+    rx272_cur."!cursor_debug"("START ", "quote_escape:sym<0>")
+    .lex unicode:"$\x{a2}", rx272_cur
+    .local pmc match
+    .lex "$/", match
+    length rx272_eos, rx272_tgt
+    set rx272_off, 0
+    lt rx272_pos, 2, rx272_start
+    sub rx272_off, rx272_pos, 1
+    substr rx272_tgt, rx272_tgt, rx272_off
+  rx272_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan275_done
+    goto rxscan275_scan
+  rxscan275_loop:
+    ($P10) = rx272_cur."from"()
+    inc $P10
+    set rx272_pos, $P10
+    ge rx272_pos, rx272_eos, rxscan275_done
+  rxscan275_scan:
+    set_addr $I10, rxscan275_loop
+    rx272_cur."!mark_push"(0, rx272_pos, $I10)
+  rxscan275_done:
+.annotate "line", 97
+  # rx literal  "\\"
+    add $I11, rx272_pos, 1
+    gt $I11, rx272_eos, rx272_fail
+    sub $I11, rx272_pos, rx272_off
+    substr $S10, rx272_tgt, $I11, 1
+    ne $S10, "\\", rx272_fail
+    add rx272_pos, 1
+  # rx subcapture "sym"
+    set_addr $I10, rxcap_276_fail
+    rx272_cur."!mark_push"(0, rx272_pos, $I10)
+  # rx literal  "0"
+    add $I11, rx272_pos, 1
+    gt $I11, rx272_eos, rx272_fail
+    sub $I11, rx272_pos, rx272_off
+    substr $S10, rx272_tgt, $I11, 1
+    ne $S10, "0", rx272_fail
+    add rx272_pos, 1
+    set_addr $I10, rxcap_276_fail
+    ($I12, $I11) = rx272_cur."!mark_peek"($I10)
+    rx272_cur."!cursor_pos"($I11)
+    ($P10) = rx272_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx272_pos, "")
+    rx272_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sym")
+    goto rxcap_276_done
+  rxcap_276_fail:
+    goto rx272_fail
+  rxcap_276_done:
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx272_cur."!cursor_pos"(rx272_pos)
+    $P10 = rx272_cur."quotemod_check"("b")
+    unless $P10, rx272_fail
+  # rx pass
+    rx272_cur."!cursor_pass"(rx272_pos, "quote_escape:sym<0>")
+    rx272_cur."!cursor_debug"("PASS  ", "quote_escape:sym<0>", " at pos=", rx272_pos)
+    .return (rx272_cur)
+  rx272_fail:
+.annotate "line", 33
+    (rx272_rep, rx272_pos, $I10, $P10) = rx272_cur."!mark_fail"(0)
+    lt rx272_pos, -1, rx272_done
+    eq rx272_pos, -1, rx272_fail
+    jump $I10
+  rx272_done:
+    rx272_cur."!cursor_fail"()
+    rx272_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<0>")
+    .return (rx272_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__quote_escape:sym<0>"  :subid("90_1272816829.8573") :method
+.annotate "line", 33
+    new $P274, "ResizablePMCArray"
+    push $P274, "\\0"
+    .return ($P274)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block275"  :anon :subid("89_1267204683.33533") :method :outer("87_1267204683.33533")
+.sub "quote_escape:sym<misc>"  :subid("91_1272816829.8573") :method :outer("11_1272816829.8573")
+.annotate "line", 33
+    .const 'Sub' $P297 = "95_1272816829.8573" 
+    capture_lex $P297
+    .const 'Sub' $P290 = "94_1272816829.8573" 
+    capture_lex $P290
+    .const 'Sub' $P285 = "93_1272816829.8573" 
+    capture_lex $P285
+    .local string rx278_tgt
+    .local int rx278_pos
+    .local int rx278_off
+    .local int rx278_eos
+    .local int rx278_rep
+    .local pmc rx278_cur
+    (rx278_cur, rx278_pos, rx278_tgt) = self."!cursor_start"()
+    rx278_cur."!cursor_debug"("START ", "quote_escape:sym<misc>")
+    .lex unicode:"$\x{a2}", rx278_cur
+    .local pmc match
+    .lex "$/", match
+    length rx278_eos, rx278_tgt
+    set rx278_off, 0
+    lt rx278_pos, 2, rx278_start
+    sub rx278_off, rx278_pos, 1
+    substr rx278_tgt, rx278_tgt, rx278_off
+  rx278_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan281_done
+    goto rxscan281_scan
+  rxscan281_loop:
+    ($P10) = rx278_cur."from"()
+    inc $P10
+    set rx278_pos, $P10
+    ge rx278_pos, rx278_eos, rxscan281_done
+  rxscan281_scan:
+    set_addr $I10, rxscan281_loop
+    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+  rxscan281_done:
+.annotate "line", 98
+    rx278_cur."!cursor_pos"(rx278_pos)
+    find_lex $P282, unicode:"$\x{a2}"
+    $P283 = $P282."MATCH"()
+    store_lex "$/", $P283
+.annotate "line", 99
+    .const 'Sub' $P285 = "93_1272816829.8573" 
+    capture_lex $P285
+    $P286 = $P285()
+  # rx literal  "\\"
+    add $I11, rx278_pos, 1
+    gt $I11, rx278_eos, rx278_fail
+    sub $I11, rx278_pos, rx278_off
+    substr $S10, rx278_tgt, $I11, 1
+    ne $S10, "\\", rx278_fail
+    add rx278_pos, 1
+  alt287_0:
 .annotate "line", 100
-    .local string rx277_tgt
-    .local int rx277_pos
-    .local int rx277_off
-    .local int rx277_eos
-    .local int rx277_rep
-    .local pmc rx277_cur
-    (rx277_cur, rx277_pos, rx277_tgt) = self."!cursor_start"()
-    rx277_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx277_cur
+    set_addr $I10, alt287_1
+    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+.annotate "line", 101
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx278_cur."!cursor_pos"(rx278_pos)
+    $P10 = rx278_cur."quotemod_check"("b")
+    unless $P10, rx278_fail
+  alt288_0:
+.annotate "line", 102
+    set_addr $I10, alt288_1
+    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+.annotate "line", 103
+  # rx subrule $P290 subtype=capture negate=
+    rx278_cur."!cursor_pos"(rx278_pos)
+    .const 'Sub' $P290 = "94_1272816829.8573" 
+    capture_lex $P290
+    $P10 = rx278_cur.$P290()
+    unless $P10, rx278_fail
+    rx278_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("textqq")
+    rx278_pos = $P10."pos"()
+    goto alt288_end
+  alt288_1:
+.annotate "line", 104
+  # rx subcapture "x"
+    set_addr $I10, rxcap_293_fail
+    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+  # rx charclass w
+    ge rx278_pos, rx278_eos, rx278_fail
+    sub $I10, rx278_pos, rx278_off
+    is_cclass $I11, 8192, rx278_tgt, $I10
+    unless $I11, rx278_fail
+    inc rx278_pos
+    set_addr $I10, rxcap_293_fail
+    ($I12, $I11) = rx278_cur."!mark_peek"($I10)
+    rx278_cur."!cursor_pos"($I11)
+    ($P10) = rx278_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx278_pos, "")
+    rx278_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("x")
+    goto rxcap_293_done
+  rxcap_293_fail:
+    goto rx278_fail
+  rxcap_293_done:
+    rx278_cur."!cursor_pos"(rx278_pos)
+    find_lex $P294, unicode:"$\x{a2}"
+    $P295 = $P294."MATCH"()
+    store_lex "$/", $P295
+    .const 'Sub' $P297 = "95_1272816829.8573" 
+    capture_lex $P297
+    $P307 = $P297()
+  alt288_end:
+.annotate "line", 101
+    goto alt287_end
+  alt287_1:
+.annotate "line", 106
+  # rx subcapture "textq"
+    set_addr $I10, rxcap_308_fail
+    rx278_cur."!mark_push"(0, rx278_pos, $I10)
+  # rx charclass .
+    ge rx278_pos, rx278_eos, rx278_fail
+    inc rx278_pos
+    set_addr $I10, rxcap_308_fail
+    ($I12, $I11) = rx278_cur."!mark_peek"($I10)
+    rx278_cur."!cursor_pos"($I11)
+    ($P10) = rx278_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx278_pos, "")
+    rx278_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("textq")
+    goto rxcap_308_done
+  rxcap_308_fail:
+    goto rx278_fail
+  rxcap_308_done:
+  alt287_end:
+.annotate "line", 98
+  # rx pass
+    rx278_cur."!cursor_pass"(rx278_pos, "quote_escape:sym<misc>")
+    rx278_cur."!cursor_debug"("PASS  ", "quote_escape:sym<misc>", " at pos=", rx278_pos)
+    .return (rx278_cur)
+  rx278_fail:
+.annotate "line", 33
+    (rx278_rep, rx278_pos, $I10, $P10) = rx278_cur."!mark_fail"(0)
+    lt rx278_pos, -1, rx278_done
+    eq rx278_pos, -1, rx278_fail
+    jump $I10
+  rx278_done:
+    rx278_cur."!cursor_fail"()
+    rx278_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<misc>")
+    .return (rx278_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__quote_escape:sym<misc>"  :subid("92_1272816829.8573") :method
+.annotate "line", 33
+    new $P280, "ResizablePMCArray"
+    push $P280, ""
+    .return ($P280)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block284"  :anon :subid("93_1272816829.8573") :outer("91_1272816829.8573")
+.annotate "line", 99
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block289"  :anon :subid("94_1272816829.8573") :method :outer("91_1272816829.8573")
+.annotate "line", 103
+    .local string rx291_tgt
+    .local int rx291_pos
+    .local int rx291_off
+    .local int rx291_eos
+    .local int rx291_rep
+    .local pmc rx291_cur
+    (rx291_cur, rx291_pos, rx291_tgt) = self."!cursor_start"()
+    rx291_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx291_cur
+    .local pmc match
+    .lex "$/", match
+    length rx291_eos, rx291_tgt
+    set rx291_off, 0
+    lt rx291_pos, 2, rx291_start
+    sub rx291_off, rx291_pos, 1
+    substr rx291_tgt, rx291_tgt, rx291_off
+  rx291_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan292_done
+    goto rxscan292_scan
+  rxscan292_loop:
+    ($P10) = rx291_cur."from"()
+    inc $P10
+    set rx291_pos, $P10
+    ge rx291_pos, rx291_eos, rxscan292_done
+  rxscan292_scan:
+    set_addr $I10, rxscan292_loop
+    rx291_cur."!mark_push"(0, rx291_pos, $I10)
+  rxscan292_done:
+  # rx charclass W
+    ge rx291_pos, rx291_eos, rx291_fail
+    sub $I10, rx291_pos, rx291_off
+    is_cclass $I11, 8192, rx291_tgt, $I10
+    if $I11, rx291_fail
+    inc rx291_pos
+  # rx pass
+    rx291_cur."!cursor_pass"(rx291_pos, "")
+    rx291_cur."!cursor_debug"("PASS  ", "", " at pos=", rx291_pos)
+    .return (rx291_cur)
+  rx291_fail:
+    (rx291_rep, rx291_pos, $I10, $P10) = rx291_cur."!mark_fail"(0)
+    lt rx291_pos, -1, rx291_done
+    eq rx291_pos, -1, rx291_fail
+    jump $I10
+  rx291_done:
+    rx291_cur."!cursor_fail"()
+    rx291_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx291_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block296"  :anon :subid("95_1272816829.8573") :outer("91_1272816829.8573")
+.annotate "line", 104
+    find_lex $P298, "$/"
+    $P299 = $P298."CURSOR"()
+    new $P300, "String"
+    assign $P300, "Unrecognized backslash sequence: '\\"
+    find_lex $P301, "$/"
+    unless_null $P301, vivify_104
+    $P301 = root_new ['parrot';'Hash']
+  vivify_104:
+    set $P302, $P301["x"]
+    unless_null $P302, vivify_105
+    new $P302, "Undef"
+  vivify_105:
+    $S303 = $P302."Str"()
+    concat $P304, $P300, $S303
+    concat $P305, $P304, "'"
+    $P306 = $P299."panic"($P305)
+    .return ($P306)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "charname"  :subid("96_1272816829.8573") :method :outer("11_1272816829.8573")
+.annotate "line", 33
+    .const 'Sub' $P319 = "98_1272816829.8573" 
+    capture_lex $P319
+    .local string rx310_tgt
+    .local int rx310_pos
+    .local int rx310_off
+    .local int rx310_eos
+    .local int rx310_rep
+    .local pmc rx310_cur
+    (rx310_cur, rx310_pos, rx310_tgt) = self."!cursor_start"()
+    rx310_cur."!cursor_debug"("START ", "charname")
+    .lex unicode:"$\x{a2}", rx310_cur
+    .local pmc match
+    .lex "$/", match
+    length rx310_eos, rx310_tgt
+    set rx310_off, 0
+    lt rx310_pos, 2, rx310_start
+    sub rx310_off, rx310_pos, 1
+    substr rx310_tgt, rx310_tgt, rx310_off
+  rx310_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan314_done
+    goto rxscan314_scan
+  rxscan314_loop:
+    ($P10) = rx310_cur."from"()
+    inc $P10
+    set rx310_pos, $P10
+    ge rx310_pos, rx310_eos, rxscan314_done
+  rxscan314_scan:
+    set_addr $I10, rxscan314_loop
+    rx310_cur."!mark_push"(0, rx310_pos, $I10)
+  rxscan314_done:
+  alt315_0:
+.annotate "line", 110
+    set_addr $I10, alt315_1
+    rx310_cur."!mark_push"(0, rx310_pos, $I10)
+.annotate "line", 111
+  # rx subrule "integer" subtype=capture negate=
+    rx310_cur."!cursor_pos"(rx310_pos)
+    $P10 = rx310_cur."integer"()
+    unless $P10, rx310_fail
+    rx310_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("integer")
+    rx310_pos = $P10."pos"()
+    goto alt315_end
+  alt315_1:
+.annotate "line", 112
+  # rx enumcharlist negate=0 
+    ge rx310_pos, rx310_eos, rx310_fail
+    sub $I10, rx310_pos, rx310_off
+    substr $S10, rx310_tgt, $I10, 1
+    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
+    lt $I11, 0, rx310_fail
+    inc rx310_pos
+  # rx rxquantf316 ** 0..*
+    set_addr $I10, rxquantf316_loop
+    rx310_cur."!mark_push"(0, rx310_pos, $I10)
+    goto rxquantf316_done
+  rxquantf316_loop:
+  # rx enumcharlist negate=1 
+    ge rx310_pos, rx310_eos, rx310_fail
+    sub $I10, rx310_pos, rx310_off
+    substr $S10, rx310_tgt, $I10, 1
+    index $I11, "],#", $S10
+    ge $I11, 0, rx310_fail
+    inc rx310_pos
+    set_addr $I10, rxquantf316_loop
+    rx310_cur."!mark_push"($I317, rx310_pos, $I10)
+  rxquantf316_done:
+  # rx enumcharlist negate=0 
+    ge rx310_pos, rx310_eos, rx310_fail
+    sub $I10, rx310_pos, rx310_off
+    substr $S10, rx310_tgt, $I10, 1
+    index $I11, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)", $S10
+    lt $I11, 0, rx310_fail
+    inc rx310_pos
+.annotate "line", 113
+  # rx subrule "before" subtype=zerowidth negate=
+    rx310_cur."!cursor_pos"(rx310_pos)
+    .const 'Sub' $P319 = "98_1272816829.8573" 
+    capture_lex $P319
+    $P10 = rx310_cur."before"($P319)
+    unless $P10, rx310_fail
+  alt315_end:
+.annotate "line", 110
+  # rx pass
+    rx310_cur."!cursor_pass"(rx310_pos, "charname")
+    rx310_cur."!cursor_debug"("PASS  ", "charname", " at pos=", rx310_pos)
+    .return (rx310_cur)
+  rx310_fail:
+.annotate "line", 33
+    (rx310_rep, rx310_pos, $I10, $P10) = rx310_cur."!mark_fail"(0)
+    lt rx310_pos, -1, rx310_done
+    eq rx310_pos, -1, rx310_fail
+    jump $I10
+  rx310_done:
+    rx310_cur."!cursor_fail"()
+    rx310_cur."!cursor_debug"("FAIL  ", "charname")
+    .return (rx310_cur)
+    .return ()
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "!PREFIX__charname"  :subid("97_1272816829.8573") :method
+.annotate "line", 33
+    $P312 = self."!PREFIX__!subrule"("integer", "")
+    new $P313, "ResizablePMCArray"
+    push $P313, "Z"
+    push $P313, "Y"
+    push $P313, "X"
+    push $P313, "W"
+    push $P313, "V"
+    push $P313, "U"
+    push $P313, "T"
+    push $P313, "S"
+    push $P313, "R"
+    push $P313, "Q"
+    push $P313, "P"
+    push $P313, "O"
+    push $P313, "N"
+    push $P313, "M"
+    push $P313, "L"
+    push $P313, "K"
+    push $P313, "J"
+    push $P313, "I"
+    push $P313, "H"
+    push $P313, "G"
+    push $P313, "F"
+    push $P313, "E"
+    push $P313, "D"
+    push $P313, "C"
+    push $P313, "B"
+    push $P313, "A"
+    push $P313, "z"
+    push $P313, "y"
+    push $P313, "x"
+    push $P313, "w"
+    push $P313, "v"
+    push $P313, "u"
+    push $P313, "t"
+    push $P313, "s"
+    push $P313, "r"
+    push $P313, "q"
+    push $P313, "p"
+    push $P313, "o"
+    push $P313, "n"
+    push $P313, "m"
+    push $P313, "l"
+    push $P313, "k"
+    push $P313, "j"
+    push $P313, "i"
+    push $P313, "h"
+    push $P313, "g"
+    push $P313, "f"
+    push $P313, "e"
+    push $P313, "d"
+    push $P313, "c"
+    push $P313, "b"
+    push $P313, "a"
+    push $P313, $P312
+    .return ($P313)
+.end
+
+
+.namespace ["HLL";"Grammar"]
+.sub "_block318"  :anon :subid("98_1272816829.8573") :method :outer("96_1272816829.8573")
+.annotate "line", 113
+    .local string rx320_tgt
+    .local int rx320_pos
+    .local int rx320_off
+    .local int rx320_eos
+    .local int rx320_rep
+    .local pmc rx320_cur
+    (rx320_cur, rx320_pos, rx320_tgt) = self."!cursor_start"()
+    rx320_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx320_cur
     .local pmc match
     .lex "$/", match
-    length rx277_eos, rx277_tgt
-    set rx277_off, 0
-    lt rx277_pos, 2, rx277_start
-    sub rx277_off, rx277_pos, 1
-    substr rx277_tgt, rx277_tgt, rx277_off
-  rx277_start:
+    length rx320_eos, rx320_tgt
+    set rx320_off, 0
+    lt rx320_pos, 2, rx320_start
+    sub rx320_off, rx320_pos, 1
+    substr rx320_tgt, rx320_tgt, rx320_off
+  rx320_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan278_done
-    goto rxscan278_scan
-  rxscan278_loop:
-    ($P10) = rx277_cur."from"()
+    ne $I10, -1, rxscan321_done
+    goto rxscan321_scan
+  rxscan321_loop:
+    ($P10) = rx320_cur."from"()
     inc $P10
-    set rx277_pos, $P10
-    ge rx277_pos, rx277_eos, rxscan278_done
-  rxscan278_scan:
-    set_addr $I10, rxscan278_loop
-    rx277_cur."!mark_push"(0, rx277_pos, $I10)
-  rxscan278_done:
+    set rx320_pos, $P10
+    ge rx320_pos, rx320_eos, rxscan321_done
+  rxscan321_scan:
+    set_addr $I10, rxscan321_loop
+    rx320_cur."!mark_push"(0, rx320_pos, $I10)
+  rxscan321_done:
   # rx charclass_q s r 0..-1
-    sub $I10, rx277_pos, rx277_off
-    find_not_cclass $I11, 32, rx277_tgt, $I10, rx277_eos
-    add rx277_pos, rx277_off, $I11
+    sub $I10, rx320_pos, rx320_off
+    find_not_cclass $I11, 32, rx320_tgt, $I10, rx320_eos
+    add rx320_pos, rx320_off, $I11
   # rx enumcharlist negate=0 
-    ge rx277_pos, rx277_eos, rx277_fail
-    sub $I10, rx277_pos, rx277_off
-    substr $S10, rx277_tgt, $I10, 1
+    ge rx320_pos, rx320_eos, rx320_fail
+    sub $I10, rx320_pos, rx320_off
+    substr $S10, rx320_tgt, $I10, 1
     index $I11, "],#", $S10
-    lt $I11, 0, rx277_fail
-    inc rx277_pos
+    lt $I11, 0, rx320_fail
+    inc rx320_pos
   # rx pass
-    rx277_cur."!cursor_pass"(rx277_pos, "")
-    rx277_cur."!cursor_debug"("PASS  ", "", " at pos=", rx277_pos)
-    .return (rx277_cur)
-  rx277_fail:
-    (rx277_rep, rx277_pos, $I10, $P10) = rx277_cur."!mark_fail"(0)
-    lt rx277_pos, -1, rx277_done
-    eq rx277_pos, -1, rx277_fail
+    rx320_cur."!cursor_pass"(rx320_pos, "")
+    rx320_cur."!cursor_debug"("PASS  ", "", " at pos=", rx320_pos)
+    .return (rx320_cur)
+  rx320_fail:
+    (rx320_rep, rx320_pos, $I10, $P10) = rx320_cur."!mark_fail"(0)
+    lt rx320_pos, -1, rx320_done
+    eq rx320_pos, -1, rx320_fail
     jump $I10
-  rx277_done:
-    rx277_cur."!cursor_fail"()
-    rx277_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx277_cur)
+  rx320_done:
+    rx320_cur."!cursor_fail"()
+    rx320_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx320_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charnames"  :subid("90_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "charnames"  :subid("99_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
-    .local string rx280_tgt
-    .local int rx280_pos
-    .local int rx280_off
-    .local int rx280_eos
-    .local int rx280_rep
-    .local pmc rx280_cur
-    (rx280_cur, rx280_pos, rx280_tgt) = self."!cursor_start"()
-    rx280_cur."!cursor_debug"("START ", "charnames")
-    rx280_cur."!cursor_caparray"("charname")
-    .lex unicode:"$\x{a2}", rx280_cur
+    .local string rx323_tgt
+    .local int rx323_pos
+    .local int rx323_off
+    .local int rx323_eos
+    .local int rx323_rep
+    .local pmc rx323_cur
+    (rx323_cur, rx323_pos, rx323_tgt) = self."!cursor_start"()
+    rx323_cur."!cursor_debug"("START ", "charnames")
+    rx323_cur."!cursor_caparray"("charname")
+    .lex unicode:"$\x{a2}", rx323_cur
     .local pmc match
     .lex "$/", match
-    length rx280_eos, rx280_tgt
-    set rx280_off, 0
-    lt rx280_pos, 2, rx280_start
-    sub rx280_off, rx280_pos, 1
-    substr rx280_tgt, rx280_tgt, rx280_off
-  rx280_start:
+    length rx323_eos, rx323_tgt
+    set rx323_off, 0
+    lt rx323_pos, 2, rx323_start
+    sub rx323_off, rx323_pos, 1
+    substr rx323_tgt, rx323_tgt, rx323_off
+  rx323_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan283_done
-    goto rxscan283_scan
-  rxscan283_loop:
-    ($P10) = rx280_cur."from"()
+    ne $I10, -1, rxscan326_done
+    goto rxscan326_scan
+  rxscan326_loop:
+    ($P10) = rx323_cur."from"()
     inc $P10
-    set rx280_pos, $P10
-    ge rx280_pos, rx280_eos, rxscan283_done
-  rxscan283_scan:
-    set_addr $I10, rxscan283_loop
-    rx280_cur."!mark_push"(0, rx280_pos, $I10)
-  rxscan283_done:
-.annotate "line", 102
-  # rx rxquantr284 ** 1..*
-    set_addr $I285, rxquantr284_done
-    rx280_cur."!mark_push"(0, -1, $I285)
-  rxquantr284_loop:
+    set rx323_pos, $P10
+    ge rx323_pos, rx323_eos, rxscan326_done
+  rxscan326_scan:
+    set_addr $I10, rxscan326_loop
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
+  rxscan326_done:
+.annotate "line", 115
+  # rx rxquantr327 ** 1..*
+    set_addr $I328, rxquantr327_done
+    rx323_cur."!mark_push"(0, -1, $I328)
+  rxquantr327_loop:
   # rx subrule "ws" subtype=method negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."ws"()
-    unless $P10, rx280_fail
-    rx280_pos = $P10."pos"()
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
   # rx subrule "charname" subtype=capture negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."charname"()
-    unless $P10, rx280_fail
-    rx280_cur."!mark_push"(0, -1, 0, $P10)
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."charname"()
+    unless $P10, rx323_fail
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charname")
-    rx280_pos = $P10."pos"()
+    rx323_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx280_cur."!cursor_pos"(rx280_pos)
-    $P10 = rx280_cur."ws"()
-    unless $P10, rx280_fail
-    rx280_pos = $P10."pos"()
-    (rx280_rep) = rx280_cur."!mark_commit"($I285)
-    rx280_cur."!mark_push"(rx280_rep, rx280_pos, $I285)
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+    (rx323_rep) = rx323_cur."!mark_commit"($I328)
+    rx323_cur."!mark_push"(rx323_rep, rx323_pos, $I328)
   # rx literal  ","
-    add $I11, rx280_pos, 1
-    gt $I11, rx280_eos, rx280_fail
-    sub $I11, rx280_pos, rx280_off
-    substr $S10, rx280_tgt, $I11, 1
-    ne $S10, ",", rx280_fail
-    add rx280_pos, 1
-    goto rxquantr284_loop
-  rxquantr284_done:
+    add $I11, rx323_pos, 1
+    gt $I11, rx323_eos, rx323_fail
+    sub $I11, rx323_pos, rx323_off
+    substr $S10, rx323_tgt, $I11, 1
+    ne $S10, ",", rx323_fail
+    add rx323_pos, 1
+    goto rxquantr327_loop
+  rxquantr327_done:
   # rx pass
-    rx280_cur."!cursor_pass"(rx280_pos, "charnames")
-    rx280_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx280_pos)
-    .return (rx280_cur)
-  rx280_fail:
-.annotate "line", 33
-    (rx280_rep, rx280_pos, $I10, $P10) = rx280_cur."!mark_fail"(0)
-    lt rx280_pos, -1, rx280_done
-    eq rx280_pos, -1, rx280_fail
+    rx323_cur."!cursor_pass"(rx323_pos, "charnames")
+    rx323_cur."!cursor_debug"("PASS  ", "charnames", " at pos=", rx323_pos)
+    .return (rx323_cur)
+  rx323_fail:
+.annotate "line", 33
+    (rx323_rep, rx323_pos, $I10, $P10) = rx323_cur."!mark_fail"(0)
+    lt rx323_pos, -1, rx323_done
+    eq rx323_pos, -1, rx323_fail
     jump $I10
-  rx280_done:
-    rx280_cur."!cursor_fail"()
-    rx280_cur."!cursor_debug"("FAIL  ", "charnames")
-    .return (rx280_cur)
+  rx323_done:
+    rx323_cur."!cursor_fail"()
+    rx323_cur."!cursor_debug"("FAIL  ", "charnames")
+    .return (rx323_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charnames"  :subid("91_1267204683.33533") :method
+.sub "!PREFIX__charnames"  :subid("100_1272816829.8573") :method
 .annotate "line", 33
-    new $P282, "ResizablePMCArray"
-    push $P282, ""
-    .return ($P282)
+    new $P325, "ResizablePMCArray"
+    push $P325, ""
+    .return ($P325)
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charspec"  :subid("92_1267204683.33533") :method :outer("11_1267204683.33533")
+.sub "charspec"  :subid("101_1272816829.8573") :method :outer("11_1272816829.8573")
 .annotate "line", 33
-    .local string rx287_tgt
-    .local int rx287_pos
-    .local int rx287_off
-    .local int rx287_eos
-    .local int rx287_rep
-    .local pmc rx287_cur
-    (rx287_cur, rx287_pos, rx287_tgt) = self."!cursor_start"()
-    rx287_cur."!cursor_debug"("START ", "charspec")
-    .lex unicode:"$\x{a2}", rx287_cur
+    .local string rx330_tgt
+    .local int rx330_pos
+    .local int rx330_off
+    .local int rx330_eos
+    .local int rx330_rep
+    .local pmc rx330_cur
+    (rx330_cur, rx330_pos, rx330_tgt) = self."!cursor_start"()
+    rx330_cur."!cursor_debug"("START ", "charspec")
+    .lex unicode:"$\x{a2}", rx330_cur
     .local pmc match
     .lex "$/", match
-    length rx287_eos, rx287_tgt
-    set rx287_off, 0
-    lt rx287_pos, 2, rx287_start
-    sub rx287_off, rx287_pos, 1
-    substr rx287_tgt, rx287_tgt, rx287_off
-  rx287_start:
+    length rx330_eos, rx330_tgt
+    set rx330_off, 0
+    lt rx330_pos, 2, rx330_start
+    sub rx330_off, rx330_pos, 1
+    substr rx330_tgt, rx330_tgt, rx330_off
+  rx330_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan292_done
-    goto rxscan292_scan
-  rxscan292_loop:
-    ($P10) = rx287_cur."from"()
+    ne $I10, -1, rxscan335_done
+    goto rxscan335_scan
+  rxscan335_loop:
+    ($P10) = rx330_cur."from"()
     inc $P10
-    set rx287_pos, $P10
-    ge rx287_pos, rx287_eos, rxscan292_done
-  rxscan292_scan:
-    set_addr $I10, rxscan292_loop
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-  rxscan292_done:
-  alt293_0:
-.annotate "line", 104
-    set_addr $I10, alt293_1
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-.annotate "line", 105
+    set rx330_pos, $P10
+    ge rx330_pos, rx330_eos, rxscan335_done
+  rxscan335_scan:
+    set_addr $I10, rxscan335_loop
+    rx330_cur."!mark_push"(0, rx330_pos, $I10)
+  rxscan335_done:
+  alt336_0:
+.annotate "line", 117
+    set_addr $I10, alt336_1
+    rx330_cur."!mark_push"(0, rx330_pos, $I10)
+.annotate "line", 118
   # rx literal  "["
-    add $I11, rx287_pos, 1
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 1
-    ne $S10, "[", rx287_fail
-    add rx287_pos, 1
+    add $I11, rx330_pos, 1
+    gt $I11, rx330_eos, rx330_fail
+    sub $I11, rx330_pos, rx330_off
+    substr $S10, rx330_tgt, $I11, 1
+    ne $S10, "[", rx330_fail
+    add rx330_pos, 1
   # rx subrule "charnames" subtype=capture negate=
-    rx287_cur."!cursor_pos"(rx287_pos)
-    $P10 = rx287_cur."charnames"()
-    unless $P10, rx287_fail
-    rx287_cur."!mark_push"(0, -1, 0, $P10)
+    rx330_cur."!cursor_pos"(rx330_pos)
+    $P10 = rx330_cur."charnames"()
+    unless $P10, rx330_fail
+    rx330_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("charnames")
-    rx287_pos = $P10."pos"()
+    rx330_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx287_pos, 1
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 1
-    ne $S10, "]", rx287_fail
-    add rx287_pos, 1
-    goto alt293_end
-  alt293_1:
-    set_addr $I10, alt293_2
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-.annotate "line", 106
+    add $I11, rx330_pos, 1
+    gt $I11, rx330_eos, rx330_fail
+    sub $I11, rx330_pos, rx330_off
+    substr $S10, rx330_tgt, $I11, 1
+    ne $S10, "]", rx330_fail
+    add rx330_pos, 1
+    goto alt336_end
+  alt336_1:
+    set_addr $I10, alt336_2
+    rx330_cur."!mark_push"(0, rx330_pos, $I10)
+.annotate "line", 119
   # rx charclass_q d r 1..-1
-    sub $I10, rx287_pos, rx287_off
-    find_not_cclass $I11, 8, rx287_tgt, $I10, rx287_eos
+    sub $I10, rx330_pos, rx330_off
+    find_not_cclass $I11, 8, rx330_tgt, $I10, rx330_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx287_fail
-    add rx287_pos, rx287_off, $I11
-  # rx rxquantr294 ** 0..*
-    set_addr $I295, rxquantr294_done
-    rx287_cur."!mark_push"(0, rx287_pos, $I295)
-  rxquantr294_loop:
+    lt $I11, $I12, rx330_fail
+    add rx330_pos, rx330_off, $I11
+  # rx rxquantr337 ** 0..*
+    set_addr $I338, rxquantr337_done
+    rx330_cur."!mark_push"(0, rx330_pos, $I338)
+  rxquantr337_loop:
   # rx literal  "_"
-    add $I11, rx287_pos, 1
-    gt $I11, rx287_eos, rx287_fail
-    sub $I11, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I11, 1
-    ne $S10, "_", rx287_fail
-    add rx287_pos, 1
+    add $I11, rx330_pos, 1
+    gt $I11, rx330_eos, rx330_fail
+    sub $I11, rx330_pos, rx330_off
+    substr $S10, rx330_tgt, $I11, 1
+    ne $S10, "_", rx330_fail
+    add rx330_pos, 1
   # rx charclass_q d r 1..-1
-    sub $I10, rx287_pos, rx287_off
-    find_not_cclass $I11, 8, rx287_tgt, $I10, rx287_eos
+    sub $I10, rx330_pos, rx330_off
+    find_not_cclass $I11, 8, rx330_tgt, $I10, rx330_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx287_fail
-    add rx287_pos, rx287_off, $I11
-    (rx287_rep) = rx287_cur."!mark_commit"($I295)
-    rx287_cur."!mark_push"(rx287_rep, rx287_pos, $I295)
-    goto rxquantr294_loop
-  rxquantr294_done:
-    goto alt293_end
-  alt293_2:
-    set_addr $I10, alt293_3
-    rx287_cur."!mark_push"(0, rx287_pos, $I10)
-.annotate "line", 107
+    lt $I11, $I12, rx330_fail
+    add rx330_pos, rx330_off, $I11
+    (rx330_rep) = rx330_cur."!mark_commit"($I338)
+    rx330_cur."!mark_push"(rx330_rep, rx330_pos, $I338)
+    goto rxquantr337_loop
+  rxquantr337_done:
+    goto alt336_end
+  alt336_2:
+    set_addr $I10, alt336_3
+    rx330_cur."!mark_push"(0, rx330_pos, $I10)
+.annotate "line", 120
   # rx enumcharlist negate=0 
-    ge rx287_pos, rx287_eos, rx287_fail
-    sub $I10, rx287_pos, rx287_off
-    substr $S10, rx287_tgt, $I10, 1
+    ge rx330_pos, rx330_eos, rx330_fail
+    sub $I10, rx330_pos, rx330_off
+    substr $S10, rx330_tgt, $I10, 1
     index $I11, "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ", $S10
-    lt $I11, 0, rx287_fail
-    inc rx287_pos
-    goto alt293_end
-  alt293_3:
-.annotate "line", 108
+    lt $I11, 0, rx330_fail
+    inc rx330_pos
+    goto alt336_end
+  alt336_3:
+.annotate "line", 121
   # rx subrule "panic" subtype=method negate=
-    rx287_cur."!cursor_pos"(rx287_pos)
-    $P10 = rx287_cur."panic"("Unrecognized \\c character")
-    unless $P10, rx287_fail
-    rx287_pos = $P10."pos"()
-  alt293_end:
-.annotate "line", 103
+    rx330_cur."!cursor_pos"(rx330_pos)
+    $P10 = rx330_cur."panic"("Unrecognized \\c character")
+    unless $P10, rx330_fail
+    rx330_pos = $P10."pos"()
+  alt336_end:
+.annotate "line", 116
   # rx pass
-    rx287_cur."!cursor_pass"(rx287_pos, "charspec")
-    rx287_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx287_pos)
-    .return (rx287_cur)
-  rx287_fail:
-.annotate "line", 33
-    (rx287_rep, rx287_pos, $I10, $P10) = rx287_cur."!mark_fail"(0)
-    lt rx287_pos, -1, rx287_done
-    eq rx287_pos, -1, rx287_fail
+    rx330_cur."!cursor_pass"(rx330_pos, "charspec")
+    rx330_cur."!cursor_debug"("PASS  ", "charspec", " at pos=", rx330_pos)
+    .return (rx330_cur)
+  rx330_fail:
+.annotate "line", 33
+    (rx330_rep, rx330_pos, $I10, $P10) = rx330_cur."!mark_fail"(0)
+    lt rx330_pos, -1, rx330_done
+    eq rx330_pos, -1, rx330_fail
     jump $I10
-  rx287_done:
-    rx287_cur."!cursor_fail"()
-    rx287_cur."!cursor_debug"("FAIL  ", "charspec")
-    .return (rx287_cur)
+  rx330_done:
+    rx330_cur."!cursor_fail"()
+    rx330_cur."!cursor_debug"("FAIL  ", "charspec")
+    .return (rx330_cur)
     .return ()
 .end
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charspec"  :subid("93_1267204683.33533") :method
+.sub "!PREFIX__charspec"  :subid("102_1272816829.8573") :method
 .annotate "line", 33
-    $P289 = self."!PREFIX__!subrule"("", "")
-    $P290 = self."!PREFIX__!subrule"("charnames", "[")
-    new $P291, "ResizablePMCArray"
-    push $P291, $P289
-    push $P291, "Z"
-    push $P291, "Y"
-    push $P291, "X"
-    push $P291, "W"
-    push $P291, "V"
-    push $P291, "U"
-    push $P291, "T"
-    push $P291, "S"
-    push $P291, "R"
-    push $P291, "Q"
-    push $P291, "P"
-    push $P291, "O"
-    push $P291, "N"
-    push $P291, "M"
-    push $P291, "L"
-    push $P291, "K"
-    push $P291, "J"
-    push $P291, "I"
-    push $P291, "H"
-    push $P291, "G"
-    push $P291, "F"
-    push $P291, "E"
-    push $P291, "D"
-    push $P291, "C"
-    push $P291, "B"
-    push $P291, "A"
-    push $P291, "@"
-    push $P291, "?"
-    push $P291, ""
-    push $P291, $P290
-    .return ($P291)
+    $P332 = self."!PREFIX__!subrule"("", "")
+    $P333 = self."!PREFIX__!subrule"("charnames", "[")
+    new $P334, "ResizablePMCArray"
+    push $P334, $P332
+    push $P334, "Z"
+    push $P334, "Y"
+    push $P334, "X"
+    push $P334, "W"
+    push $P334, "V"
+    push $P334, "U"
+    push $P334, "T"
+    push $P334, "S"
+    push $P334, "R"
+    push $P334, "Q"
+    push $P334, "P"
+    push $P334, "O"
+    push $P334, "N"
+    push $P334, "M"
+    push $P334, "L"
+    push $P334, "K"
+    push $P334, "J"
+    push $P334, "I"
+    push $P334, "H"
+    push $P334, "G"
+    push $P334, "F"
+    push $P334, "E"
+    push $P334, "D"
+    push $P334, "C"
+    push $P334, "B"
+    push $P334, "A"
+    push $P334, "@"
+    push $P334, "?"
+    push $P334, ""
+    push $P334, $P333
+    .return ($P334)
 .end
 
 ### .include 'gen/hllgrammar-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204685.44293")
+.sub "_block11"  :anon :subid("10_1272816831.39278")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
 .annotate "line", 3
     get_hll_global $P14, ["HLL";"Actions"], "_block13" 
     capture_lex $P14
-    $P538 = $P14()
+    $P571 = $P14()
 .annotate "line", 1
-    .return ($P538)
+    .return ($P571)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post46") :outer("10_1267204685.44293")
+.sub "" :load :init :subid("post49") :outer("10_1272816831.39278")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204685.44293" 
+    .const 'Sub' $P12 = "10_1272816831.39278" 
     .local pmc block
     set block, $P12
-    $P539 = get_root_global ["parrot"], "P6metaclass"
-    $P539."new_class"("HLL::Actions")
+    $P572 = get_root_global ["parrot"], "P6metaclass"
+    $P572."new_class"("HLL::Actions")
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block13"  :subid("11_1267204685.44293") :outer("10_1267204685.44293")
+.sub "_block13"  :subid("11_1272816831.39278") :outer("10_1272816831.39278")
 .annotate "line", 3
-    .const 'Sub' $P521 = "45_1267204685.44293" 
-    capture_lex $P521
-    .const 'Sub' $P496 = "43_1267204685.44293" 
-    capture_lex $P496
-    .const 'Sub' $P465 = "42_1267204685.44293" 
-    capture_lex $P465
-    .const 'Sub' $P455 = "41_1267204685.44293" 
-    capture_lex $P455
-    .const 'Sub' $P438 = "40_1267204685.44293" 
-    capture_lex $P438
-    .const 'Sub' $P421 = "39_1267204685.44293" 
+    .const 'Sub' $P554 = "48_1272816831.39278" 
+    capture_lex $P554
+    .const 'Sub' $P529 = "46_1272816831.39278" 
+    capture_lex $P529
+    .const 'Sub' $P498 = "45_1272816831.39278" 
+    capture_lex $P498
+    .const 'Sub' $P479 = "44_1272816831.39278" 
+    capture_lex $P479
+    .const 'Sub' $P472 = "43_1272816831.39278" 
+    capture_lex $P472
+    .const 'Sub' $P462 = "42_1272816831.39278" 
+    capture_lex $P462
+    .const 'Sub' $P445 = "41_1272816831.39278" 
+    capture_lex $P445
+    .const 'Sub' $P428 = "40_1272816831.39278" 
+    capture_lex $P428
+    .const 'Sub' $P421 = "39_1272816831.39278" 
     capture_lex $P421
-    .const 'Sub' $P414 = "38_1267204685.44293" 
+    .const 'Sub' $P414 = "38_1272816831.39278" 
     capture_lex $P414
-    .const 'Sub' $P407 = "37_1267204685.44293" 
+    .const 'Sub' $P407 = "37_1272816831.39278" 
     capture_lex $P407
-    .const 'Sub' $P400 = "36_1267204685.44293" 
+    .const 'Sub' $P400 = "36_1272816831.39278" 
     capture_lex $P400
-    .const 'Sub' $P393 = "35_1267204685.44293" 
+    .const 'Sub' $P393 = "35_1272816831.39278" 
     capture_lex $P393
-    .const 'Sub' $P383 = "34_1267204685.44293" 
+    .const 'Sub' $P383 = "34_1272816831.39278" 
     capture_lex $P383
-    .const 'Sub' $P376 = "33_1267204685.44293" 
+    .const 'Sub' $P376 = "33_1272816831.39278" 
     capture_lex $P376
-    .const 'Sub' $P360 = "32_1267204685.44293" 
+    .const 'Sub' $P360 = "32_1272816831.39278" 
     capture_lex $P360
-    .const 'Sub' $P285 = "30_1267204685.44293" 
+    .const 'Sub' $P285 = "30_1272816831.39278" 
     capture_lex $P285
-    .const 'Sub' $P222 = "27_1267204685.44293" 
+    .const 'Sub' $P222 = "27_1272816831.39278" 
     capture_lex $P222
-    .const 'Sub' $P213 = "26_1267204685.44293" 
+    .const 'Sub' $P213 = "26_1272816831.39278" 
     capture_lex $P213
-    .const 'Sub' $P204 = "25_1267204685.44293" 
+    .const 'Sub' $P204 = "25_1272816831.39278" 
     capture_lex $P204
-    .const 'Sub' $P195 = "24_1267204685.44293" 
+    .const 'Sub' $P195 = "24_1272816831.39278" 
     capture_lex $P195
-    .const 'Sub' $P186 = "23_1267204685.44293" 
+    .const 'Sub' $P186 = "23_1272816831.39278" 
     capture_lex $P186
-    .const 'Sub' $P177 = "22_1267204685.44293" 
+    .const 'Sub' $P177 = "22_1272816831.39278" 
     capture_lex $P177
-    .const 'Sub' $P167 = "21_1267204685.44293" 
+    .const 'Sub' $P167 = "21_1272816831.39278" 
     capture_lex $P167
-    .const 'Sub' $P157 = "20_1267204685.44293" 
+    .const 'Sub' $P157 = "20_1272816831.39278" 
     capture_lex $P157
-    .const 'Sub' $P149 = "19_1267204685.44293" 
+    .const 'Sub' $P149 = "19_1272816831.39278" 
     capture_lex $P149
-    .const 'Sub' $P139 = "18_1267204685.44293" 
+    .const 'Sub' $P139 = "18_1272816831.39278" 
     capture_lex $P139
-    .const 'Sub' $P129 = "17_1267204685.44293" 
+    .const 'Sub' $P129 = "17_1272816831.39278" 
     capture_lex $P129
-    .const 'Sub' $P28 = "14_1267204685.44293" 
+    .const 'Sub' $P28 = "14_1272816831.39278" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1267204685.44293" 
+    .const 'Sub' $P22 = "13_1272816831.39278" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1267204685.44293" 
+    .const 'Sub' $P15 = "12_1272816831.39278" 
     capture_lex $P15
-.annotate "line", 188
-    .const 'Sub' $P521 = "45_1267204685.44293" 
-    capture_lex $P521
+.annotate "line", 197
+    .const 'Sub' $P554 = "48_1272816831.39278" 
+    capture_lex $P554
 .annotate "line", 3
-    .return ($P521)
+    .return ($P554)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "string_to_int"  :subid("12_1267204685.44293") :outer("11_1267204685.44293")
+.sub "string_to_int"  :subid("12_1272816831.39278") :outer("11_1272816831.39278")
     .param pmc param_18
     .param pmc param_19
 .annotate "line", 3
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(58)
+    $P17."handle_types"(57)
     push_eh $P17
     .lex "$src", param_18
     .lex "$base", param_19
@@ -4434,12 +4852,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "ints_to_string"  :subid("13_1267204685.44293") :outer("11_1267204685.44293")
+.sub "ints_to_string"  :subid("13_1272816831.39278") :outer("11_1272816831.39278")
     .param pmc param_25
 .annotate "line", 37
     new $P24, 'ExceptionHandler'
     set_addr $P24, control_23
-    $P24."handle_types"(58)
+    $P24."handle_types"(57)
     push_eh $P24
     .lex "$ints", param_25
 .annotate "line", 38
@@ -4475,25 +4893,25 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "EXPR"  :subid("14_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "EXPR"  :subid("14_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_31
     .param pmc param_32 :optional
     .param int has_param_32 :opt_flag
 .annotate "line", 62
-    .const 'Sub' $P111 = "16_1267204685.44293" 
+    .const 'Sub' $P111 = "16_1272816831.39278" 
     capture_lex $P111
-    .const 'Sub' $P78 = "15_1267204685.44293" 
+    .const 'Sub' $P78 = "15_1272816831.39278" 
     capture_lex $P78
     new $P30, 'ExceptionHandler'
     set_addr $P30, control_29
-    $P30."handle_types"(58)
+    $P30."handle_types"(57)
     push_eh $P30
     .lex "self", self
     .lex "$/", param_31
-    if has_param_32, optparam_47
+    if has_param_32, optparam_50
     new $P33, "Undef"
     set param_32, $P33
-  optparam_47:
+  optparam_50:
     .lex "$key", param_32
 .annotate "line", 64
     new $P34, "Undef"
@@ -4502,7 +4920,7 @@
     find_lex $P36, "$key"
     if $P36, unless_35_end
     new $P37, "Exception"
-    set $P37['type'], 58
+    set $P37['type'], 57
     new $P38, "Integer"
     assign $P38, 0
     setattribute $P37, 'payload', $P38
@@ -4515,13 +4933,13 @@
     defined $I43, $P39
     if $I43, default_42
     find_lex $P44, "$/"
-    unless_null $P44, vivify_48
+    unless_null $P44, vivify_51
     $P44 = root_new ['parrot';'Hash']
-  vivify_48:
+  vivify_51:
     set $P45, $P44["OPER"]
-    unless_null $P45, vivify_49
+    unless_null $P45, vivify_52
     new $P45, "Undef"
-  vivify_49:
+  vivify_52:
     $P46 = $P45."ast"()
     set $P39, $P46
   default_42:
@@ -4536,57 +4954,57 @@
     store_lex "$past", $P51
 .annotate "line", 67
     find_lex $P53, "$/"
-    unless_null $P53, vivify_50
+    unless_null $P53, vivify_53
     $P53 = root_new ['parrot';'Hash']
-  vivify_50:
+  vivify_53:
     set $P54, $P53["OPER"]
-    unless_null $P54, vivify_51
+    unless_null $P54, vivify_54
     $P54 = root_new ['parrot';'Hash']
-  vivify_51:
+  vivify_54:
     set $P55, $P54["O"]
-    unless_null $P55, vivify_52
+    unless_null $P55, vivify_55
     $P55 = root_new ['parrot';'Hash']
-  vivify_52:
+  vivify_55:
     set $P56, $P55["pasttype"]
-    unless_null $P56, vivify_53
+    unless_null $P56, vivify_56
     new $P56, "Undef"
-  vivify_53:
+  vivify_56:
     if $P56, if_52
 .annotate "line", 68
     find_lex $P64, "$/"
-    unless_null $P64, vivify_54
+    unless_null $P64, vivify_57
     $P64 = root_new ['parrot';'Hash']
-  vivify_54:
+  vivify_57:
     set $P65, $P64["OPER"]
-    unless_null $P65, vivify_55
+    unless_null $P65, vivify_58
     $P65 = root_new ['parrot';'Hash']
-  vivify_55:
+  vivify_58:
     set $P66, $P65["O"]
-    unless_null $P66, vivify_56
+    unless_null $P66, vivify_59
     $P66 = root_new ['parrot';'Hash']
-  vivify_56:
+  vivify_59:
     set $P67, $P66["pirop"]
-    unless_null $P67, vivify_57
+    unless_null $P67, vivify_60
     new $P67, "Undef"
-  vivify_57:
+  vivify_60:
     unless $P67, if_63_end
     find_lex $P68, "$past"
     find_lex $P69, "$/"
-    unless_null $P69, vivify_58
+    unless_null $P69, vivify_61
     $P69 = root_new ['parrot';'Hash']
-  vivify_58:
+  vivify_61:
     set $P70, $P69["OPER"]
-    unless_null $P70, vivify_59
+    unless_null $P70, vivify_62
     $P70 = root_new ['parrot';'Hash']
-  vivify_59:
+  vivify_62:
     set $P71, $P70["O"]
-    unless_null $P71, vivify_60
+    unless_null $P71, vivify_63
     $P71 = root_new ['parrot';'Hash']
-  vivify_60:
+  vivify_63:
     set $P72, $P71["pirop"]
-    unless_null $P72, vivify_61
+    unless_null $P72, vivify_64
     new $P72, "Undef"
-  vivify_61:
+  vivify_64:
     set $S73, $P72
     $P68."pirop"($S73)
   if_63_end:
@@ -4595,21 +5013,21 @@
 .annotate "line", 67
     find_lex $P57, "$past"
     find_lex $P58, "$/"
-    unless_null $P58, vivify_62
+    unless_null $P58, vivify_65
     $P58 = root_new ['parrot';'Hash']
-  vivify_62:
+  vivify_65:
     set $P59, $P58["OPER"]
-    unless_null $P59, vivify_63
+    unless_null $P59, vivify_66
     $P59 = root_new ['parrot';'Hash']
-  vivify_63:
+  vivify_66:
     set $P60, $P59["O"]
-    unless_null $P60, vivify_64
+    unless_null $P60, vivify_67
     $P60 = root_new ['parrot';'Hash']
-  vivify_64:
+  vivify_67:
     set $P61, $P60["pasttype"]
-    unless_null $P61, vivify_65
+    unless_null $P61, vivify_68
     new $P61, "Undef"
-  vivify_65:
+  vivify_68:
     set $S62, $P61
     $P57."pasttype"($S62)
   if_52_end:
@@ -4617,7 +5035,7 @@
     find_lex $P75, "$past"
     $P76 = $P75."name"()
     if $P76, unless_74_end
-    .const 'Sub' $P78 = "15_1267204685.44293" 
+    .const 'Sub' $P78 = "15_1272816831.39278" 
     capture_lex $P78
     $P78()
   unless_74_end:
@@ -4631,17 +5049,17 @@
     find_lex $P106, "$/"
     $P107 = $P106."list"()
     defined $I108, $P107
-    unless $I108, for_undef_69
+    unless $I108, for_undef_72
     iter $P105, $P107
     new $P123, 'ExceptionHandler'
     set_addr $P123, loop122_handler
-    $P123."handle_types"(65, 67, 66)
+    $P123."handle_types"(64, 66, 65)
     push_eh $P123
   loop122_test:
     unless $P105, loop122_done
     shift $P109, $P105
   loop122_redo:
-    .const 'Sub' $P111 = "16_1267204685.44293" 
+    .const 'Sub' $P111 = "16_1272816831.39278" 
     capture_lex $P111
     $P111($P109)
   loop122_next:
@@ -4650,24 +5068,24 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P124, exception, 'type'
-    eq $P124, 65, loop122_next
-    eq $P124, 67, loop122_redo
+    eq $P124, 64, loop122_next
+    eq $P124, 66, loop122_redo
   loop122_done:
     pop_eh 
-  for_undef_69:
+  for_undef_72:
 .annotate "line", 81
     goto if_97_end
   if_97:
 .annotate "line", 80
     find_lex $P101, "$past"
     find_lex $P102, "$/"
-    unless_null $P102, vivify_70
+    unless_null $P102, vivify_73
     $P102 = root_new ['parrot';'ResizablePMCArray']
-  vivify_70:
+  vivify_73:
     set $P103, $P102[0]
-    unless_null $P103, vivify_71
+    unless_null $P103, vivify_74
     new $P103, "Undef"
-  vivify_71:
+  vivify_74:
     $P104 = $P103."ast"()
     $P101."unshift"($P104)
   if_97_end:
@@ -4686,7 +5104,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block77"  :anon :subid("15_1267204685.44293") :outer("14_1267204685.44293")
+.sub "_block77"  :anon :subid("15_1272816831.39278") :outer("14_1272816831.39278")
 .annotate "line", 71
     new $P79, "Undef"
     .lex "$name", $P79
@@ -4709,17 +5127,17 @@
     concat $P86, $P85, ":<"
 .annotate "line", 76
     find_lex $P87, "$/"
-    unless_null $P87, vivify_66
+    unless_null $P87, vivify_69
     $P87 = root_new ['parrot';'Hash']
-  vivify_66:
+  vivify_69:
     set $P88, $P87["OPER"]
-    unless_null $P88, vivify_67
+    unless_null $P88, vivify_70
     $P88 = root_new ['parrot';'Hash']
-  vivify_67:
+  vivify_70:
     set $P89, $P88["sym"]
-    unless_null $P89, vivify_68
+    unless_null $P89, vivify_71
     new $P89, "Undef"
-  vivify_68:
+  vivify_71:
     concat $P90, $P86, $P89
     concat $P91, $P90, ">"
     store_lex "$name", $P91
@@ -4736,7 +5154,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block110"  :anon :subid("16_1267204685.44293") :outer("14_1267204685.44293")
+.sub "_block110"  :anon :subid("16_1272816831.39278") :outer("14_1272816831.39278")
     .param pmc param_112
 .annotate "line", 82
     .lex "$_", param_112
@@ -4759,24 +5177,24 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "term:sym<circumfix>"  :subid("17_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "term:sym<circumfix>"  :subid("17_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_132
 .annotate "line", 87
     new $P131, 'ExceptionHandler'
     set_addr $P131, control_130
-    $P131."handle_types"(58)
+    $P131."handle_types"(57)
     push_eh $P131
     .lex "self", self
     .lex "$/", param_132
     find_lex $P133, "$/"
     find_lex $P134, "$/"
-    unless_null $P134, vivify_72
+    unless_null $P134, vivify_75
     $P134 = root_new ['parrot';'Hash']
-  vivify_72:
+  vivify_75:
     set $P135, $P134["circumfix"]
-    unless_null $P135, vivify_73
+    unless_null $P135, vivify_76
     new $P135, "Undef"
-  vivify_73:
+  vivify_76:
     $P136 = $P135."ast"()
     $P137 = $P133."!make"($P136)
     .return ($P137)
@@ -4789,24 +5207,24 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "termish"  :subid("18_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "termish"  :subid("18_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_142
 .annotate "line", 89
     new $P141, 'ExceptionHandler'
     set_addr $P141, control_140
-    $P141."handle_types"(58)
+    $P141."handle_types"(57)
     push_eh $P141
     .lex "self", self
     .lex "$/", param_142
     find_lex $P143, "$/"
     find_lex $P144, "$/"
-    unless_null $P144, vivify_74
+    unless_null $P144, vivify_77
     $P144 = root_new ['parrot';'Hash']
-  vivify_74:
+  vivify_77:
     set $P145, $P144["term"]
-    unless_null $P145, vivify_75
+    unless_null $P145, vivify_78
     new $P145, "Undef"
-  vivify_75:
+  vivify_78:
     $P146 = $P145."ast"()
     $P147 = $P143."!make"($P146)
     .return ($P147)
@@ -4819,12 +5237,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm"  :subid("19_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "nullterm"  :subid("19_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_152
 .annotate "line", 90
     new $P151, 'ExceptionHandler'
     set_addr $P151, control_150
-    $P151."handle_types"(58)
+    $P151."handle_types"(57)
     push_eh $P151
     .lex "self", self
     .lex "$/", param_152
@@ -4841,24 +5259,24 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm_alt"  :subid("20_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "nullterm_alt"  :subid("20_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_160
 .annotate "line", 91
     new $P159, 'ExceptionHandler'
     set_addr $P159, control_158
-    $P159."handle_types"(58)
+    $P159."handle_types"(57)
     push_eh $P159
     .lex "self", self
     .lex "$/", param_160
     find_lex $P161, "$/"
     find_lex $P162, "$/"
-    unless_null $P162, vivify_76
+    unless_null $P162, vivify_79
     $P162 = root_new ['parrot';'Hash']
-  vivify_76:
+  vivify_79:
     set $P163, $P162["term"]
-    unless_null $P163, vivify_77
+    unless_null $P163, vivify_80
     new $P163, "Undef"
-  vivify_77:
+  vivify_80:
     $P164 = $P163."ast"()
     $P165 = $P161."!make"($P164)
     .return ($P165)
@@ -4871,24 +5289,24 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "integer"  :subid("21_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "integer"  :subid("21_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_170
 .annotate "line", 93
     new $P169, 'ExceptionHandler'
     set_addr $P169, control_168
-    $P169."handle_types"(58)
+    $P169."handle_types"(57)
     push_eh $P169
     .lex "self", self
     .lex "$/", param_170
     find_lex $P171, "$/"
     find_lex $P172, "$/"
-    unless_null $P172, vivify_78
+    unless_null $P172, vivify_81
     $P172 = root_new ['parrot';'Hash']
-  vivify_78:
+  vivify_81:
     set $P173, $P172["VALUE"]
-    unless_null $P173, vivify_79
+    unless_null $P173, vivify_82
     new $P173, "Undef"
-  vivify_79:
+  vivify_82:
     $P174 = $P173."ast"()
     $P175 = $P171."!make"($P174)
     .return ($P175)
@@ -4901,12 +5319,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "dec_number"  :subid("22_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "dec_number"  :subid("22_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_180
 .annotate "line", 95
     new $P179, 'ExceptionHandler'
     set_addr $P179, control_178
-    $P179."handle_types"(58)
+    $P179."handle_types"(57)
     push_eh $P179
     .lex "self", self
     .lex "$/", param_180
@@ -4924,12 +5342,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "decint"  :subid("23_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "decint"  :subid("23_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_189
 .annotate "line", 97
     new $P188, 'ExceptionHandler'
     set_addr $P188, control_187
-    $P188."handle_types"(58)
+    $P188."handle_types"(57)
     push_eh $P188
     .lex "self", self
     .lex "$/", param_189
@@ -4947,12 +5365,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "hexint"  :subid("24_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "hexint"  :subid("24_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_198
 .annotate "line", 98
     new $P197, 'ExceptionHandler'
     set_addr $P197, control_196
-    $P197."handle_types"(58)
+    $P197."handle_types"(57)
     push_eh $P197
     .lex "self", self
     .lex "$/", param_198
@@ -4970,12 +5388,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "octint"  :subid("25_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "octint"  :subid("25_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_207
 .annotate "line", 99
     new $P206, 'ExceptionHandler'
     set_addr $P206, control_205
-    $P206."handle_types"(58)
+    $P206."handle_types"(57)
     push_eh $P206
     .lex "self", self
     .lex "$/", param_207
@@ -4993,12 +5411,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "binint"  :subid("26_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "binint"  :subid("26_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_216
 .annotate "line", 100
     new $P215, 'ExceptionHandler'
     set_addr $P215, control_214
-    $P215."handle_types"(58)
+    $P215."handle_types"(57)
     push_eh $P215
     .lex "self", self
     .lex "$/", param_216
@@ -5016,14 +5434,14 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_EXPR"  :subid("27_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_EXPR"  :subid("27_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_225
 .annotate "line", 102
-    .const 'Sub' $P241 = "28_1267204685.44293" 
+    .const 'Sub' $P241 = "28_1272816831.39278" 
     capture_lex $P241
     new $P224, 'ExceptionHandler'
     set_addr $P224, control_223
-    $P224."handle_types"(58)
+    $P224."handle_types"(57)
     push_eh $P224
     .lex "self", self
     .lex "$/", param_225
@@ -5031,19 +5449,19 @@
     new $P226, "Undef"
     .lex "$past", $P226
     find_lex $P227, "$/"
-    unless_null $P227, vivify_80
+    unless_null $P227, vivify_83
     $P227 = root_new ['parrot';'Hash']
-  vivify_80:
+  vivify_83:
     set $P228, $P227["quote_delimited"]
-    unless_null $P228, vivify_81
+    unless_null $P228, vivify_84
     new $P228, "Undef"
-  vivify_81:
+  vivify_84:
     $P229 = $P228."ast"()
     store_lex "$past", $P229
 .annotate "line", 104
-    get_hll_global $P231, ["HLL";"Grammar"], "quotemod_check"
-    find_lex $P232, "$/"
-    $P233 = $P231($P232, "w")
+    find_lex $P231, "$/"
+    $P232 = $P231."CURSOR"()
+    $P233 = $P232."quotemod_check"("w")
     unless $P233, if_230_end
 .annotate "line", 105
     get_hll_global $P235, ["PAST"], "Node"
@@ -5051,7 +5469,7 @@
     $P237 = $P235."ACCEPTS"($P236)
     if $P237, if_234
 .annotate "line", 108
-    .const 'Sub' $P241 = "28_1267204685.44293" 
+    .const 'Sub' $P241 = "28_1272816831.39278" 
     capture_lex $P241
     $P241()
     goto if_234_end
@@ -5090,9 +5508,9 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block240"  :anon :subid("28_1267204685.44293") :outer("27_1267204685.44293")
+.sub "_block240"  :anon :subid("28_1272816831.39278") :outer("27_1272816831.39278")
 .annotate "line", 108
-    .const 'Sub' $P260 = "29_1267204685.44293" 
+    .const 'Sub' $P260 = "29_1272816831.39278" 
     capture_lex $P260
 .annotate "line", 109
     $P242 = root_new ['parrot';'ResizablePMCArray']
@@ -5109,13 +5527,13 @@
     if $I251, if_248
 .annotate "line", 115
     find_lex $P268, "@words"
-    unless_null $P268, vivify_82
+    unless_null $P268, vivify_85
     $P268 = root_new ['parrot';'ResizablePMCArray']
-  vivify_82:
+  vivify_85:
     set $P269, $P268[0]
-    unless_null $P269, vivify_83
+    unless_null $P269, vivify_86
     new $P269, "Undef"
-  vivify_83:
+  vivify_86:
     set $S270, $P269
     new $P271, 'String'
     set $P271, $S270
@@ -5133,17 +5551,17 @@
 .annotate "line", 112
     find_lex $P256, "@words"
     defined $I257, $P256
-    unless $I257, for_undef_84
+    unless $I257, for_undef_87
     iter $P255, $P256
     new $P266, 'ExceptionHandler'
     set_addr $P266, loop265_handler
-    $P266."handle_types"(65, 67, 66)
+    $P266."handle_types"(64, 66, 65)
     push_eh $P266
   loop265_test:
     unless $P255, loop265_done
     shift $P258, $P255
   loop265_redo:
-    .const 'Sub' $P260 = "29_1267204685.44293" 
+    .const 'Sub' $P260 = "29_1272816831.39278" 
     capture_lex $P260
     $P260($P258)
   loop265_next:
@@ -5152,11 +5570,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P267, exception, 'type'
-    eq $P267, 65, loop265_next
-    eq $P267, 67, loop265_redo
+    eq $P267, 64, loop265_next
+    eq $P267, 66, loop265_redo
   loop265_done:
     pop_eh 
-  for_undef_84:
+  for_undef_87:
 .annotate "line", 110
     set $P247, $P255
   if_248_end:
@@ -5166,7 +5584,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block259"  :anon :subid("29_1267204685.44293") :outer("28_1267204685.44293")
+.sub "_block259"  :anon :subid("29_1272816831.39278") :outer("28_1272816831.39278")
     .param pmc param_261
 .annotate "line", 112
     .lex "$_", param_261
@@ -5178,14 +5596,14 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_delimited"  :subid("30_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_delimited"  :subid("30_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_288
 .annotate "line", 125
-    .const 'Sub' $P300 = "31_1267204685.44293" 
+    .const 'Sub' $P300 = "31_1272816831.39278" 
     capture_lex $P300
     new $P287, 'ExceptionHandler'
     set_addr $P287, control_286
-    $P287."handle_types"(58)
+    $P287."handle_types"(57)
     push_eh $P287
     .lex "self", self
     .lex "$/", param_288
@@ -5206,25 +5624,25 @@
     store_lex "$lastlit", $P293
 .annotate "line", 128
     find_lex $P295, "$/"
-    unless_null $P295, vivify_85
+    unless_null $P295, vivify_88
     $P295 = root_new ['parrot';'Hash']
-  vivify_85:
+  vivify_88:
     set $P296, $P295["quote_atom"]
-    unless_null $P296, vivify_86
+    unless_null $P296, vivify_89
     new $P296, "Undef"
-  vivify_86:
+  vivify_89:
     defined $I297, $P296
-    unless $I297, for_undef_87
+    unless $I297, for_undef_90
     iter $P294, $P296
     new $P333, 'ExceptionHandler'
     set_addr $P333, loop332_handler
-    $P333."handle_types"(65, 67, 66)
+    $P333."handle_types"(64, 66, 65)
     push_eh $P333
   loop332_test:
     unless $P294, loop332_done
     shift $P298, $P294
   loop332_redo:
-    .const 'Sub' $P300 = "31_1267204685.44293" 
+    .const 'Sub' $P300 = "31_1272816831.39278" 
     capture_lex $P300
     $P300($P298)
   loop332_next:
@@ -5233,11 +5651,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P334, exception, 'type'
-    eq $P334, 65, loop332_next
-    eq $P334, 67, loop332_redo
+    eq $P334, 64, loop332_next
+    eq $P334, 66, loop332_redo
   loop332_done:
     pop_eh 
-  for_undef_87:
+  for_undef_90:
 .annotate "line", 142
     find_lex $P336, "$lastlit"
     set $S337, $P336
@@ -5263,7 +5681,7 @@
 .annotate "line", 144
     new $P354, 'ExceptionHandler'
     set_addr $P354, loop353_handler
-    $P354."handle_types"(65, 67, 66)
+    $P354."handle_types"(64, 66, 65)
     push_eh $P354
   loop353_test:
     find_lex $P347, "@parts"
@@ -5283,8 +5701,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P355, exception, 'type'
-    eq $P355, 65, loop353_next
-    eq $P355, 67, loop353_redo
+    eq $P355, 64, loop353_next
+    eq $P355, 66, loop353_redo
   loop353_done:
     pop_eh 
 .annotate "line", 147
@@ -5302,7 +5720,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block299"  :anon :subid("31_1267204685.44293") :outer("30_1267204685.44293")
+.sub "_block299"  :anon :subid("31_1272816831.39278") :outer("30_1272816831.39278")
     .param pmc param_302
 .annotate "line", 129
     new $P301, "Undef"
@@ -5371,25 +5789,25 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_atom"  :subid("32_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_atom"  :subid("32_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_363
 .annotate "line", 150
     new $P362, 'ExceptionHandler'
     set_addr $P362, control_361
-    $P362."handle_types"(58)
+    $P362."handle_types"(57)
     push_eh $P362
     .lex "self", self
     .lex "$/", param_363
 .annotate "line", 151
     find_lex $P364, "$/"
     find_lex $P367, "$/"
-    unless_null $P367, vivify_88
+    unless_null $P367, vivify_91
     $P367 = root_new ['parrot';'Hash']
-  vivify_88:
+  vivify_91:
     set $P368, $P367["quote_escape"]
-    unless_null $P368, vivify_89
+    unless_null $P368, vivify_92
     new $P368, "Undef"
-  vivify_89:
+  vivify_92:
     if $P368, if_366
     find_lex $P372, "$/"
     set $S373, $P372
@@ -5398,13 +5816,13 @@
     goto if_366_end
   if_366:
     find_lex $P369, "$/"
-    unless_null $P369, vivify_90
+    unless_null $P369, vivify_93
     $P369 = root_new ['parrot';'Hash']
-  vivify_90:
+  vivify_93:
     set $P370, $P369["quote_escape"]
-    unless_null $P370, vivify_91
+    unless_null $P370, vivify_94
     new $P370, "Undef"
-  vivify_91:
+  vivify_94:
     $P371 = $P370."ast"()
     set $P365, $P371
   if_366_end:
@@ -5420,12 +5838,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<backslash>"  :subid("33_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<backslash>"  :subid("33_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_379
 .annotate "line", 154
     new $P378, 'ExceptionHandler'
     set_addr $P378, control_377
-    $P378."handle_types"(58)
+    $P378."handle_types"(57)
     push_eh $P378
     .lex "self", self
     .lex "$/", param_379
@@ -5441,24 +5859,24 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<stopper>"  :subid("34_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<stopper>"  :subid("34_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_386
 .annotate "line", 155
     new $P385, 'ExceptionHandler'
     set_addr $P385, control_384
-    $P385."handle_types"(58)
+    $P385."handle_types"(57)
     push_eh $P385
     .lex "self", self
     .lex "$/", param_386
     find_lex $P387, "$/"
     find_lex $P388, "$/"
-    unless_null $P388, vivify_92
+    unless_null $P388, vivify_95
     $P388 = root_new ['parrot';'Hash']
-  vivify_92:
+  vivify_95:
     set $P389, $P388["stopper"]
-    unless_null $P389, vivify_93
+    unless_null $P389, vivify_96
     new $P389, "Undef"
-  vivify_93:
+  vivify_96:
     set $S390, $P389
     $P391 = $P387."!make"($S390)
     .return ($P391)
@@ -5471,12 +5889,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<bs>"  :subid("35_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<bs>"  :subid("35_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_396
 .annotate "line", 157
     new $P395, 'ExceptionHandler'
     set_addr $P395, control_394
-    $P395."handle_types"(58)
+    $P395."handle_types"(57)
     push_eh $P395
     .lex "self", self
     .lex "$/", param_396
@@ -5492,12 +5910,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<nl>"  :subid("36_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<nl>"  :subid("36_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_403
 .annotate "line", 158
     new $P402, 'ExceptionHandler'
     set_addr $P402, control_401
-    $P402."handle_types"(58)
+    $P402."handle_types"(57)
     push_eh $P402
     .lex "self", self
     .lex "$/", param_403
@@ -5513,12 +5931,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<cr>"  :subid("37_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<cr>"  :subid("37_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_410
 .annotate "line", 159
     new $P409, 'ExceptionHandler'
     set_addr $P409, control_408
-    $P409."handle_types"(58)
+    $P409."handle_types"(57)
     push_eh $P409
     .lex "self", self
     .lex "$/", param_410
@@ -5534,12 +5952,12 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<tab>"  :subid("38_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<tab>"  :subid("38_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_417
 .annotate "line", 160
     new $P416, 'ExceptionHandler'
     set_addr $P416, control_415
-    $P416."handle_types"(58)
+    $P416."handle_types"(57)
     push_eh $P416
     .lex "self", self
     .lex "$/", param_417
@@ -5555,359 +5973,461 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<hex>"  :subid("39_1267204685.44293") :method :outer("11_1267204685.44293")
+.sub "quote_escape:sym<ff>"  :subid("39_1272816831.39278") :method :outer("11_1272816831.39278")
     .param pmc param_424
-.annotate "line", 162
+.annotate "line", 161
     new $P423, 'ExceptionHandler'
     set_addr $P423, control_422
-    $P423."handle_types"(58)
+    $P423."handle_types"(57)
     push_eh $P423
     .lex "self", self
     .lex "$/", param_424
-.annotate "line", 163
     find_lex $P425, "$/"
-    find_lex $P428, "$/"
-    unless_null $P428, vivify_94
-    $P428 = root_new ['parrot';'Hash']
-  vivify_94:
-    set $P429, $P428["hexint"]
-    unless_null $P429, vivify_95
-    new $P429, "Undef"
-  vivify_95:
-    if $P429, if_427
+    $P426 = $P425."!make"("\f")
+    .return ($P426)
+  control_422:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P427, exception, "payload"
+    .return ($P427)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "quote_escape:sym<hex>"  :subid("40_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_431
+.annotate "line", 163
+    new $P430, 'ExceptionHandler'
+    set_addr $P430, control_429
+    $P430."handle_types"(57)
+    push_eh $P430
+    .lex "self", self
+    .lex "$/", param_431
+.annotate "line", 164
     find_lex $P432, "$/"
-    unless_null $P432, vivify_96
-    $P432 = root_new ['parrot';'Hash']
-  vivify_96:
-    set $P433, $P432["hexints"]
-    unless_null $P433, vivify_97
-    $P433 = root_new ['parrot';'Hash']
+    find_lex $P435, "$/"
+    unless_null $P435, vivify_97
+    $P435 = root_new ['parrot';'Hash']
   vivify_97:
-    set $P434, $P433["hexint"]
-    unless_null $P434, vivify_98
-    new $P434, "Undef"
+    set $P436, $P435["hexint"]
+    unless_null $P436, vivify_98
+    new $P436, "Undef"
   vivify_98:
-    set $P426, $P434
-    goto if_427_end
-  if_427:
-    find_lex $P430, "$/"
-    unless_null $P430, vivify_99
-    $P430 = root_new ['parrot';'Hash']
+    if $P436, if_434
+    find_lex $P439, "$/"
+    unless_null $P439, vivify_99
+    $P439 = root_new ['parrot';'Hash']
   vivify_99:
-    set $P431, $P430["hexint"]
-    unless_null $P431, vivify_100
-    new $P431, "Undef"
+    set $P440, $P439["hexints"]
+    unless_null $P440, vivify_100
+    $P440 = root_new ['parrot';'Hash']
   vivify_100:
-    set $P426, $P431
-  if_427_end:
-    $P435 = "ints_to_string"($P426)
-    $P436 = $P425."!make"($P435)
-.annotate "line", 162
-    .return ($P436)
-  control_422:
+    set $P441, $P440["hexint"]
+    unless_null $P441, vivify_101
+    new $P441, "Undef"
+  vivify_101:
+    set $P433, $P441
+    goto if_434_end
+  if_434:
+    find_lex $P437, "$/"
+    unless_null $P437, vivify_102
+    $P437 = root_new ['parrot';'Hash']
+  vivify_102:
+    set $P438, $P437["hexint"]
+    unless_null $P438, vivify_103
+    new $P438, "Undef"
+  vivify_103:
+    set $P433, $P438
+  if_434_end:
+    $P442 = "ints_to_string"($P433)
+    $P443 = $P432."!make"($P442)
+.annotate "line", 163
+    .return ($P443)
+  control_429:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P437, exception, "payload"
-    .return ($P437)
+    getattribute $P444, exception, "payload"
+    .return ($P444)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<oct>"  :subid("40_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_441
-.annotate "line", 166
-    new $P440, 'ExceptionHandler'
-    set_addr $P440, control_439
-    $P440."handle_types"(58)
-    push_eh $P440
-    .lex "self", self
-    .lex "$/", param_441
+.sub "quote_escape:sym<oct>"  :subid("41_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_448
 .annotate "line", 167
-    find_lex $P442, "$/"
-    find_lex $P445, "$/"
-    unless_null $P445, vivify_101
-    $P445 = root_new ['parrot';'Hash']
-  vivify_101:
-    set $P446, $P445["octint"]
-    unless_null $P446, vivify_102
-    new $P446, "Undef"
-  vivify_102:
-    if $P446, if_444
+    new $P447, 'ExceptionHandler'
+    set_addr $P447, control_446
+    $P447."handle_types"(57)
+    push_eh $P447
+    .lex "self", self
+    .lex "$/", param_448
+.annotate "line", 168
     find_lex $P449, "$/"
-    unless_null $P449, vivify_103
-    $P449 = root_new ['parrot';'Hash']
-  vivify_103:
-    set $P450, $P449["octints"]
-    unless_null $P450, vivify_104
-    $P450 = root_new ['parrot';'Hash']
+    find_lex $P452, "$/"
+    unless_null $P452, vivify_104
+    $P452 = root_new ['parrot';'Hash']
   vivify_104:
-    set $P451, $P450["octint"]
-    unless_null $P451, vivify_105
-    new $P451, "Undef"
+    set $P453, $P452["octint"]
+    unless_null $P453, vivify_105
+    new $P453, "Undef"
   vivify_105:
-    set $P443, $P451
-    goto if_444_end
-  if_444:
-    find_lex $P447, "$/"
-    unless_null $P447, vivify_106
-    $P447 = root_new ['parrot';'Hash']
+    if $P453, if_451
+    find_lex $P456, "$/"
+    unless_null $P456, vivify_106
+    $P456 = root_new ['parrot';'Hash']
   vivify_106:
-    set $P448, $P447["octint"]
-    unless_null $P448, vivify_107
-    new $P448, "Undef"
+    set $P457, $P456["octints"]
+    unless_null $P457, vivify_107
+    $P457 = root_new ['parrot';'Hash']
   vivify_107:
-    set $P443, $P448
-  if_444_end:
-    $P452 = "ints_to_string"($P443)
-    $P453 = $P442."!make"($P452)
-.annotate "line", 166
-    .return ($P453)
-  control_439:
+    set $P458, $P457["octint"]
+    unless_null $P458, vivify_108
+    new $P458, "Undef"
+  vivify_108:
+    set $P450, $P458
+    goto if_451_end
+  if_451:
+    find_lex $P454, "$/"
+    unless_null $P454, vivify_109
+    $P454 = root_new ['parrot';'Hash']
+  vivify_109:
+    set $P455, $P454["octint"]
+    unless_null $P455, vivify_110
+    new $P455, "Undef"
+  vivify_110:
+    set $P450, $P455
+  if_451_end:
+    $P459 = "ints_to_string"($P450)
+    $P460 = $P449."!make"($P459)
+.annotate "line", 167
+    .return ($P460)
+  control_446:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P454, exception, "payload"
-    .return ($P454)
+    getattribute $P461, exception, "payload"
+    .return ($P461)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<chr>"  :subid("41_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_458
-.annotate "line", 170
-    new $P457, 'ExceptionHandler'
-    set_addr $P457, control_456
-    $P457."handle_types"(58)
-    push_eh $P457
+.sub "quote_escape:sym<chr>"  :subid("42_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_465
+.annotate "line", 171
+    new $P464, 'ExceptionHandler'
+    set_addr $P464, control_463
+    $P464."handle_types"(57)
+    push_eh $P464
     .lex "self", self
-    .lex "$/", param_458
+    .lex "$/", param_465
+.annotate "line", 172
+    find_lex $P466, "$/"
+    find_lex $P467, "$/"
+    unless_null $P467, vivify_111
+    $P467 = root_new ['parrot';'Hash']
+  vivify_111:
+    set $P468, $P467["charspec"]
+    unless_null $P468, vivify_112
+    new $P468, "Undef"
+  vivify_112:
+    $P469 = $P468."ast"()
+    $P470 = $P466."!make"($P469)
 .annotate "line", 171
-    find_lex $P459, "$/"
-    find_lex $P460, "$/"
-    unless_null $P460, vivify_108
-    $P460 = root_new ['parrot';'Hash']
-  vivify_108:
-    set $P461, $P460["charspec"]
-    unless_null $P461, vivify_109
-    new $P461, "Undef"
-  vivify_109:
-    $P462 = $P461."ast"()
-    $P463 = $P459."!make"($P462)
-.annotate "line", 170
-    .return ($P463)
-  control_456:
+    .return ($P470)
+  control_463:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P464, exception, "payload"
-    .return ($P464)
+    getattribute $P471, exception, "payload"
+    .return ($P471)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charname"  :subid("42_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_468
-.annotate "line", 174
-    new $P467, 'ExceptionHandler'
-    set_addr $P467, control_466
-    $P467."handle_types"(58)
-    push_eh $P467
-    .lex "self", self
-    .lex "$/", param_468
+.sub "quote_escape:sym<0>"  :subid("43_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_475
 .annotate "line", 175
-    new $P469, "Undef"
-    .lex "$codepoint", $P469
-.annotate "line", 176
-    find_lex $P472, "$/"
-    unless_null $P472, vivify_110
-    $P472 = root_new ['parrot';'Hash']
-  vivify_110:
-    set $P473, $P472["integer"]
-    unless_null $P473, vivify_111
-    new $P473, "Undef"
-  vivify_111:
-    if $P473, if_471
-.annotate "line", 177
- $P477 = new ['CodeString'] 
-    find_lex $P478, "$/"
-    set $S479, $P478
-    $P480 = $P477."charname_to_ord"($S479)
-    set $P470, $P480
+    new $P474, 'ExceptionHandler'
+    set_addr $P474, control_473
+    $P474."handle_types"(57)
+    push_eh $P474
+    .lex "self", self
+    .lex "$/", param_475
 .annotate "line", 176
-    goto if_471_end
-  if_471:
-    find_lex $P474, "$/"
-    unless_null $P474, vivify_112
-    $P474 = root_new ['parrot';'Hash']
-  vivify_112:
-    set $P475, $P474["integer"]
-    unless_null $P475, vivify_113
-    new $P475, "Undef"
+    find_lex $P476, "$/"
+    $P477 = $P476."!make"(unicode:"\x{0}")
+.annotate "line", 175
+    .return ($P477)
+  control_473:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P478, exception, "payload"
+    .return ($P478)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "quote_escape:sym<misc>"  :subid("44_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_482
+.annotate "line", 179
+    new $P481, 'ExceptionHandler'
+    set_addr $P481, control_480
+    $P481."handle_types"(57)
+    push_eh $P481
+    .lex "self", self
+    .lex "$/", param_482
+.annotate "line", 180
+    find_lex $P483, "$/"
+    find_lex $P486, "$/"
+    unless_null $P486, vivify_113
+    $P486 = root_new ['parrot';'Hash']
   vivify_113:
-    $P476 = $P475."ast"()
-    set $P470, $P476
-  if_471_end:
-    store_lex "$codepoint", $P470
-.annotate "line", 178
-    find_lex $P482, "$codepoint"
-    set $N483, $P482
-    islt $I484, $N483, 0.0
-    unless $I484, if_481_end
-    find_lex $P485, "$/"
-    $P486 = $P485."CURSOR"()
-    new $P487, 'String'
-    set $P487, "Unrecognized character name "
-    find_lex $P488, "$/"
-    concat $P489, $P487, $P488
-    $P486."panic"($P489)
-  if_481_end:
+    set $P487, $P486["textq"]
+    unless_null $P487, vivify_114
+    new $P487, "Undef"
+  vivify_114:
+    if $P487, if_485
+    find_lex $P493, "$/"
+    unless_null $P493, vivify_115
+    $P493 = root_new ['parrot';'Hash']
+  vivify_115:
+    set $P494, $P493["textqq"]
+    unless_null $P494, vivify_116
+    new $P494, "Undef"
+  vivify_116:
+    $P495 = $P494."Str"()
+    set $P484, $P495
+    goto if_485_end
+  if_485:
+    new $P488, "String"
+    assign $P488, "\\"
+    find_lex $P489, "$/"
+    unless_null $P489, vivify_117
+    $P489 = root_new ['parrot';'Hash']
+  vivify_117:
+    set $P490, $P489["textq"]
+    unless_null $P490, vivify_118
+    new $P490, "Undef"
+  vivify_118:
+    $S491 = $P490."Str"()
+    concat $P492, $P488, $S491
+    set $P484, $P492
+  if_485_end:
+    $P496 = $P483."!make"($P484)
 .annotate "line", 179
-    find_lex $P490, "$/"
-    find_lex $P491, "$codepoint"
-    set $I492, $P491
-    chr $S493, $I492
-    $P494 = $P490."!make"($S493)
-.annotate "line", 174
-    .return ($P494)
-  control_466:
+    .return ($P496)
+  control_480:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P495, exception, "payload"
-    .return ($P495)
+    getattribute $P497, exception, "payload"
+    .return ($P497)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charnames"  :subid("43_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_499
-.annotate "line", 182
-    .const 'Sub' $P508 = "44_1267204685.44293" 
-    capture_lex $P508
-    new $P498, 'ExceptionHandler'
-    set_addr $P498, control_497
-    $P498."handle_types"(58)
-    push_eh $P498
-    .lex "self", self
-    .lex "$/", param_499
+.sub "charname"  :subid("45_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_501
 .annotate "line", 183
-    new $P500, "Undef"
-    .lex "$str", $P500
-    new $P501, "String"
-    assign $P501, ""
-    store_lex "$str", $P501
+    new $P500, 'ExceptionHandler'
+    set_addr $P500, control_499
+    $P500."handle_types"(57)
+    push_eh $P500
+    .lex "self", self
+    .lex "$/", param_501
 .annotate "line", 184
-    find_lex $P503, "$/"
-    unless_null $P503, vivify_114
-    $P503 = root_new ['parrot';'Hash']
-  vivify_114:
-    set $P504, $P503["charname"]
-    unless_null $P504, vivify_115
-    new $P504, "Undef"
-  vivify_115:
-    defined $I505, $P504
-    unless $I505, for_undef_116
-    iter $P502, $P504
-    new $P515, 'ExceptionHandler'
-    set_addr $P515, loop514_handler
-    $P515."handle_types"(65, 67, 66)
-    push_eh $P515
-  loop514_test:
-    unless $P502, loop514_done
-    shift $P506, $P502
-  loop514_redo:
-    .const 'Sub' $P508 = "44_1267204685.44293" 
-    capture_lex $P508
-    $P508($P506)
-  loop514_next:
-    goto loop514_test
-  loop514_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P516, exception, 'type'
-    eq $P516, 65, loop514_next
-    eq $P516, 67, loop514_redo
-  loop514_done:
-    pop_eh 
-  for_undef_116:
+    new $P502, "Undef"
+    .lex "$codepoint", $P502
+.annotate "line", 185
+    find_lex $P505, "$/"
+    unless_null $P505, vivify_119
+    $P505 = root_new ['parrot';'Hash']
+  vivify_119:
+    set $P506, $P505["integer"]
+    unless_null $P506, vivify_120
+    new $P506, "Undef"
+  vivify_120:
+    if $P506, if_504
+.annotate "line", 186
+ $P510 = new ['CodeString'] 
+    find_lex $P511, "$/"
+    set $S512, $P511
+    $P513 = $P510."charname_to_ord"($S512)
+    set $P503, $P513
 .annotate "line", 185
-    find_lex $P517, "$/"
-    find_lex $P518, "$str"
-    $P519 = $P517."!make"($P518)
-.annotate "line", 182
-    .return ($P519)
-  control_497:
+    goto if_504_end
+  if_504:
+    find_lex $P507, "$/"
+    unless_null $P507, vivify_121
+    $P507 = root_new ['parrot';'Hash']
+  vivify_121:
+    set $P508, $P507["integer"]
+    unless_null $P508, vivify_122
+    new $P508, "Undef"
+  vivify_122:
+    $P509 = $P508."ast"()
+    set $P503, $P509
+  if_504_end:
+    store_lex "$codepoint", $P503
+.annotate "line", 187
+    find_lex $P515, "$codepoint"
+    set $N516, $P515
+    islt $I517, $N516, 0.0
+    unless $I517, if_514_end
+    find_lex $P518, "$/"
+    $P519 = $P518."CURSOR"()
+    new $P520, 'String'
+    set $P520, "Unrecognized character name "
+    find_lex $P521, "$/"
+    concat $P522, $P520, $P521
+    $P519."panic"($P522)
+  if_514_end:
+.annotate "line", 188
+    find_lex $P523, "$/"
+    find_lex $P524, "$codepoint"
+    set $I525, $P524
+    chr $S526, $I525
+    $P527 = $P523."!make"($S526)
+.annotate "line", 183
+    .return ($P527)
+  control_499:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P520, exception, "payload"
-    .return ($P520)
+    getattribute $P528, exception, "payload"
+    .return ($P528)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block507"  :anon :subid("44_1267204685.44293") :outer("43_1267204685.44293")
-    .param pmc param_509
-.annotate "line", 184
-    .lex "$_", param_509
-    find_lex $P510, "$str"
-    find_lex $P511, "$_"
-    $S512 = $P511."ast"()
-    concat $P513, $P510, $S512
-    store_lex "$str", $P513
-    .return ($P513)
+.sub "charnames"  :subid("46_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_532
+.annotate "line", 191
+    .const 'Sub' $P541 = "47_1272816831.39278" 
+    capture_lex $P541
+    new $P531, 'ExceptionHandler'
+    set_addr $P531, control_530
+    $P531."handle_types"(57)
+    push_eh $P531
+    .lex "self", self
+    .lex "$/", param_532
+.annotate "line", 192
+    new $P533, "Undef"
+    .lex "$str", $P533
+    new $P534, "String"
+    assign $P534, ""
+    store_lex "$str", $P534
+.annotate "line", 193
+    find_lex $P536, "$/"
+    unless_null $P536, vivify_123
+    $P536 = root_new ['parrot';'Hash']
+  vivify_123:
+    set $P537, $P536["charname"]
+    unless_null $P537, vivify_124
+    new $P537, "Undef"
+  vivify_124:
+    defined $I538, $P537
+    unless $I538, for_undef_125
+    iter $P535, $P537
+    new $P548, 'ExceptionHandler'
+    set_addr $P548, loop547_handler
+    $P548."handle_types"(64, 66, 65)
+    push_eh $P548
+  loop547_test:
+    unless $P535, loop547_done
+    shift $P539, $P535
+  loop547_redo:
+    .const 'Sub' $P541 = "47_1272816831.39278" 
+    capture_lex $P541
+    $P541($P539)
+  loop547_next:
+    goto loop547_test
+  loop547_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P549, exception, 'type'
+    eq $P549, 64, loop547_next
+    eq $P549, 66, loop547_redo
+  loop547_done:
+    pop_eh 
+  for_undef_125:
+.annotate "line", 194
+    find_lex $P550, "$/"
+    find_lex $P551, "$str"
+    $P552 = $P550."!make"($P551)
+.annotate "line", 191
+    .return ($P552)
+  control_530:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P553, exception, "payload"
+    .return ($P553)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "charspec"  :subid("45_1267204685.44293") :method :outer("11_1267204685.44293")
-    .param pmc param_524
-.annotate "line", 188
-    new $P523, 'ExceptionHandler'
-    set_addr $P523, control_522
-    $P523."handle_types"(58)
-    push_eh $P523
+.sub "_block540"  :anon :subid("47_1272816831.39278") :outer("46_1272816831.39278")
+    .param pmc param_542
+.annotate "line", 193
+    .lex "$_", param_542
+    find_lex $P543, "$str"
+    find_lex $P544, "$_"
+    $S545 = $P544."ast"()
+    concat $P546, $P543, $S545
+    store_lex "$str", $P546
+    .return ($P546)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "charspec"  :subid("48_1272816831.39278") :method :outer("11_1272816831.39278")
+    .param pmc param_557
+.annotate "line", 197
+    new $P556, 'ExceptionHandler'
+    set_addr $P556, control_555
+    $P556."handle_types"(57)
+    push_eh $P556
     .lex "self", self
-    .lex "$/", param_524
-.annotate "line", 189
-    find_lex $P525, "$/"
-    find_lex $P528, "$/"
-    unless_null $P528, vivify_117
-    $P528 = root_new ['parrot';'Hash']
-  vivify_117:
-    set $P529, $P528["charnames"]
-    unless_null $P529, vivify_118
-    new $P529, "Undef"
-  vivify_118:
-    if $P529, if_527
-    find_lex $P533, "$/"
-    $I534 = "string_to_int"($P533, 10)
-    chr $S535, $I534
-    new $P526, 'String'
-    set $P526, $S535
-    goto if_527_end
-  if_527:
-    find_lex $P530, "$/"
-    unless_null $P530, vivify_119
-    $P530 = root_new ['parrot';'Hash']
-  vivify_119:
-    set $P531, $P530["charnames"]
-    unless_null $P531, vivify_120
-    new $P531, "Undef"
-  vivify_120:
-    $P532 = $P531."ast"()
-    set $P526, $P532
-  if_527_end:
-    $P536 = $P525."!make"($P526)
-.annotate "line", 188
-    .return ($P536)
-  control_522:
+    .lex "$/", param_557
+.annotate "line", 198
+    find_lex $P558, "$/"
+    find_lex $P561, "$/"
+    unless_null $P561, vivify_126
+    $P561 = root_new ['parrot';'Hash']
+  vivify_126:
+    set $P562, $P561["charnames"]
+    unless_null $P562, vivify_127
+    new $P562, "Undef"
+  vivify_127:
+    if $P562, if_560
+    find_lex $P566, "$/"
+    $I567 = "string_to_int"($P566, 10)
+    chr $S568, $I567
+    new $P559, 'String'
+    set $P559, $S568
+    goto if_560_end
+  if_560:
+    find_lex $P563, "$/"
+    unless_null $P563, vivify_128
+    $P563 = root_new ['parrot';'Hash']
+  vivify_128:
+    set $P564, $P563["charnames"]
+    unless_null $P564, vivify_129
+    new $P564, "Undef"
+  vivify_129:
+    $P565 = $P564."ast"()
+    set $P559, $P565
+  if_560_end:
+    $P569 = $P558."!make"($P559)
+.annotate "line", 197
+    .return ($P569)
+  control_555:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P537, exception, "payload"
-    .return ($P537)
+    getattribute $P570, exception, "payload"
+    .return ($P570)
 .end
 
 ### .include 'gen/hllcompiler.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204686.55407")
+.sub "_block11"  :anon :subid("10_1272816832.1082")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
@@ -5921,9 +6441,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post25") :outer("10_1267204686.55407")
+.sub "" :load :init :subid("post25") :outer("10_1272816832.1082")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204686.55407" 
+    .const 'Sub' $P12 = "10_1272816832.1082" 
     .local pmc block
     set block, $P12
 .annotate "line", 2
@@ -5937,28 +6457,28 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block13"  :subid("11_1267204686.55407") :outer("10_1267204686.55407")
+.sub "_block13"  :subid("11_1272816832.1082") :outer("10_1272816832.1082")
 .annotate "line", 6
-    .const 'Sub' $P187 = "20_1267204686.55407" 
+    .const 'Sub' $P187 = "20_1272816832.1082" 
     capture_lex $P187
-    .const 'Sub' $P152 = "18_1267204686.55407" 
+    .const 'Sub' $P152 = "18_1272816832.1082" 
     capture_lex $P152
-    .const 'Sub' $P137 = "17_1267204686.55407" 
+    .const 'Sub' $P137 = "17_1272816832.1082" 
     capture_lex $P137
-    .const 'Sub' $P121 = "16_1267204686.55407" 
+    .const 'Sub' $P121 = "16_1272816832.1082" 
     capture_lex $P121
-    .const 'Sub' $P32 = "13_1267204686.55407" 
+    .const 'Sub' $P32 = "13_1272816832.1082" 
     capture_lex $P32
-    .const 'Sub' $P15 = "12_1267204686.55407" 
+    .const 'Sub' $P15 = "12_1272816832.1082" 
     capture_lex $P15
 .annotate "line", 14
-    .const 'Sub' $P15 = "12_1267204686.55407" 
+    .const 'Sub' $P15 = "12_1272816832.1082" 
     capture_lex $P15
     .lex "value_type", $P15
 .annotate "line", 10
     find_lex $P31, "value_type"
 .annotate "line", 69
-    .const 'Sub' $P187 = "20_1267204686.55407" 
+    .const 'Sub' $P187 = "20_1272816832.1082" 
     capture_lex $P187
 .annotate "line", 6
     .return ($P187)
@@ -5966,7 +6486,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "" :load :init :subid("post26") :outer("11_1267204686.55407")
+.sub "" :load :init :subid("post26") :outer("11_1272816832.1082")
 .annotate "line", 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     .local pmc block
@@ -5978,12 +6498,12 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "value_type"  :subid("12_1267204686.55407") :outer("11_1267204686.55407")
+.sub "value_type"  :subid("12_1272816832.1082") :outer("11_1272816832.1082")
     .param pmc param_18
 .annotate "line", 14
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(58)
+    $P17."handle_types"(57)
     push_eh $P17
     .lex "$value", param_18
 .annotate "line", 15
@@ -6022,19 +6542,19 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_exports"  :subid("13_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "get_exports"  :subid("13_1272816832.1082") :method :outer("11_1272816832.1082")
     .param pmc param_35
     .param pmc param_38 :slurpy
     .param pmc param_36 :optional :named("tagset")
     .param int has_param_36 :opt_flag
 .annotate "line", 20
-    .const 'Sub' $P104 = "15_1267204686.55407" 
+    .const 'Sub' $P104 = "15_1272816832.1082" 
     capture_lex $P104
-    .const 'Sub' $P83 = "14_1267204686.55407" 
+    .const 'Sub' $P83 = "14_1272816832.1082" 
     capture_lex $P83
     new $P34, 'ExceptionHandler'
     set_addr $P34, control_33
-    $P34."handle_types"(58)
+    $P34."handle_types"(57)
     push_eh $P34
     .lex "self", self
     .lex "$module", param_35
@@ -6130,13 +6650,13 @@
     iter $P99, $P100
     new $P117, 'ExceptionHandler'
     set_addr $P117, loop116_handler
-    $P117."handle_types"(65, 67, 66)
+    $P117."handle_types"(64, 66, 65)
     push_eh $P117
   loop116_test:
     unless $P99, loop116_done
     shift $P102, $P99
   loop116_redo:
-    .const 'Sub' $P104 = "15_1267204686.55407" 
+    .const 'Sub' $P104 = "15_1272816832.1082" 
     capture_lex $P104
     $P104($P102)
   loop116_next:
@@ -6145,8 +6665,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P118, exception, 'type'
-    eq $P118, 65, loop116_next
-    eq $P118, 67, loop116_redo
+    eq $P118, 64, loop116_next
+    eq $P118, 66, loop116_redo
   loop116_done:
     pop_eh 
   for_undef_31:
@@ -6160,13 +6680,13 @@
     iter $P78, $P79
     new $P97, 'ExceptionHandler'
     set_addr $P97, loop96_handler
-    $P97."handle_types"(65, 67, 66)
+    $P97."handle_types"(64, 66, 65)
     push_eh $P97
   loop96_test:
     unless $P78, loop96_done
     shift $P81, $P78
   loop96_redo:
-    .const 'Sub' $P83 = "14_1267204686.55407" 
+    .const 'Sub' $P83 = "14_1272816832.1082" 
     capture_lex $P83
     $P83($P81)
   loop96_next:
@@ -6175,8 +6695,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P98, exception, 'type'
-    eq $P98, 65, loop96_next
-    eq $P98, 67, loop96_redo
+    eq $P98, 64, loop96_next
+    eq $P98, 66, loop96_redo
   loop96_done:
     pop_eh 
   for_undef_34:
@@ -6194,7 +6714,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block103"  :anon :subid("15_1267204686.55407") :outer("13_1267204686.55407")
+.sub "_block103"  :anon :subid("15_1272816832.1082") :outer("13_1272816832.1082")
     .param pmc param_106
 .annotate "line", 40
     new $P105, "Undef"
@@ -6226,7 +6746,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block82"  :anon :subid("14_1267204686.55407") :outer("13_1267204686.55407")
+.sub "_block82"  :anon :subid("14_1272816832.1082") :outer("13_1272816832.1082")
     .param pmc param_85
 .annotate "line", 34
     new $P84, "Undef"
@@ -6265,12 +6785,12 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_module"  :subid("16_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "get_module"  :subid("16_1272816832.1082") :method :outer("11_1272816832.1082")
     .param pmc param_124
 .annotate "line", 47
     new $P123, 'ExceptionHandler'
     set_addr $P123, control_122
-    $P123."handle_types"(58)
+    $P123."handle_types"(57)
     push_eh $P123
     .lex "self", self
     .lex "$name", param_124
@@ -6305,13 +6825,13 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "language"  :subid("17_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "language"  :subid("17_1272816832.1082") :method :outer("11_1272816832.1082")
     .param pmc param_140 :optional
     .param int has_param_140 :opt_flag
 .annotate "line", 53
     new $P139, 'ExceptionHandler'
     set_addr $P139, control_138
-    $P139."handle_types"(58)
+    $P139."handle_types"(57)
     push_eh $P139
     .lex "self", self
     if has_param_140, optparam_40
@@ -6349,14 +6869,14 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "load_module"  :subid("18_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "load_module"  :subid("18_1272816832.1082") :method :outer("11_1272816832.1082")
     .param pmc param_155
 .annotate "line", 61
-    .const 'Sub' $P165 = "19_1267204686.55407" 
+    .const 'Sub' $P165 = "19_1272816832.1082" 
     capture_lex $P165
     new $P154, 'ExceptionHandler'
     set_addr $P154, control_153
-    $P154."handle_types"(58)
+    $P154."handle_types"(57)
     push_eh $P154
     .lex "self", self
     .lex "$name", param_155
@@ -6379,7 +6899,7 @@
     assign $P163, 0
     store_lex "$loaded", $P163
 .annotate "line", 64
-    .const 'Sub' $P165 = "19_1267204686.55407" 
+    .const 'Sub' $P165 = "19_1272816832.1082" 
     capture_lex $P165
     $P165()
 .annotate "line", 65
@@ -6408,11 +6928,11 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block164"  :anon :subid("19_1267204686.55407") :outer("18_1267204686.55407")
+.sub "_block164"  :anon :subid("19_1272816832.1082") :outer("18_1272816832.1082")
 .annotate "line", 64
     new $P172, 'ExceptionHandler'
     set_addr $P172, control_171
-    $P172."handle_types_except"(58, 59, 60, 61, 63, 64, 65, 66, 67)
+    $P172."handle_types_except"(57, 58, 59, 60, 62, 63, 64, 65, 66)
     push_eh $P172
     find_lex $P166, "$base"
     concat $P167, $P166, ".pbc"
@@ -6441,15 +6961,15 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "import"  :subid("20_1267204686.55407") :method :outer("11_1267204686.55407")
+.sub "import"  :subid("20_1272816832.1082") :method :outer("11_1272816832.1082")
     .param pmc param_190
     .param pmc param_191
 .annotate "line", 69
-    .const 'Sub' $P197 = "21_1267204686.55407" 
+    .const 'Sub' $P197 = "21_1272816832.1082" 
     capture_lex $P197
     new $P189, 'ExceptionHandler'
     set_addr $P189, control_188
-    $P189."handle_types"(58)
+    $P189."handle_types"(57)
     push_eh $P189
     .lex "self", self
     .lex "$target", param_190
@@ -6461,13 +6981,13 @@
     iter $P192, $P193
     new $P279, 'ExceptionHandler'
     set_addr $P279, loop278_handler
-    $P279."handle_types"(65, 67, 66)
+    $P279."handle_types"(64, 66, 65)
     push_eh $P279
   loop278_test:
     unless $P192, loop278_done
     shift $P195, $P192
   loop278_redo:
-    .const 'Sub' $P197 = "21_1267204686.55407" 
+    .const 'Sub' $P197 = "21_1272816832.1082" 
     capture_lex $P197
     $P197($P195)
   loop278_next:
@@ -6476,8 +6996,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P280, exception, 'type'
-    eq $P280, 65, loop278_next
-    eq $P280, 67, loop278_redo
+    eq $P280, 64, loop278_next
+    eq $P280, 66, loop278_redo
   loop278_done:
     pop_eh 
   for_undef_42:
@@ -6492,14 +7012,14 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block196"  :anon :subid("21_1267204686.55407") :outer("20_1267204686.55407")
+.sub "_block196"  :anon :subid("21_1272816832.1082") :outer("20_1272816832.1082")
     .param pmc param_200
 .annotate "line", 70
-    .const 'Sub' $P267 = "24_1267204686.55407" 
+    .const 'Sub' $P267 = "24_1272816832.1082" 
     capture_lex $P267
-    .const 'Sub' $P247 = "23_1267204686.55407" 
+    .const 'Sub' $P247 = "23_1272816832.1082" 
     capture_lex $P247
-    .const 'Sub' $P218 = "22_1267204686.55407" 
+    .const 'Sub' $P218 = "22_1272816832.1082" 
     capture_lex $P218
 .annotate "line", 71
     new $P198, "Undef"
@@ -6541,13 +7061,13 @@
     iter $P262, $P263
     new $P276, 'ExceptionHandler'
     set_addr $P276, loop275_handler
-    $P276."handle_types"(65, 67, 66)
+    $P276."handle_types"(64, 66, 65)
     push_eh $P276
   loop275_test:
     unless $P262, loop275_done
     shift $P265, $P262
   loop275_redo:
-    .const 'Sub' $P267 = "24_1267204686.55407" 
+    .const 'Sub' $P267 = "24_1272816832.1082" 
     capture_lex $P267
     $P267($P265)
   loop275_next:
@@ -6556,8 +7076,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P277, exception, 'type'
-    eq $P277, 65, loop275_next
-    eq $P277, 67, loop275_redo
+    eq $P277, 64, loop275_next
+    eq $P277, 66, loop275_redo
   loop275_done:
     pop_eh 
   for_undef_43:
@@ -6573,13 +7093,13 @@
     iter $P242, $P243
     new $P260, 'ExceptionHandler'
     set_addr $P260, loop259_handler
-    $P260."handle_types"(65, 67, 66)
+    $P260."handle_types"(64, 66, 65)
     push_eh $P260
   loop259_test:
     unless $P242, loop259_done
     shift $P245, $P242
   loop259_redo:
-    .const 'Sub' $P247 = "23_1267204686.55407" 
+    .const 'Sub' $P247 = "23_1272816832.1082" 
     capture_lex $P247
     $P247($P245)
   loop259_next:
@@ -6588,8 +7108,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P261, exception, 'type'
-    eq $P261, 65, loop259_next
-    eq $P261, 67, loop259_redo
+    eq $P261, 64, loop259_next
+    eq $P261, 66, loop259_redo
   loop259_done:
     pop_eh 
   for_undef_45:
@@ -6607,13 +7127,13 @@
     iter $P213, $P214
     new $P232, 'ExceptionHandler'
     set_addr $P232, loop231_handler
-    $P232."handle_types"(65, 67, 66)
+    $P232."handle_types"(64, 66, 65)
     push_eh $P232
   loop231_test:
     unless $P213, loop231_done
     shift $P216, $P213
   loop231_redo:
-    .const 'Sub' $P218 = "22_1267204686.55407" 
+    .const 'Sub' $P218 = "22_1272816832.1082" 
     capture_lex $P218
     $P218($P216)
   loop231_next:
@@ -6622,8 +7142,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P233, exception, 'type'
-    eq $P233, 65, loop231_next
-    eq $P233, 67, loop231_redo
+    eq $P233, 64, loop231_next
+    eq $P233, 66, loop231_redo
   loop231_done:
     pop_eh 
   for_undef_46:
@@ -6636,7 +7156,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block266"  :anon :subid("24_1267204686.55407") :outer("21_1267204686.55407")
+.sub "_block266"  :anon :subid("24_1272816832.1082") :outer("21_1272816832.1082")
     .param pmc param_268
 .annotate "line", 80
     .lex "$_", param_268
@@ -6656,7 +7176,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block246"  :anon :subid("23_1267204686.55407") :outer("21_1267204686.55407")
+.sub "_block246"  :anon :subid("23_1272816832.1082") :outer("21_1272816832.1082")
     .param pmc param_248
 .annotate "line", 77
     .lex "$_", param_248
@@ -6676,7 +7196,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block217"  :anon :subid("22_1267204686.55407") :outer("21_1267204686.55407")
+.sub "_block217"  :anon :subid("22_1272816832.1082") :outer("21_1272816832.1082")
     .param pmc param_219
 .annotate "line", 74
     .lex "$_", param_219

Modified: branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -15,391 +15,393 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204702.05125")
+.sub "_block11"  :anon :subid("10_1272816833.94956")
 .annotate "line", 0
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
-    $P1296 = $P14()
+    $P1304 = $P14()
 .annotate "line", 1
-    .return ($P1296)
+    .return ($P1304)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post331") :outer("10_1267204702.05125")
+.sub "" :load :init :subid("post333") :outer("10_1272816833.94956")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204702.05125" 
+    .const 'Sub' $P12 = "10_1272816833.94956" 
     .local pmc block
     set block, $P12
-    $P1297 = get_root_global ["parrot"], "P6metaclass"
-    $P1297."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
+    $P1305 = get_root_global ["parrot"], "P6metaclass"
+    $P1305."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1267204702.05125") :outer("10_1267204702.05125")
+.sub "_block13"  :subid("11_1272816833.94956") :outer("10_1272816833.94956")
 .annotate "line", 4
-    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
-    capture_lex $P1240
-    .const 'Sub' $P1226 = "317_1267204702.05125" 
-    capture_lex $P1226
-    .const 'Sub' $P1220 = "315_1267204702.05125" 
-    capture_lex $P1220
-    .const 'Sub' $P1214 = "313_1267204702.05125" 
-    capture_lex $P1214
-    .const 'Sub' $P1207 = "311_1267204702.05125" 
-    capture_lex $P1207
-    .const 'Sub' $P1200 = "309_1267204702.05125" 
-    capture_lex $P1200
-    .const 'Sub' $P1193 = "307_1267204702.05125" 
-    capture_lex $P1193
-    .const 'Sub' $P1186 = "305_1267204702.05125" 
-    capture_lex $P1186
-    .const 'Sub' $P1180 = "303_1267204702.05125" 
-    capture_lex $P1180
-    .const 'Sub' $P1173 = "301_1267204702.05125" 
-    capture_lex $P1173
-    .const 'Sub' $P1166 = "299_1267204702.05125" 
-    capture_lex $P1166
-    .const 'Sub' $P1159 = "297_1267204702.05125" 
-    capture_lex $P1159
-    .const 'Sub' $P1152 = "295_1267204702.05125" 
-    capture_lex $P1152
-    .const 'Sub' $P1145 = "293_1267204702.05125" 
-    capture_lex $P1145
-    .const 'Sub' $P1138 = "291_1267204702.05125" 
-    capture_lex $P1138
-    .const 'Sub' $P1131 = "289_1267204702.05125" 
-    capture_lex $P1131
-    .const 'Sub' $P1124 = "287_1267204702.05125" 
-    capture_lex $P1124
-    .const 'Sub' $P1117 = "285_1267204702.05125" 
-    capture_lex $P1117
-    .const 'Sub' $P1110 = "283_1267204702.05125" 
-    capture_lex $P1110
-    .const 'Sub' $P1103 = "281_1267204702.05125" 
-    capture_lex $P1103
-    .const 'Sub' $P1096 = "279_1267204702.05125" 
-    capture_lex $P1096
-    .const 'Sub' $P1089 = "277_1267204702.05125" 
-    capture_lex $P1089
-    .const 'Sub' $P1082 = "275_1267204702.05125" 
-    capture_lex $P1082
-    .const 'Sub' $P1075 = "273_1267204702.05125" 
-    capture_lex $P1075
-    .const 'Sub' $P1068 = "271_1267204702.05125" 
-    capture_lex $P1068
-    .const 'Sub' $P1061 = "269_1267204702.05125" 
-    capture_lex $P1061
-    .const 'Sub' $P1054 = "267_1267204702.05125" 
-    capture_lex $P1054
-    .const 'Sub' $P1047 = "265_1267204702.05125" 
-    capture_lex $P1047
-    .const 'Sub' $P1040 = "263_1267204702.05125" 
-    capture_lex $P1040
-    .const 'Sub' $P1033 = "261_1267204702.05125" 
-    capture_lex $P1033
-    .const 'Sub' $P1026 = "259_1267204702.05125" 
-    capture_lex $P1026
-    .const 'Sub' $P1019 = "257_1267204702.05125" 
-    capture_lex $P1019
-    .const 'Sub' $P1012 = "255_1267204702.05125" 
-    capture_lex $P1012
-    .const 'Sub' $P1005 = "253_1267204702.05125" 
-    capture_lex $P1005
-    .const 'Sub' $P998 = "251_1267204702.05125" 
-    capture_lex $P998
-    .const 'Sub' $P992 = "249_1267204702.05125" 
-    capture_lex $P992
-    .const 'Sub' $P985 = "247_1267204702.05125" 
-    capture_lex $P985
-    .const 'Sub' $P978 = "245_1267204702.05125" 
-    capture_lex $P978
-    .const 'Sub' $P971 = "243_1267204702.05125" 
-    capture_lex $P971
-    .const 'Sub' $P964 = "241_1267204702.05125" 
-    capture_lex $P964
-    .const 'Sub' $P957 = "239_1267204702.05125" 
-    capture_lex $P957
-    .const 'Sub' $P950 = "237_1267204702.05125" 
-    capture_lex $P950
-    .const 'Sub' $P943 = "235_1267204702.05125" 
-    capture_lex $P943
-    .const 'Sub' $P937 = "233_1267204702.05125" 
-    capture_lex $P937
-    .const 'Sub' $P931 = "231_1267204702.05125" 
-    capture_lex $P931
-    .const 'Sub' $P926 = "229_1267204702.05125" 
-    capture_lex $P926
-    .const 'Sub' $P920 = "227_1267204702.05125" 
-    capture_lex $P920
-    .const 'Sub' $P914 = "225_1267204702.05125" 
-    capture_lex $P914
-    .const 'Sub' $P909 = "223_1267204702.05125" 
-    capture_lex $P909
-    .const 'Sub' $P904 = "221_1267204702.05125" 
-    capture_lex $P904
-    .const 'Sub' $P897 = "219_1267204702.05125" 
+    get_hll_global $P1248, ["NQP";"Regex"], "_block1247" 
+    capture_lex $P1248
+    .const 'Sub' $P1234 = "319_1272816833.94956" 
+    capture_lex $P1234
+    .const 'Sub' $P1228 = "317_1272816833.94956" 
+    capture_lex $P1228
+    .const 'Sub' $P1222 = "315_1272816833.94956" 
+    capture_lex $P1222
+    .const 'Sub' $P1215 = "313_1272816833.94956" 
+    capture_lex $P1215
+    .const 'Sub' $P1208 = "311_1272816833.94956" 
+    capture_lex $P1208
+    .const 'Sub' $P1201 = "309_1272816833.94956" 
+    capture_lex $P1201
+    .const 'Sub' $P1194 = "307_1272816833.94956" 
+    capture_lex $P1194
+    .const 'Sub' $P1188 = "305_1272816833.94956" 
+    capture_lex $P1188
+    .const 'Sub' $P1181 = "303_1272816833.94956" 
+    capture_lex $P1181
+    .const 'Sub' $P1174 = "301_1272816833.94956" 
+    capture_lex $P1174
+    .const 'Sub' $P1167 = "299_1272816833.94956" 
+    capture_lex $P1167
+    .const 'Sub' $P1160 = "297_1272816833.94956" 
+    capture_lex $P1160
+    .const 'Sub' $P1153 = "295_1272816833.94956" 
+    capture_lex $P1153
+    .const 'Sub' $P1146 = "293_1272816833.94956" 
+    capture_lex $P1146
+    .const 'Sub' $P1139 = "291_1272816833.94956" 
+    capture_lex $P1139
+    .const 'Sub' $P1132 = "289_1272816833.94956" 
+    capture_lex $P1132
+    .const 'Sub' $P1125 = "287_1272816833.94956" 
+    capture_lex $P1125
+    .const 'Sub' $P1118 = "285_1272816833.94956" 
+    capture_lex $P1118
+    .const 'Sub' $P1111 = "283_1272816833.94956" 
+    capture_lex $P1111
+    .const 'Sub' $P1104 = "281_1272816833.94956" 
+    capture_lex $P1104
+    .const 'Sub' $P1097 = "279_1272816833.94956" 
+    capture_lex $P1097
+    .const 'Sub' $P1090 = "277_1272816833.94956" 
+    capture_lex $P1090
+    .const 'Sub' $P1083 = "275_1272816833.94956" 
+    capture_lex $P1083
+    .const 'Sub' $P1076 = "273_1272816833.94956" 
+    capture_lex $P1076
+    .const 'Sub' $P1069 = "271_1272816833.94956" 
+    capture_lex $P1069
+    .const 'Sub' $P1062 = "269_1272816833.94956" 
+    capture_lex $P1062
+    .const 'Sub' $P1055 = "267_1272816833.94956" 
+    capture_lex $P1055
+    .const 'Sub' $P1048 = "265_1272816833.94956" 
+    capture_lex $P1048
+    .const 'Sub' $P1041 = "263_1272816833.94956" 
+    capture_lex $P1041
+    .const 'Sub' $P1034 = "261_1272816833.94956" 
+    capture_lex $P1034
+    .const 'Sub' $P1027 = "259_1272816833.94956" 
+    capture_lex $P1027
+    .const 'Sub' $P1020 = "257_1272816833.94956" 
+    capture_lex $P1020
+    .const 'Sub' $P1013 = "255_1272816833.94956" 
+    capture_lex $P1013
+    .const 'Sub' $P1006 = "253_1272816833.94956" 
+    capture_lex $P1006
+    .const 'Sub' $P1000 = "251_1272816833.94956" 
+    capture_lex $P1000
+    .const 'Sub' $P993 = "249_1272816833.94956" 
+    capture_lex $P993
+    .const 'Sub' $P986 = "247_1272816833.94956" 
+    capture_lex $P986
+    .const 'Sub' $P979 = "245_1272816833.94956" 
+    capture_lex $P979
+    .const 'Sub' $P972 = "243_1272816833.94956" 
+    capture_lex $P972
+    .const 'Sub' $P965 = "241_1272816833.94956" 
+    capture_lex $P965
+    .const 'Sub' $P958 = "239_1272816833.94956" 
+    capture_lex $P958
+    .const 'Sub' $P951 = "237_1272816833.94956" 
+    capture_lex $P951
+    .const 'Sub' $P945 = "235_1272816833.94956" 
+    capture_lex $P945
+    .const 'Sub' $P939 = "233_1272816833.94956" 
+    capture_lex $P939
+    .const 'Sub' $P934 = "231_1272816833.94956" 
+    capture_lex $P934
+    .const 'Sub' $P928 = "229_1272816833.94956" 
+    capture_lex $P928
+    .const 'Sub' $P922 = "227_1272816833.94956" 
+    capture_lex $P922
+    .const 'Sub' $P917 = "225_1272816833.94956" 
+    capture_lex $P917
+    .const 'Sub' $P912 = "223_1272816833.94956" 
+    capture_lex $P912
+    .const 'Sub' $P905 = "221_1272816833.94956" 
+    capture_lex $P905
+    .const 'Sub' $P897 = "219_1272816833.94956" 
     capture_lex $P897
-    .const 'Sub' $P889 = "217_1267204702.05125" 
-    capture_lex $P889
-    .const 'Sub' $P884 = "215_1267204702.05125" 
-    capture_lex $P884
-    .const 'Sub' $P879 = "213_1267204702.05125" 
-    capture_lex $P879
-    .const 'Sub' $P874 = "211_1267204702.05125" 
+    .const 'Sub' $P892 = "217_1272816833.94956" 
+    capture_lex $P892
+    .const 'Sub' $P887 = "215_1272816833.94956" 
+    capture_lex $P887
+    .const 'Sub' $P882 = "213_1272816833.94956" 
+    capture_lex $P882
+    .const 'Sub' $P874 = "211_1272816833.94956" 
     capture_lex $P874
-    .const 'Sub' $P866 = "209_1267204702.05125" 
+    .const 'Sub' $P866 = "209_1272816833.94956" 
     capture_lex $P866
-    .const 'Sub' $P858 = "207_1267204702.05125" 
-    capture_lex $P858
-    .const 'Sub' $P853 = "205_1267204702.05125" 
-    capture_lex $P853
-    .const 'Sub' $P848 = "203_1267204702.05125" 
-    capture_lex $P848
-    .const 'Sub' $P842 = "201_1267204702.05125" 
-    capture_lex $P842
-    .const 'Sub' $P836 = "199_1267204702.05125" 
-    capture_lex $P836
-    .const 'Sub' $P830 = "197_1267204702.05125" 
-    capture_lex $P830
-    .const 'Sub' $P824 = "195_1267204702.05125" 
-    capture_lex $P824
-    .const 'Sub' $P818 = "193_1267204702.05125" 
-    capture_lex $P818
-    .const 'Sub' $P813 = "191_1267204702.05125" 
-    capture_lex $P813
-    .const 'Sub' $P808 = "189_1267204702.05125" 
-    capture_lex $P808
-    .const 'Sub' $P795 = "185_1267204702.05125" 
-    capture_lex $P795
-    .const 'Sub' $P787 = "183_1267204702.05125" 
-    capture_lex $P787
-    .const 'Sub' $P781 = "181_1267204702.05125" 
-    capture_lex $P781
-    .const 'Sub' $P774 = "179_1267204702.05125" 
-    capture_lex $P774
-    .const 'Sub' $P768 = "177_1267204702.05125" 
-    capture_lex $P768
-    .const 'Sub' $P760 = "175_1267204702.05125" 
-    capture_lex $P760
-    .const 'Sub' $P752 = "173_1267204702.05125" 
-    capture_lex $P752
-    .const 'Sub' $P746 = "171_1267204702.05125" 
-    capture_lex $P746
-    .const 'Sub' $P740 = "169_1267204702.05125" 
-    capture_lex $P740
-    .const 'Sub' $P725 = "165_1267204702.05125" 
-    capture_lex $P725
-    .const 'Sub' $P688 = "163_1267204702.05125" 
-    capture_lex $P688
-    .const 'Sub' $P680 = "161_1267204702.05125" 
-    capture_lex $P680
-    .const 'Sub' $P674 = "159_1267204702.05125" 
-    capture_lex $P674
-    .const 'Sub' $P664 = "157_1267204702.05125" 
-    capture_lex $P664
-    .const 'Sub' $P649 = "155_1267204702.05125" 
-    capture_lex $P649
-    .const 'Sub' $P640 = "153_1267204702.05125" 
-    capture_lex $P640
-    .const 'Sub' $P621 = "151_1267204702.05125" 
-    capture_lex $P621
-    .const 'Sub' $P597 = "149_1267204702.05125" 
-    capture_lex $P597
-    .const 'Sub' $P590 = "147_1267204702.05125" 
-    capture_lex $P590
-    .const 'Sub' $P583 = "145_1267204702.05125" 
-    capture_lex $P583
-    .const 'Sub' $P573 = "141_1267204702.05125" 
-    capture_lex $P573
-    .const 'Sub' $P562 = "139_1267204702.05125" 
-    capture_lex $P562
-    .const 'Sub' $P555 = "137_1267204702.05125" 
-    capture_lex $P555
-    .const 'Sub' $P548 = "135_1267204702.05125" 
-    capture_lex $P548
-    .const 'Sub' $P541 = "133_1267204702.05125" 
-    capture_lex $P541
-    .const 'Sub' $P514 = "129_1267204702.05125" 
-    capture_lex $P514
-    .const 'Sub' $P505 = "127_1267204702.05125" 
-    capture_lex $P505
-    .const 'Sub' $P498 = "125_1267204702.05125" 
-    capture_lex $P498
-    .const 'Sub' $P489 = "121_1267204702.05125" 
-    capture_lex $P489
-    .const 'Sub' $P484 = "119_1267204702.05125" 
-    capture_lex $P484
-    .const 'Sub' $P472 = "117_1267204702.05125" 
-    capture_lex $P472
-    .const 'Sub' $P460 = "115_1267204702.05125" 
-    capture_lex $P460
-    .const 'Sub' $P452 = "113_1267204702.05125" 
-    capture_lex $P452
-    .const 'Sub' $P447 = "111_1267204702.05125" 
-    capture_lex $P447
-    .const 'Sub' $P441 = "109_1267204702.05125" 
-    capture_lex $P441
-    .const 'Sub' $P435 = "107_1267204702.05125" 
-    capture_lex $P435
-    .const 'Sub' $P429 = "105_1267204702.05125" 
-    capture_lex $P429
-    .const 'Sub' $P423 = "103_1267204702.05125" 
-    capture_lex $P423
-    .const 'Sub' $P417 = "101_1267204702.05125" 
-    capture_lex $P417
-    .const 'Sub' $P411 = "99_1267204702.05125" 
-    capture_lex $P411
-    .const 'Sub' $P405 = "97_1267204702.05125" 
-    capture_lex $P405
-    .const 'Sub' $P399 = "95_1267204702.05125" 
-    capture_lex $P399
-    .const 'Sub' $P391 = "93_1267204702.05125" 
-    capture_lex $P391
-    .const 'Sub' $P383 = "91_1267204702.05125" 
-    capture_lex $P383
-    .const 'Sub' $P371 = "87_1267204702.05125" 
-    capture_lex $P371
-    .const 'Sub' $P363 = "85_1267204702.05125" 
-    capture_lex $P363
-    .const 'Sub' $P353 = "81_1267204702.05125" 
-    capture_lex $P353
-    .const 'Sub' $P346 = "79_1267204702.05125" 
-    capture_lex $P346
-    .const 'Sub' $P339 = "77_1267204702.05125" 
-    capture_lex $P339
-    .const 'Sub' $P327 = "73_1267204702.05125" 
-    capture_lex $P327
-    .const 'Sub' $P319 = "71_1267204702.05125" 
-    capture_lex $P319
-    .const 'Sub' $P311 = "69_1267204702.05125" 
-    capture_lex $P311
-    .const 'Sub' $P291 = "67_1267204702.05125" 
-    capture_lex $P291
-    .const 'Sub' $P282 = "65_1267204702.05125" 
-    capture_lex $P282
-    .const 'Sub' $P264 = "62_1267204702.05125" 
-    capture_lex $P264
-    .const 'Sub' $P244 = "60_1267204702.05125" 
-    capture_lex $P244
-    .const 'Sub' $P235 = "56_1267204702.05125" 
-    capture_lex $P235
-    .const 'Sub' $P230 = "54_1267204702.05125" 
-    capture_lex $P230
-    .const 'Sub' $P221 = "50_1267204702.05125" 
-    capture_lex $P221
-    .const 'Sub' $P216 = "48_1267204702.05125" 
-    capture_lex $P216
-    .const 'Sub' $P208 = "46_1267204702.05125" 
-    capture_lex $P208
-    .const 'Sub' $P201 = "44_1267204702.05125" 
-    capture_lex $P201
-    .const 'Sub' $P195 = "42_1267204702.05125" 
-    capture_lex $P195
-    .const 'Sub' $P187 = "40_1267204702.05125" 
-    capture_lex $P187
-    .const 'Sub' $P181 = "38_1267204702.05125" 
-    capture_lex $P181
-    .const 'Sub' $P175 = "36_1267204702.05125" 
-    capture_lex $P175
-    .const 'Sub' $P159 = "33_1267204702.05125" 
-    capture_lex $P159
-    .const 'Sub' $P146 = "31_1267204702.05125" 
-    capture_lex $P146
-    .const 'Sub' $P139 = "29_1267204702.05125" 
-    capture_lex $P139
-    .const 'Sub' $P96 = "26_1267204702.05125" 
+    .const 'Sub' $P861 = "207_1272816833.94956" 
+    capture_lex $P861
+    .const 'Sub' $P856 = "205_1272816833.94956" 
+    capture_lex $P856
+    .const 'Sub' $P851 = "203_1272816833.94956" 
+    capture_lex $P851
+    .const 'Sub' $P845 = "201_1272816833.94956" 
+    capture_lex $P845
+    .const 'Sub' $P839 = "199_1272816833.94956" 
+    capture_lex $P839
+    .const 'Sub' $P833 = "197_1272816833.94956" 
+    capture_lex $P833
+    .const 'Sub' $P827 = "195_1272816833.94956" 
+    capture_lex $P827
+    .const 'Sub' $P821 = "193_1272816833.94956" 
+    capture_lex $P821
+    .const 'Sub' $P816 = "191_1272816833.94956" 
+    capture_lex $P816
+    .const 'Sub' $P811 = "189_1272816833.94956" 
+    capture_lex $P811
+    .const 'Sub' $P798 = "185_1272816833.94956" 
+    capture_lex $P798
+    .const 'Sub' $P790 = "183_1272816833.94956" 
+    capture_lex $P790
+    .const 'Sub' $P784 = "181_1272816833.94956" 
+    capture_lex $P784
+    .const 'Sub' $P777 = "179_1272816833.94956" 
+    capture_lex $P777
+    .const 'Sub' $P771 = "177_1272816833.94956" 
+    capture_lex $P771
+    .const 'Sub' $P763 = "175_1272816833.94956" 
+    capture_lex $P763
+    .const 'Sub' $P755 = "173_1272816833.94956" 
+    capture_lex $P755
+    .const 'Sub' $P749 = "171_1272816833.94956" 
+    capture_lex $P749
+    .const 'Sub' $P743 = "169_1272816833.94956" 
+    capture_lex $P743
+    .const 'Sub' $P728 = "165_1272816833.94956" 
+    capture_lex $P728
+    .const 'Sub' $P691 = "163_1272816833.94956" 
+    capture_lex $P691
+    .const 'Sub' $P683 = "161_1272816833.94956" 
+    capture_lex $P683
+    .const 'Sub' $P677 = "159_1272816833.94956" 
+    capture_lex $P677
+    .const 'Sub' $P667 = "157_1272816833.94956" 
+    capture_lex $P667
+    .const 'Sub' $P652 = "155_1272816833.94956" 
+    capture_lex $P652
+    .const 'Sub' $P643 = "153_1272816833.94956" 
+    capture_lex $P643
+    .const 'Sub' $P624 = "151_1272816833.94956" 
+    capture_lex $P624
+    .const 'Sub' $P600 = "149_1272816833.94956" 
+    capture_lex $P600
+    .const 'Sub' $P593 = "147_1272816833.94956" 
+    capture_lex $P593
+    .const 'Sub' $P586 = "145_1272816833.94956" 
+    capture_lex $P586
+    .const 'Sub' $P576 = "141_1272816833.94956" 
+    capture_lex $P576
+    .const 'Sub' $P565 = "139_1272816833.94956" 
+    capture_lex $P565
+    .const 'Sub' $P558 = "137_1272816833.94956" 
+    capture_lex $P558
+    .const 'Sub' $P551 = "135_1272816833.94956" 
+    capture_lex $P551
+    .const 'Sub' $P544 = "133_1272816833.94956" 
+    capture_lex $P544
+    .const 'Sub' $P517 = "129_1272816833.94956" 
+    capture_lex $P517
+    .const 'Sub' $P508 = "127_1272816833.94956" 
+    capture_lex $P508
+    .const 'Sub' $P501 = "125_1272816833.94956" 
+    capture_lex $P501
+    .const 'Sub' $P492 = "121_1272816833.94956" 
+    capture_lex $P492
+    .const 'Sub' $P487 = "119_1272816833.94956" 
+    capture_lex $P487
+    .const 'Sub' $P475 = "117_1272816833.94956" 
+    capture_lex $P475
+    .const 'Sub' $P463 = "115_1272816833.94956" 
+    capture_lex $P463
+    .const 'Sub' $P455 = "113_1272816833.94956" 
+    capture_lex $P455
+    .const 'Sub' $P450 = "111_1272816833.94956" 
+    capture_lex $P450
+    .const 'Sub' $P444 = "109_1272816833.94956" 
+    capture_lex $P444
+    .const 'Sub' $P438 = "107_1272816833.94956" 
+    capture_lex $P438
+    .const 'Sub' $P432 = "105_1272816833.94956" 
+    capture_lex $P432
+    .const 'Sub' $P426 = "103_1272816833.94956" 
+    capture_lex $P426
+    .const 'Sub' $P420 = "101_1272816833.94956" 
+    capture_lex $P420
+    .const 'Sub' $P414 = "99_1272816833.94956" 
+    capture_lex $P414
+    .const 'Sub' $P408 = "97_1272816833.94956" 
+    capture_lex $P408
+    .const 'Sub' $P402 = "95_1272816833.94956" 
+    capture_lex $P402
+    .const 'Sub' $P394 = "93_1272816833.94956" 
+    capture_lex $P394
+    .const 'Sub' $P386 = "91_1272816833.94956" 
+    capture_lex $P386
+    .const 'Sub' $P374 = "87_1272816833.94956" 
+    capture_lex $P374
+    .const 'Sub' $P366 = "85_1272816833.94956" 
+    capture_lex $P366
+    .const 'Sub' $P356 = "81_1272816833.94956" 
+    capture_lex $P356
+    .const 'Sub' $P349 = "79_1272816833.94956" 
+    capture_lex $P349
+    .const 'Sub' $P342 = "77_1272816833.94956" 
+    capture_lex $P342
+    .const 'Sub' $P330 = "73_1272816833.94956" 
+    capture_lex $P330
+    .const 'Sub' $P322 = "71_1272816833.94956" 
+    capture_lex $P322
+    .const 'Sub' $P314 = "69_1272816833.94956" 
+    capture_lex $P314
+    .const 'Sub' $P294 = "67_1272816833.94956" 
+    capture_lex $P294
+    .const 'Sub' $P285 = "65_1272816833.94956" 
+    capture_lex $P285
+    .const 'Sub' $P267 = "62_1272816833.94956" 
+    capture_lex $P267
+    .const 'Sub' $P247 = "60_1272816833.94956" 
+    capture_lex $P247
+    .const 'Sub' $P238 = "56_1272816833.94956" 
+    capture_lex $P238
+    .const 'Sub' $P233 = "54_1272816833.94956" 
+    capture_lex $P233
+    .const 'Sub' $P224 = "50_1272816833.94956" 
+    capture_lex $P224
+    .const 'Sub' $P219 = "48_1272816833.94956" 
+    capture_lex $P219
+    .const 'Sub' $P211 = "46_1272816833.94956" 
+    capture_lex $P211
+    .const 'Sub' $P204 = "44_1272816833.94956" 
+    capture_lex $P204
+    .const 'Sub' $P198 = "42_1272816833.94956" 
+    capture_lex $P198
+    .const 'Sub' $P190 = "40_1272816833.94956" 
+    capture_lex $P190
+    .const 'Sub' $P184 = "38_1272816833.94956" 
+    capture_lex $P184
+    .const 'Sub' $P178 = "36_1272816833.94956" 
+    capture_lex $P178
+    .const 'Sub' $P162 = "33_1272816833.94956" 
+    capture_lex $P162
+    .const 'Sub' $P149 = "31_1272816833.94956" 
+    capture_lex $P149
+    .const 'Sub' $P142 = "29_1272816833.94956" 
+    capture_lex $P142
+    .const 'Sub' $P96 = "26_1272816833.94956" 
     capture_lex $P96
-    .const 'Sub' $P78 = "23_1267204702.05125" 
+    .const 'Sub' $P78 = "23_1272816833.94956" 
     capture_lex $P78
-    .const 'Sub' $P68 = "21_1267204702.05125" 
+    .const 'Sub' $P68 = "21_1272816833.94956" 
     capture_lex $P68
-    .const 'Sub' $P54 = "19_1267204702.05125" 
+    .const 'Sub' $P54 = "19_1272816833.94956" 
     capture_lex $P54
-    .const 'Sub' $P46 = "17_1267204702.05125" 
+    .const 'Sub' $P46 = "17_1272816833.94956" 
     capture_lex $P46
-    .const 'Sub' $P39 = "15_1267204702.05125" 
+    .const 'Sub' $P39 = "15_1272816833.94956" 
     capture_lex $P39
-    .const 'Sub' $P33 = "13_1267204702.05125" 
+    .const 'Sub' $P33 = "13_1272816833.94956" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1267204702.05125" 
+    .const 'Sub' $P15 = "12_1272816833.94956" 
     capture_lex $P15
-.annotate "line", 531
-    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
-    capture_lex $P1240
-    $P1279 = $P1240()
+.annotate "line", 536
+    get_hll_global $P1248, ["NQP";"Regex"], "_block1247" 
+    capture_lex $P1248
+    $P1287 = $P1248()
 .annotate "line", 4
-    .return ($P1279)
+    .return ($P1287)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post332") :outer("11_1267204702.05125")
+.sub "" :load :init :subid("post334") :outer("11_1272816833.94956")
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
     set block, $P14
-.annotate "line", 418
-    get_hll_global $P1280, ["NQP"], "Grammar"
-    $P1280."O"(":prec<y=>, :assoc<unary>", "%methodop")
-.annotate "line", 419
-    get_hll_global $P1281, ["NQP"], "Grammar"
-    $P1281."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
-.annotate "line", 420
-    get_hll_global $P1282, ["NQP"], "Grammar"
-    $P1282."O"(":prec<w=>, :assoc<left>", "%exponentiation")
-.annotate "line", 421
-    get_hll_global $P1283, ["NQP"], "Grammar"
-    $P1283."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
-.annotate "line", 422
-    get_hll_global $P1284, ["NQP"], "Grammar"
-    $P1284."O"(":prec<u=>, :assoc<left>", "%multiplicative")
 .annotate "line", 423
-    get_hll_global $P1285, ["NQP"], "Grammar"
-    $P1285."O"(":prec<t=>, :assoc<left>", "%additive")
+    get_hll_global $P1288, ["NQP"], "Grammar"
+    $P1288."O"(":prec<y=>, :assoc<unary>", "%methodop")
 .annotate "line", 424
-    get_hll_global $P1286, ["NQP"], "Grammar"
-    $P1286."O"(":prec<r=>, :assoc<left>", "%concatenation")
+    get_hll_global $P1289, ["NQP"], "Grammar"
+    $P1289."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
 .annotate "line", 425
-    get_hll_global $P1287, ["NQP"], "Grammar"
-    $P1287."O"(":prec<m=>, :assoc<left>", "%relational")
+    get_hll_global $P1290, ["NQP"], "Grammar"
+    $P1290."O"(":prec<w=>, :assoc<left>", "%exponentiation")
 .annotate "line", 426
-    get_hll_global $P1288, ["NQP"], "Grammar"
-    $P1288."O"(":prec<l=>, :assoc<left>", "%tight_and")
+    get_hll_global $P1291, ["NQP"], "Grammar"
+    $P1291."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate "line", 427
-    get_hll_global $P1289, ["NQP"], "Grammar"
-    $P1289."O"(":prec<k=>, :assoc<left>", "%tight_or")
+    get_hll_global $P1292, ["NQP"], "Grammar"
+    $P1292."O"(":prec<u=>, :assoc<left>", "%multiplicative")
 .annotate "line", 428
-    get_hll_global $P1290, ["NQP"], "Grammar"
-    $P1290."O"(":prec<j=>, :assoc<right>", "%conditional")
+    get_hll_global $P1293, ["NQP"], "Grammar"
+    $P1293."O"(":prec<t=>, :assoc<left>", "%additive")
 .annotate "line", 429
-    get_hll_global $P1291, ["NQP"], "Grammar"
-    $P1291."O"(":prec<i=>, :assoc<right>", "%assignment")
+    get_hll_global $P1294, ["NQP"], "Grammar"
+    $P1294."O"(":prec<r=>, :assoc<left>", "%concatenation")
 .annotate "line", 430
-    get_hll_global $P1292, ["NQP"], "Grammar"
-    $P1292."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+    get_hll_global $P1295, ["NQP"], "Grammar"
+    $P1295."O"(":prec<m=>, :assoc<left>", "%relational")
 .annotate "line", 431
-    get_hll_global $P1293, ["NQP"], "Grammar"
-    $P1293."O"(":prec<f=>, :assoc<list>", "%list_infix")
+    get_hll_global $P1296, ["NQP"], "Grammar"
+    $P1296."O"(":prec<l=>, :assoc<left>", "%tight_and")
 .annotate "line", 432
-    get_hll_global $P1294, ["NQP"], "Grammar"
-    $P1294."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
-.annotate "line", 417
-    $P1295 = get_root_global ["parrot"], "P6metaclass"
-    $P1295."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
+    get_hll_global $P1297, ["NQP"], "Grammar"
+    $P1297."O"(":prec<k=>, :assoc<left>", "%tight_or")
+.annotate "line", 433
+    get_hll_global $P1298, ["NQP"], "Grammar"
+    $P1298."O"(":prec<j=>, :assoc<right>", "%conditional")
+.annotate "line", 434
+    get_hll_global $P1299, ["NQP"], "Grammar"
+    $P1299."O"(":prec<i=>, :assoc<right>", "%assignment")
+.annotate "line", 435
+    get_hll_global $P1300, ["NQP"], "Grammar"
+    $P1300."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+.annotate "line", 436
+    get_hll_global $P1301, ["NQP"], "Grammar"
+    $P1301."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate "line", 437
+    get_hll_global $P1302, ["NQP"], "Grammar"
+    $P1302."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
+.annotate "line", 422
+    $P1303 = get_root_global ["parrot"], "P6metaclass"
+    $P1303."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "TOP"  :subid("12_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "TOP"  :subid("12_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
-    $P17."handle_types"(58)
+    $P17."handle_types"(57)
     push_eh $P17
     .lex "self", self
 .annotate "line", 5
@@ -410,55 +412,55 @@
     .lex "$*SCOPE", $P19
 .annotate "line", 4
     find_lex $P20, "%*LANG"
-    unless_null $P20, vivify_333
+    unless_null $P20, vivify_335
     get_hll_global $P20, "%LANG"
-    unless_null $P20, vivify_334
+    unless_null $P20, vivify_336
     die "Contextual %*LANG not found"
-  vivify_334:
-  vivify_333:
+  vivify_336:
+  vivify_335:
 .annotate "line", 6
     get_hll_global $P21, ["NQP"], "Regex"
     find_lex $P22, "%*LANG"
-    unless_null $P22, vivify_335
+    unless_null $P22, vivify_337
     get_hll_global $P22, "%LANG"
-    unless_null $P22, vivify_336
+    unless_null $P22, vivify_338
     die "Contextual %*LANG not found"
-  vivify_336:
+  vivify_338:
     store_lex "%*LANG", $P22
-  vivify_335:
+  vivify_337:
     set $P22["Regex"], $P21
 .annotate "line", 7
     get_hll_global $P23, ["NQP"], "RegexActions"
     find_lex $P24, "%*LANG"
-    unless_null $P24, vivify_337
+    unless_null $P24, vivify_339
     get_hll_global $P24, "%LANG"
-    unless_null $P24, vivify_338
+    unless_null $P24, vivify_340
     die "Contextual %*LANG not found"
-  vivify_338:
+  vivify_340:
     store_lex "%*LANG", $P24
-  vivify_337:
+  vivify_339:
     set $P24["Regex-actions"], $P23
 .annotate "line", 8
     get_hll_global $P25, ["NQP"], "Grammar"
     find_lex $P26, "%*LANG"
-    unless_null $P26, vivify_339
+    unless_null $P26, vivify_341
     get_hll_global $P26, "%LANG"
-    unless_null $P26, vivify_340
+    unless_null $P26, vivify_342
     die "Contextual %*LANG not found"
-  vivify_340:
+  vivify_342:
     store_lex "%*LANG", $P26
-  vivify_339:
+  vivify_341:
     set $P26["MAIN"], $P25
 .annotate "line", 9
     get_hll_global $P27, ["NQP"], "Actions"
     find_lex $P28, "%*LANG"
-    unless_null $P28, vivify_341
+    unless_null $P28, vivify_343
     get_hll_global $P28, "%LANG"
-    unless_null $P28, vivify_342
+    unless_null $P28, vivify_344
     die "Contextual %*LANG not found"
-  vivify_342:
+  vivify_344:
     store_lex "%*LANG", $P28
-  vivify_341:
+  vivify_343:
     set $P28["MAIN-actions"], $P27
 .annotate "line", 10
     new $P29, "String"
@@ -478,7 +480,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "identifier"  :subid("13_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx34_tgt
     .local int rx34_pos
@@ -536,7 +538,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1267204702.05125") :method
+.sub "!PREFIX__identifier"  :subid("14_1272816833.94956") :method
 .annotate "line", 4
     $P36 = self."!PREFIX__!subrule"("ident", "")
     new $P37, "ResizablePMCArray"
@@ -546,7 +548,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "name"  :subid("15_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx40_tgt
     .local int rx40_pos
@@ -620,7 +622,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1267204702.05125") :method
+.sub "!PREFIX__name"  :subid("16_1272816833.94956") :method
 .annotate "line", 4
     new $P42, "ResizablePMCArray"
     push $P42, ""
@@ -629,7 +631,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "deflongname"  :subid("17_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx47_tgt
     .local int rx47_pos
@@ -702,7 +704,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1267204702.05125") :method
+.sub "!PREFIX__deflongname"  :subid("18_1272816833.94956") :method
 .annotate "line", 4
     $P49 = self."!PREFIX__!subrule"("identifier", "")
     new $P50, "ResizablePMCArray"
@@ -712,7 +714,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "ENDSTMT"  :subid("19_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx55_tgt
     .local int rx55_pos
@@ -844,7 +846,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1267204702.05125") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1272816833.94956") :method
 .annotate "line", 4
     new $P57, "ResizablePMCArray"
     push $P57, ""
@@ -853,7 +855,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "ws"  :subid("21_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx69_tgt
     .local int rx69_pos
@@ -979,7 +981,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1267204702.05125") :method
+.sub "!PREFIX__ws"  :subid("22_1272816833.94956") :method
 .annotate "line", 4
     new $P71, "ResizablePMCArray"
     push $P71, ""
@@ -989,9 +991,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "unv"  :subid("23_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .const 'Sub' $P86 = "25_1267204702.05125" 
+    .const 'Sub' $P86 = "25_1272816833.94956" 
     capture_lex $P86
     .local string rx79_tgt
     .local int rx79_pos
@@ -1037,7 +1039,7 @@
   rxanchor84_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx79_cur."!cursor_pos"(rx79_pos)
-    .const 'Sub' $P86 = "25_1267204702.05125" 
+    .const 'Sub' $P86 = "25_1272816833.94956" 
     capture_lex $P86
     $P10 = rx79_cur."before"($P86)
     unless $P10, rx79_fail
@@ -1116,7 +1118,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1267204702.05125") :method
+.sub "!PREFIX__unv"  :subid("24_1272816833.94956") :method
 .annotate "line", 4
     new $P81, "ResizablePMCArray"
     push $P81, ""
@@ -1127,7 +1129,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block85"  :anon :subid("25_1267204702.05125") :method :outer("23_1267204702.05125")
+.sub "_block85"  :anon :subid("25_1272816833.94956") :method :outer("23_1272816833.94956")
 .annotate "line", 44
     .local string rx87_tgt
     .local int rx87_pos
@@ -1217,10 +1219,10 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "pod_comment"  :subid("26_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .const 'Sub' $P131 = "28_1267204702.05125" 
-    capture_lex $P131
+    .const 'Sub' $P133 = "28_1272816833.94956" 
+    capture_lex $P133
     .local string rx97_tgt
     .local int rx97_pos
     .local int rx97_off
@@ -1643,40 +1645,48 @@
 .annotate "line", 60
     goto alt104_end
   alt104_3:
-.annotate "line", 68
-  # rx rxquantr129 ** 0..1
-    set_addr $I137, rxquantr129_done
-    rx97_cur."!mark_push"(0, rx97_pos, $I137)
-  rxquantr129_loop:
-.annotate "line", 67
-  # rx subrule "before" subtype=zerowidth negate=
-    rx97_cur."!cursor_pos"(rx97_pos)
-    .const 'Sub' $P131 = "28_1267204702.05125" 
-    capture_lex $P131
-    $P10 = rx97_cur."before"($P131)
-    unless $P10, rx97_fail
-.annotate "line", 68
-  # rx subrule "panic" subtype=method negate=
+    set_addr $I10, alt104_4
+    rx97_cur."!mark_push"(0, rx97_pos, $I10)
+.annotate "line", 66
+  # rx subrule "identifier" subtype=capture negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    $P10 = rx97_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    $P10 = rx97_cur."identifier"()
     unless $P10, rx97_fail
+    rx97_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("identifier")
     rx97_pos = $P10."pos"()
-    (rx97_rep) = rx97_cur."!mark_commit"($I137)
-  rxquantr129_done:
-  alt138_0:
-.annotate "line", 69
-    set_addr $I10, alt138_1
+.annotate "line", 67
+  # rx rxquantf129 ** 0..*
+    set_addr $I10, rxquantf129_loop
     rx97_cur."!mark_push"(0, rx97_pos, $I10)
-  # rx subrule "alpha" subtype=capture negate=
+    goto rxquantf129_done
+  rxquantf129_loop:
+  # rx charclass .
+    ge rx97_pos, rx97_eos, rx97_fail
+    inc rx97_pos
+    set_addr $I10, rxquantf129_loop
+    rx97_cur."!mark_push"($I130, rx97_pos, $I10)
+  rxquantf129_done:
+  # rxanchor bol
+    eq rx97_pos, 0, rxanchor131_done
+    ge rx97_pos, rx97_eos, rx97_fail
+    sub $I10, rx97_pos, rx97_off
+    dec $I10
+    is_cclass $I11, 4096, rx97_tgt, $I10
+    unless $I11, rx97_fail
+  rxanchor131_done:
+  # rx subrule "before" subtype=zerowidth negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    $P10 = rx97_cur."alpha"()
+    .const 'Sub' $P133 = "28_1272816833.94956" 
+    capture_lex $P133
+    $P10 = rx97_cur."before"($P133)
     unless $P10, rx97_fail
-    rx97_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("alpha")
-    rx97_pos = $P10."pos"()
-    goto alt138_end
-  alt138_1:
-    set_addr $I10, alt138_2
+.annotate "line", 66
+    goto alt104_end
+  alt104_4:
+  alt141_0:
+.annotate "line", 73
+    set_addr $I10, alt141_1
     rx97_cur."!mark_push"(0, rx97_pos, $I10)
   # rx charclass s
     ge rx97_pos, rx97_eos, rx97_fail
@@ -1684,15 +1694,15 @@
     is_cclass $I11, 32, rx97_tgt, $I10
     unless $I11, rx97_fail
     inc rx97_pos
-    goto alt138_end
-  alt138_2:
+    goto alt141_end
+  alt141_1:
   # rx subrule "panic" subtype=method negate=
     rx97_cur."!cursor_pos"(rx97_pos)
     $P10 = rx97_cur."panic"("Illegal pod directive")
     unless $P10, rx97_fail
     rx97_pos = $P10."pos"()
-  alt138_end:
-.annotate "line", 70
+  alt141_end:
+.annotate "line", 74
   # rx charclass_q N r 0..-1
     sub $I10, rx97_pos, rx97_off
     find_cclass $I11, 4096, rx97_tgt, $I10, rx97_eos
@@ -1718,7 +1728,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1267204702.05125") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1272816833.94956") :method
 .annotate "line", 4
     new $P99, "ResizablePMCArray"
     push $P99, ""
@@ -1727,8614 +1737,8651 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block130"  :anon :subid("28_1267204702.05125") :method :outer("26_1267204702.05125")
+.sub "_block132"  :anon :subid("28_1272816833.94956") :method :outer("26_1272816833.94956")
 .annotate "line", 67
-    .local string rx132_tgt
-    .local int rx132_pos
-    .local int rx132_off
-    .local int rx132_eos
-    .local int rx132_rep
-    .local pmc rx132_cur
-    (rx132_cur, rx132_pos, rx132_tgt) = self."!cursor_start"()
-    rx132_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx132_cur
-    .local pmc match
-    .lex "$/", match
-    length rx132_eos, rx132_tgt
-    set rx132_off, 0
-    lt rx132_pos, 2, rx132_start
-    sub rx132_off, rx132_pos, 1
-    substr rx132_tgt, rx132_tgt, rx132_off
-  rx132_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan133_done
-    goto rxscan133_scan
-  rxscan133_loop:
-    ($P10) = rx132_cur."from"()
-    inc $P10
-    set rx132_pos, $P10
-    ge rx132_pos, rx132_eos, rxscan133_done
-  rxscan133_scan:
-    set_addr $I10, rxscan133_loop
-    rx132_cur."!mark_push"(0, rx132_pos, $I10)
-  rxscan133_done:
-  # rx rxquantf134 ** 0..*
-    set_addr $I10, rxquantf134_loop
-    rx132_cur."!mark_push"(0, rx132_pos, $I10)
-    goto rxquantf134_done
-  rxquantf134_loop:
-  # rx charclass .
-    ge rx132_pos, rx132_eos, rx132_fail
-    inc rx132_pos
-    set_addr $I10, rxquantf134_loop
-    rx132_cur."!mark_push"($I135, rx132_pos, $I10)
-  rxquantf134_done:
-  # rxanchor bol
-    eq rx132_pos, 0, rxanchor136_done
-    ge rx132_pos, rx132_eos, rx132_fail
-    sub $I10, rx132_pos, rx132_off
-    dec $I10
-    is_cclass $I11, 4096, rx132_tgt, $I10
-    unless $I11, rx132_fail
-  rxanchor136_done:
-  # rx literal  "=cut"
-    add $I11, rx132_pos, 4
-    gt $I11, rx132_eos, rx132_fail
-    sub $I11, rx132_pos, rx132_off
-    substr $S10, rx132_tgt, $I11, 4
-    ne $S10, "=cut", rx132_fail
-    add rx132_pos, 4
+    .local string rx134_tgt
+    .local int rx134_pos
+    .local int rx134_off
+    .local int rx134_eos
+    .local int rx134_rep
+    .local pmc rx134_cur
+    (rx134_cur, rx134_pos, rx134_tgt) = self."!cursor_start"()
+    rx134_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx134_cur
+    .local pmc match
+    .lex "$/", match
+    length rx134_eos, rx134_tgt
+    set rx134_off, 0
+    lt rx134_pos, 2, rx134_start
+    sub rx134_off, rx134_pos, 1
+    substr rx134_tgt, rx134_tgt, rx134_off
+  rx134_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan135_done
+    goto rxscan135_scan
+  rxscan135_loop:
+    ($P10) = rx134_cur."from"()
+    inc $P10
+    set rx134_pos, $P10
+    ge rx134_pos, rx134_eos, rxscan135_done
+  rxscan135_scan:
+    set_addr $I10, rxscan135_loop
+    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+  rxscan135_done:
+  # rx rxquantr136 ** 0..*
+    set_addr $I137, rxquantr136_done
+    rx134_cur."!mark_push"(0, rx134_pos, $I137)
+  rxquantr136_loop:
+  # rx enumcharlist negate=0 
+    ge rx134_pos, rx134_eos, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I10, 1
+    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
+    lt $I11, 0, rx134_fail
+    inc rx134_pos
+    (rx134_rep) = rx134_cur."!mark_commit"($I137)
+    rx134_cur."!mark_push"(rx134_rep, rx134_pos, $I137)
+    goto rxquantr136_loop
+  rxquantr136_done:
+  alt138_0:
+    set_addr $I10, alt138_1
+    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+.annotate "line", 68
+  # rx literal  "="
+    add $I11, rx134_pos, 1
+    gt $I11, rx134_eos, rx134_fail
+    sub $I11, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I11, 1
+    ne $S10, "=", rx134_fail
+    add rx134_pos, 1
+.annotate "line", 70
+  # rx rxquantr139 ** 0..1
+    set_addr $I140, rxquantr139_done
+    rx134_cur."!mark_push"(0, rx134_pos, $I140)
+  rxquantr139_loop:
+.annotate "line", 69
+  # rx literal  "cut"
+    add $I11, rx134_pos, 3
+    gt $I11, rx134_eos, rx134_fail
+    sub $I11, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I11, 3
+    ne $S10, "cut", rx134_fail
+    add rx134_pos, 3
   # rxanchor rwb
-    le rx132_pos, 0, rx132_fail
-    sub $I10, rx132_pos, rx132_off
-    is_cclass $I11, 8192, rx132_tgt, $I10
-    if $I11, rx132_fail
+    le rx134_pos, 0, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    is_cclass $I11, 8192, rx134_tgt, $I10
+    if $I11, rx134_fail
     dec $I10
-    is_cclass $I11, 8192, rx132_tgt, $I10
-    unless $I11, rx132_fail
+    is_cclass $I11, 8192, rx134_tgt, $I10
+    unless $I11, rx134_fail
+.annotate "line", 70
+  # rx subrule "panic" subtype=method negate=
+    rx134_cur."!cursor_pos"(rx134_pos)
+    $P10 = rx134_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    unless $P10, rx134_fail
+    rx134_pos = $P10."pos"()
+    (rx134_rep) = rx134_cur."!mark_commit"($I140)
+  rxquantr139_done:
+.annotate "line", 67
+    goto alt138_end
+  alt138_1:
+.annotate "line", 71
+  # rx charclass nl
+    ge rx134_pos, rx134_eos, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    is_cclass $I11, 4096, rx134_tgt, $I10
+    unless $I11, rx134_fail
+    substr $S10, rx134_tgt, $I10, 2
+    iseq $I11, $S10, "\r\n"
+    add rx134_pos, $I11
+    inc rx134_pos
+  alt138_end:
+.annotate "line", 67
   # rx pass
-    rx132_cur."!cursor_pass"(rx132_pos, "")
-    rx132_cur."!cursor_debug"("PASS  ", "", " at pos=", rx132_pos)
-    .return (rx132_cur)
-  rx132_fail:
-    (rx132_rep, rx132_pos, $I10, $P10) = rx132_cur."!mark_fail"(0)
-    lt rx132_pos, -1, rx132_done
-    eq rx132_pos, -1, rx132_fail
-    jump $I10
-  rx132_done:
-    rx132_cur."!cursor_fail"()
-    rx132_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx132_cur)
+    rx134_cur."!cursor_pass"(rx134_pos, "")
+    rx134_cur."!cursor_debug"("PASS  ", "", " at pos=", rx134_pos)
+    .return (rx134_cur)
+  rx134_fail:
+    (rx134_rep, rx134_pos, $I10, $P10) = rx134_cur."!mark_fail"(0)
+    lt rx134_pos, -1, rx134_done
+    eq rx134_pos, -1, rx134_fail
+    jump $I10
+  rx134_done:
+    rx134_cur."!cursor_fail"()
+    rx134_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx134_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx140_tgt
-    .local int rx140_pos
-    .local int rx140_off
-    .local int rx140_eos
-    .local int rx140_rep
-    .local pmc rx140_cur
-    (rx140_cur, rx140_pos, rx140_tgt) = self."!cursor_start"()
-    rx140_cur."!cursor_debug"("START ", "comp_unit")
-    .lex unicode:"$\x{a2}", rx140_cur
-    .local pmc match
-    .lex "$/", match
-    length rx140_eos, rx140_tgt
-    set rx140_off, 0
-    lt rx140_pos, 2, rx140_start
-    sub rx140_off, rx140_pos, 1
-    substr rx140_tgt, rx140_tgt, rx140_off
-  rx140_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan144_done
-    goto rxscan144_scan
-  rxscan144_loop:
-    ($P10) = rx140_cur."from"()
-    inc $P10
-    set rx140_pos, $P10
-    ge rx140_pos, rx140_eos, rxscan144_done
-  rxscan144_scan:
-    set_addr $I10, rxscan144_loop
-    rx140_cur."!mark_push"(0, rx140_pos, $I10)
-  rxscan144_done:
-.annotate "line", 78
+.sub "comp_unit"  :subid("29_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 4
+    .local string rx143_tgt
+    .local int rx143_pos
+    .local int rx143_off
+    .local int rx143_eos
+    .local int rx143_rep
+    .local pmc rx143_cur
+    (rx143_cur, rx143_pos, rx143_tgt) = self."!cursor_start"()
+    rx143_cur."!cursor_debug"("START ", "comp_unit")
+    .lex unicode:"$\x{a2}", rx143_cur
+    .local pmc match
+    .lex "$/", match
+    length rx143_eos, rx143_tgt
+    set rx143_off, 0
+    lt rx143_pos, 2, rx143_start
+    sub rx143_off, rx143_pos, 1
+    substr rx143_tgt, rx143_tgt, rx143_off
+  rx143_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan147_done
+    goto rxscan147_scan
+  rxscan147_loop:
+    ($P10) = rx143_cur."from"()
+    inc $P10
+    set rx143_pos, $P10
+    ge rx143_pos, rx143_eos, rxscan147_done
+  rxscan147_scan:
+    set_addr $I10, rxscan147_loop
+    rx143_cur."!mark_push"(0, rx143_pos, $I10)
+  rxscan147_done:
+.annotate "line", 82
   # rx subrule "newpad" subtype=method negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."newpad"()
-    unless $P10, rx140_fail
-    rx140_pos = $P10."pos"()
-.annotate "line", 79
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."newpad"()
+    unless $P10, rx143_fail
+    rx143_pos = $P10."pos"()
+.annotate "line", 83
   # rx subrule "statementlist" subtype=capture negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."statementlist"()
-    unless $P10, rx140_fail
-    rx140_cur."!mark_push"(0, -1, 0, $P10)
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."statementlist"()
+    unless $P10, rx143_fail
+    rx143_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx140_pos = $P10."pos"()
-  alt145_0:
-.annotate "line", 80
-    set_addr $I10, alt145_1
-    rx140_cur."!mark_push"(0, rx140_pos, $I10)
+    rx143_pos = $P10."pos"()
+  alt148_0:
+.annotate "line", 84
+    set_addr $I10, alt148_1
+    rx143_cur."!mark_push"(0, rx143_pos, $I10)
   # rxanchor eos
-    ne rx140_pos, rx140_eos, rx140_fail
-    goto alt145_end
-  alt145_1:
+    ne rx143_pos, rx143_eos, rx143_fail
+    goto alt148_end
+  alt148_1:
   # rx subrule "panic" subtype=method negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."panic"("Confused")
-    unless $P10, rx140_fail
-    rx140_pos = $P10."pos"()
-  alt145_end:
-.annotate "line", 77
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."panic"("Confused")
+    unless $P10, rx143_fail
+    rx143_pos = $P10."pos"()
+  alt148_end:
+.annotate "line", 81
   # rx pass
-    rx140_cur."!cursor_pass"(rx140_pos, "comp_unit")
-    rx140_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx140_pos)
-    .return (rx140_cur)
-  rx140_fail:
+    rx143_cur."!cursor_pass"(rx143_pos, "comp_unit")
+    rx143_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx143_pos)
+    .return (rx143_cur)
+  rx143_fail:
 .annotate "line", 4
-    (rx140_rep, rx140_pos, $I10, $P10) = rx140_cur."!mark_fail"(0)
-    lt rx140_pos, -1, rx140_done
-    eq rx140_pos, -1, rx140_fail
+    (rx143_rep, rx143_pos, $I10, $P10) = rx143_cur."!mark_fail"(0)
+    lt rx143_pos, -1, rx143_done
+    eq rx143_pos, -1, rx143_fail
     jump $I10
-  rx140_done:
-    rx140_cur."!cursor_fail"()
-    rx140_cur."!cursor_debug"("FAIL  ", "comp_unit")
-    .return (rx140_cur)
+  rx143_done:
+    rx143_cur."!cursor_fail"()
+    rx143_cur."!cursor_debug"("FAIL  ", "comp_unit")
+    .return (rx143_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1267204702.05125") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1272816833.94956") :method
 .annotate "line", 4
-    $P142 = self."!PREFIX__!subrule"("", "")
-    new $P143, "ResizablePMCArray"
-    push $P143, $P142
-    .return ($P143)
+    $P145 = self."!PREFIX__!subrule"("", "")
+    new $P146, "ResizablePMCArray"
+    push $P146, $P145
+    .return ($P146)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statementlist"  :subid("31_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx147_tgt
-    .local int rx147_pos
-    .local int rx147_off
-    .local int rx147_eos
-    .local int rx147_rep
-    .local pmc rx147_cur
-    (rx147_cur, rx147_pos, rx147_tgt) = self."!cursor_start"()
-    rx147_cur."!cursor_debug"("START ", "statementlist")
-    rx147_cur."!cursor_caparray"("statement")
-    .lex unicode:"$\x{a2}", rx147_cur
+    .local string rx150_tgt
+    .local int rx150_pos
+    .local int rx150_off
+    .local int rx150_eos
+    .local int rx150_rep
+    .local pmc rx150_cur
+    (rx150_cur, rx150_pos, rx150_tgt) = self."!cursor_start"()
+    rx150_cur."!cursor_debug"("START ", "statementlist")
+    rx150_cur."!cursor_caparray"("statement")
+    .lex unicode:"$\x{a2}", rx150_cur
     .local pmc match
     .lex "$/", match
-    length rx147_eos, rx147_tgt
-    set rx147_off, 0
-    lt rx147_pos, 2, rx147_start
-    sub rx147_off, rx147_pos, 1
-    substr rx147_tgt, rx147_tgt, rx147_off
-  rx147_start:
+    length rx150_eos, rx150_tgt
+    set rx150_off, 0
+    lt rx150_pos, 2, rx150_start
+    sub rx150_off, rx150_pos, 1
+    substr rx150_tgt, rx150_tgt, rx150_off
+  rx150_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan150_done
-    goto rxscan150_scan
-  rxscan150_loop:
-    ($P10) = rx147_cur."from"()
+    ne $I10, -1, rxscan153_done
+    goto rxscan153_scan
+  rxscan153_loop:
+    ($P10) = rx150_cur."from"()
     inc $P10
-    set rx147_pos, $P10
-    ge rx147_pos, rx147_eos, rxscan150_done
-  rxscan150_scan:
-    set_addr $I10, rxscan150_loop
-    rx147_cur."!mark_push"(0, rx147_pos, $I10)
-  rxscan150_done:
-  alt151_0:
-.annotate "line", 83
-    set_addr $I10, alt151_1
-    rx147_cur."!mark_push"(0, rx147_pos, $I10)
-.annotate "line", 84
+    set rx150_pos, $P10
+    ge rx150_pos, rx150_eos, rxscan153_done
+  rxscan153_scan:
+    set_addr $I10, rxscan153_loop
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+  rxscan153_done:
+  alt154_0:
+.annotate "line", 87
+    set_addr $I10, alt154_1
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+.annotate "line", 88
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
   # rxanchor eos
-    ne rx147_pos, rx147_eos, rx147_fail
+    ne rx150_pos, rx150_eos, rx150_fail
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-    goto alt151_end
-  alt151_1:
-.annotate "line", 85
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+    goto alt154_end
+  alt154_1:
+.annotate "line", 89
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  # rx rxquantr155 ** 0..*
-    set_addr $I157, rxquantr155_done
-    rx147_cur."!mark_push"(0, rx147_pos, $I157)
-  rxquantr155_loop:
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  # rx rxquantr158 ** 0..*
+    set_addr $I160, rxquantr158_done
+    rx150_cur."!mark_push"(0, rx150_pos, $I160)
+  rxquantr158_loop:
   # rx subrule "statement" subtype=capture negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."statement"()
-    unless $P10, rx147_fail
-    rx147_cur."!mark_push"(0, -1, 0, $P10)
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."statement"()
+    unless $P10, rx150_fail
+    rx150_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx147_pos = $P10."pos"()
+    rx150_pos = $P10."pos"()
   # rx subrule "eat_terminator" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."eat_terminator"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-    (rx147_rep) = rx147_cur."!mark_commit"($I157)
-    rx147_cur."!mark_push"(rx147_rep, rx147_pos, $I157)
-    goto rxquantr155_loop
-  rxquantr155_done:
-  # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  alt151_end:
-.annotate "line", 83
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."eat_terminator"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+    (rx150_rep) = rx150_cur."!mark_commit"($I160)
+    rx150_cur."!mark_push"(rx150_rep, rx150_pos, $I160)
+    goto rxquantr158_loop
+  rxquantr158_done:
+  # rx subrule "ws" subtype=method negate=
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  alt154_end:
+.annotate "line", 87
   # rx pass
-    rx147_cur."!cursor_pass"(rx147_pos, "statementlist")
-    rx147_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx147_pos)
-    .return (rx147_cur)
-  rx147_fail:
+    rx150_cur."!cursor_pass"(rx150_pos, "statementlist")
+    rx150_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx150_pos)
+    .return (rx150_cur)
+  rx150_fail:
 .annotate "line", 4
-    (rx147_rep, rx147_pos, $I10, $P10) = rx147_cur."!mark_fail"(0)
-    lt rx147_pos, -1, rx147_done
-    eq rx147_pos, -1, rx147_fail
+    (rx150_rep, rx150_pos, $I10, $P10) = rx150_cur."!mark_fail"(0)
+    lt rx150_pos, -1, rx150_done
+    eq rx150_pos, -1, rx150_fail
     jump $I10
-  rx147_done:
-    rx147_cur."!cursor_fail"()
-    rx147_cur."!cursor_debug"("FAIL  ", "statementlist")
-    .return (rx147_cur)
+  rx150_done:
+    rx150_cur."!cursor_fail"()
+    rx150_cur."!cursor_debug"("FAIL  ", "statementlist")
+    .return (rx150_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1267204702.05125") :method
+.sub "!PREFIX__statementlist"  :subid("32_1272816833.94956") :method
 .annotate "line", 4
-    new $P149, "ResizablePMCArray"
-    push $P149, ""
-    push $P149, ""
-    .return ($P149)
+    new $P152, "ResizablePMCArray"
+    push $P152, ""
+    push $P152, ""
+    .return ($P152)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement"  :subid("33_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .const 'Sub' $P165 = "35_1267204702.05125" 
-    capture_lex $P165
-    .local string rx160_tgt
-    .local int rx160_pos
-    .local int rx160_off
-    .local int rx160_eos
-    .local int rx160_rep
-    .local pmc rx160_cur
-    (rx160_cur, rx160_pos, rx160_tgt) = self."!cursor_start"()
-    rx160_cur."!cursor_debug"("START ", "statement")
-    rx160_cur."!cursor_caparray"("statement_mod_cond", "statement_mod_loop")
-    .lex unicode:"$\x{a2}", rx160_cur
+    .const 'Sub' $P168 = "35_1272816833.94956" 
+    capture_lex $P168
+    .local string rx163_tgt
+    .local int rx163_pos
+    .local int rx163_off
+    .local int rx163_eos
+    .local int rx163_rep
+    .local pmc rx163_cur
+    (rx163_cur, rx163_pos, rx163_tgt) = self."!cursor_start"()
+    rx163_cur."!cursor_debug"("START ", "statement")
+    rx163_cur."!cursor_caparray"("statement_mod_loop", "statement_mod_cond")
+    .lex unicode:"$\x{a2}", rx163_cur
     .local pmc match
     .lex "$/", match
-    length rx160_eos, rx160_tgt
-    set rx160_off, 0
-    lt rx160_pos, 2, rx160_start
-    sub rx160_off, rx160_pos, 1
-    substr rx160_tgt, rx160_tgt, rx160_off
-  rx160_start:
+    length rx163_eos, rx163_tgt
+    set rx163_off, 0
+    lt rx163_pos, 2, rx163_start
+    sub rx163_off, rx163_pos, 1
+    substr rx163_tgt, rx163_tgt, rx163_off
+  rx163_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan163_done
-    goto rxscan163_scan
-  rxscan163_loop:
-    ($P10) = rx160_cur."from"()
+    ne $I10, -1, rxscan166_done
+    goto rxscan166_scan
+  rxscan166_loop:
+    ($P10) = rx163_cur."from"()
     inc $P10
-    set rx160_pos, $P10
-    ge rx160_pos, rx160_eos, rxscan163_done
-  rxscan163_scan:
-    set_addr $I10, rxscan163_loop
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-  rxscan163_done:
-.annotate "line", 89
+    set rx163_pos, $P10
+    ge rx163_pos, rx163_eos, rxscan166_done
+  rxscan166_scan:
+    set_addr $I10, rxscan166_loop
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+  rxscan166_done:
+.annotate "line", 93
   # rx subrule "before" subtype=zerowidth negate=1
-    rx160_cur."!cursor_pos"(rx160_pos)
-    .const 'Sub' $P165 = "35_1267204702.05125" 
-    capture_lex $P165
-    $P10 = rx160_cur."before"($P165)
-    if $P10, rx160_fail
-  alt169_0:
-.annotate "line", 90
-    set_addr $I10, alt169_1
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 91
+    rx163_cur."!cursor_pos"(rx163_pos)
+    .const 'Sub' $P168 = "35_1272816833.94956" 
+    capture_lex $P168
+    $P10 = rx163_cur."before"($P168)
+    if $P10, rx163_fail
+  alt172_0:
+.annotate "line", 94
+    set_addr $I10, alt172_1
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 95
   # rx subrule "statement_control" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_control"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_control"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_control")
-    rx160_pos = $P10."pos"()
-    goto alt169_end
-  alt169_1:
-.annotate "line", 92
+    rx163_pos = $P10."pos"()
+    goto alt172_end
+  alt172_1:
+.annotate "line", 96
   # rx subrule "EXPR" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."EXPR"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."EXPR"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx160_pos = $P10."pos"()
+    rx163_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."ws"()
-    unless $P10, rx160_fail
-    rx160_pos = $P10."pos"()
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."ws"()
+    unless $P10, rx163_fail
+    rx163_pos = $P10."pos"()
+.annotate "line", 101
+  # rx rxquantr173 ** 0..1
+    set_addr $I177, rxquantr173_done
+    rx163_cur."!mark_push"(0, rx163_pos, $I177)
+  rxquantr173_loop:
+  alt174_0:
 .annotate "line", 97
-  # rx rxquantr170 ** 0..1
-    set_addr $I174, rxquantr170_done
-    rx160_cur."!mark_push"(0, rx160_pos, $I174)
-  rxquantr170_loop:
-  alt171_0:
-.annotate "line", 93
-    set_addr $I10, alt171_1
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 94
+    set_addr $I10, alt174_1
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 98
   # rx subrule "MARKED" subtype=zerowidth negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."MARKED"("endstmt")
-    unless $P10, rx160_fail
-    goto alt171_end
-  alt171_1:
-    set_addr $I10, alt171_2
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 95
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."MARKED"("endstmt")
+    unless $P10, rx163_fail
+    goto alt174_end
+  alt174_1:
+    set_addr $I10, alt174_2
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 99
   # rx subrule "statement_mod_cond" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_cond"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_cond"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_cond")
-    rx160_pos = $P10."pos"()
-  # rx rxquantr172 ** 0..1
-    set_addr $I173, rxquantr172_done
-    rx160_cur."!mark_push"(0, rx160_pos, $I173)
-  rxquantr172_loop:
+    rx163_pos = $P10."pos"()
+  # rx rxquantr175 ** 0..1
+    set_addr $I176, rxquantr175_done
+    rx163_cur."!mark_push"(0, rx163_pos, $I176)
+  rxquantr175_loop:
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_loop"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_loop"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx160_pos = $P10."pos"()
-    (rx160_rep) = rx160_cur."!mark_commit"($I173)
-  rxquantr172_done:
-    goto alt171_end
-  alt171_2:
-.annotate "line", 96
+    rx163_pos = $P10."pos"()
+    (rx163_rep) = rx163_cur."!mark_commit"($I176)
+  rxquantr175_done:
+    goto alt174_end
+  alt174_2:
+.annotate "line", 100
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_loop"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_loop"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx160_pos = $P10."pos"()
-  alt171_end:
-.annotate "line", 97
-    (rx160_rep) = rx160_cur."!mark_commit"($I174)
-  rxquantr170_done:
-  alt169_end:
-.annotate "line", 88
+    rx163_pos = $P10."pos"()
+  alt174_end:
+.annotate "line", 101
+    (rx163_rep) = rx163_cur."!mark_commit"($I177)
+  rxquantr173_done:
+  alt172_end:
+.annotate "line", 92
   # rx pass
-    rx160_cur."!cursor_pass"(rx160_pos, "statement")
-    rx160_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx160_pos)
-    .return (rx160_cur)
-  rx160_fail:
+    rx163_cur."!cursor_pass"(rx163_pos, "statement")
+    rx163_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx163_pos)
+    .return (rx163_cur)
+  rx163_fail:
 .annotate "line", 4
-    (rx160_rep, rx160_pos, $I10, $P10) = rx160_cur."!mark_fail"(0)
-    lt rx160_pos, -1, rx160_done
-    eq rx160_pos, -1, rx160_fail
+    (rx163_rep, rx163_pos, $I10, $P10) = rx163_cur."!mark_fail"(0)
+    lt rx163_pos, -1, rx163_done
+    eq rx163_pos, -1, rx163_fail
     jump $I10
-  rx160_done:
-    rx160_cur."!cursor_fail"()
-    rx160_cur."!cursor_debug"("FAIL  ", "statement")
-    .return (rx160_cur)
+  rx163_done:
+    rx163_cur."!cursor_fail"()
+    rx163_cur."!cursor_debug"("FAIL  ", "statement")
+    .return (rx163_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1267204702.05125") :method
+.sub "!PREFIX__statement"  :subid("34_1272816833.94956") :method
 .annotate "line", 4
-    new $P162, "ResizablePMCArray"
-    push $P162, ""
-    .return ($P162)
+    new $P165, "ResizablePMCArray"
+    push $P165, ""
+    .return ($P165)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block164"  :anon :subid("35_1267204702.05125") :method :outer("33_1267204702.05125")
-.annotate "line", 89
-    .local string rx166_tgt
-    .local int rx166_pos
-    .local int rx166_off
-    .local int rx166_eos
-    .local int rx166_rep
-    .local pmc rx166_cur
-    (rx166_cur, rx166_pos, rx166_tgt) = self."!cursor_start"()
-    rx166_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx166_cur
-    .local pmc match
-    .lex "$/", match
-    length rx166_eos, rx166_tgt
-    set rx166_off, 0
-    lt rx166_pos, 2, rx166_start
-    sub rx166_off, rx166_pos, 1
-    substr rx166_tgt, rx166_tgt, rx166_off
-  rx166_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan167_done
-    goto rxscan167_scan
-  rxscan167_loop:
-    ($P10) = rx166_cur."from"()
-    inc $P10
-    set rx166_pos, $P10
-    ge rx166_pos, rx166_eos, rxscan167_done
-  rxscan167_scan:
-    set_addr $I10, rxscan167_loop
-    rx166_cur."!mark_push"(0, rx166_pos, $I10)
-  rxscan167_done:
-  alt168_0:
-    set_addr $I10, alt168_1
-    rx166_cur."!mark_push"(0, rx166_pos, $I10)
+.sub "_block167"  :anon :subid("35_1272816833.94956") :method :outer("33_1272816833.94956")
+.annotate "line", 93
+    .local string rx169_tgt
+    .local int rx169_pos
+    .local int rx169_off
+    .local int rx169_eos
+    .local int rx169_rep
+    .local pmc rx169_cur
+    (rx169_cur, rx169_pos, rx169_tgt) = self."!cursor_start"()
+    rx169_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx169_cur
+    .local pmc match
+    .lex "$/", match
+    length rx169_eos, rx169_tgt
+    set rx169_off, 0
+    lt rx169_pos, 2, rx169_start
+    sub rx169_off, rx169_pos, 1
+    substr rx169_tgt, rx169_tgt, rx169_off
+  rx169_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan170_done
+    goto rxscan170_scan
+  rxscan170_loop:
+    ($P10) = rx169_cur."from"()
+    inc $P10
+    set rx169_pos, $P10
+    ge rx169_pos, rx169_eos, rxscan170_done
+  rxscan170_scan:
+    set_addr $I10, rxscan170_loop
+    rx169_cur."!mark_push"(0, rx169_pos, $I10)
+  rxscan170_done:
+  alt171_0:
+    set_addr $I10, alt171_1
+    rx169_cur."!mark_push"(0, rx169_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx166_pos, rx166_eos, rx166_fail
-    sub $I10, rx166_pos, rx166_off
-    substr $S10, rx166_tgt, $I10, 1
+    ge rx169_pos, rx169_eos, rx169_fail
+    sub $I10, rx169_pos, rx169_off
+    substr $S10, rx169_tgt, $I10, 1
     index $I11, "])}", $S10
-    lt $I11, 0, rx166_fail
-    inc rx166_pos
-    goto alt168_end
-  alt168_1:
+    lt $I11, 0, rx169_fail
+    inc rx169_pos
+    goto alt171_end
+  alt171_1:
   # rxanchor eos
-    ne rx166_pos, rx166_eos, rx166_fail
-  alt168_end:
+    ne rx169_pos, rx169_eos, rx169_fail
+  alt171_end:
   # rx pass
-    rx166_cur."!cursor_pass"(rx166_pos, "")
-    rx166_cur."!cursor_debug"("PASS  ", "", " at pos=", rx166_pos)
-    .return (rx166_cur)
-  rx166_fail:
-    (rx166_rep, rx166_pos, $I10, $P10) = rx166_cur."!mark_fail"(0)
-    lt rx166_pos, -1, rx166_done
-    eq rx166_pos, -1, rx166_fail
-    jump $I10
-  rx166_done:
-    rx166_cur."!cursor_fail"()
-    rx166_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx166_cur)
+    rx169_cur."!cursor_pass"(rx169_pos, "")
+    rx169_cur."!cursor_debug"("PASS  ", "", " at pos=", rx169_pos)
+    .return (rx169_cur)
+  rx169_fail:
+    (rx169_rep, rx169_pos, $I10, $P10) = rx169_cur."!mark_fail"(0)
+    lt rx169_pos, -1, rx169_done
+    eq rx169_pos, -1, rx169_fail
+    jump $I10
+  rx169_done:
+    rx169_cur."!cursor_fail"()
+    rx169_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx169_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx176_tgt
-    .local int rx176_pos
-    .local int rx176_off
-    .local int rx176_eos
-    .local int rx176_rep
-    .local pmc rx176_cur
-    (rx176_cur, rx176_pos, rx176_tgt) = self."!cursor_start"()
-    rx176_cur."!cursor_debug"("START ", "eat_terminator")
-    .lex unicode:"$\x{a2}", rx176_cur
-    .local pmc match
-    .lex "$/", match
-    length rx176_eos, rx176_tgt
-    set rx176_off, 0
-    lt rx176_pos, 2, rx176_start
-    sub rx176_off, rx176_pos, 1
-    substr rx176_tgt, rx176_tgt, rx176_off
-  rx176_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan179_done
-    goto rxscan179_scan
-  rxscan179_loop:
-    ($P10) = rx176_cur."from"()
-    inc $P10
-    set rx176_pos, $P10
-    ge rx176_pos, rx176_eos, rxscan179_done
-  rxscan179_scan:
-    set_addr $I10, rxscan179_loop
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-  rxscan179_done:
-  alt180_0:
-.annotate "line", 101
-    set_addr $I10, alt180_1
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 102
+.sub "eat_terminator"  :subid("36_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 4
+    .local string rx179_tgt
+    .local int rx179_pos
+    .local int rx179_off
+    .local int rx179_eos
+    .local int rx179_rep
+    .local pmc rx179_cur
+    (rx179_cur, rx179_pos, rx179_tgt) = self."!cursor_start"()
+    rx179_cur."!cursor_debug"("START ", "eat_terminator")
+    .lex unicode:"$\x{a2}", rx179_cur
+    .local pmc match
+    .lex "$/", match
+    length rx179_eos, rx179_tgt
+    set rx179_off, 0
+    lt rx179_pos, 2, rx179_start
+    sub rx179_off, rx179_pos, 1
+    substr rx179_tgt, rx179_tgt, rx179_off
+  rx179_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan182_done
+    goto rxscan182_scan
+  rxscan182_loop:
+    ($P10) = rx179_cur."from"()
+    inc $P10
+    set rx179_pos, $P10
+    ge rx179_pos, rx179_eos, rxscan182_done
+  rxscan182_scan:
+    set_addr $I10, rxscan182_loop
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+  rxscan182_done:
+  alt183_0:
+.annotate "line", 105
+    set_addr $I10, alt183_1
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 106
   # rx literal  ";"
-    add $I11, rx176_pos, 1
-    gt $I11, rx176_eos, rx176_fail
-    sub $I11, rx176_pos, rx176_off
-    substr $S10, rx176_tgt, $I11, 1
-    ne $S10, ";", rx176_fail
-    add rx176_pos, 1
-    goto alt180_end
-  alt180_1:
-    set_addr $I10, alt180_2
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 103
+    add $I11, rx179_pos, 1
+    gt $I11, rx179_eos, rx179_fail
+    sub $I11, rx179_pos, rx179_off
+    substr $S10, rx179_tgt, $I11, 1
+    ne $S10, ";", rx179_fail
+    add rx179_pos, 1
+    goto alt183_end
+  alt183_1:
+    set_addr $I10, alt183_2
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 107
   # rx subrule "MARKED" subtype=zerowidth negate=
-    rx176_cur."!cursor_pos"(rx176_pos)
-    $P10 = rx176_cur."MARKED"("endstmt")
-    unless $P10, rx176_fail
-    goto alt180_end
-  alt180_2:
-    set_addr $I10, alt180_3
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 104
+    rx179_cur."!cursor_pos"(rx179_pos)
+    $P10 = rx179_cur."MARKED"("endstmt")
+    unless $P10, rx179_fail
+    goto alt183_end
+  alt183_2:
+    set_addr $I10, alt183_3
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 108
   # rx subrule "terminator" subtype=zerowidth negate=
-    rx176_cur."!cursor_pos"(rx176_pos)
-    $P10 = rx176_cur."terminator"()
-    unless $P10, rx176_fail
-    goto alt180_end
-  alt180_3:
-.annotate "line", 105
+    rx179_cur."!cursor_pos"(rx179_pos)
+    $P10 = rx179_cur."terminator"()
+    unless $P10, rx179_fail
+    goto alt183_end
+  alt183_3:
+.annotate "line", 109
   # rxanchor eos
-    ne rx176_pos, rx176_eos, rx176_fail
-  alt180_end:
-.annotate "line", 101
+    ne rx179_pos, rx179_eos, rx179_fail
+  alt183_end:
+.annotate "line", 105
   # rx pass
-    rx176_cur."!cursor_pass"(rx176_pos, "eat_terminator")
-    rx176_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx176_pos)
-    .return (rx176_cur)
-  rx176_fail:
+    rx179_cur."!cursor_pass"(rx179_pos, "eat_terminator")
+    rx179_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx179_pos)
+    .return (rx179_cur)
+  rx179_fail:
 .annotate "line", 4
-    (rx176_rep, rx176_pos, $I10, $P10) = rx176_cur."!mark_fail"(0)
-    lt rx176_pos, -1, rx176_done
-    eq rx176_pos, -1, rx176_fail
+    (rx179_rep, rx179_pos, $I10, $P10) = rx179_cur."!mark_fail"(0)
+    lt rx179_pos, -1, rx179_done
+    eq rx179_pos, -1, rx179_fail
     jump $I10
-  rx176_done:
-    rx176_cur."!cursor_fail"()
-    rx176_cur."!cursor_debug"("FAIL  ", "eat_terminator")
-    .return (rx176_cur)
+  rx179_done:
+    rx179_cur."!cursor_fail"()
+    rx179_cur."!cursor_debug"("FAIL  ", "eat_terminator")
+    .return (rx179_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1267204702.05125") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1272816833.94956") :method
 .annotate "line", 4
-    new $P178, "ResizablePMCArray"
-    push $P178, ""
-    push $P178, ""
-    push $P178, ""
-    push $P178, ";"
-    .return ($P178)
+    new $P181, "ResizablePMCArray"
+    push $P181, ""
+    push $P181, ""
+    push $P181, ""
+    push $P181, ";"
+    .return ($P181)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "xblock"  :subid("38_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx182_tgt
-    .local int rx182_pos
-    .local int rx182_off
-    .local int rx182_eos
-    .local int rx182_rep
-    .local pmc rx182_cur
-    (rx182_cur, rx182_pos, rx182_tgt) = self."!cursor_start"()
-    rx182_cur."!cursor_debug"("START ", "xblock")
-    .lex unicode:"$\x{a2}", rx182_cur
+    .local string rx185_tgt
+    .local int rx185_pos
+    .local int rx185_off
+    .local int rx185_eos
+    .local int rx185_rep
+    .local pmc rx185_cur
+    (rx185_cur, rx185_pos, rx185_tgt) = self."!cursor_start"()
+    rx185_cur."!cursor_debug"("START ", "xblock")
+    .lex unicode:"$\x{a2}", rx185_cur
     .local pmc match
     .lex "$/", match
-    length rx182_eos, rx182_tgt
-    set rx182_off, 0
-    lt rx182_pos, 2, rx182_start
-    sub rx182_off, rx182_pos, 1
-    substr rx182_tgt, rx182_tgt, rx182_off
-  rx182_start:
+    length rx185_eos, rx185_tgt
+    set rx185_off, 0
+    lt rx185_pos, 2, rx185_start
+    sub rx185_off, rx185_pos, 1
+    substr rx185_tgt, rx185_tgt, rx185_off
+  rx185_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan186_done
-    goto rxscan186_scan
-  rxscan186_loop:
-    ($P10) = rx182_cur."from"()
+    ne $I10, -1, rxscan189_done
+    goto rxscan189_scan
+  rxscan189_loop:
+    ($P10) = rx185_cur."from"()
     inc $P10
-    set rx182_pos, $P10
-    ge rx182_pos, rx182_eos, rxscan186_done
-  rxscan186_scan:
-    set_addr $I10, rxscan186_loop
-    rx182_cur."!mark_push"(0, rx182_pos, $I10)
-  rxscan186_done:
-.annotate "line", 109
+    set rx185_pos, $P10
+    ge rx185_pos, rx185_eos, rxscan189_done
+  rxscan189_scan:
+    set_addr $I10, rxscan189_loop
+    rx185_cur."!mark_push"(0, rx185_pos, $I10)
+  rxscan189_done:
+.annotate "line", 113
   # rx subrule "EXPR" subtype=capture negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."EXPR"()
-    unless $P10, rx182_fail
-    rx182_cur."!mark_push"(0, -1, 0, $P10)
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."EXPR"()
+    unless $P10, rx185_fail
+    rx185_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx182_pos = $P10."pos"()
+    rx185_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."ws"()
-    unless $P10, rx182_fail
-    rx182_pos = $P10."pos"()
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."ws"()
+    unless $P10, rx185_fail
+    rx185_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."pblock"()
-    unless $P10, rx182_fail
-    rx182_cur."!mark_push"(0, -1, 0, $P10)
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."pblock"()
+    unless $P10, rx185_fail
+    rx185_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx182_pos = $P10."pos"()
-.annotate "line", 108
+    rx185_pos = $P10."pos"()
+.annotate "line", 112
   # rx pass
-    rx182_cur."!cursor_pass"(rx182_pos, "xblock")
-    rx182_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx182_pos)
-    .return (rx182_cur)
-  rx182_fail:
+    rx185_cur."!cursor_pass"(rx185_pos, "xblock")
+    rx185_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx185_pos)
+    .return (rx185_cur)
+  rx185_fail:
 .annotate "line", 4
-    (rx182_rep, rx182_pos, $I10, $P10) = rx182_cur."!mark_fail"(0)
-    lt rx182_pos, -1, rx182_done
-    eq rx182_pos, -1, rx182_fail
+    (rx185_rep, rx185_pos, $I10, $P10) = rx185_cur."!mark_fail"(0)
+    lt rx185_pos, -1, rx185_done
+    eq rx185_pos, -1, rx185_fail
     jump $I10
-  rx182_done:
-    rx182_cur."!cursor_fail"()
-    rx182_cur."!cursor_debug"("FAIL  ", "xblock")
-    .return (rx182_cur)
+  rx185_done:
+    rx185_cur."!cursor_fail"()
+    rx185_cur."!cursor_debug"("FAIL  ", "xblock")
+    .return (rx185_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1267204702.05125") :method
+.sub "!PREFIX__xblock"  :subid("39_1272816833.94956") :method
 .annotate "line", 4
-    $P184 = self."!PREFIX__!subrule"("EXPR", "")
-    new $P185, "ResizablePMCArray"
-    push $P185, $P184
-    .return ($P185)
+    $P187 = self."!PREFIX__!subrule"("EXPR", "")
+    new $P188, "ResizablePMCArray"
+    push $P188, $P187
+    .return ($P188)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "pblock"  :subid("40_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx188_tgt
-    .local int rx188_pos
-    .local int rx188_off
-    .local int rx188_eos
-    .local int rx188_rep
-    .local pmc rx188_cur
-    (rx188_cur, rx188_pos, rx188_tgt) = self."!cursor_start"()
-    rx188_cur."!cursor_debug"("START ", "pblock")
-    .lex unicode:"$\x{a2}", rx188_cur
+    .local string rx191_tgt
+    .local int rx191_pos
+    .local int rx191_off
+    .local int rx191_eos
+    .local int rx191_rep
+    .local pmc rx191_cur
+    (rx191_cur, rx191_pos, rx191_tgt) = self."!cursor_start"()
+    rx191_cur."!cursor_debug"("START ", "pblock")
+    .lex unicode:"$\x{a2}", rx191_cur
     .local pmc match
     .lex "$/", match
-    length rx188_eos, rx188_tgt
-    set rx188_off, 0
-    lt rx188_pos, 2, rx188_start
-    sub rx188_off, rx188_pos, 1
-    substr rx188_tgt, rx188_tgt, rx188_off
-  rx188_start:
+    length rx191_eos, rx191_tgt
+    set rx191_off, 0
+    lt rx191_pos, 2, rx191_start
+    sub rx191_off, rx191_pos, 1
+    substr rx191_tgt, rx191_tgt, rx191_off
+  rx191_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan193_done
-    goto rxscan193_scan
-  rxscan193_loop:
-    ($P10) = rx188_cur."from"()
+    ne $I10, -1, rxscan196_done
+    goto rxscan196_scan
+  rxscan196_loop:
+    ($P10) = rx191_cur."from"()
     inc $P10
-    set rx188_pos, $P10
-    ge rx188_pos, rx188_eos, rxscan193_done
-  rxscan193_scan:
-    set_addr $I10, rxscan193_loop
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
-  rxscan193_done:
-  alt194_0:
-.annotate "line", 112
-    set_addr $I10, alt194_1
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
-.annotate "line", 113
+    set rx191_pos, $P10
+    ge rx191_pos, rx191_eos, rxscan196_done
+  rxscan196_scan:
+    set_addr $I10, rxscan196_loop
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+  rxscan196_done:
+  alt197_0:
+.annotate "line", 116
+    set_addr $I10, alt197_1
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate "line", 117
   # rx subrule "lambda" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."lambda"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 114
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."lambda"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 118
   # rx subrule "newpad" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."newpad"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 115
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."newpad"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 119
   # rx subrule "signature" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."signature"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."signature"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx188_pos = $P10."pos"()
-.annotate "line", 116
+    rx191_pos = $P10."pos"()
+.annotate "line", 120
   # rx subrule "blockoid" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."blockoid"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."blockoid"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx188_pos = $P10."pos"()
-.annotate "line", 113
-    goto alt194_end
-  alt194_1:
-    set_addr $I10, alt194_2
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
+    rx191_pos = $P10."pos"()
 .annotate "line", 117
+    goto alt197_end
+  alt197_1:
+    set_addr $I10, alt197_2
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate "line", 121
   # rx enumcharlist negate=0 zerowidth
-    ge rx188_pos, rx188_eos, rx188_fail
-    sub $I10, rx188_pos, rx188_off
-    substr $S10, rx188_tgt, $I10, 1
+    ge rx191_pos, rx191_eos, rx191_fail
+    sub $I10, rx191_pos, rx191_off
+    substr $S10, rx191_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx188_fail
-.annotate "line", 118
+    lt $I11, 0, rx191_fail
+.annotate "line", 122
   # rx subrule "newpad" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."newpad"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 119
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."newpad"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 123
   # rx subrule "blockoid" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."blockoid"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."blockoid"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx188_pos = $P10."pos"()
-.annotate "line", 117
-    goto alt194_end
-  alt194_2:
-.annotate "line", 120
+    rx191_pos = $P10."pos"()
+.annotate "line", 121
+    goto alt197_end
+  alt197_2:
+.annotate "line", 124
   # rx subrule "panic" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."panic"("Missing block")
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-  alt194_end:
-.annotate "line", 112
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."panic"("Missing block")
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+  alt197_end:
+.annotate "line", 116
   # rx pass
-    rx188_cur."!cursor_pass"(rx188_pos, "pblock")
-    rx188_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx188_pos)
-    .return (rx188_cur)
-  rx188_fail:
+    rx191_cur."!cursor_pass"(rx191_pos, "pblock")
+    rx191_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx191_pos)
+    .return (rx191_cur)
+  rx191_fail:
 .annotate "line", 4
-    (rx188_rep, rx188_pos, $I10, $P10) = rx188_cur."!mark_fail"(0)
-    lt rx188_pos, -1, rx188_done
-    eq rx188_pos, -1, rx188_fail
+    (rx191_rep, rx191_pos, $I10, $P10) = rx191_cur."!mark_fail"(0)
+    lt rx191_pos, -1, rx191_done
+    eq rx191_pos, -1, rx191_fail
     jump $I10
-  rx188_done:
-    rx188_cur."!cursor_fail"()
-    rx188_cur."!cursor_debug"("FAIL  ", "pblock")
-    .return (rx188_cur)
+  rx191_done:
+    rx191_cur."!cursor_fail"()
+    rx191_cur."!cursor_debug"("FAIL  ", "pblock")
+    .return (rx191_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1267204702.05125") :method
+.sub "!PREFIX__pblock"  :subid("41_1272816833.94956") :method
 .annotate "line", 4
-    $P190 = self."!PREFIX__!subrule"("", "")
-    $P191 = self."!PREFIX__!subrule"("", "")
-    new $P192, "ResizablePMCArray"
-    push $P192, $P190
-    push $P192, "{"
-    push $P192, $P191
-    .return ($P192)
+    $P193 = self."!PREFIX__!subrule"("", "")
+    $P194 = self."!PREFIX__!subrule"("", "")
+    new $P195, "ResizablePMCArray"
+    push $P195, $P193
+    push $P195, "{"
+    push $P195, $P194
+    .return ($P195)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "lambda"  :subid("42_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx196_tgt
-    .local int rx196_pos
-    .local int rx196_off
-    .local int rx196_eos
-    .local int rx196_rep
-    .local pmc rx196_cur
-    (rx196_cur, rx196_pos, rx196_tgt) = self."!cursor_start"()
-    rx196_cur."!cursor_debug"("START ", "lambda")
-    .lex unicode:"$\x{a2}", rx196_cur
+    .local string rx199_tgt
+    .local int rx199_pos
+    .local int rx199_off
+    .local int rx199_eos
+    .local int rx199_rep
+    .local pmc rx199_cur
+    (rx199_cur, rx199_pos, rx199_tgt) = self."!cursor_start"()
+    rx199_cur."!cursor_debug"("START ", "lambda")
+    .lex unicode:"$\x{a2}", rx199_cur
     .local pmc match
     .lex "$/", match
-    length rx196_eos, rx196_tgt
-    set rx196_off, 0
-    lt rx196_pos, 2, rx196_start
-    sub rx196_off, rx196_pos, 1
-    substr rx196_tgt, rx196_tgt, rx196_off
-  rx196_start:
+    length rx199_eos, rx199_tgt
+    set rx199_off, 0
+    lt rx199_pos, 2, rx199_start
+    sub rx199_off, rx199_pos, 1
+    substr rx199_tgt, rx199_tgt, rx199_off
+  rx199_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan199_done
-    goto rxscan199_scan
-  rxscan199_loop:
-    ($P10) = rx196_cur."from"()
+    ne $I10, -1, rxscan202_done
+    goto rxscan202_scan
+  rxscan202_loop:
+    ($P10) = rx199_cur."from"()
     inc $P10
-    set rx196_pos, $P10
-    ge rx196_pos, rx196_eos, rxscan199_done
-  rxscan199_scan:
-    set_addr $I10, rxscan199_loop
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
-  rxscan199_done:
-  alt200_0:
-.annotate "line", 123
-    set_addr $I10, alt200_1
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
+    set rx199_pos, $P10
+    ge rx199_pos, rx199_eos, rxscan202_done
+  rxscan202_scan:
+    set_addr $I10, rxscan202_loop
+    rx199_cur."!mark_push"(0, rx199_pos, $I10)
+  rxscan202_done:
+  alt203_0:
+.annotate "line", 127
+    set_addr $I10, alt203_1
+    rx199_cur."!mark_push"(0, rx199_pos, $I10)
   # rx literal  "->"
-    add $I11, rx196_pos, 2
-    gt $I11, rx196_eos, rx196_fail
-    sub $I11, rx196_pos, rx196_off
-    substr $S10, rx196_tgt, $I11, 2
-    ne $S10, "->", rx196_fail
-    add rx196_pos, 2
-    goto alt200_end
-  alt200_1:
+    add $I11, rx199_pos, 2
+    gt $I11, rx199_eos, rx199_fail
+    sub $I11, rx199_pos, rx199_off
+    substr $S10, rx199_tgt, $I11, 2
+    ne $S10, "->", rx199_fail
+    add rx199_pos, 2
+    goto alt203_end
+  alt203_1:
   # rx literal  "<->"
-    add $I11, rx196_pos, 3
-    gt $I11, rx196_eos, rx196_fail
-    sub $I11, rx196_pos, rx196_off
-    substr $S10, rx196_tgt, $I11, 3
-    ne $S10, "<->", rx196_fail
-    add rx196_pos, 3
-  alt200_end:
+    add $I11, rx199_pos, 3
+    gt $I11, rx199_eos, rx199_fail
+    sub $I11, rx199_pos, rx199_off
+    substr $S10, rx199_tgt, $I11, 3
+    ne $S10, "<->", rx199_fail
+    add rx199_pos, 3
+  alt203_end:
   # rx pass
-    rx196_cur."!cursor_pass"(rx196_pos, "lambda")
-    rx196_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx196_pos)
-    .return (rx196_cur)
-  rx196_fail:
+    rx199_cur."!cursor_pass"(rx199_pos, "lambda")
+    rx199_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx199_pos)
+    .return (rx199_cur)
+  rx199_fail:
 .annotate "line", 4
-    (rx196_rep, rx196_pos, $I10, $P10) = rx196_cur."!mark_fail"(0)
-    lt rx196_pos, -1, rx196_done
-    eq rx196_pos, -1, rx196_fail
+    (rx199_rep, rx199_pos, $I10, $P10) = rx199_cur."!mark_fail"(0)
+    lt rx199_pos, -1, rx199_done
+    eq rx199_pos, -1, rx199_fail
     jump $I10
-  rx196_done:
-    rx196_cur."!cursor_fail"()
-    rx196_cur."!cursor_debug"("FAIL  ", "lambda")
-    .return (rx196_cur)
+  rx199_done:
+    rx199_cur."!cursor_fail"()
+    rx199_cur."!cursor_debug"("FAIL  ", "lambda")
+    .return (rx199_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1267204702.05125") :method
+.sub "!PREFIX__lambda"  :subid("43_1272816833.94956") :method
 .annotate "line", 4
-    new $P198, "ResizablePMCArray"
-    push $P198, "<->"
-    push $P198, "->"
-    .return ($P198)
+    new $P201, "ResizablePMCArray"
+    push $P201, "<->"
+    push $P201, "->"
+    .return ($P201)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "block"  :subid("44_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx202_tgt
-    .local int rx202_pos
-    .local int rx202_off
-    .local int rx202_eos
-    .local int rx202_rep
-    .local pmc rx202_cur
-    (rx202_cur, rx202_pos, rx202_tgt) = self."!cursor_start"()
-    rx202_cur."!cursor_debug"("START ", "block")
-    .lex unicode:"$\x{a2}", rx202_cur
+    .local string rx205_tgt
+    .local int rx205_pos
+    .local int rx205_off
+    .local int rx205_eos
+    .local int rx205_rep
+    .local pmc rx205_cur
+    (rx205_cur, rx205_pos, rx205_tgt) = self."!cursor_start"()
+    rx205_cur."!cursor_debug"("START ", "block")
+    .lex unicode:"$\x{a2}", rx205_cur
     .local pmc match
     .lex "$/", match
-    length rx202_eos, rx202_tgt
-    set rx202_off, 0
-    lt rx202_pos, 2, rx202_start
-    sub rx202_off, rx202_pos, 1
-    substr rx202_tgt, rx202_tgt, rx202_off
-  rx202_start:
+    length rx205_eos, rx205_tgt
+    set rx205_off, 0
+    lt rx205_pos, 2, rx205_start
+    sub rx205_off, rx205_pos, 1
+    substr rx205_tgt, rx205_tgt, rx205_off
+  rx205_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan206_done
-    goto rxscan206_scan
-  rxscan206_loop:
-    ($P10) = rx202_cur."from"()
+    ne $I10, -1, rxscan209_done
+    goto rxscan209_scan
+  rxscan209_loop:
+    ($P10) = rx205_cur."from"()
     inc $P10
-    set rx202_pos, $P10
-    ge rx202_pos, rx202_eos, rxscan206_done
-  rxscan206_scan:
-    set_addr $I10, rxscan206_loop
-    rx202_cur."!mark_push"(0, rx202_pos, $I10)
-  rxscan206_done:
-  alt207_0:
-.annotate "line", 126
-    set_addr $I10, alt207_1
-    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+    set rx205_pos, $P10
+    ge rx205_pos, rx205_eos, rxscan209_done
+  rxscan209_scan:
+    set_addr $I10, rxscan209_loop
+    rx205_cur."!mark_push"(0, rx205_pos, $I10)
+  rxscan209_done:
+  alt210_0:
+.annotate "line", 130
+    set_addr $I10, alt210_1
+    rx205_cur."!mark_push"(0, rx205_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx202_pos, rx202_eos, rx202_fail
-    sub $I10, rx202_pos, rx202_off
-    substr $S10, rx202_tgt, $I10, 1
+    ge rx205_pos, rx205_eos, rx205_fail
+    sub $I10, rx205_pos, rx205_off
+    substr $S10, rx205_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx202_fail
-    goto alt207_end
-  alt207_1:
+    lt $I11, 0, rx205_fail
+    goto alt210_end
+  alt210_1:
   # rx subrule "panic" subtype=method negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."panic"("Missing block")
-    unless $P10, rx202_fail
-    rx202_pos = $P10."pos"()
-  alt207_end:
-.annotate "line", 127
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."panic"("Missing block")
+    unless $P10, rx205_fail
+    rx205_pos = $P10."pos"()
+  alt210_end:
+.annotate "line", 131
   # rx subrule "newpad" subtype=method negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."newpad"()
-    unless $P10, rx202_fail
-    rx202_pos = $P10."pos"()
-.annotate "line", 128
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."newpad"()
+    unless $P10, rx205_fail
+    rx205_pos = $P10."pos"()
+.annotate "line", 132
   # rx subrule "blockoid" subtype=capture negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."blockoid"()
-    unless $P10, rx202_fail
-    rx202_cur."!mark_push"(0, -1, 0, $P10)
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."blockoid"()
+    unless $P10, rx205_fail
+    rx205_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx202_pos = $P10."pos"()
-.annotate "line", 125
+    rx205_pos = $P10."pos"()
+.annotate "line", 129
   # rx pass
-    rx202_cur."!cursor_pass"(rx202_pos, "block")
-    rx202_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx202_pos)
-    .return (rx202_cur)
-  rx202_fail:
+    rx205_cur."!cursor_pass"(rx205_pos, "block")
+    rx205_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx205_pos)
+    .return (rx205_cur)
+  rx205_fail:
 .annotate "line", 4
-    (rx202_rep, rx202_pos, $I10, $P10) = rx202_cur."!mark_fail"(0)
-    lt rx202_pos, -1, rx202_done
-    eq rx202_pos, -1, rx202_fail
+    (rx205_rep, rx205_pos, $I10, $P10) = rx205_cur."!mark_fail"(0)
+    lt rx205_pos, -1, rx205_done
+    eq rx205_pos, -1, rx205_fail
     jump $I10
-  rx202_done:
-    rx202_cur."!cursor_fail"()
-    rx202_cur."!cursor_debug"("FAIL  ", "block")
-    .return (rx202_cur)
+  rx205_done:
+    rx205_cur."!cursor_fail"()
+    rx205_cur."!cursor_debug"("FAIL  ", "block")
+    .return (rx205_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1267204702.05125") :method
+.sub "!PREFIX__block"  :subid("45_1272816833.94956") :method
 .annotate "line", 4
-    $P204 = self."!PREFIX__!subrule"("", "")
-    new $P205, "ResizablePMCArray"
-    push $P205, $P204
-    push $P205, "{"
-    .return ($P205)
+    $P207 = self."!PREFIX__!subrule"("", "")
+    new $P208, "ResizablePMCArray"
+    push $P208, $P207
+    push $P208, "{"
+    .return ($P208)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "blockoid"  :subid("46_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx209_tgt
-    .local int rx209_pos
-    .local int rx209_off
-    .local int rx209_eos
-    .local int rx209_rep
-    .local pmc rx209_cur
-    (rx209_cur, rx209_pos, rx209_tgt) = self."!cursor_start"()
-    rx209_cur."!cursor_debug"("START ", "blockoid")
-    .lex unicode:"$\x{a2}", rx209_cur
+    .local string rx212_tgt
+    .local int rx212_pos
+    .local int rx212_off
+    .local int rx212_eos
+    .local int rx212_rep
+    .local pmc rx212_cur
+    (rx212_cur, rx212_pos, rx212_tgt) = self."!cursor_start"()
+    rx212_cur."!cursor_debug"("START ", "blockoid")
+    .lex unicode:"$\x{a2}", rx212_cur
     .local pmc match
     .lex "$/", match
-    length rx209_eos, rx209_tgt
-    set rx209_off, 0
-    lt rx209_pos, 2, rx209_start
-    sub rx209_off, rx209_pos, 1
-    substr rx209_tgt, rx209_tgt, rx209_off
-  rx209_start:
+    length rx212_eos, rx212_tgt
+    set rx212_off, 0
+    lt rx212_pos, 2, rx212_start
+    sub rx212_off, rx212_pos, 1
+    substr rx212_tgt, rx212_tgt, rx212_off
+  rx212_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan213_done
-    goto rxscan213_scan
-  rxscan213_loop:
-    ($P10) = rx209_cur."from"()
+    ne $I10, -1, rxscan216_done
+    goto rxscan216_scan
+  rxscan216_loop:
+    ($P10) = rx212_cur."from"()
     inc $P10
-    set rx209_pos, $P10
-    ge rx209_pos, rx209_eos, rxscan213_done
-  rxscan213_scan:
-    set_addr $I10, rxscan213_loop
-    rx209_cur."!mark_push"(0, rx209_pos, $I10)
-  rxscan213_done:
-.annotate "line", 132
+    set rx212_pos, $P10
+    ge rx212_pos, rx212_eos, rxscan216_done
+  rxscan216_scan:
+    set_addr $I10, rxscan216_loop
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
+  rxscan216_done:
+.annotate "line", 136
   # rx subrule "finishpad" subtype=method negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."finishpad"()
-    unless $P10, rx209_fail
-    rx209_pos = $P10."pos"()
-.annotate "line", 133
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."finishpad"()
+    unless $P10, rx212_fail
+    rx212_pos = $P10."pos"()
+.annotate "line", 137
   # rx literal  "{"
-    add $I11, rx209_pos, 1
-    gt $I11, rx209_eos, rx209_fail
-    sub $I11, rx209_pos, rx209_off
-    substr $S10, rx209_tgt, $I11, 1
-    ne $S10, "{", rx209_fail
-    add rx209_pos, 1
+    add $I11, rx212_pos, 1
+    gt $I11, rx212_eos, rx212_fail
+    sub $I11, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I11, 1
+    ne $S10, "{", rx212_fail
+    add rx212_pos, 1
   # rx subrule "statementlist" subtype=capture negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."statementlist"()
-    unless $P10, rx209_fail
-    rx209_cur."!mark_push"(0, -1, 0, $P10)
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."statementlist"()
+    unless $P10, rx212_fail
+    rx212_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx209_pos = $P10."pos"()
-  alt214_0:
-    set_addr $I10, alt214_1
-    rx209_cur."!mark_push"(0, rx209_pos, $I10)
+    rx212_pos = $P10."pos"()
+  alt217_0:
+    set_addr $I10, alt217_1
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
   # rx literal  "}"
-    add $I11, rx209_pos, 1
-    gt $I11, rx209_eos, rx209_fail
-    sub $I11, rx209_pos, rx209_off
-    substr $S10, rx209_tgt, $I11, 1
-    ne $S10, "}", rx209_fail
-    add rx209_pos, 1
-    goto alt214_end
-  alt214_1:
+    add $I11, rx212_pos, 1
+    gt $I11, rx212_eos, rx212_fail
+    sub $I11, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I11, 1
+    ne $S10, "}", rx212_fail
+    add rx212_pos, 1
+    goto alt217_end
+  alt217_1:
   # rx subrule "FAILGOAL" subtype=method negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."FAILGOAL"("'}'")
-    unless $P10, rx209_fail
-    rx209_pos = $P10."pos"()
-  alt214_end:
-.annotate "line", 134
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."FAILGOAL"("'}'")
+    unless $P10, rx212_fail
+    rx212_pos = $P10."pos"()
+  alt217_end:
+.annotate "line", 138
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."ENDSTMT"()
-    unless $P10, rx209_fail
-.annotate "line", 131
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."ENDSTMT"()
+    unless $P10, rx212_fail
+.annotate "line", 135
   # rx pass
-    rx209_cur."!cursor_pass"(rx209_pos, "blockoid")
-    rx209_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx209_pos)
-    .return (rx209_cur)
-  rx209_fail:
+    rx212_cur."!cursor_pass"(rx212_pos, "blockoid")
+    rx212_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx212_pos)
+    .return (rx212_cur)
+  rx212_fail:
 .annotate "line", 4
-    (rx209_rep, rx209_pos, $I10, $P10) = rx209_cur."!mark_fail"(0)
-    lt rx209_pos, -1, rx209_done
-    eq rx209_pos, -1, rx209_fail
+    (rx212_rep, rx212_pos, $I10, $P10) = rx212_cur."!mark_fail"(0)
+    lt rx212_pos, -1, rx212_done
+    eq rx212_pos, -1, rx212_fail
     jump $I10
-  rx209_done:
-    rx209_cur."!cursor_fail"()
-    rx209_cur."!cursor_debug"("FAIL  ", "blockoid")
-    .return (rx209_cur)
+  rx212_done:
+    rx212_cur."!cursor_fail"()
+    rx212_cur."!cursor_debug"("FAIL  ", "blockoid")
+    .return (rx212_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1267204702.05125") :method
+.sub "!PREFIX__blockoid"  :subid("47_1272816833.94956") :method
 .annotate "line", 4
-    $P211 = self."!PREFIX__!subrule"("", "")
-    new $P212, "ResizablePMCArray"
-    push $P212, $P211
-    .return ($P212)
+    $P214 = self."!PREFIX__!subrule"("", "")
+    new $P215, "ResizablePMCArray"
+    push $P215, $P214
+    .return ($P215)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "newpad"  :subid("48_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx217_tgt
-    .local int rx217_pos
-    .local int rx217_off
-    .local int rx217_eos
-    .local int rx217_rep
-    .local pmc rx217_cur
-    (rx217_cur, rx217_pos, rx217_tgt) = self."!cursor_start"()
-    rx217_cur."!cursor_debug"("START ", "newpad")
-    .lex unicode:"$\x{a2}", rx217_cur
+    .local string rx220_tgt
+    .local int rx220_pos
+    .local int rx220_off
+    .local int rx220_eos
+    .local int rx220_rep
+    .local pmc rx220_cur
+    (rx220_cur, rx220_pos, rx220_tgt) = self."!cursor_start"()
+    rx220_cur."!cursor_debug"("START ", "newpad")
+    .lex unicode:"$\x{a2}", rx220_cur
     .local pmc match
     .lex "$/", match
-    length rx217_eos, rx217_tgt
-    set rx217_off, 0
-    lt rx217_pos, 2, rx217_start
-    sub rx217_off, rx217_pos, 1
-    substr rx217_tgt, rx217_tgt, rx217_off
-  rx217_start:
+    length rx220_eos, rx220_tgt
+    set rx220_off, 0
+    lt rx220_pos, 2, rx220_start
+    sub rx220_off, rx220_pos, 1
+    substr rx220_tgt, rx220_tgt, rx220_off
+  rx220_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan220_done
-    goto rxscan220_scan
-  rxscan220_loop:
-    ($P10) = rx217_cur."from"()
+    ne $I10, -1, rxscan223_done
+    goto rxscan223_scan
+  rxscan223_loop:
+    ($P10) = rx220_cur."from"()
     inc $P10
-    set rx217_pos, $P10
-    ge rx217_pos, rx217_eos, rxscan220_done
-  rxscan220_scan:
-    set_addr $I10, rxscan220_loop
-    rx217_cur."!mark_push"(0, rx217_pos, $I10)
-  rxscan220_done:
-.annotate "line", 137
+    set rx220_pos, $P10
+    ge rx220_pos, rx220_eos, rxscan223_done
+  rxscan223_scan:
+    set_addr $I10, rxscan223_loop
+    rx220_cur."!mark_push"(0, rx220_pos, $I10)
+  rxscan223_done:
+.annotate "line", 141
   # rx pass
-    rx217_cur."!cursor_pass"(rx217_pos, "newpad")
-    rx217_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx217_pos)
-    .return (rx217_cur)
-  rx217_fail:
+    rx220_cur."!cursor_pass"(rx220_pos, "newpad")
+    rx220_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx220_pos)
+    .return (rx220_cur)
+  rx220_fail:
 .annotate "line", 4
-    (rx217_rep, rx217_pos, $I10, $P10) = rx217_cur."!mark_fail"(0)
-    lt rx217_pos, -1, rx217_done
-    eq rx217_pos, -1, rx217_fail
+    (rx220_rep, rx220_pos, $I10, $P10) = rx220_cur."!mark_fail"(0)
+    lt rx220_pos, -1, rx220_done
+    eq rx220_pos, -1, rx220_fail
     jump $I10
-  rx217_done:
-    rx217_cur."!cursor_fail"()
-    rx217_cur."!cursor_debug"("FAIL  ", "newpad")
-    .return (rx217_cur)
+  rx220_done:
+    rx220_cur."!cursor_fail"()
+    rx220_cur."!cursor_debug"("FAIL  ", "newpad")
+    .return (rx220_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1267204702.05125") :method
+.sub "!PREFIX__newpad"  :subid("49_1272816833.94956") :method
 .annotate "line", 4
-    new $P219, "ResizablePMCArray"
-    push $P219, ""
-    .return ($P219)
+    new $P222, "ResizablePMCArray"
+    push $P222, ""
+    .return ($P222)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("50_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "finishpad"  :subid("50_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx222_tgt
-    .local int rx222_pos
-    .local int rx222_off
-    .local int rx222_eos
-    .local int rx222_rep
-    .local pmc rx222_cur
-    (rx222_cur, rx222_pos, rx222_tgt) = self."!cursor_start"()
-    rx222_cur."!cursor_debug"("START ", "finishpad")
-    .lex unicode:"$\x{a2}", rx222_cur
+    .local string rx225_tgt
+    .local int rx225_pos
+    .local int rx225_off
+    .local int rx225_eos
+    .local int rx225_rep
+    .local pmc rx225_cur
+    (rx225_cur, rx225_pos, rx225_tgt) = self."!cursor_start"()
+    rx225_cur."!cursor_debug"("START ", "finishpad")
+    .lex unicode:"$\x{a2}", rx225_cur
     .local pmc match
     .lex "$/", match
-    length rx222_eos, rx222_tgt
-    set rx222_off, 0
-    lt rx222_pos, 2, rx222_start
-    sub rx222_off, rx222_pos, 1
-    substr rx222_tgt, rx222_tgt, rx222_off
-  rx222_start:
+    length rx225_eos, rx225_tgt
+    set rx225_off, 0
+    lt rx225_pos, 2, rx225_start
+    sub rx225_off, rx225_pos, 1
+    substr rx225_tgt, rx225_tgt, rx225_off
+  rx225_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan225_done
-    goto rxscan225_scan
-  rxscan225_loop:
-    ($P10) = rx222_cur."from"()
+    ne $I10, -1, rxscan228_done
+    goto rxscan228_scan
+  rxscan228_loop:
+    ($P10) = rx225_cur."from"()
     inc $P10
-    set rx222_pos, $P10
-    ge rx222_pos, rx222_eos, rxscan225_done
-  rxscan225_scan:
-    set_addr $I10, rxscan225_loop
-    rx222_cur."!mark_push"(0, rx222_pos, $I10)
-  rxscan225_done:
-.annotate "line", 138
+    set rx225_pos, $P10
+    ge rx225_pos, rx225_eos, rxscan228_done
+  rxscan228_scan:
+    set_addr $I10, rxscan228_loop
+    rx225_cur."!mark_push"(0, rx225_pos, $I10)
+  rxscan228_done:
+.annotate "line", 142
   # rx pass
-    rx222_cur."!cursor_pass"(rx222_pos, "finishpad")
-    rx222_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx222_pos)
-    .return (rx222_cur)
-  rx222_fail:
+    rx225_cur."!cursor_pass"(rx225_pos, "finishpad")
+    rx225_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx225_pos)
+    .return (rx225_cur)
+  rx225_fail:
 .annotate "line", 4
-    (rx222_rep, rx222_pos, $I10, $P10) = rx222_cur."!mark_fail"(0)
-    lt rx222_pos, -1, rx222_done
-    eq rx222_pos, -1, rx222_fail
+    (rx225_rep, rx225_pos, $I10, $P10) = rx225_cur."!mark_fail"(0)
+    lt rx225_pos, -1, rx225_done
+    eq rx225_pos, -1, rx225_fail
     jump $I10
-  rx222_done:
-    rx222_cur."!cursor_fail"()
-    rx222_cur."!cursor_debug"("FAIL  ", "finishpad")
-    .return (rx222_cur)
+  rx225_done:
+    rx225_cur."!cursor_fail"()
+    rx225_cur."!cursor_debug"("FAIL  ", "finishpad")
+    .return (rx225_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("51_1267204702.05125") :method
+.sub "!PREFIX__finishpad"  :subid("51_1272816833.94956") :method
 .annotate "line", 4
-    new $P224, "ResizablePMCArray"
-    push $P224, ""
-    .return ($P224)
+    new $P227, "ResizablePMCArray"
+    push $P227, ""
+    .return ($P227)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("52_1267204702.05125") :method
-.annotate "line", 140
-    $P227 = self."!protoregex"("terminator")
-    .return ($P227)
+.sub "terminator"  :subid("52_1272816833.94956") :method
+.annotate "line", 144
+    $P230 = self."!protoregex"("terminator")
+    .return ($P230)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("53_1267204702.05125") :method
-.annotate "line", 140
-    $P229 = self."!PREFIX__!protoregex"("terminator")
-    .return ($P229)
+.sub "!PREFIX__terminator"  :subid("53_1272816833.94956") :method
+.annotate "line", 144
+    $P232 = self."!PREFIX__!protoregex"("terminator")
+    .return ($P232)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("54_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "terminator:sym<;>"  :subid("54_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx231_tgt
-    .local int rx231_pos
-    .local int rx231_off
-    .local int rx231_eos
-    .local int rx231_rep
-    .local pmc rx231_cur
-    (rx231_cur, rx231_pos, rx231_tgt) = self."!cursor_start"()
-    rx231_cur."!cursor_debug"("START ", "terminator:sym<;>")
-    .lex unicode:"$\x{a2}", rx231_cur
-    .local pmc match
-    .lex "$/", match
-    length rx231_eos, rx231_tgt
-    set rx231_off, 0
-    lt rx231_pos, 2, rx231_start
-    sub rx231_off, rx231_pos, 1
-    substr rx231_tgt, rx231_tgt, rx231_off
-  rx231_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan234_done
-    goto rxscan234_scan
-  rxscan234_loop:
-    ($P10) = rx231_cur."from"()
-    inc $P10
-    set rx231_pos, $P10
-    ge rx231_pos, rx231_eos, rxscan234_done
-  rxscan234_scan:
-    set_addr $I10, rxscan234_loop
-    rx231_cur."!mark_push"(0, rx231_pos, $I10)
-  rxscan234_done:
-.annotate "line", 142
+    .local string rx234_tgt
+    .local int rx234_pos
+    .local int rx234_off
+    .local int rx234_eos
+    .local int rx234_rep
+    .local pmc rx234_cur
+    (rx234_cur, rx234_pos, rx234_tgt) = self."!cursor_start"()
+    rx234_cur."!cursor_debug"("START ", "terminator:sym<;>")
+    .lex unicode:"$\x{a2}", rx234_cur
+    .local pmc match
+    .lex "$/", match
+    length rx234_eos, rx234_tgt
+    set rx234_off, 0
+    lt rx234_pos, 2, rx234_start
+    sub rx234_off, rx234_pos, 1
+    substr rx234_tgt, rx234_tgt, rx234_off
+  rx234_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan237_done
+    goto rxscan237_scan
+  rxscan237_loop:
+    ($P10) = rx234_cur."from"()
+    inc $P10
+    set rx234_pos, $P10
+    ge rx234_pos, rx234_eos, rxscan237_done
+  rxscan237_scan:
+    set_addr $I10, rxscan237_loop
+    rx234_cur."!mark_push"(0, rx234_pos, $I10)
+  rxscan237_done:
+.annotate "line", 146
   # rx enumcharlist negate=0 zerowidth
-    ge rx231_pos, rx231_eos, rx231_fail
-    sub $I10, rx231_pos, rx231_off
-    substr $S10, rx231_tgt, $I10, 1
+    ge rx234_pos, rx234_eos, rx234_fail
+    sub $I10, rx234_pos, rx234_off
+    substr $S10, rx234_tgt, $I10, 1
     index $I11, ";", $S10
-    lt $I11, 0, rx231_fail
+    lt $I11, 0, rx234_fail
   # rx pass
-    rx231_cur."!cursor_pass"(rx231_pos, "terminator:sym<;>")
-    rx231_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx231_pos)
-    .return (rx231_cur)
-  rx231_fail:
+    rx234_cur."!cursor_pass"(rx234_pos, "terminator:sym<;>")
+    rx234_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx234_pos)
+    .return (rx234_cur)
+  rx234_fail:
 .annotate "line", 4
-    (rx231_rep, rx231_pos, $I10, $P10) = rx231_cur."!mark_fail"(0)
-    lt rx231_pos, -1, rx231_done
-    eq rx231_pos, -1, rx231_fail
+    (rx234_rep, rx234_pos, $I10, $P10) = rx234_cur."!mark_fail"(0)
+    lt rx234_pos, -1, rx234_done
+    eq rx234_pos, -1, rx234_fail
     jump $I10
-  rx231_done:
-    rx231_cur."!cursor_fail"()
-    rx231_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
-    .return (rx231_cur)
+  rx234_done:
+    rx234_cur."!cursor_fail"()
+    rx234_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
+    .return (rx234_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("55_1267204702.05125") :method
+.sub "!PREFIX__terminator:sym<;>"  :subid("55_1272816833.94956") :method
 .annotate "line", 4
-    new $P233, "ResizablePMCArray"
-    push $P233, ";"
-    .return ($P233)
+    new $P236, "ResizablePMCArray"
+    push $P236, ";"
+    .return ($P236)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("56_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "terminator:sym<}>"  :subid("56_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx236_tgt
-    .local int rx236_pos
-    .local int rx236_off
-    .local int rx236_eos
-    .local int rx236_rep
-    .local pmc rx236_cur
-    (rx236_cur, rx236_pos, rx236_tgt) = self."!cursor_start"()
-    rx236_cur."!cursor_debug"("START ", "terminator:sym<}>")
-    .lex unicode:"$\x{a2}", rx236_cur
+    .local string rx239_tgt
+    .local int rx239_pos
+    .local int rx239_off
+    .local int rx239_eos
+    .local int rx239_rep
+    .local pmc rx239_cur
+    (rx239_cur, rx239_pos, rx239_tgt) = self."!cursor_start"()
+    rx239_cur."!cursor_debug"("START ", "terminator:sym<}>")
+    .lex unicode:"$\x{a2}", rx239_cur
     .local pmc match
     .lex "$/", match
-    length rx236_eos, rx236_tgt
-    set rx236_off, 0
-    lt rx236_pos, 2, rx236_start
-    sub rx236_off, rx236_pos, 1
-    substr rx236_tgt, rx236_tgt, rx236_off
-  rx236_start:
+    length rx239_eos, rx239_tgt
+    set rx239_off, 0
+    lt rx239_pos, 2, rx239_start
+    sub rx239_off, rx239_pos, 1
+    substr rx239_tgt, rx239_tgt, rx239_off
+  rx239_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan239_done
-    goto rxscan239_scan
-  rxscan239_loop:
-    ($P10) = rx236_cur."from"()
+    ne $I10, -1, rxscan242_done
+    goto rxscan242_scan
+  rxscan242_loop:
+    ($P10) = rx239_cur."from"()
     inc $P10
-    set rx236_pos, $P10
-    ge rx236_pos, rx236_eos, rxscan239_done
-  rxscan239_scan:
-    set_addr $I10, rxscan239_loop
-    rx236_cur."!mark_push"(0, rx236_pos, $I10)
-  rxscan239_done:
-.annotate "line", 143
+    set rx239_pos, $P10
+    ge rx239_pos, rx239_eos, rxscan242_done
+  rxscan242_scan:
+    set_addr $I10, rxscan242_loop
+    rx239_cur."!mark_push"(0, rx239_pos, $I10)
+  rxscan242_done:
+.annotate "line", 147
   # rx enumcharlist negate=0 zerowidth
-    ge rx236_pos, rx236_eos, rx236_fail
-    sub $I10, rx236_pos, rx236_off
-    substr $S10, rx236_tgt, $I10, 1
+    ge rx239_pos, rx239_eos, rx239_fail
+    sub $I10, rx239_pos, rx239_off
+    substr $S10, rx239_tgt, $I10, 1
     index $I11, "}", $S10
-    lt $I11, 0, rx236_fail
+    lt $I11, 0, rx239_fail
   # rx pass
-    rx236_cur."!cursor_pass"(rx236_pos, "terminator:sym<}>")
-    rx236_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx236_pos)
-    .return (rx236_cur)
-  rx236_fail:
+    rx239_cur."!cursor_pass"(rx239_pos, "terminator:sym<}>")
+    rx239_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx239_pos)
+    .return (rx239_cur)
+  rx239_fail:
 .annotate "line", 4
-    (rx236_rep, rx236_pos, $I10, $P10) = rx236_cur."!mark_fail"(0)
-    lt rx236_pos, -1, rx236_done
-    eq rx236_pos, -1, rx236_fail
+    (rx239_rep, rx239_pos, $I10, $P10) = rx239_cur."!mark_fail"(0)
+    lt rx239_pos, -1, rx239_done
+    eq rx239_pos, -1, rx239_fail
     jump $I10
-  rx236_done:
-    rx236_cur."!cursor_fail"()
-    rx236_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
-    .return (rx236_cur)
+  rx239_done:
+    rx239_cur."!cursor_fail"()
+    rx239_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
+    .return (rx239_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("57_1267204702.05125") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("57_1272816833.94956") :method
 .annotate "line", 4
-    new $P238, "ResizablePMCArray"
-    push $P238, "}"
-    .return ($P238)
+    new $P241, "ResizablePMCArray"
+    push $P241, "}"
+    .return ($P241)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("58_1267204702.05125") :method
-.annotate "line", 147
-    $P241 = self."!protoregex"("statement_control")
-    .return ($P241)
+.sub "statement_control"  :subid("58_1272816833.94956") :method
+.annotate "line", 151
+    $P244 = self."!protoregex"("statement_control")
+    .return ($P244)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("59_1267204702.05125") :method
-.annotate "line", 147
-    $P243 = self."!PREFIX__!protoregex"("statement_control")
-    .return ($P243)
+.sub "!PREFIX__statement_control"  :subid("59_1272816833.94956") :method
+.annotate "line", 151
+    $P246 = self."!PREFIX__!protoregex"("statement_control")
+    .return ($P246)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("60_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<if>"  :subid("60_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx245_tgt
-    .local int rx245_pos
-    .local int rx245_off
-    .local int rx245_eos
-    .local int rx245_rep
-    .local pmc rx245_cur
-    (rx245_cur, rx245_pos, rx245_tgt) = self."!cursor_start"()
-    rx245_cur."!cursor_debug"("START ", "statement_control:sym<if>")
-    rx245_cur."!cursor_caparray"("else", "xblock")
-    .lex unicode:"$\x{a2}", rx245_cur
-    .local pmc match
-    .lex "$/", match
-    length rx245_eos, rx245_tgt
-    set rx245_off, 0
-    lt rx245_pos, 2, rx245_start
-    sub rx245_off, rx245_pos, 1
-    substr rx245_tgt, rx245_tgt, rx245_off
-  rx245_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan248_done
-    goto rxscan248_scan
-  rxscan248_loop:
-    ($P10) = rx245_cur."from"()
-    inc $P10
-    set rx245_pos, $P10
-    ge rx245_pos, rx245_eos, rxscan248_done
-  rxscan248_scan:
-    set_addr $I10, rxscan248_loop
-    rx245_cur."!mark_push"(0, rx245_pos, $I10)
-  rxscan248_done:
-.annotate "line", 150
+    .local string rx248_tgt
+    .local int rx248_pos
+    .local int rx248_off
+    .local int rx248_eos
+    .local int rx248_rep
+    .local pmc rx248_cur
+    (rx248_cur, rx248_pos, rx248_tgt) = self."!cursor_start"()
+    rx248_cur."!cursor_debug"("START ", "statement_control:sym<if>")
+    rx248_cur."!cursor_caparray"("xblock", "else")
+    .lex unicode:"$\x{a2}", rx248_cur
+    .local pmc match
+    .lex "$/", match
+    length rx248_eos, rx248_tgt
+    set rx248_off, 0
+    lt rx248_pos, 2, rx248_start
+    sub rx248_off, rx248_pos, 1
+    substr rx248_tgt, rx248_tgt, rx248_off
+  rx248_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan251_done
+    goto rxscan251_scan
+  rxscan251_loop:
+    ($P10) = rx248_cur."from"()
+    inc $P10
+    set rx248_pos, $P10
+    ge rx248_pos, rx248_eos, rxscan251_done
+  rxscan251_scan:
+    set_addr $I10, rxscan251_loop
+    rx248_cur."!mark_push"(0, rx248_pos, $I10)
+  rxscan251_done:
+.annotate "line", 154
   # rx subcapture "sym"
-    set_addr $I10, rxcap_249_fail
-    rx245_cur."!mark_push"(0, rx245_pos, $I10)
+    set_addr $I10, rxcap_252_fail
+    rx248_cur."!mark_push"(0, rx248_pos, $I10)
   # rx literal  "if"
-    add $I11, rx245_pos, 2
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 2
-    ne $S10, "if", rx245_fail
-    add rx245_pos, 2
-    set_addr $I10, rxcap_249_fail
-    ($I12, $I11) = rx245_cur."!mark_peek"($I10)
-    rx245_cur."!cursor_pos"($I11)
-    ($P10) = rx245_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx245_pos, "")
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx248_pos, 2
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 2
+    ne $S10, "if", rx248_fail
+    add rx248_pos, 2
+    set_addr $I10, rxcap_252_fail
+    ($I12, $I11) = rx248_cur."!mark_peek"($I10)
+    rx248_cur."!cursor_pos"($I11)
+    ($P10) = rx248_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx248_pos, "")
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_249_done
-  rxcap_249_fail:
-    goto rx245_fail
-  rxcap_249_done:
+    goto rxcap_252_done
+  rxcap_252_fail:
+    goto rx248_fail
+  rxcap_252_done:
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 151
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 155
   # rx subrule "xblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."xblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."xblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 152
-  # rx rxquantr252 ** 0..*
-    set_addr $I256, rxquantr252_done
-    rx245_cur."!mark_push"(0, rx245_pos, $I256)
-  rxquantr252_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 156
+  # rx rxquantr255 ** 0..*
+    set_addr $I259, rxquantr255_done
+    rx248_cur."!mark_push"(0, rx248_pos, $I259)
+  rxquantr255_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx literal  "elsif"
-    add $I11, rx245_pos, 5
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 5
-    ne $S10, "elsif", rx245_fail
-    add rx245_pos, 5
+    add $I11, rx248_pos, 5
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 5
+    ne $S10, "elsif", rx248_fail
+    add rx248_pos, 5
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx subrule "xblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."xblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."xblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-    (rx245_rep) = rx245_cur."!mark_commit"($I256)
-    rx245_cur."!mark_push"(rx245_rep, rx245_pos, $I256)
-    goto rxquantr252_loop
-  rxquantr252_done:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 153
-  # rx rxquantr258 ** 0..1
-    set_addr $I262, rxquantr258_done
-    rx245_cur."!mark_push"(0, rx245_pos, $I262)
-  rxquantr258_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+    (rx248_rep) = rx248_cur."!mark_commit"($I259)
+    rx248_cur."!mark_push"(rx248_rep, rx248_pos, $I259)
+    goto rxquantr255_loop
+  rxquantr255_done:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 157
+  # rx rxquantr261 ** 0..1
+    set_addr $I265, rxquantr261_done
+    rx248_cur."!mark_push"(0, rx248_pos, $I265)
+  rxquantr261_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx literal  "else"
-    add $I11, rx245_pos, 4
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 4
-    ne $S10, "else", rx245_fail
-    add rx245_pos, 4
+    add $I11, rx248_pos, 4
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 4
+    ne $S10, "else", rx248_fail
+    add rx248_pos, 4
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."pblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."pblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("else")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-    (rx245_rep) = rx245_cur."!mark_commit"($I262)
-  rxquantr258_done:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 149
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+    (rx248_rep) = rx248_cur."!mark_commit"($I265)
+  rxquantr261_done:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 153
   # rx pass
-    rx245_cur."!cursor_pass"(rx245_pos, "statement_control:sym<if>")
-    rx245_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx245_pos)
-    .return (rx245_cur)
-  rx245_fail:
+    rx248_cur."!cursor_pass"(rx248_pos, "statement_control:sym<if>")
+    rx248_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx248_pos)
+    .return (rx248_cur)
+  rx248_fail:
 .annotate "line", 4
-    (rx245_rep, rx245_pos, $I10, $P10) = rx245_cur."!mark_fail"(0)
-    lt rx245_pos, -1, rx245_done
-    eq rx245_pos, -1, rx245_fail
+    (rx248_rep, rx248_pos, $I10, $P10) = rx248_cur."!mark_fail"(0)
+    lt rx248_pos, -1, rx248_done
+    eq rx248_pos, -1, rx248_fail
     jump $I10
-  rx245_done:
-    rx245_cur."!cursor_fail"()
-    rx245_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
-    .return (rx245_cur)
+  rx248_done:
+    rx248_cur."!cursor_fail"()
+    rx248_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
+    .return (rx248_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1272816833.94956") :method
 .annotate "line", 4
-    new $P247, "ResizablePMCArray"
-    push $P247, "if"
-    .return ($P247)
+    new $P250, "ResizablePMCArray"
+    push $P250, "if"
+    .return ($P250)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("62_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<unless>"  :subid("62_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .const 'Sub' $P275 = "64_1267204702.05125" 
-    capture_lex $P275
-    .local string rx265_tgt
-    .local int rx265_pos
-    .local int rx265_off
-    .local int rx265_eos
-    .local int rx265_rep
-    .local pmc rx265_cur
-    (rx265_cur, rx265_pos, rx265_tgt) = self."!cursor_start"()
-    rx265_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
-    .lex unicode:"$\x{a2}", rx265_cur
+    .const 'Sub' $P278 = "64_1272816833.94956" 
+    capture_lex $P278
+    .local string rx268_tgt
+    .local int rx268_pos
+    .local int rx268_off
+    .local int rx268_eos
+    .local int rx268_rep
+    .local pmc rx268_cur
+    (rx268_cur, rx268_pos, rx268_tgt) = self."!cursor_start"()
+    rx268_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
+    .lex unicode:"$\x{a2}", rx268_cur
     .local pmc match
     .lex "$/", match
-    length rx265_eos, rx265_tgt
-    set rx265_off, 0
-    lt rx265_pos, 2, rx265_start
-    sub rx265_off, rx265_pos, 1
-    substr rx265_tgt, rx265_tgt, rx265_off
-  rx265_start:
+    length rx268_eos, rx268_tgt
+    set rx268_off, 0
+    lt rx268_pos, 2, rx268_start
+    sub rx268_off, rx268_pos, 1
+    substr rx268_tgt, rx268_tgt, rx268_off
+  rx268_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan268_done
-    goto rxscan268_scan
-  rxscan268_loop:
-    ($P10) = rx265_cur."from"()
+    ne $I10, -1, rxscan271_done
+    goto rxscan271_scan
+  rxscan271_loop:
+    ($P10) = rx268_cur."from"()
     inc $P10
-    set rx265_pos, $P10
-    ge rx265_pos, rx265_eos, rxscan268_done
-  rxscan268_scan:
-    set_addr $I10, rxscan268_loop
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
-  rxscan268_done:
-.annotate "line", 157
+    set rx268_pos, $P10
+    ge rx268_pos, rx268_eos, rxscan271_done
+  rxscan271_scan:
+    set_addr $I10, rxscan271_loop
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
+  rxscan271_done:
+.annotate "line", 161
   # rx subcapture "sym"
-    set_addr $I10, rxcap_269_fail
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+    set_addr $I10, rxcap_272_fail
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx265_pos, 6
-    gt $I11, rx265_eos, rx265_fail
-    sub $I11, rx265_pos, rx265_off
-    substr $S10, rx265_tgt, $I11, 6
-    ne $S10, "unless", rx265_fail
-    add rx265_pos, 6
-    set_addr $I10, rxcap_269_fail
-    ($I12, $I11) = rx265_cur."!mark_peek"($I10)
-    rx265_cur."!cursor_pos"($I11)
-    ($P10) = rx265_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx265_pos, "")
-    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx268_pos, 6
+    gt $I11, rx268_eos, rx268_fail
+    sub $I11, rx268_pos, rx268_off
+    substr $S10, rx268_tgt, $I11, 6
+    ne $S10, "unless", rx268_fail
+    add rx268_pos, 6
+    set_addr $I10, rxcap_272_fail
+    ($I12, $I11) = rx268_cur."!mark_peek"($I10)
+    rx268_cur."!cursor_pos"($I11)
+    ($P10) = rx268_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx268_pos, "")
+    rx268_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_269_done
-  rxcap_269_fail:
-    goto rx265_fail
-  rxcap_269_done:
+    goto rxcap_272_done
+  rxcap_272_fail:
+    goto rx268_fail
+  rxcap_272_done:
   # rx charclass s
-    ge rx265_pos, rx265_eos, rx265_fail
-    sub $I10, rx265_pos, rx265_off
-    is_cclass $I11, 32, rx265_tgt, $I10
-    unless $I11, rx265_fail
-    inc rx265_pos
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-.annotate "line", 158
+    ge rx268_pos, rx268_eos, rx268_fail
+    sub $I10, rx268_pos, rx268_off
+    is_cclass $I11, 32, rx268_tgt, $I10
+    unless $I11, rx268_fail
+    inc rx268_pos
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+.annotate "line", 162
   # rx subrule "xblock" subtype=capture negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."xblock"()
-    unless $P10, rx265_fail
-    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."xblock"()
+    unless $P10, rx268_fail
+    rx268_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx265_pos = $P10."pos"()
+    rx268_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  alt272_0:
-.annotate "line", 159
-    set_addr $I10, alt272_1
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  alt275_0:
+.annotate "line", 163
+    set_addr $I10, alt275_1
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
   # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
   # rx subrule "before" subtype=zerowidth negate=1
-    rx265_cur."!cursor_pos"(rx265_pos)
-    .const 'Sub' $P275 = "64_1267204702.05125" 
-    capture_lex $P275
-    $P10 = rx265_cur."before"($P275)
-    if $P10, rx265_fail
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-    goto alt272_end
-  alt272_1:
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
+    rx268_cur."!cursor_pos"(rx268_pos)
+    .const 'Sub' $P278 = "64_1272816833.94956" 
+    capture_lex $P278
+    $P10 = rx268_cur."before"($P278)
+    if $P10, rx268_fail
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+    goto alt275_end
+  alt275_1:
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  alt272_end:
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-.annotate "line", 156
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  alt275_end:
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+.annotate "line", 160
   # rx pass
-    rx265_cur."!cursor_pass"(rx265_pos, "statement_control:sym<unless>")
-    rx265_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx265_pos)
-    .return (rx265_cur)
-  rx265_fail:
+    rx268_cur."!cursor_pass"(rx268_pos, "statement_control:sym<unless>")
+    rx268_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx268_pos)
+    .return (rx268_cur)
+  rx268_fail:
 .annotate "line", 4
-    (rx265_rep, rx265_pos, $I10, $P10) = rx265_cur."!mark_fail"(0)
-    lt rx265_pos, -1, rx265_done
-    eq rx265_pos, -1, rx265_fail
+    (rx268_rep, rx268_pos, $I10, $P10) = rx268_cur."!mark_fail"(0)
+    lt rx268_pos, -1, rx268_done
+    eq rx268_pos, -1, rx268_fail
     jump $I10
-  rx265_done:
-    rx265_cur."!cursor_fail"()
-    rx265_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
-    .return (rx265_cur)
+  rx268_done:
+    rx268_cur."!cursor_fail"()
+    rx268_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
+    .return (rx268_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1272816833.94956") :method
 .annotate "line", 4
-    new $P267, "ResizablePMCArray"
-    push $P267, "unless"
-    .return ($P267)
+    new $P270, "ResizablePMCArray"
+    push $P270, "unless"
+    .return ($P270)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block274"  :anon :subid("64_1267204702.05125") :method :outer("62_1267204702.05125")
-.annotate "line", 159
-    .local string rx276_tgt
-    .local int rx276_pos
-    .local int rx276_off
-    .local int rx276_eos
-    .local int rx276_rep
-    .local pmc rx276_cur
-    (rx276_cur, rx276_pos, rx276_tgt) = self."!cursor_start"()
-    rx276_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx276_cur
-    .local pmc match
-    .lex "$/", match
-    length rx276_eos, rx276_tgt
-    set rx276_off, 0
-    lt rx276_pos, 2, rx276_start
-    sub rx276_off, rx276_pos, 1
-    substr rx276_tgt, rx276_tgt, rx276_off
-  rx276_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan277_done
-    goto rxscan277_scan
-  rxscan277_loop:
-    ($P10) = rx276_cur."from"()
-    inc $P10
-    set rx276_pos, $P10
-    ge rx276_pos, rx276_eos, rxscan277_done
-  rxscan277_scan:
-    set_addr $I10, rxscan277_loop
-    rx276_cur."!mark_push"(0, rx276_pos, $I10)
-  rxscan277_done:
+.sub "_block277"  :anon :subid("64_1272816833.94956") :method :outer("62_1272816833.94956")
+.annotate "line", 163
+    .local string rx279_tgt
+    .local int rx279_pos
+    .local int rx279_off
+    .local int rx279_eos
+    .local int rx279_rep
+    .local pmc rx279_cur
+    (rx279_cur, rx279_pos, rx279_tgt) = self."!cursor_start"()
+    rx279_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx279_cur
+    .local pmc match
+    .lex "$/", match
+    length rx279_eos, rx279_tgt
+    set rx279_off, 0
+    lt rx279_pos, 2, rx279_start
+    sub rx279_off, rx279_pos, 1
+    substr rx279_tgt, rx279_tgt, rx279_off
+  rx279_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan280_done
+    goto rxscan280_scan
+  rxscan280_loop:
+    ($P10) = rx279_cur."from"()
+    inc $P10
+    set rx279_pos, $P10
+    ge rx279_pos, rx279_eos, rxscan280_done
+  rxscan280_scan:
+    set_addr $I10, rxscan280_loop
+    rx279_cur."!mark_push"(0, rx279_pos, $I10)
+  rxscan280_done:
   # rx literal  "else"
-    add $I11, rx276_pos, 4
-    gt $I11, rx276_eos, rx276_fail
-    sub $I11, rx276_pos, rx276_off
-    substr $S10, rx276_tgt, $I11, 4
-    ne $S10, "else", rx276_fail
-    add rx276_pos, 4
-  # rx pass
-    rx276_cur."!cursor_pass"(rx276_pos, "")
-    rx276_cur."!cursor_debug"("PASS  ", "", " at pos=", rx276_pos)
-    .return (rx276_cur)
-  rx276_fail:
-    (rx276_rep, rx276_pos, $I10, $P10) = rx276_cur."!mark_fail"(0)
-    lt rx276_pos, -1, rx276_done
-    eq rx276_pos, -1, rx276_fail
-    jump $I10
-  rx276_done:
-    rx276_cur."!cursor_fail"()
-    rx276_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx276_cur)
+    add $I11, rx279_pos, 4
+    gt $I11, rx279_eos, rx279_fail
+    sub $I11, rx279_pos, rx279_off
+    substr $S10, rx279_tgt, $I11, 4
+    ne $S10, "else", rx279_fail
+    add rx279_pos, 4
+  # rx pass
+    rx279_cur."!cursor_pass"(rx279_pos, "")
+    rx279_cur."!cursor_debug"("PASS  ", "", " at pos=", rx279_pos)
+    .return (rx279_cur)
+  rx279_fail:
+    (rx279_rep, rx279_pos, $I10, $P10) = rx279_cur."!mark_fail"(0)
+    lt rx279_pos, -1, rx279_done
+    eq rx279_pos, -1, rx279_fail
+    jump $I10
+  rx279_done:
+    rx279_cur."!cursor_fail"()
+    rx279_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx279_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("65_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx283_tgt
-    .local int rx283_pos
-    .local int rx283_off
-    .local int rx283_eos
-    .local int rx283_rep
-    .local pmc rx283_cur
-    (rx283_cur, rx283_pos, rx283_tgt) = self."!cursor_start"()
-    rx283_cur."!cursor_debug"("START ", "statement_control:sym<while>")
-    .lex unicode:"$\x{a2}", rx283_cur
-    .local pmc match
-    .lex "$/", match
-    length rx283_eos, rx283_tgt
-    set rx283_off, 0
-    lt rx283_pos, 2, rx283_start
-    sub rx283_off, rx283_pos, 1
-    substr rx283_tgt, rx283_tgt, rx283_off
-  rx283_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan286_done
-    goto rxscan286_scan
-  rxscan286_loop:
-    ($P10) = rx283_cur."from"()
-    inc $P10
-    set rx283_pos, $P10
-    ge rx283_pos, rx283_eos, rxscan286_done
-  rxscan286_scan:
-    set_addr $I10, rxscan286_loop
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  rxscan286_done:
-.annotate "line", 163
+.sub "statement_control:sym<while>"  :subid("65_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 4
+    .local string rx286_tgt
+    .local int rx286_pos
+    .local int rx286_off
+    .local int rx286_eos
+    .local int rx286_rep
+    .local pmc rx286_cur
+    (rx286_cur, rx286_pos, rx286_tgt) = self."!cursor_start"()
+    rx286_cur."!cursor_debug"("START ", "statement_control:sym<while>")
+    .lex unicode:"$\x{a2}", rx286_cur
+    .local pmc match
+    .lex "$/", match
+    length rx286_eos, rx286_tgt
+    set rx286_off, 0
+    lt rx286_pos, 2, rx286_start
+    sub rx286_off, rx286_pos, 1
+    substr rx286_tgt, rx286_tgt, rx286_off
+  rx286_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan289_done
+    goto rxscan289_scan
+  rxscan289_loop:
+    ($P10) = rx286_cur."from"()
+    inc $P10
+    set rx286_pos, $P10
+    ge rx286_pos, rx286_eos, rxscan289_done
+  rxscan289_scan:
+    set_addr $I10, rxscan289_loop
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  rxscan289_done:
+.annotate "line", 167
   # rx subcapture "sym"
-    set_addr $I10, rxcap_288_fail
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  alt287_0:
-    set_addr $I10, alt287_1
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+    set_addr $I10, rxcap_291_fail
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  alt290_0:
+    set_addr $I10, alt290_1
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
   # rx literal  "while"
-    add $I11, rx283_pos, 5
-    gt $I11, rx283_eos, rx283_fail
-    sub $I11, rx283_pos, rx283_off
-    substr $S10, rx283_tgt, $I11, 5
-    ne $S10, "while", rx283_fail
-    add rx283_pos, 5
-    goto alt287_end
-  alt287_1:
+    add $I11, rx286_pos, 5
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 5
+    ne $S10, "while", rx286_fail
+    add rx286_pos, 5
+    goto alt290_end
+  alt290_1:
   # rx literal  "until"
-    add $I11, rx283_pos, 5
-    gt $I11, rx283_eos, rx283_fail
-    sub $I11, rx283_pos, rx283_off
-    substr $S10, rx283_tgt, $I11, 5
-    ne $S10, "until", rx283_fail
-    add rx283_pos, 5
-  alt287_end:
-    set_addr $I10, rxcap_288_fail
-    ($I12, $I11) = rx283_cur."!mark_peek"($I10)
-    rx283_cur."!cursor_pos"($I11)
-    ($P10) = rx283_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx283_pos, "")
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx286_pos, 5
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 5
+    ne $S10, "until", rx286_fail
+    add rx286_pos, 5
+  alt290_end:
+    set_addr $I10, rxcap_291_fail
+    ($I12, $I11) = rx286_cur."!mark_peek"($I10)
+    rx286_cur."!cursor_pos"($I11)
+    ($P10) = rx286_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx286_pos, "")
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_288_done
-  rxcap_288_fail:
-    goto rx283_fail
-  rxcap_288_done:
+    goto rxcap_291_done
+  rxcap_291_fail:
+    goto rx286_fail
+  rxcap_291_done:
   # rx charclass s
-    ge rx283_pos, rx283_eos, rx283_fail
-    sub $I10, rx283_pos, rx283_off
-    is_cclass $I11, 32, rx283_tgt, $I10
-    unless $I11, rx283_fail
-    inc rx283_pos
-  # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
-.annotate "line", 164
+    ge rx286_pos, rx286_eos, rx286_fail
+    sub $I10, rx286_pos, rx286_off
+    is_cclass $I11, 32, rx286_tgt, $I10
+    unless $I11, rx286_fail
+    inc rx286_pos
+  # rx subrule "ws" subtype=method negate=
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
+.annotate "line", 168
   # rx subrule "xblock" subtype=capture negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."xblock"()
-    unless $P10, rx283_fail
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."xblock"()
+    unless $P10, rx286_fail
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx283_pos = $P10."pos"()
+    rx286_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
-.annotate "line", 162
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
+.annotate "line", 166
   # rx pass
-    rx283_cur."!cursor_pass"(rx283_pos, "statement_control:sym<while>")
-    rx283_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx283_pos)
-    .return (rx283_cur)
-  rx283_fail:
+    rx286_cur."!cursor_pass"(rx286_pos, "statement_control:sym<while>")
+    rx286_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx286_pos)
+    .return (rx286_cur)
+  rx286_fail:
 .annotate "line", 4
-    (rx283_rep, rx283_pos, $I10, $P10) = rx283_cur."!mark_fail"(0)
-    lt rx283_pos, -1, rx283_done
-    eq rx283_pos, -1, rx283_fail
+    (rx286_rep, rx286_pos, $I10, $P10) = rx286_cur."!mark_fail"(0)
+    lt rx286_pos, -1, rx286_done
+    eq rx286_pos, -1, rx286_fail
     jump $I10
-  rx283_done:
-    rx283_cur."!cursor_fail"()
-    rx283_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
-    .return (rx283_cur)
+  rx286_done:
+    rx286_cur."!cursor_fail"()
+    rx286_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
+    .return (rx286_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1272816833.94956") :method
 .annotate "line", 4
-    new $P285, "ResizablePMCArray"
-    push $P285, "until"
-    push $P285, "while"
-    .return ($P285)
+    new $P288, "ResizablePMCArray"
+    push $P288, "until"
+    push $P288, "while"
+    .return ($P288)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("67_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<repeat>"  :subid("67_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx292_tgt
-    .local int rx292_pos
-    .local int rx292_off
-    .local int rx292_eos
-    .local int rx292_rep
-    .local pmc rx292_cur
-    (rx292_cur, rx292_pos, rx292_tgt) = self."!cursor_start"()
-    rx292_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
-    .lex unicode:"$\x{a2}", rx292_cur
+    .local string rx295_tgt
+    .local int rx295_pos
+    .local int rx295_off
+    .local int rx295_eos
+    .local int rx295_rep
+    .local pmc rx295_cur
+    (rx295_cur, rx295_pos, rx295_tgt) = self."!cursor_start"()
+    rx295_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
+    .lex unicode:"$\x{a2}", rx295_cur
     .local pmc match
     .lex "$/", match
-    length rx292_eos, rx292_tgt
-    set rx292_off, 0
-    lt rx292_pos, 2, rx292_start
-    sub rx292_off, rx292_pos, 1
-    substr rx292_tgt, rx292_tgt, rx292_off
-  rx292_start:
+    length rx295_eos, rx295_tgt
+    set rx295_off, 0
+    lt rx295_pos, 2, rx295_start
+    sub rx295_off, rx295_pos, 1
+    substr rx295_tgt, rx295_tgt, rx295_off
+  rx295_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan295_done
-    goto rxscan295_scan
-  rxscan295_loop:
-    ($P10) = rx292_cur."from"()
+    ne $I10, -1, rxscan298_done
+    goto rxscan298_scan
+  rxscan298_loop:
+    ($P10) = rx295_cur."from"()
     inc $P10
-    set rx292_pos, $P10
-    ge rx292_pos, rx292_eos, rxscan295_done
-  rxscan295_scan:
-    set_addr $I10, rxscan295_loop
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  rxscan295_done:
-.annotate "line", 168
+    set rx295_pos, $P10
+    ge rx295_pos, rx295_eos, rxscan298_done
+  rxscan298_scan:
+    set_addr $I10, rxscan298_loop
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  rxscan298_done:
+.annotate "line", 172
   # rx subcapture "sym"
-    set_addr $I10, rxcap_296_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_299_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "repeat"
-    add $I11, rx292_pos, 6
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 6
-    ne $S10, "repeat", rx292_fail
-    add rx292_pos, 6
-    set_addr $I10, rxcap_296_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx295_pos, 6
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 6
+    ne $S10, "repeat", rx295_fail
+    add rx295_pos, 6
+    set_addr $I10, rxcap_299_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_296_done
-  rxcap_296_fail:
-    goto rx292_fail
-  rxcap_296_done:
+    goto rxcap_299_done
+  rxcap_299_fail:
+    goto rx295_fail
+  rxcap_299_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  alt298_0:
-.annotate "line", 169
-    set_addr $I10, alt298_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-.annotate "line", 170
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+  alt301_0:
+.annotate "line", 173
+    set_addr $I10, alt301_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+.annotate "line", 174
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subcapture "wu"
-    set_addr $I10, rxcap_301_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  alt300_0:
-    set_addr $I10, alt300_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_304_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  alt303_0:
+    set_addr $I10, alt303_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "while"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "while", rx292_fail
-    add rx292_pos, 5
-    goto alt300_end
-  alt300_1:
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "while", rx295_fail
+    add rx295_pos, 5
+    goto alt303_end
+  alt303_1:
   # rx literal  "until"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "until", rx292_fail
-    add rx292_pos, 5
-  alt300_end:
-    set_addr $I10, rxcap_301_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "until", rx295_fail
+    add rx295_pos, 5
+  alt303_end:
+    set_addr $I10, rxcap_304_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("wu")
-    goto rxcap_301_done
-  rxcap_301_fail:
-    goto rx292_fail
-  rxcap_301_done:
+    goto rxcap_304_done
+  rxcap_304_fail:
+    goto rx295_fail
+  rxcap_304_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "xblock" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."xblock"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."xblock"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-    goto alt298_end
-  alt298_1:
-.annotate "line", 171
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+    goto alt301_end
+  alt301_1:
+.annotate "line", 175
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."pblock"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."pblock"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subcapture "wu"
-    set_addr $I10, rxcap_307_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  alt306_0:
-    set_addr $I10, alt306_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_310_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  alt309_0:
+    set_addr $I10, alt309_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "while"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "while", rx292_fail
-    add rx292_pos, 5
-    goto alt306_end
-  alt306_1:
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "while", rx295_fail
+    add rx295_pos, 5
+    goto alt309_end
+  alt309_1:
   # rx literal  "until"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "until", rx292_fail
-    add rx292_pos, 5
-  alt306_end:
-    set_addr $I10, rxcap_307_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "until", rx295_fail
+    add rx295_pos, 5
+  alt309_end:
+    set_addr $I10, rxcap_310_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("wu")
-    goto rxcap_307_done
-  rxcap_307_fail:
-    goto rx292_fail
-  rxcap_307_done:
+    goto rxcap_310_done
+  rxcap_310_fail:
+    goto rx295_fail
+  rxcap_310_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."EXPR"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."EXPR"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  alt298_end:
-.annotate "line", 172
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+  alt301_end:
+.annotate "line", 176
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-.annotate "line", 167
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+.annotate "line", 171
   # rx pass
-    rx292_cur."!cursor_pass"(rx292_pos, "statement_control:sym<repeat>")
-    rx292_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx292_pos)
-    .return (rx292_cur)
-  rx292_fail:
+    rx295_cur."!cursor_pass"(rx295_pos, "statement_control:sym<repeat>")
+    rx295_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx295_pos)
+    .return (rx295_cur)
+  rx295_fail:
 .annotate "line", 4
-    (rx292_rep, rx292_pos, $I10, $P10) = rx292_cur."!mark_fail"(0)
-    lt rx292_pos, -1, rx292_done
-    eq rx292_pos, -1, rx292_fail
+    (rx295_rep, rx295_pos, $I10, $P10) = rx295_cur."!mark_fail"(0)
+    lt rx295_pos, -1, rx295_done
+    eq rx295_pos, -1, rx295_fail
     jump $I10
-  rx292_done:
-    rx292_cur."!cursor_fail"()
-    rx292_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
-    .return (rx292_cur)
+  rx295_done:
+    rx295_cur."!cursor_fail"()
+    rx295_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
+    .return (rx295_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1272816833.94956") :method
 .annotate "line", 4
-    new $P294, "ResizablePMCArray"
-    push $P294, "repeat"
-    .return ($P294)
+    new $P297, "ResizablePMCArray"
+    push $P297, "repeat"
+    .return ($P297)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("69_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<for>"  :subid("69_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx312_tgt
-    .local int rx312_pos
-    .local int rx312_off
-    .local int rx312_eos
-    .local int rx312_rep
-    .local pmc rx312_cur
-    (rx312_cur, rx312_pos, rx312_tgt) = self."!cursor_start"()
-    rx312_cur."!cursor_debug"("START ", "statement_control:sym<for>")
-    .lex unicode:"$\x{a2}", rx312_cur
-    .local pmc match
-    .lex "$/", match
-    length rx312_eos, rx312_tgt
-    set rx312_off, 0
-    lt rx312_pos, 2, rx312_start
-    sub rx312_off, rx312_pos, 1
-    substr rx312_tgt, rx312_tgt, rx312_off
-  rx312_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan315_done
-    goto rxscan315_scan
-  rxscan315_loop:
-    ($P10) = rx312_cur."from"()
-    inc $P10
-    set rx312_pos, $P10
-    ge rx312_pos, rx312_eos, rxscan315_done
-  rxscan315_scan:
-    set_addr $I10, rxscan315_loop
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
-  rxscan315_done:
-.annotate "line", 176
+    .local string rx315_tgt
+    .local int rx315_pos
+    .local int rx315_off
+    .local int rx315_eos
+    .local int rx315_rep
+    .local pmc rx315_cur
+    (rx315_cur, rx315_pos, rx315_tgt) = self."!cursor_start"()
+    rx315_cur."!cursor_debug"("START ", "statement_control:sym<for>")
+    .lex unicode:"$\x{a2}", rx315_cur
+    .local pmc match
+    .lex "$/", match
+    length rx315_eos, rx315_tgt
+    set rx315_off, 0
+    lt rx315_pos, 2, rx315_start
+    sub rx315_off, rx315_pos, 1
+    substr rx315_tgt, rx315_tgt, rx315_off
+  rx315_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan318_done
+    goto rxscan318_scan
+  rxscan318_loop:
+    ($P10) = rx315_cur."from"()
+    inc $P10
+    set rx315_pos, $P10
+    ge rx315_pos, rx315_eos, rxscan318_done
+  rxscan318_scan:
+    set_addr $I10, rxscan318_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+  rxscan318_done:
+.annotate "line", 180
   # rx subcapture "sym"
-    set_addr $I10, rxcap_316_fail
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+    set_addr $I10, rxcap_319_fail
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
   # rx literal  "for"
-    add $I11, rx312_pos, 3
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 3
-    ne $S10, "for", rx312_fail
-    add rx312_pos, 3
-    set_addr $I10, rxcap_316_fail
-    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
-    rx312_cur."!cursor_pos"($I11)
-    ($P10) = rx312_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx312_pos, "")
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx315_pos, 3
+    gt $I11, rx315_eos, rx315_fail
+    sub $I11, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I11, 3
+    ne $S10, "for", rx315_fail
+    add rx315_pos, 3
+    set_addr $I10, rxcap_319_fail
+    ($I12, $I11) = rx315_cur."!mark_peek"($I10)
+    rx315_cur."!cursor_pos"($I11)
+    ($P10) = rx315_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx315_pos, "")
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_316_done
-  rxcap_316_fail:
-    goto rx312_fail
-  rxcap_316_done:
+    goto rxcap_319_done
+  rxcap_319_fail:
+    goto rx315_fail
+  rxcap_319_done:
   # rx charclass s
-    ge rx312_pos, rx312_eos, rx312_fail
-    sub $I10, rx312_pos, rx312_off
-    is_cclass $I11, 32, rx312_tgt, $I10
-    unless $I11, rx312_fail
-    inc rx312_pos
-  # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
-.annotate "line", 177
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    is_cclass $I11, 32, rx315_tgt, $I10
+    unless $I11, rx315_fail
+    inc rx315_pos
+  # rx subrule "ws" subtype=method negate=
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."ws"()
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate "line", 181
   # rx subrule "xblock" subtype=capture negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."xblock"()
-    unless $P10, rx312_fail
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."xblock"()
+    unless $P10, rx315_fail
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx312_pos = $P10."pos"()
+    rx315_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
-.annotate "line", 175
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."ws"()
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate "line", 179
   # rx pass
-    rx312_cur."!cursor_pass"(rx312_pos, "statement_control:sym<for>")
-    rx312_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx312_pos)
-    .return (rx312_cur)
-  rx312_fail:
+    rx315_cur."!cursor_pass"(rx315_pos, "statement_control:sym<for>")
+    rx315_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx315_pos)
+    .return (rx315_cur)
+  rx315_fail:
 .annotate "line", 4
-    (rx312_rep, rx312_pos, $I10, $P10) = rx312_cur."!mark_fail"(0)
-    lt rx312_pos, -1, rx312_done
-    eq rx312_pos, -1, rx312_fail
+    (rx315_rep, rx315_pos, $I10, $P10) = rx315_cur."!mark_fail"(0)
+    lt rx315_pos, -1, rx315_done
+    eq rx315_pos, -1, rx315_fail
     jump $I10
-  rx312_done:
-    rx312_cur."!cursor_fail"()
-    rx312_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
-    .return (rx312_cur)
+  rx315_done:
+    rx315_cur."!cursor_fail"()
+    rx315_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
+    .return (rx315_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1272816833.94956") :method
 .annotate "line", 4
-    new $P314, "ResizablePMCArray"
-    push $P314, "for"
-    .return ($P314)
+    new $P317, "ResizablePMCArray"
+    push $P317, "for"
+    .return ($P317)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("71_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<CATCH>"  :subid("71_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx320_tgt
-    .local int rx320_pos
-    .local int rx320_off
-    .local int rx320_eos
-    .local int rx320_rep
-    .local pmc rx320_cur
-    (rx320_cur, rx320_pos, rx320_tgt) = self."!cursor_start"()
-    rx320_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
-    .lex unicode:"$\x{a2}", rx320_cur
+    .local string rx323_tgt
+    .local int rx323_pos
+    .local int rx323_off
+    .local int rx323_eos
+    .local int rx323_rep
+    .local pmc rx323_cur
+    (rx323_cur, rx323_pos, rx323_tgt) = self."!cursor_start"()
+    rx323_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
+    .lex unicode:"$\x{a2}", rx323_cur
     .local pmc match
     .lex "$/", match
-    length rx320_eos, rx320_tgt
-    set rx320_off, 0
-    lt rx320_pos, 2, rx320_start
-    sub rx320_off, rx320_pos, 1
-    substr rx320_tgt, rx320_tgt, rx320_off
-  rx320_start:
+    length rx323_eos, rx323_tgt
+    set rx323_off, 0
+    lt rx323_pos, 2, rx323_start
+    sub rx323_off, rx323_pos, 1
+    substr rx323_tgt, rx323_tgt, rx323_off
+  rx323_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan323_done
-    goto rxscan323_scan
-  rxscan323_loop:
-    ($P10) = rx320_cur."from"()
+    ne $I10, -1, rxscan326_done
+    goto rxscan326_scan
+  rxscan326_loop:
+    ($P10) = rx323_cur."from"()
     inc $P10
-    set rx320_pos, $P10
-    ge rx320_pos, rx320_eos, rxscan323_done
-  rxscan323_scan:
-    set_addr $I10, rxscan323_loop
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
-  rxscan323_done:
-.annotate "line", 181
+    set rx323_pos, $P10
+    ge rx323_pos, rx323_eos, rxscan326_done
+  rxscan326_scan:
+    set_addr $I10, rxscan326_loop
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
+  rxscan326_done:
+.annotate "line", 185
   # rx subcapture "sym"
-    set_addr $I10, rxcap_324_fail
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
+    set_addr $I10, rxcap_327_fail
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
   # rx literal  "CATCH"
-    add $I11, rx320_pos, 5
-    gt $I11, rx320_eos, rx320_fail
-    sub $I11, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I11, 5
-    ne $S10, "CATCH", rx320_fail
-    add rx320_pos, 5
-    set_addr $I10, rxcap_324_fail
-    ($I12, $I11) = rx320_cur."!mark_peek"($I10)
-    rx320_cur."!cursor_pos"($I11)
-    ($P10) = rx320_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx320_pos, "")
-    rx320_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx323_pos, 5
+    gt $I11, rx323_eos, rx323_fail
+    sub $I11, rx323_pos, rx323_off
+    substr $S10, rx323_tgt, $I11, 5
+    ne $S10, "CATCH", rx323_fail
+    add rx323_pos, 5
+    set_addr $I10, rxcap_327_fail
+    ($I12, $I11) = rx323_cur."!mark_peek"($I10)
+    rx323_cur."!cursor_pos"($I11)
+    ($P10) = rx323_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx323_pos, "")
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_324_done
-  rxcap_324_fail:
-    goto rx320_fail
-  rxcap_324_done:
+    goto rxcap_327_done
+  rxcap_327_fail:
+    goto rx323_fail
+  rxcap_327_done:
   # rx charclass s
-    ge rx320_pos, rx320_eos, rx320_fail
-    sub $I10, rx320_pos, rx320_off
-    is_cclass $I11, 32, rx320_tgt, $I10
-    unless $I11, rx320_fail
-    inc rx320_pos
-  # rx subrule "ws" subtype=method negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."ws"()
-    unless $P10, rx320_fail
-    rx320_pos = $P10."pos"()
-.annotate "line", 182
+    ge rx323_pos, rx323_eos, rx323_fail
+    sub $I10, rx323_pos, rx323_off
+    is_cclass $I11, 32, rx323_tgt, $I10
+    unless $I11, rx323_fail
+    inc rx323_pos
+  # rx subrule "ws" subtype=method negate=
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+.annotate "line", 186
   # rx subrule "block" subtype=capture negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."block"()
-    unless $P10, rx320_fail
-    rx320_cur."!mark_push"(0, -1, 0, $P10)
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."block"()
+    unless $P10, rx323_fail
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx320_pos = $P10."pos"()
+    rx323_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."ws"()
-    unless $P10, rx320_fail
-    rx320_pos = $P10."pos"()
-.annotate "line", 180
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+.annotate "line", 184
   # rx pass
-    rx320_cur."!cursor_pass"(rx320_pos, "statement_control:sym<CATCH>")
-    rx320_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx320_pos)
-    .return (rx320_cur)
-  rx320_fail:
+    rx323_cur."!cursor_pass"(rx323_pos, "statement_control:sym<CATCH>")
+    rx323_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx323_pos)
+    .return (rx323_cur)
+  rx323_fail:
 .annotate "line", 4
-    (rx320_rep, rx320_pos, $I10, $P10) = rx320_cur."!mark_fail"(0)
-    lt rx320_pos, -1, rx320_done
-    eq rx320_pos, -1, rx320_fail
+    (rx323_rep, rx323_pos, $I10, $P10) = rx323_cur."!mark_fail"(0)
+    lt rx323_pos, -1, rx323_done
+    eq rx323_pos, -1, rx323_fail
     jump $I10
-  rx320_done:
-    rx320_cur."!cursor_fail"()
-    rx320_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
-    .return (rx320_cur)
+  rx323_done:
+    rx323_cur."!cursor_fail"()
+    rx323_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
+    .return (rx323_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1272816833.94956") :method
 .annotate "line", 4
-    new $P322, "ResizablePMCArray"
-    push $P322, "CATCH"
-    .return ($P322)
+    new $P325, "ResizablePMCArray"
+    push $P325, "CATCH"
+    .return ($P325)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("73_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<CONTROL>"  :subid("73_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx328_tgt
-    .local int rx328_pos
-    .local int rx328_off
-    .local int rx328_eos
-    .local int rx328_rep
-    .local pmc rx328_cur
-    (rx328_cur, rx328_pos, rx328_tgt) = self."!cursor_start"()
-    rx328_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
-    .lex unicode:"$\x{a2}", rx328_cur
+    .local string rx331_tgt
+    .local int rx331_pos
+    .local int rx331_off
+    .local int rx331_eos
+    .local int rx331_rep
+    .local pmc rx331_cur
+    (rx331_cur, rx331_pos, rx331_tgt) = self."!cursor_start"()
+    rx331_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
+    .lex unicode:"$\x{a2}", rx331_cur
     .local pmc match
     .lex "$/", match
-    length rx328_eos, rx328_tgt
-    set rx328_off, 0
-    lt rx328_pos, 2, rx328_start
-    sub rx328_off, rx328_pos, 1
-    substr rx328_tgt, rx328_tgt, rx328_off
-  rx328_start:
+    length rx331_eos, rx331_tgt
+    set rx331_off, 0
+    lt rx331_pos, 2, rx331_start
+    sub rx331_off, rx331_pos, 1
+    substr rx331_tgt, rx331_tgt, rx331_off
+  rx331_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan331_done
-    goto rxscan331_scan
-  rxscan331_loop:
-    ($P10) = rx328_cur."from"()
+    ne $I10, -1, rxscan334_done
+    goto rxscan334_scan
+  rxscan334_loop:
+    ($P10) = rx331_cur."from"()
     inc $P10
-    set rx328_pos, $P10
-    ge rx328_pos, rx328_eos, rxscan331_done
-  rxscan331_scan:
-    set_addr $I10, rxscan331_loop
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
-  rxscan331_done:
-.annotate "line", 186
+    set rx331_pos, $P10
+    ge rx331_pos, rx331_eos, rxscan334_done
+  rxscan334_scan:
+    set_addr $I10, rxscan334_loop
+    rx331_cur."!mark_push"(0, rx331_pos, $I10)
+  rxscan334_done:
+.annotate "line", 190
   # rx subcapture "sym"
-    set_addr $I10, rxcap_332_fail
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+    set_addr $I10, rxcap_335_fail
+    rx331_cur."!mark_push"(0, rx331_pos, $I10)
   # rx literal  "CONTROL"
-    add $I11, rx328_pos, 7
-    gt $I11, rx328_eos, rx328_fail
-    sub $I11, rx328_pos, rx328_off
-    substr $S10, rx328_tgt, $I11, 7
-    ne $S10, "CONTROL", rx328_fail
-    add rx328_pos, 7
-    set_addr $I10, rxcap_332_fail
-    ($I12, $I11) = rx328_cur."!mark_peek"($I10)
-    rx328_cur."!cursor_pos"($I11)
-    ($P10) = rx328_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx328_pos, "")
-    rx328_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx331_pos, 7
+    gt $I11, rx331_eos, rx331_fail
+    sub $I11, rx331_pos, rx331_off
+    substr $S10, rx331_tgt, $I11, 7
+    ne $S10, "CONTROL", rx331_fail
+    add rx331_pos, 7
+    set_addr $I10, rxcap_335_fail
+    ($I12, $I11) = rx331_cur."!mark_peek"($I10)
+    rx331_cur."!cursor_pos"($I11)
+    ($P10) = rx331_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx331_pos, "")
+    rx331_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_332_done
-  rxcap_332_fail:
-    goto rx328_fail
-  rxcap_332_done:
+    goto rxcap_335_done
+  rxcap_335_fail:
+    goto rx331_fail
+  rxcap_335_done:
   # rx charclass s
-    ge rx328_pos, rx328_eos, rx328_fail
-    sub $I10, rx328_pos, rx328_off
-    is_cclass $I11, 32, rx328_tgt, $I10
-    unless $I11, rx328_fail
-    inc rx328_pos
-  # rx subrule "ws" subtype=method negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."ws"()
-    unless $P10, rx328_fail
-    rx328_pos = $P10."pos"()
-.annotate "line", 187
+    ge rx331_pos, rx331_eos, rx331_fail
+    sub $I10, rx331_pos, rx331_off
+    is_cclass $I11, 32, rx331_tgt, $I10
+    unless $I11, rx331_fail
+    inc rx331_pos
+  # rx subrule "ws" subtype=method negate=
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."ws"()
+    unless $P10, rx331_fail
+    rx331_pos = $P10."pos"()
+.annotate "line", 191
   # rx subrule "block" subtype=capture negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."block"()
-    unless $P10, rx328_fail
-    rx328_cur."!mark_push"(0, -1, 0, $P10)
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."block"()
+    unless $P10, rx331_fail
+    rx331_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx328_pos = $P10."pos"()
+    rx331_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."ws"()
-    unless $P10, rx328_fail
-    rx328_pos = $P10."pos"()
-.annotate "line", 185
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."ws"()
+    unless $P10, rx331_fail
+    rx331_pos = $P10."pos"()
+.annotate "line", 189
   # rx pass
-    rx328_cur."!cursor_pass"(rx328_pos, "statement_control:sym<CONTROL>")
-    rx328_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx328_pos)
-    .return (rx328_cur)
-  rx328_fail:
+    rx331_cur."!cursor_pass"(rx331_pos, "statement_control:sym<CONTROL>")
+    rx331_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx331_pos)
+    .return (rx331_cur)
+  rx331_fail:
 .annotate "line", 4
-    (rx328_rep, rx328_pos, $I10, $P10) = rx328_cur."!mark_fail"(0)
-    lt rx328_pos, -1, rx328_done
-    eq rx328_pos, -1, rx328_fail
+    (rx331_rep, rx331_pos, $I10, $P10) = rx331_cur."!mark_fail"(0)
+    lt rx331_pos, -1, rx331_done
+    eq rx331_pos, -1, rx331_fail
     jump $I10
-  rx328_done:
-    rx328_cur."!cursor_fail"()
-    rx328_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
-    .return (rx328_cur)
+  rx331_done:
+    rx331_cur."!cursor_fail"()
+    rx331_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
+    .return (rx331_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1272816833.94956") :method
 .annotate "line", 4
-    new $P330, "ResizablePMCArray"
-    push $P330, "CONTROL"
-    .return ($P330)
+    new $P333, "ResizablePMCArray"
+    push $P333, "CONTROL"
+    .return ($P333)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("75_1267204702.05125") :method
-.annotate "line", 190
-    $P336 = self."!protoregex"("statement_prefix")
-    .return ($P336)
+.sub "statement_prefix"  :subid("75_1272816833.94956") :method
+.annotate "line", 194
+    $P339 = self."!protoregex"("statement_prefix")
+    .return ($P339)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("76_1267204702.05125") :method
-.annotate "line", 190
-    $P338 = self."!PREFIX__!protoregex"("statement_prefix")
-    .return ($P338)
+.sub "!PREFIX__statement_prefix"  :subid("76_1272816833.94956") :method
+.annotate "line", 194
+    $P341 = self."!PREFIX__!protoregex"("statement_prefix")
+    .return ($P341)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("77_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_prefix:sym<INIT>"  :subid("77_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx340_tgt
-    .local int rx340_pos
-    .local int rx340_off
-    .local int rx340_eos
-    .local int rx340_rep
-    .local pmc rx340_cur
-    (rx340_cur, rx340_pos, rx340_tgt) = self."!cursor_start"()
-    rx340_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
-    .lex unicode:"$\x{a2}", rx340_cur
-    .local pmc match
-    .lex "$/", match
-    length rx340_eos, rx340_tgt
-    set rx340_off, 0
-    lt rx340_pos, 2, rx340_start
-    sub rx340_off, rx340_pos, 1
-    substr rx340_tgt, rx340_tgt, rx340_off
-  rx340_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan344_done
-    goto rxscan344_scan
-  rxscan344_loop:
-    ($P10) = rx340_cur."from"()
-    inc $P10
-    set rx340_pos, $P10
-    ge rx340_pos, rx340_eos, rxscan344_done
-  rxscan344_scan:
-    set_addr $I10, rxscan344_loop
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
-  rxscan344_done:
-.annotate "line", 191
+    .local string rx343_tgt
+    .local int rx343_pos
+    .local int rx343_off
+    .local int rx343_eos
+    .local int rx343_rep
+    .local pmc rx343_cur
+    (rx343_cur, rx343_pos, rx343_tgt) = self."!cursor_start"()
+    rx343_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
+    .lex unicode:"$\x{a2}", rx343_cur
+    .local pmc match
+    .lex "$/", match
+    length rx343_eos, rx343_tgt
+    set rx343_off, 0
+    lt rx343_pos, 2, rx343_start
+    sub rx343_off, rx343_pos, 1
+    substr rx343_tgt, rx343_tgt, rx343_off
+  rx343_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan347_done
+    goto rxscan347_scan
+  rxscan347_loop:
+    ($P10) = rx343_cur."from"()
+    inc $P10
+    set rx343_pos, $P10
+    ge rx343_pos, rx343_eos, rxscan347_done
+  rxscan347_scan:
+    set_addr $I10, rxscan347_loop
+    rx343_cur."!mark_push"(0, rx343_pos, $I10)
+  rxscan347_done:
+.annotate "line", 195
   # rx subcapture "sym"
-    set_addr $I10, rxcap_345_fail
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
+    set_addr $I10, rxcap_348_fail
+    rx343_cur."!mark_push"(0, rx343_pos, $I10)
   # rx literal  "INIT"
-    add $I11, rx340_pos, 4
-    gt $I11, rx340_eos, rx340_fail
-    sub $I11, rx340_pos, rx340_off
-    substr $S10, rx340_tgt, $I11, 4
-    ne $S10, "INIT", rx340_fail
-    add rx340_pos, 4
-    set_addr $I10, rxcap_345_fail
-    ($I12, $I11) = rx340_cur."!mark_peek"($I10)
-    rx340_cur."!cursor_pos"($I11)
-    ($P10) = rx340_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx340_pos, "")
-    rx340_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx343_pos, 4
+    gt $I11, rx343_eos, rx343_fail
+    sub $I11, rx343_pos, rx343_off
+    substr $S10, rx343_tgt, $I11, 4
+    ne $S10, "INIT", rx343_fail
+    add rx343_pos, 4
+    set_addr $I10, rxcap_348_fail
+    ($I12, $I11) = rx343_cur."!mark_peek"($I10)
+    rx343_cur."!cursor_pos"($I11)
+    ($P10) = rx343_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx343_pos, "")
+    rx343_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_345_done
-  rxcap_345_fail:
-    goto rx340_fail
-  rxcap_345_done:
+    goto rxcap_348_done
+  rxcap_348_fail:
+    goto rx343_fail
+  rxcap_348_done:
   # rx subrule "blorst" subtype=capture negate=
-    rx340_cur."!cursor_pos"(rx340_pos)
-    $P10 = rx340_cur."blorst"()
-    unless $P10, rx340_fail
-    rx340_cur."!mark_push"(0, -1, 0, $P10)
+    rx343_cur."!cursor_pos"(rx343_pos)
+    $P10 = rx343_cur."blorst"()
+    unless $P10, rx343_fail
+    rx343_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx340_pos = $P10."pos"()
+    rx343_pos = $P10."pos"()
   # rx pass
-    rx340_cur."!cursor_pass"(rx340_pos, "statement_prefix:sym<INIT>")
-    rx340_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx340_pos)
-    .return (rx340_cur)
-  rx340_fail:
+    rx343_cur."!cursor_pass"(rx343_pos, "statement_prefix:sym<INIT>")
+    rx343_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx343_pos)
+    .return (rx343_cur)
+  rx343_fail:
 .annotate "line", 4
-    (rx340_rep, rx340_pos, $I10, $P10) = rx340_cur."!mark_fail"(0)
-    lt rx340_pos, -1, rx340_done
-    eq rx340_pos, -1, rx340_fail
+    (rx343_rep, rx343_pos, $I10, $P10) = rx343_cur."!mark_fail"(0)
+    lt rx343_pos, -1, rx343_done
+    eq rx343_pos, -1, rx343_fail
     jump $I10
-  rx340_done:
-    rx340_cur."!cursor_fail"()
-    rx340_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
-    .return (rx340_cur)
+  rx343_done:
+    rx343_cur."!cursor_fail"()
+    rx343_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
+    .return (rx343_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1267204702.05125") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1272816833.94956") :method
 .annotate "line", 4
-    $P342 = self."!PREFIX__!subrule"("blorst", "INIT")
-    new $P343, "ResizablePMCArray"
-    push $P343, $P342
-    .return ($P343)
+    $P345 = self."!PREFIX__!subrule"("blorst", "INIT")
+    new $P346, "ResizablePMCArray"
+    push $P346, $P345
+    .return ($P346)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("79_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_prefix:sym<try>"  :subid("79_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx347_tgt
-    .local int rx347_pos
-    .local int rx347_off
-    .local int rx347_eos
-    .local int rx347_rep
-    .local pmc rx347_cur
-    (rx347_cur, rx347_pos, rx347_tgt) = self."!cursor_start"()
-    rx347_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
-    .lex unicode:"$\x{a2}", rx347_cur
-    .local pmc match
-    .lex "$/", match
-    length rx347_eos, rx347_tgt
-    set rx347_off, 0
-    lt rx347_pos, 2, rx347_start
-    sub rx347_off, rx347_pos, 1
-    substr rx347_tgt, rx347_tgt, rx347_off
-  rx347_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan351_done
-    goto rxscan351_scan
-  rxscan351_loop:
-    ($P10) = rx347_cur."from"()
-    inc $P10
-    set rx347_pos, $P10
-    ge rx347_pos, rx347_eos, rxscan351_done
-  rxscan351_scan:
-    set_addr $I10, rxscan351_loop
-    rx347_cur."!mark_push"(0, rx347_pos, $I10)
-  rxscan351_done:
-.annotate "line", 194
+    .local string rx350_tgt
+    .local int rx350_pos
+    .local int rx350_off
+    .local int rx350_eos
+    .local int rx350_rep
+    .local pmc rx350_cur
+    (rx350_cur, rx350_pos, rx350_tgt) = self."!cursor_start"()
+    rx350_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
+    .lex unicode:"$\x{a2}", rx350_cur
+    .local pmc match
+    .lex "$/", match
+    length rx350_eos, rx350_tgt
+    set rx350_off, 0
+    lt rx350_pos, 2, rx350_start
+    sub rx350_off, rx350_pos, 1
+    substr rx350_tgt, rx350_tgt, rx350_off
+  rx350_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan354_done
+    goto rxscan354_scan
+  rxscan354_loop:
+    ($P10) = rx350_cur."from"()
+    inc $P10
+    set rx350_pos, $P10
+    ge rx350_pos, rx350_eos, rxscan354_done
+  rxscan354_scan:
+    set_addr $I10, rxscan354_loop
+    rx350_cur."!mark_push"(0, rx350_pos, $I10)
+  rxscan354_done:
+.annotate "line", 198
   # rx subcapture "sym"
-    set_addr $I10, rxcap_352_fail
-    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+    set_addr $I10, rxcap_355_fail
+    rx350_cur."!mark_push"(0, rx350_pos, $I10)
   # rx literal  "try"
-    add $I11, rx347_pos, 3
-    gt $I11, rx347_eos, rx347_fail
-    sub $I11, rx347_pos, rx347_off
-    substr $S10, rx347_tgt, $I11, 3
-    ne $S10, "try", rx347_fail
-    add rx347_pos, 3
-    set_addr $I10, rxcap_352_fail
-    ($I12, $I11) = rx347_cur."!mark_peek"($I10)
-    rx347_cur."!cursor_pos"($I11)
-    ($P10) = rx347_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx347_pos, "")
-    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx350_pos, 3
+    gt $I11, rx350_eos, rx350_fail
+    sub $I11, rx350_pos, rx350_off
+    substr $S10, rx350_tgt, $I11, 3
+    ne $S10, "try", rx350_fail
+    add rx350_pos, 3
+    set_addr $I10, rxcap_355_fail
+    ($I12, $I11) = rx350_cur."!mark_peek"($I10)
+    rx350_cur."!cursor_pos"($I11)
+    ($P10) = rx350_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx350_pos, "")
+    rx350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_352_done
-  rxcap_352_fail:
-    goto rx347_fail
-  rxcap_352_done:
-.annotate "line", 195
+    goto rxcap_355_done
+  rxcap_355_fail:
+    goto rx350_fail
+  rxcap_355_done:
+.annotate "line", 199
   # rx subrule "blorst" subtype=capture negate=
-    rx347_cur."!cursor_pos"(rx347_pos)
-    $P10 = rx347_cur."blorst"()
-    unless $P10, rx347_fail
-    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    rx350_cur."!cursor_pos"(rx350_pos)
+    $P10 = rx350_cur."blorst"()
+    unless $P10, rx350_fail
+    rx350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx347_pos = $P10."pos"()
-.annotate "line", 193
+    rx350_pos = $P10."pos"()
+.annotate "line", 197
   # rx pass
-    rx347_cur."!cursor_pass"(rx347_pos, "statement_prefix:sym<try>")
-    rx347_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx347_pos)
-    .return (rx347_cur)
-  rx347_fail:
+    rx350_cur."!cursor_pass"(rx350_pos, "statement_prefix:sym<try>")
+    rx350_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx350_pos)
+    .return (rx350_cur)
+  rx350_fail:
 .annotate "line", 4
-    (rx347_rep, rx347_pos, $I10, $P10) = rx347_cur."!mark_fail"(0)
-    lt rx347_pos, -1, rx347_done
-    eq rx347_pos, -1, rx347_fail
+    (rx350_rep, rx350_pos, $I10, $P10) = rx350_cur."!mark_fail"(0)
+    lt rx350_pos, -1, rx350_done
+    eq rx350_pos, -1, rx350_fail
     jump $I10
-  rx347_done:
-    rx347_cur."!cursor_fail"()
-    rx347_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
-    .return (rx347_cur)
+  rx350_done:
+    rx350_cur."!cursor_fail"()
+    rx350_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
+    .return (rx350_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1267204702.05125") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1272816833.94956") :method
 .annotate "line", 4
-    $P349 = self."!PREFIX__!subrule"("blorst", "try")
-    new $P350, "ResizablePMCArray"
-    push $P350, $P349
-    .return ($P350)
+    $P352 = self."!PREFIX__!subrule"("blorst", "try")
+    new $P353, "ResizablePMCArray"
+    push $P353, $P352
+    .return ($P353)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("81_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "blorst"  :subid("81_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx354_tgt
-    .local int rx354_pos
-    .local int rx354_off
-    .local int rx354_eos
-    .local int rx354_rep
-    .local pmc rx354_cur
-    (rx354_cur, rx354_pos, rx354_tgt) = self."!cursor_start"()
-    rx354_cur."!cursor_debug"("START ", "blorst")
-    .lex unicode:"$\x{a2}", rx354_cur
+    .local string rx357_tgt
+    .local int rx357_pos
+    .local int rx357_off
+    .local int rx357_eos
+    .local int rx357_rep
+    .local pmc rx357_cur
+    (rx357_cur, rx357_pos, rx357_tgt) = self."!cursor_start"()
+    rx357_cur."!cursor_debug"("START ", "blorst")
+    .lex unicode:"$\x{a2}", rx357_cur
     .local pmc match
     .lex "$/", match
-    length rx354_eos, rx354_tgt
-    set rx354_off, 0
-    lt rx354_pos, 2, rx354_start
-    sub rx354_off, rx354_pos, 1
-    substr rx354_tgt, rx354_tgt, rx354_off
-  rx354_start:
+    length rx357_eos, rx357_tgt
+    set rx357_off, 0
+    lt rx357_pos, 2, rx357_start
+    sub rx357_off, rx357_pos, 1
+    substr rx357_tgt, rx357_tgt, rx357_off
+  rx357_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan357_done
-    goto rxscan357_scan
-  rxscan357_loop:
-    ($P10) = rx354_cur."from"()
+    ne $I10, -1, rxscan360_done
+    goto rxscan360_scan
+  rxscan360_loop:
+    ($P10) = rx357_cur."from"()
     inc $P10
-    set rx354_pos, $P10
-    ge rx354_pos, rx354_eos, rxscan357_done
-  rxscan357_scan:
-    set_addr $I10, rxscan357_loop
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
-  rxscan357_done:
-.annotate "line", 199
+    set rx357_pos, $P10
+    ge rx357_pos, rx357_eos, rxscan360_done
+  rxscan360_scan:
+    set_addr $I10, rxscan360_loop
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
+  rxscan360_done:
+.annotate "line", 203
   # rx charclass s
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    is_cclass $I11, 32, rx354_tgt, $I10
-    unless $I11, rx354_fail
-    inc rx354_pos
-  # rx subrule "ws" subtype=method negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."ws"()
-    unless $P10, rx354_fail
-    rx354_pos = $P10."pos"()
-  alt358_0:
-    set_addr $I10, alt358_1
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
+    ge rx357_pos, rx357_eos, rx357_fail
+    sub $I10, rx357_pos, rx357_off
+    is_cclass $I11, 32, rx357_tgt, $I10
+    unless $I11, rx357_fail
+    inc rx357_pos
+  # rx subrule "ws" subtype=method negate=
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."ws"()
+    unless $P10, rx357_fail
+    rx357_pos = $P10."pos"()
+  alt361_0:
+    set_addr $I10, alt361_1
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    substr $S10, rx354_tgt, $I10, 1
+    ge rx357_pos, rx357_eos, rx357_fail
+    sub $I10, rx357_pos, rx357_off
+    substr $S10, rx357_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx354_fail
+    lt $I11, 0, rx357_fail
   # rx subrule "block" subtype=capture negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."block"()
-    unless $P10, rx354_fail
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."block"()
+    unless $P10, rx357_fail
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx354_pos = $P10."pos"()
-    goto alt358_end
-  alt358_1:
+    rx357_pos = $P10."pos"()
+    goto alt361_end
+  alt361_1:
   # rx subrule "statement" subtype=capture negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."statement"()
-    unless $P10, rx354_fail
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."statement"()
+    unless $P10, rx357_fail
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx354_pos = $P10."pos"()
-  alt358_end:
-.annotate "line", 198
+    rx357_pos = $P10."pos"()
+  alt361_end:
+.annotate "line", 202
   # rx pass
-    rx354_cur."!cursor_pass"(rx354_pos, "blorst")
-    rx354_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx354_pos)
-    .return (rx354_cur)
-  rx354_fail:
+    rx357_cur."!cursor_pass"(rx357_pos, "blorst")
+    rx357_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx357_pos)
+    .return (rx357_cur)
+  rx357_fail:
 .annotate "line", 4
-    (rx354_rep, rx354_pos, $I10, $P10) = rx354_cur."!mark_fail"(0)
-    lt rx354_pos, -1, rx354_done
-    eq rx354_pos, -1, rx354_fail
+    (rx357_rep, rx357_pos, $I10, $P10) = rx357_cur."!mark_fail"(0)
+    lt rx357_pos, -1, rx357_done
+    eq rx357_pos, -1, rx357_fail
     jump $I10
-  rx354_done:
-    rx354_cur."!cursor_fail"()
-    rx354_cur."!cursor_debug"("FAIL  ", "blorst")
-    .return (rx354_cur)
+  rx357_done:
+    rx357_cur."!cursor_fail"()
+    rx357_cur."!cursor_debug"("FAIL  ", "blorst")
+    .return (rx357_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("82_1267204702.05125") :method
+.sub "!PREFIX__blorst"  :subid("82_1272816833.94956") :method
 .annotate "line", 4
-    new $P356, "ResizablePMCArray"
-    push $P356, ""
-    .return ($P356)
+    new $P359, "ResizablePMCArray"
+    push $P359, ""
+    .return ($P359)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("83_1267204702.05125") :method
-.annotate "line", 204
-    $P360 = self."!protoregex"("statement_mod_cond")
-    .return ($P360)
+.sub "statement_mod_cond"  :subid("83_1272816833.94956") :method
+.annotate "line", 208
+    $P363 = self."!protoregex"("statement_mod_cond")
+    .return ($P363)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("84_1267204702.05125") :method
-.annotate "line", 204
-    $P362 = self."!PREFIX__!protoregex"("statement_mod_cond")
-    .return ($P362)
+.sub "!PREFIX__statement_mod_cond"  :subid("84_1272816833.94956") :method
+.annotate "line", 208
+    $P365 = self."!PREFIX__!protoregex"("statement_mod_cond")
+    .return ($P365)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("85_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_cond:sym<if>"  :subid("85_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx364_tgt
-    .local int rx364_pos
-    .local int rx364_off
-    .local int rx364_eos
-    .local int rx364_rep
-    .local pmc rx364_cur
-    (rx364_cur, rx364_pos, rx364_tgt) = self."!cursor_start"()
-    rx364_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
-    .lex unicode:"$\x{a2}", rx364_cur
-    .local pmc match
-    .lex "$/", match
-    length rx364_eos, rx364_tgt
-    set rx364_off, 0
-    lt rx364_pos, 2, rx364_start
-    sub rx364_off, rx364_pos, 1
-    substr rx364_tgt, rx364_tgt, rx364_off
-  rx364_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan367_done
-    goto rxscan367_scan
-  rxscan367_loop:
-    ($P10) = rx364_cur."from"()
-    inc $P10
-    set rx364_pos, $P10
-    ge rx364_pos, rx364_eos, rxscan367_done
-  rxscan367_scan:
-    set_addr $I10, rxscan367_loop
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
-  rxscan367_done:
-.annotate "line", 206
+    .local string rx367_tgt
+    .local int rx367_pos
+    .local int rx367_off
+    .local int rx367_eos
+    .local int rx367_rep
+    .local pmc rx367_cur
+    (rx367_cur, rx367_pos, rx367_tgt) = self."!cursor_start"()
+    rx367_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
+    .lex unicode:"$\x{a2}", rx367_cur
+    .local pmc match
+    .lex "$/", match
+    length rx367_eos, rx367_tgt
+    set rx367_off, 0
+    lt rx367_pos, 2, rx367_start
+    sub rx367_off, rx367_pos, 1
+    substr rx367_tgt, rx367_tgt, rx367_off
+  rx367_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan370_done
+    goto rxscan370_scan
+  rxscan370_loop:
+    ($P10) = rx367_cur."from"()
+    inc $P10
+    set rx367_pos, $P10
+    ge rx367_pos, rx367_eos, rxscan370_done
+  rxscan370_scan:
+    set_addr $I10, rxscan370_loop
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
+  rxscan370_done:
+.annotate "line", 210
   # rx subcapture "sym"
-    set_addr $I10, rxcap_368_fail
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
+    set_addr $I10, rxcap_371_fail
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
   # rx literal  "if"
-    add $I11, rx364_pos, 2
-    gt $I11, rx364_eos, rx364_fail
-    sub $I11, rx364_pos, rx364_off
-    substr $S10, rx364_tgt, $I11, 2
-    ne $S10, "if", rx364_fail
-    add rx364_pos, 2
-    set_addr $I10, rxcap_368_fail
-    ($I12, $I11) = rx364_cur."!mark_peek"($I10)
-    rx364_cur."!cursor_pos"($I11)
-    ($P10) = rx364_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx364_pos, "")
-    rx364_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx367_pos, 2
+    gt $I11, rx367_eos, rx367_fail
+    sub $I11, rx367_pos, rx367_off
+    substr $S10, rx367_tgt, $I11, 2
+    ne $S10, "if", rx367_fail
+    add rx367_pos, 2
+    set_addr $I10, rxcap_371_fail
+    ($I12, $I11) = rx367_cur."!mark_peek"($I10)
+    rx367_cur."!cursor_pos"($I11)
+    ($P10) = rx367_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx367_pos, "")
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_368_done
-  rxcap_368_fail:
-    goto rx364_fail
-  rxcap_368_done:
-  # rx subrule "ws" subtype=method negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."ws"()
-    unless $P10, rx364_fail
-    rx364_pos = $P10."pos"()
+    goto rxcap_371_done
+  rxcap_371_fail:
+    goto rx367_fail
+  rxcap_371_done:
+  # rx subrule "ws" subtype=method negate=
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."ws"()
+    unless $P10, rx367_fail
+    rx367_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."EXPR"()
-    unless $P10, rx364_fail
-    rx364_cur."!mark_push"(0, -1, 0, $P10)
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."EXPR"()
+    unless $P10, rx367_fail
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx364_pos = $P10."pos"()
+    rx367_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."ws"()
-    unless $P10, rx364_fail
-    rx364_pos = $P10."pos"()
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."ws"()
+    unless $P10, rx367_fail
+    rx367_pos = $P10."pos"()
   # rx pass
-    rx364_cur."!cursor_pass"(rx364_pos, "statement_mod_cond:sym<if>")
-    rx364_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx364_pos)
-    .return (rx364_cur)
-  rx364_fail:
+    rx367_cur."!cursor_pass"(rx367_pos, "statement_mod_cond:sym<if>")
+    rx367_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx367_pos)
+    .return (rx367_cur)
+  rx367_fail:
 .annotate "line", 4
-    (rx364_rep, rx364_pos, $I10, $P10) = rx364_cur."!mark_fail"(0)
-    lt rx364_pos, -1, rx364_done
-    eq rx364_pos, -1, rx364_fail
+    (rx367_rep, rx367_pos, $I10, $P10) = rx367_cur."!mark_fail"(0)
+    lt rx367_pos, -1, rx367_done
+    eq rx367_pos, -1, rx367_fail
     jump $I10
-  rx364_done:
-    rx364_cur."!cursor_fail"()
-    rx364_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
-    .return (rx364_cur)
+  rx367_done:
+    rx367_cur."!cursor_fail"()
+    rx367_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
+    .return (rx367_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1272816833.94956") :method
 .annotate "line", 4
-    new $P366, "ResizablePMCArray"
-    push $P366, "if"
-    .return ($P366)
+    new $P369, "ResizablePMCArray"
+    push $P369, "if"
+    .return ($P369)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("87_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_cond:sym<unless>"  :subid("87_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx372_tgt
-    .local int rx372_pos
-    .local int rx372_off
-    .local int rx372_eos
-    .local int rx372_rep
-    .local pmc rx372_cur
-    (rx372_cur, rx372_pos, rx372_tgt) = self."!cursor_start"()
-    rx372_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
-    .lex unicode:"$\x{a2}", rx372_cur
+    .local string rx375_tgt
+    .local int rx375_pos
+    .local int rx375_off
+    .local int rx375_eos
+    .local int rx375_rep
+    .local pmc rx375_cur
+    (rx375_cur, rx375_pos, rx375_tgt) = self."!cursor_start"()
+    rx375_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
+    .lex unicode:"$\x{a2}", rx375_cur
     .local pmc match
     .lex "$/", match
-    length rx372_eos, rx372_tgt
-    set rx372_off, 0
-    lt rx372_pos, 2, rx372_start
-    sub rx372_off, rx372_pos, 1
-    substr rx372_tgt, rx372_tgt, rx372_off
-  rx372_start:
+    length rx375_eos, rx375_tgt
+    set rx375_off, 0
+    lt rx375_pos, 2, rx375_start
+    sub rx375_off, rx375_pos, 1
+    substr rx375_tgt, rx375_tgt, rx375_off
+  rx375_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan375_done
-    goto rxscan375_scan
-  rxscan375_loop:
-    ($P10) = rx372_cur."from"()
+    ne $I10, -1, rxscan378_done
+    goto rxscan378_scan
+  rxscan378_loop:
+    ($P10) = rx375_cur."from"()
     inc $P10
-    set rx372_pos, $P10
-    ge rx372_pos, rx372_eos, rxscan375_done
-  rxscan375_scan:
-    set_addr $I10, rxscan375_loop
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
-  rxscan375_done:
-.annotate "line", 207
+    set rx375_pos, $P10
+    ge rx375_pos, rx375_eos, rxscan378_done
+  rxscan378_scan:
+    set_addr $I10, rxscan378_loop
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
+  rxscan378_done:
+.annotate "line", 211
   # rx subcapture "sym"
-    set_addr $I10, rxcap_376_fail
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
+    set_addr $I10, rxcap_379_fail
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx372_pos, 6
-    gt $I11, rx372_eos, rx372_fail
-    sub $I11, rx372_pos, rx372_off
-    substr $S10, rx372_tgt, $I11, 6
-    ne $S10, "unless", rx372_fail
-    add rx372_pos, 6
-    set_addr $I10, rxcap_376_fail
-    ($I12, $I11) = rx372_cur."!mark_peek"($I10)
-    rx372_cur."!cursor_pos"($I11)
-    ($P10) = rx372_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx372_pos, "")
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx375_pos, 6
+    gt $I11, rx375_eos, rx375_fail
+    sub $I11, rx375_pos, rx375_off
+    substr $S10, rx375_tgt, $I11, 6
+    ne $S10, "unless", rx375_fail
+    add rx375_pos, 6
+    set_addr $I10, rxcap_379_fail
+    ($I12, $I11) = rx375_cur."!mark_peek"($I10)
+    rx375_cur."!cursor_pos"($I11)
+    ($P10) = rx375_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx375_pos, "")
+    rx375_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_376_done
-  rxcap_376_fail:
-    goto rx372_fail
-  rxcap_376_done:
-  # rx subrule "ws" subtype=method negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."ws"()
-    unless $P10, rx372_fail
-    rx372_pos = $P10."pos"()
+    goto rxcap_379_done
+  rxcap_379_fail:
+    goto rx375_fail
+  rxcap_379_done:
+  # rx subrule "ws" subtype=method negate=
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."ws"()
+    unless $P10, rx375_fail
+    rx375_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."EXPR"()
-    unless $P10, rx372_fail
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."EXPR"()
+    unless $P10, rx375_fail
+    rx375_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx372_pos = $P10."pos"()
+    rx375_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."ws"()
-    unless $P10, rx372_fail
-    rx372_pos = $P10."pos"()
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."ws"()
+    unless $P10, rx375_fail
+    rx375_pos = $P10."pos"()
   # rx pass
-    rx372_cur."!cursor_pass"(rx372_pos, "statement_mod_cond:sym<unless>")
-    rx372_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx372_pos)
-    .return (rx372_cur)
-  rx372_fail:
+    rx375_cur."!cursor_pass"(rx375_pos, "statement_mod_cond:sym<unless>")
+    rx375_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx375_pos)
+    .return (rx375_cur)
+  rx375_fail:
 .annotate "line", 4
-    (rx372_rep, rx372_pos, $I10, $P10) = rx372_cur."!mark_fail"(0)
-    lt rx372_pos, -1, rx372_done
-    eq rx372_pos, -1, rx372_fail
+    (rx375_rep, rx375_pos, $I10, $P10) = rx375_cur."!mark_fail"(0)
+    lt rx375_pos, -1, rx375_done
+    eq rx375_pos, -1, rx375_fail
     jump $I10
-  rx372_done:
-    rx372_cur."!cursor_fail"()
-    rx372_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
-    .return (rx372_cur)
+  rx375_done:
+    rx375_cur."!cursor_fail"()
+    rx375_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
+    .return (rx375_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1272816833.94956") :method
 .annotate "line", 4
-    new $P374, "ResizablePMCArray"
-    push $P374, "unless"
-    .return ($P374)
+    new $P377, "ResizablePMCArray"
+    push $P377, "unless"
+    .return ($P377)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("89_1267204702.05125") :method
-.annotate "line", 209
-    $P380 = self."!protoregex"("statement_mod_loop")
-    .return ($P380)
+.sub "statement_mod_loop"  :subid("89_1272816833.94956") :method
+.annotate "line", 213
+    $P383 = self."!protoregex"("statement_mod_loop")
+    .return ($P383)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("90_1267204702.05125") :method
-.annotate "line", 209
-    $P382 = self."!PREFIX__!protoregex"("statement_mod_loop")
-    .return ($P382)
+.sub "!PREFIX__statement_mod_loop"  :subid("90_1272816833.94956") :method
+.annotate "line", 213
+    $P385 = self."!PREFIX__!protoregex"("statement_mod_loop")
+    .return ($P385)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("91_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_loop:sym<while>"  :subid("91_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx384_tgt
-    .local int rx384_pos
-    .local int rx384_off
-    .local int rx384_eos
-    .local int rx384_rep
-    .local pmc rx384_cur
-    (rx384_cur, rx384_pos, rx384_tgt) = self."!cursor_start"()
-    rx384_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
-    .lex unicode:"$\x{a2}", rx384_cur
-    .local pmc match
-    .lex "$/", match
-    length rx384_eos, rx384_tgt
-    set rx384_off, 0
-    lt rx384_pos, 2, rx384_start
-    sub rx384_off, rx384_pos, 1
-    substr rx384_tgt, rx384_tgt, rx384_off
-  rx384_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan387_done
-    goto rxscan387_scan
-  rxscan387_loop:
-    ($P10) = rx384_cur."from"()
-    inc $P10
-    set rx384_pos, $P10
-    ge rx384_pos, rx384_eos, rxscan387_done
-  rxscan387_scan:
-    set_addr $I10, rxscan387_loop
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
-  rxscan387_done:
-.annotate "line", 211
+    .local string rx387_tgt
+    .local int rx387_pos
+    .local int rx387_off
+    .local int rx387_eos
+    .local int rx387_rep
+    .local pmc rx387_cur
+    (rx387_cur, rx387_pos, rx387_tgt) = self."!cursor_start"()
+    rx387_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
+    .lex unicode:"$\x{a2}", rx387_cur
+    .local pmc match
+    .lex "$/", match
+    length rx387_eos, rx387_tgt
+    set rx387_off, 0
+    lt rx387_pos, 2, rx387_start
+    sub rx387_off, rx387_pos, 1
+    substr rx387_tgt, rx387_tgt, rx387_off
+  rx387_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan390_done
+    goto rxscan390_scan
+  rxscan390_loop:
+    ($P10) = rx387_cur."from"()
+    inc $P10
+    set rx387_pos, $P10
+    ge rx387_pos, rx387_eos, rxscan390_done
+  rxscan390_scan:
+    set_addr $I10, rxscan390_loop
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
+  rxscan390_done:
+.annotate "line", 215
   # rx subcapture "sym"
-    set_addr $I10, rxcap_388_fail
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
+    set_addr $I10, rxcap_391_fail
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
   # rx literal  "while"
-    add $I11, rx384_pos, 5
-    gt $I11, rx384_eos, rx384_fail
-    sub $I11, rx384_pos, rx384_off
-    substr $S10, rx384_tgt, $I11, 5
-    ne $S10, "while", rx384_fail
-    add rx384_pos, 5
-    set_addr $I10, rxcap_388_fail
-    ($I12, $I11) = rx384_cur."!mark_peek"($I10)
-    rx384_cur."!cursor_pos"($I11)
-    ($P10) = rx384_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx384_pos, "")
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx387_pos, 5
+    gt $I11, rx387_eos, rx387_fail
+    sub $I11, rx387_pos, rx387_off
+    substr $S10, rx387_tgt, $I11, 5
+    ne $S10, "while", rx387_fail
+    add rx387_pos, 5
+    set_addr $I10, rxcap_391_fail
+    ($I12, $I11) = rx387_cur."!mark_peek"($I10)
+    rx387_cur."!cursor_pos"($I11)
+    ($P10) = rx387_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx387_pos, "")
+    rx387_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_388_done
-  rxcap_388_fail:
-    goto rx384_fail
-  rxcap_388_done:
-  # rx subrule "ws" subtype=method negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."ws"()
-    unless $P10, rx384_fail
-    rx384_pos = $P10."pos"()
+    goto rxcap_391_done
+  rxcap_391_fail:
+    goto rx387_fail
+  rxcap_391_done:
+  # rx subrule "ws" subtype=method negate=
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."ws"()
+    unless $P10, rx387_fail
+    rx387_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."EXPR"()
-    unless $P10, rx384_fail
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."EXPR"()
+    unless $P10, rx387_fail
+    rx387_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx384_pos = $P10."pos"()
+    rx387_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."ws"()
-    unless $P10, rx384_fail
-    rx384_pos = $P10."pos"()
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."ws"()
+    unless $P10, rx387_fail
+    rx387_pos = $P10."pos"()
   # rx pass
-    rx384_cur."!cursor_pass"(rx384_pos, "statement_mod_loop:sym<while>")
-    rx384_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx384_pos)
-    .return (rx384_cur)
-  rx384_fail:
+    rx387_cur."!cursor_pass"(rx387_pos, "statement_mod_loop:sym<while>")
+    rx387_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx387_pos)
+    .return (rx387_cur)
+  rx387_fail:
 .annotate "line", 4
-    (rx384_rep, rx384_pos, $I10, $P10) = rx384_cur."!mark_fail"(0)
-    lt rx384_pos, -1, rx384_done
-    eq rx384_pos, -1, rx384_fail
+    (rx387_rep, rx387_pos, $I10, $P10) = rx387_cur."!mark_fail"(0)
+    lt rx387_pos, -1, rx387_done
+    eq rx387_pos, -1, rx387_fail
     jump $I10
-  rx384_done:
-    rx384_cur."!cursor_fail"()
-    rx384_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
-    .return (rx384_cur)
+  rx387_done:
+    rx387_cur."!cursor_fail"()
+    rx387_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
+    .return (rx387_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1272816833.94956") :method
 .annotate "line", 4
-    new $P386, "ResizablePMCArray"
-    push $P386, "while"
-    .return ($P386)
+    new $P389, "ResizablePMCArray"
+    push $P389, "while"
+    .return ($P389)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("93_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_loop:sym<until>"  :subid("93_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx392_tgt
-    .local int rx392_pos
-    .local int rx392_off
-    .local int rx392_eos
-    .local int rx392_rep
-    .local pmc rx392_cur
-    (rx392_cur, rx392_pos, rx392_tgt) = self."!cursor_start"()
-    rx392_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
-    .lex unicode:"$\x{a2}", rx392_cur
+    .local string rx395_tgt
+    .local int rx395_pos
+    .local int rx395_off
+    .local int rx395_eos
+    .local int rx395_rep
+    .local pmc rx395_cur
+    (rx395_cur, rx395_pos, rx395_tgt) = self."!cursor_start"()
+    rx395_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
+    .lex unicode:"$\x{a2}", rx395_cur
     .local pmc match
     .lex "$/", match
-    length rx392_eos, rx392_tgt
-    set rx392_off, 0
-    lt rx392_pos, 2, rx392_start
-    sub rx392_off, rx392_pos, 1
-    substr rx392_tgt, rx392_tgt, rx392_off
-  rx392_start:
+    length rx395_eos, rx395_tgt
+    set rx395_off, 0
+    lt rx395_pos, 2, rx395_start
+    sub rx395_off, rx395_pos, 1
+    substr rx395_tgt, rx395_tgt, rx395_off
+  rx395_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan395_done
-    goto rxscan395_scan
-  rxscan395_loop:
-    ($P10) = rx392_cur."from"()
+    ne $I10, -1, rxscan398_done
+    goto rxscan398_scan
+  rxscan398_loop:
+    ($P10) = rx395_cur."from"()
     inc $P10
-    set rx392_pos, $P10
-    ge rx392_pos, rx392_eos, rxscan395_done
-  rxscan395_scan:
-    set_addr $I10, rxscan395_loop
-    rx392_cur."!mark_push"(0, rx392_pos, $I10)
-  rxscan395_done:
-.annotate "line", 212
+    set rx395_pos, $P10
+    ge rx395_pos, rx395_eos, rxscan398_done
+  rxscan398_scan:
+    set_addr $I10, rxscan398_loop
+    rx395_cur."!mark_push"(0, rx395_pos, $I10)
+  rxscan398_done:
+.annotate "line", 216
   # rx subcapture "sym"
-    set_addr $I10, rxcap_396_fail
-    rx392_cur."!mark_push"(0, rx392_pos, $I10)
+    set_addr $I10, rxcap_399_fail
+    rx395_cur."!mark_push"(0, rx395_pos, $I10)
   # rx literal  "until"
-    add $I11, rx392_pos, 5
-    gt $I11, rx392_eos, rx392_fail
-    sub $I11, rx392_pos, rx392_off
-    substr $S10, rx392_tgt, $I11, 5
-    ne $S10, "until", rx392_fail
-    add rx392_pos, 5
-    set_addr $I10, rxcap_396_fail
-    ($I12, $I11) = rx392_cur."!mark_peek"($I10)
-    rx392_cur."!cursor_pos"($I11)
-    ($P10) = rx392_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx392_pos, "")
-    rx392_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx395_pos, 5
+    gt $I11, rx395_eos, rx395_fail
+    sub $I11, rx395_pos, rx395_off
+    substr $S10, rx395_tgt, $I11, 5
+    ne $S10, "until", rx395_fail
+    add rx395_pos, 5
+    set_addr $I10, rxcap_399_fail
+    ($I12, $I11) = rx395_cur."!mark_peek"($I10)
+    rx395_cur."!cursor_pos"($I11)
+    ($P10) = rx395_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx395_pos, "")
+    rx395_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_396_done
-  rxcap_396_fail:
-    goto rx392_fail
-  rxcap_396_done:
-  # rx subrule "ws" subtype=method negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."ws"()
-    unless $P10, rx392_fail
-    rx392_pos = $P10."pos"()
+    goto rxcap_399_done
+  rxcap_399_fail:
+    goto rx395_fail
+  rxcap_399_done:
+  # rx subrule "ws" subtype=method negate=
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."ws"()
+    unless $P10, rx395_fail
+    rx395_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."EXPR"()
-    unless $P10, rx392_fail
-    rx392_cur."!mark_push"(0, -1, 0, $P10)
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."EXPR"()
+    unless $P10, rx395_fail
+    rx395_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx392_pos = $P10."pos"()
+    rx395_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."ws"()
-    unless $P10, rx392_fail
-    rx392_pos = $P10."pos"()
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."ws"()
+    unless $P10, rx395_fail
+    rx395_pos = $P10."pos"()
   # rx pass
-    rx392_cur."!cursor_pass"(rx392_pos, "statement_mod_loop:sym<until>")
-    rx392_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx392_pos)
-    .return (rx392_cur)
-  rx392_fail:
+    rx395_cur."!cursor_pass"(rx395_pos, "statement_mod_loop:sym<until>")
+    rx395_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx395_pos)
+    .return (rx395_cur)
+  rx395_fail:
 .annotate "line", 4
-    (rx392_rep, rx392_pos, $I10, $P10) = rx392_cur."!mark_fail"(0)
-    lt rx392_pos, -1, rx392_done
-    eq rx392_pos, -1, rx392_fail
+    (rx395_rep, rx395_pos, $I10, $P10) = rx395_cur."!mark_fail"(0)
+    lt rx395_pos, -1, rx395_done
+    eq rx395_pos, -1, rx395_fail
     jump $I10
-  rx392_done:
-    rx392_cur."!cursor_fail"()
-    rx392_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
-    .return (rx392_cur)
+  rx395_done:
+    rx395_cur."!cursor_fail"()
+    rx395_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
+    .return (rx395_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1272816833.94956") :method
 .annotate "line", 4
-    new $P394, "ResizablePMCArray"
-    push $P394, "until"
-    .return ($P394)
+    new $P397, "ResizablePMCArray"
+    push $P397, "until"
+    .return ($P397)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("95_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<fatarrow>"  :subid("95_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx400_tgt
-    .local int rx400_pos
-    .local int rx400_off
-    .local int rx400_eos
-    .local int rx400_rep
-    .local pmc rx400_cur
-    (rx400_cur, rx400_pos, rx400_tgt) = self."!cursor_start"()
-    rx400_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
-    .lex unicode:"$\x{a2}", rx400_cur
+    .local string rx403_tgt
+    .local int rx403_pos
+    .local int rx403_off
+    .local int rx403_eos
+    .local int rx403_rep
+    .local pmc rx403_cur
+    (rx403_cur, rx403_pos, rx403_tgt) = self."!cursor_start"()
+    rx403_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
+    .lex unicode:"$\x{a2}", rx403_cur
     .local pmc match
     .lex "$/", match
-    length rx400_eos, rx400_tgt
-    set rx400_off, 0
-    lt rx400_pos, 2, rx400_start
-    sub rx400_off, rx400_pos, 1
-    substr rx400_tgt, rx400_tgt, rx400_off
-  rx400_start:
+    length rx403_eos, rx403_tgt
+    set rx403_off, 0
+    lt rx403_pos, 2, rx403_start
+    sub rx403_off, rx403_pos, 1
+    substr rx403_tgt, rx403_tgt, rx403_off
+  rx403_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan404_done
-    goto rxscan404_scan
-  rxscan404_loop:
-    ($P10) = rx400_cur."from"()
+    ne $I10, -1, rxscan407_done
+    goto rxscan407_scan
+  rxscan407_loop:
+    ($P10) = rx403_cur."from"()
     inc $P10
-    set rx400_pos, $P10
-    ge rx400_pos, rx400_eos, rxscan404_done
-  rxscan404_scan:
-    set_addr $I10, rxscan404_loop
-    rx400_cur."!mark_push"(0, rx400_pos, $I10)
-  rxscan404_done:
-.annotate "line", 216
+    set rx403_pos, $P10
+    ge rx403_pos, rx403_eos, rxscan407_done
+  rxscan407_scan:
+    set_addr $I10, rxscan407_loop
+    rx403_cur."!mark_push"(0, rx403_pos, $I10)
+  rxscan407_done:
+.annotate "line", 220
   # rx subrule "fatarrow" subtype=capture negate=
-    rx400_cur."!cursor_pos"(rx400_pos)
-    $P10 = rx400_cur."fatarrow"()
-    unless $P10, rx400_fail
-    rx400_cur."!mark_push"(0, -1, 0, $P10)
+    rx403_cur."!cursor_pos"(rx403_pos)
+    $P10 = rx403_cur."fatarrow"()
+    unless $P10, rx403_fail
+    rx403_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("fatarrow")
-    rx400_pos = $P10."pos"()
+    rx403_pos = $P10."pos"()
   # rx pass
-    rx400_cur."!cursor_pass"(rx400_pos, "term:sym<fatarrow>")
-    rx400_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx400_pos)
-    .return (rx400_cur)
-  rx400_fail:
+    rx403_cur."!cursor_pass"(rx403_pos, "term:sym<fatarrow>")
+    rx403_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx403_pos)
+    .return (rx403_cur)
+  rx403_fail:
 .annotate "line", 4
-    (rx400_rep, rx400_pos, $I10, $P10) = rx400_cur."!mark_fail"(0)
-    lt rx400_pos, -1, rx400_done
-    eq rx400_pos, -1, rx400_fail
+    (rx403_rep, rx403_pos, $I10, $P10) = rx403_cur."!mark_fail"(0)
+    lt rx403_pos, -1, rx403_done
+    eq rx403_pos, -1, rx403_fail
     jump $I10
-  rx400_done:
-    rx400_cur."!cursor_fail"()
-    rx400_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
-    .return (rx400_cur)
+  rx403_done:
+    rx403_cur."!cursor_fail"()
+    rx403_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
+    .return (rx403_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1267204702.05125") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1272816833.94956") :method
 .annotate "line", 4
-    $P402 = self."!PREFIX__!subrule"("fatarrow", "")
-    new $P403, "ResizablePMCArray"
-    push $P403, $P402
-    .return ($P403)
+    $P405 = self."!PREFIX__!subrule"("fatarrow", "")
+    new $P406, "ResizablePMCArray"
+    push $P406, $P405
+    .return ($P406)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("97_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<colonpair>"  :subid("97_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx406_tgt
-    .local int rx406_pos
-    .local int rx406_off
-    .local int rx406_eos
-    .local int rx406_rep
-    .local pmc rx406_cur
-    (rx406_cur, rx406_pos, rx406_tgt) = self."!cursor_start"()
-    rx406_cur."!cursor_debug"("START ", "term:sym<colonpair>")
-    .lex unicode:"$\x{a2}", rx406_cur
+    .local string rx409_tgt
+    .local int rx409_pos
+    .local int rx409_off
+    .local int rx409_eos
+    .local int rx409_rep
+    .local pmc rx409_cur
+    (rx409_cur, rx409_pos, rx409_tgt) = self."!cursor_start"()
+    rx409_cur."!cursor_debug"("START ", "term:sym<colonpair>")
+    .lex unicode:"$\x{a2}", rx409_cur
     .local pmc match
     .lex "$/", match
-    length rx406_eos, rx406_tgt
-    set rx406_off, 0
-    lt rx406_pos, 2, rx406_start
-    sub rx406_off, rx406_pos, 1
-    substr rx406_tgt, rx406_tgt, rx406_off
-  rx406_start:
+    length rx409_eos, rx409_tgt
+    set rx409_off, 0
+    lt rx409_pos, 2, rx409_start
+    sub rx409_off, rx409_pos, 1
+    substr rx409_tgt, rx409_tgt, rx409_off
+  rx409_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan410_done
-    goto rxscan410_scan
-  rxscan410_loop:
-    ($P10) = rx406_cur."from"()
+    ne $I10, -1, rxscan413_done
+    goto rxscan413_scan
+  rxscan413_loop:
+    ($P10) = rx409_cur."from"()
     inc $P10
-    set rx406_pos, $P10
-    ge rx406_pos, rx406_eos, rxscan410_done
-  rxscan410_scan:
-    set_addr $I10, rxscan410_loop
-    rx406_cur."!mark_push"(0, rx406_pos, $I10)
-  rxscan410_done:
-.annotate "line", 217
+    set rx409_pos, $P10
+    ge rx409_pos, rx409_eos, rxscan413_done
+  rxscan413_scan:
+    set_addr $I10, rxscan413_loop
+    rx409_cur."!mark_push"(0, rx409_pos, $I10)
+  rxscan413_done:
+.annotate "line", 221
   # rx subrule "colonpair" subtype=capture negate=
-    rx406_cur."!cursor_pos"(rx406_pos)
-    $P10 = rx406_cur."colonpair"()
-    unless $P10, rx406_fail
-    rx406_cur."!mark_push"(0, -1, 0, $P10)
+    rx409_cur."!cursor_pos"(rx409_pos)
+    $P10 = rx409_cur."colonpair"()
+    unless $P10, rx409_fail
+    rx409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("colonpair")
-    rx406_pos = $P10."pos"()
+    rx409_pos = $P10."pos"()
   # rx pass
-    rx406_cur."!cursor_pass"(rx406_pos, "term:sym<colonpair>")
-    rx406_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx406_pos)
-    .return (rx406_cur)
-  rx406_fail:
+    rx409_cur."!cursor_pass"(rx409_pos, "term:sym<colonpair>")
+    rx409_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx409_pos)
+    .return (rx409_cur)
+  rx409_fail:
 .annotate "line", 4
-    (rx406_rep, rx406_pos, $I10, $P10) = rx406_cur."!mark_fail"(0)
-    lt rx406_pos, -1, rx406_done
-    eq rx406_pos, -1, rx406_fail
+    (rx409_rep, rx409_pos, $I10, $P10) = rx409_cur."!mark_fail"(0)
+    lt rx409_pos, -1, rx409_done
+    eq rx409_pos, -1, rx409_fail
     jump $I10
-  rx406_done:
-    rx406_cur."!cursor_fail"()
-    rx406_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
-    .return (rx406_cur)
+  rx409_done:
+    rx409_cur."!cursor_fail"()
+    rx409_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
+    .return (rx409_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1267204702.05125") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1272816833.94956") :method
 .annotate "line", 4
-    $P408 = self."!PREFIX__!subrule"("colonpair", "")
-    new $P409, "ResizablePMCArray"
-    push $P409, $P408
-    .return ($P409)
+    $P411 = self."!PREFIX__!subrule"("colonpair", "")
+    new $P412, "ResizablePMCArray"
+    push $P412, $P411
+    .return ($P412)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("99_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<variable>"  :subid("99_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx412_tgt
-    .local int rx412_pos
-    .local int rx412_off
-    .local int rx412_eos
-    .local int rx412_rep
-    .local pmc rx412_cur
-    (rx412_cur, rx412_pos, rx412_tgt) = self."!cursor_start"()
-    rx412_cur."!cursor_debug"("START ", "term:sym<variable>")
-    .lex unicode:"$\x{a2}", rx412_cur
+    .local string rx415_tgt
+    .local int rx415_pos
+    .local int rx415_off
+    .local int rx415_eos
+    .local int rx415_rep
+    .local pmc rx415_cur
+    (rx415_cur, rx415_pos, rx415_tgt) = self."!cursor_start"()
+    rx415_cur."!cursor_debug"("START ", "term:sym<variable>")
+    .lex unicode:"$\x{a2}", rx415_cur
     .local pmc match
     .lex "$/", match
-    length rx412_eos, rx412_tgt
-    set rx412_off, 0
-    lt rx412_pos, 2, rx412_start
-    sub rx412_off, rx412_pos, 1
-    substr rx412_tgt, rx412_tgt, rx412_off
-  rx412_start:
+    length rx415_eos, rx415_tgt
+    set rx415_off, 0
+    lt rx415_pos, 2, rx415_start
+    sub rx415_off, rx415_pos, 1
+    substr rx415_tgt, rx415_tgt, rx415_off
+  rx415_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan416_done
-    goto rxscan416_scan
-  rxscan416_loop:
-    ($P10) = rx412_cur."from"()
+    ne $I10, -1, rxscan419_done
+    goto rxscan419_scan
+  rxscan419_loop:
+    ($P10) = rx415_cur."from"()
     inc $P10
-    set rx412_pos, $P10
-    ge rx412_pos, rx412_eos, rxscan416_done
-  rxscan416_scan:
-    set_addr $I10, rxscan416_loop
-    rx412_cur."!mark_push"(0, rx412_pos, $I10)
-  rxscan416_done:
-.annotate "line", 218
+    set rx415_pos, $P10
+    ge rx415_pos, rx415_eos, rxscan419_done
+  rxscan419_scan:
+    set_addr $I10, rxscan419_loop
+    rx415_cur."!mark_push"(0, rx415_pos, $I10)
+  rxscan419_done:
+.annotate "line", 222
   # rx subrule "variable" subtype=capture negate=
-    rx412_cur."!cursor_pos"(rx412_pos)
-    $P10 = rx412_cur."variable"()
-    unless $P10, rx412_fail
-    rx412_cur."!mark_push"(0, -1, 0, $P10)
+    rx415_cur."!cursor_pos"(rx415_pos)
+    $P10 = rx415_cur."variable"()
+    unless $P10, rx415_fail
+    rx415_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx412_pos = $P10."pos"()
+    rx415_pos = $P10."pos"()
   # rx pass
-    rx412_cur."!cursor_pass"(rx412_pos, "term:sym<variable>")
-    rx412_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx412_pos)
-    .return (rx412_cur)
-  rx412_fail:
+    rx415_cur."!cursor_pass"(rx415_pos, "term:sym<variable>")
+    rx415_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx415_pos)
+    .return (rx415_cur)
+  rx415_fail:
 .annotate "line", 4
-    (rx412_rep, rx412_pos, $I10, $P10) = rx412_cur."!mark_fail"(0)
-    lt rx412_pos, -1, rx412_done
-    eq rx412_pos, -1, rx412_fail
+    (rx415_rep, rx415_pos, $I10, $P10) = rx415_cur."!mark_fail"(0)
+    lt rx415_pos, -1, rx415_done
+    eq rx415_pos, -1, rx415_fail
     jump $I10
-  rx412_done:
-    rx412_cur."!cursor_fail"()
-    rx412_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
-    .return (rx412_cur)
+  rx415_done:
+    rx415_cur."!cursor_fail"()
+    rx415_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
+    .return (rx415_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("100_1267204702.05125") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("100_1272816833.94956") :method
 .annotate "line", 4
-    $P414 = self."!PREFIX__!subrule"("variable", "")
-    new $P415, "ResizablePMCArray"
-    push $P415, $P414
-    .return ($P415)
+    $P417 = self."!PREFIX__!subrule"("variable", "")
+    new $P418, "ResizablePMCArray"
+    push $P418, $P417
+    .return ($P418)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("101_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<package_declarator>"  :subid("101_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx418_tgt
-    .local int rx418_pos
-    .local int rx418_off
-    .local int rx418_eos
-    .local int rx418_rep
-    .local pmc rx418_cur
-    (rx418_cur, rx418_pos, rx418_tgt) = self."!cursor_start"()
-    rx418_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
-    .lex unicode:"$\x{a2}", rx418_cur
+    .local string rx421_tgt
+    .local int rx421_pos
+    .local int rx421_off
+    .local int rx421_eos
+    .local int rx421_rep
+    .local pmc rx421_cur
+    (rx421_cur, rx421_pos, rx421_tgt) = self."!cursor_start"()
+    rx421_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
+    .lex unicode:"$\x{a2}", rx421_cur
     .local pmc match
     .lex "$/", match
-    length rx418_eos, rx418_tgt
-    set rx418_off, 0
-    lt rx418_pos, 2, rx418_start
-    sub rx418_off, rx418_pos, 1
-    substr rx418_tgt, rx418_tgt, rx418_off
-  rx418_start:
+    length rx421_eos, rx421_tgt
+    set rx421_off, 0
+    lt rx421_pos, 2, rx421_start
+    sub rx421_off, rx421_pos, 1
+    substr rx421_tgt, rx421_tgt, rx421_off
+  rx421_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan422_done
-    goto rxscan422_scan
-  rxscan422_loop:
-    ($P10) = rx418_cur."from"()
+    ne $I10, -1, rxscan425_done
+    goto rxscan425_scan
+  rxscan425_loop:
+    ($P10) = rx421_cur."from"()
     inc $P10
-    set rx418_pos, $P10
-    ge rx418_pos, rx418_eos, rxscan422_done
-  rxscan422_scan:
-    set_addr $I10, rxscan422_loop
-    rx418_cur."!mark_push"(0, rx418_pos, $I10)
-  rxscan422_done:
-.annotate "line", 219
+    set rx421_pos, $P10
+    ge rx421_pos, rx421_eos, rxscan425_done
+  rxscan425_scan:
+    set_addr $I10, rxscan425_loop
+    rx421_cur."!mark_push"(0, rx421_pos, $I10)
+  rxscan425_done:
+.annotate "line", 223
   # rx subrule "package_declarator" subtype=capture negate=
-    rx418_cur."!cursor_pos"(rx418_pos)
-    $P10 = rx418_cur."package_declarator"()
-    unless $P10, rx418_fail
-    rx418_cur."!mark_push"(0, -1, 0, $P10)
+    rx421_cur."!cursor_pos"(rx421_pos)
+    $P10 = rx421_cur."package_declarator"()
+    unless $P10, rx421_fail
+    rx421_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_declarator")
-    rx418_pos = $P10."pos"()
+    rx421_pos = $P10."pos"()
   # rx pass
-    rx418_cur."!cursor_pass"(rx418_pos, "term:sym<package_declarator>")
-    rx418_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx418_pos)
-    .return (rx418_cur)
-  rx418_fail:
+    rx421_cur."!cursor_pass"(rx421_pos, "term:sym<package_declarator>")
+    rx421_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx421_pos)
+    .return (rx421_cur)
+  rx421_fail:
 .annotate "line", 4
-    (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
-    lt rx418_pos, -1, rx418_done
-    eq rx418_pos, -1, rx418_fail
+    (rx421_rep, rx421_pos, $I10, $P10) = rx421_cur."!mark_fail"(0)
+    lt rx421_pos, -1, rx421_done
+    eq rx421_pos, -1, rx421_fail
     jump $I10
-  rx418_done:
-    rx418_cur."!cursor_fail"()
-    rx418_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
-    .return (rx418_cur)
+  rx421_done:
+    rx421_cur."!cursor_fail"()
+    rx421_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
+    .return (rx421_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1267204702.05125") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1272816833.94956") :method
 .annotate "line", 4
-    $P420 = self."!PREFIX__!subrule"("package_declarator", "")
-    new $P421, "ResizablePMCArray"
-    push $P421, $P420
-    .return ($P421)
+    $P423 = self."!PREFIX__!subrule"("package_declarator", "")
+    new $P424, "ResizablePMCArray"
+    push $P424, $P423
+    .return ($P424)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("103_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<scope_declarator>"  :subid("103_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx424_tgt
-    .local int rx424_pos
-    .local int rx424_off
-    .local int rx424_eos
-    .local int rx424_rep
-    .local pmc rx424_cur
-    (rx424_cur, rx424_pos, rx424_tgt) = self."!cursor_start"()
-    rx424_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
-    .lex unicode:"$\x{a2}", rx424_cur
+    .local string rx427_tgt
+    .local int rx427_pos
+    .local int rx427_off
+    .local int rx427_eos
+    .local int rx427_rep
+    .local pmc rx427_cur
+    (rx427_cur, rx427_pos, rx427_tgt) = self."!cursor_start"()
+    rx427_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
+    .lex unicode:"$\x{a2}", rx427_cur
     .local pmc match
     .lex "$/", match
-    length rx424_eos, rx424_tgt
-    set rx424_off, 0
-    lt rx424_pos, 2, rx424_start
-    sub rx424_off, rx424_pos, 1
-    substr rx424_tgt, rx424_tgt, rx424_off
-  rx424_start:
+    length rx427_eos, rx427_tgt
+    set rx427_off, 0
+    lt rx427_pos, 2, rx427_start
+    sub rx427_off, rx427_pos, 1
+    substr rx427_tgt, rx427_tgt, rx427_off
+  rx427_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan428_done
-    goto rxscan428_scan
-  rxscan428_loop:
-    ($P10) = rx424_cur."from"()
+    ne $I10, -1, rxscan431_done
+    goto rxscan431_scan
+  rxscan431_loop:
+    ($P10) = rx427_cur."from"()
     inc $P10
-    set rx424_pos, $P10
-    ge rx424_pos, rx424_eos, rxscan428_done
-  rxscan428_scan:
-    set_addr $I10, rxscan428_loop
-    rx424_cur."!mark_push"(0, rx424_pos, $I10)
-  rxscan428_done:
-.annotate "line", 220
+    set rx427_pos, $P10
+    ge rx427_pos, rx427_eos, rxscan431_done
+  rxscan431_scan:
+    set_addr $I10, rxscan431_loop
+    rx427_cur."!mark_push"(0, rx427_pos, $I10)
+  rxscan431_done:
+.annotate "line", 224
   # rx subrule "scope_declarator" subtype=capture negate=
-    rx424_cur."!cursor_pos"(rx424_pos)
-    $P10 = rx424_cur."scope_declarator"()
-    unless $P10, rx424_fail
-    rx424_cur."!mark_push"(0, -1, 0, $P10)
+    rx427_cur."!cursor_pos"(rx427_pos)
+    $P10 = rx427_cur."scope_declarator"()
+    unless $P10, rx427_fail
+    rx427_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scope_declarator")
-    rx424_pos = $P10."pos"()
+    rx427_pos = $P10."pos"()
   # rx pass
-    rx424_cur."!cursor_pass"(rx424_pos, "term:sym<scope_declarator>")
-    rx424_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx424_pos)
-    .return (rx424_cur)
-  rx424_fail:
+    rx427_cur."!cursor_pass"(rx427_pos, "term:sym<scope_declarator>")
+    rx427_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx427_pos)
+    .return (rx427_cur)
+  rx427_fail:
 .annotate "line", 4
-    (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
-    lt rx424_pos, -1, rx424_done
-    eq rx424_pos, -1, rx424_fail
+    (rx427_rep, rx427_pos, $I10, $P10) = rx427_cur."!mark_fail"(0)
+    lt rx427_pos, -1, rx427_done
+    eq rx427_pos, -1, rx427_fail
     jump $I10
-  rx424_done:
-    rx424_cur."!cursor_fail"()
-    rx424_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
-    .return (rx424_cur)
+  rx427_done:
+    rx427_cur."!cursor_fail"()
+    rx427_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
+    .return (rx427_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1267204702.05125") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1272816833.94956") :method
 .annotate "line", 4
-    $P426 = self."!PREFIX__!subrule"("scope_declarator", "")
-    new $P427, "ResizablePMCArray"
-    push $P427, $P426
-    .return ($P427)
+    $P429 = self."!PREFIX__!subrule"("scope_declarator", "")
+    new $P430, "ResizablePMCArray"
+    push $P430, $P429
+    .return ($P430)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("105_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<routine_declarator>"  :subid("105_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx430_tgt
-    .local int rx430_pos
-    .local int rx430_off
-    .local int rx430_eos
-    .local int rx430_rep
-    .local pmc rx430_cur
-    (rx430_cur, rx430_pos, rx430_tgt) = self."!cursor_start"()
-    rx430_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
-    .lex unicode:"$\x{a2}", rx430_cur
+    .local string rx433_tgt
+    .local int rx433_pos
+    .local int rx433_off
+    .local int rx433_eos
+    .local int rx433_rep
+    .local pmc rx433_cur
+    (rx433_cur, rx433_pos, rx433_tgt) = self."!cursor_start"()
+    rx433_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
+    .lex unicode:"$\x{a2}", rx433_cur
     .local pmc match
     .lex "$/", match
-    length rx430_eos, rx430_tgt
-    set rx430_off, 0
-    lt rx430_pos, 2, rx430_start
-    sub rx430_off, rx430_pos, 1
-    substr rx430_tgt, rx430_tgt, rx430_off
-  rx430_start:
+    length rx433_eos, rx433_tgt
+    set rx433_off, 0
+    lt rx433_pos, 2, rx433_start
+    sub rx433_off, rx433_pos, 1
+    substr rx433_tgt, rx433_tgt, rx433_off
+  rx433_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan434_done
-    goto rxscan434_scan
-  rxscan434_loop:
-    ($P10) = rx430_cur."from"()
+    ne $I10, -1, rxscan437_done
+    goto rxscan437_scan
+  rxscan437_loop:
+    ($P10) = rx433_cur."from"()
     inc $P10
-    set rx430_pos, $P10
-    ge rx430_pos, rx430_eos, rxscan434_done
-  rxscan434_scan:
-    set_addr $I10, rxscan434_loop
-    rx430_cur."!mark_push"(0, rx430_pos, $I10)
-  rxscan434_done:
-.annotate "line", 221
+    set rx433_pos, $P10
+    ge rx433_pos, rx433_eos, rxscan437_done
+  rxscan437_scan:
+    set_addr $I10, rxscan437_loop
+    rx433_cur."!mark_push"(0, rx433_pos, $I10)
+  rxscan437_done:
+.annotate "line", 225
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx430_cur."!cursor_pos"(rx430_pos)
-    $P10 = rx430_cur."routine_declarator"()
-    unless $P10, rx430_fail
-    rx430_cur."!mark_push"(0, -1, 0, $P10)
+    rx433_cur."!cursor_pos"(rx433_pos)
+    $P10 = rx433_cur."routine_declarator"()
+    unless $P10, rx433_fail
+    rx433_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx430_pos = $P10."pos"()
+    rx433_pos = $P10."pos"()
   # rx pass
-    rx430_cur."!cursor_pass"(rx430_pos, "term:sym<routine_declarator>")
-    rx430_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx430_pos)
-    .return (rx430_cur)
-  rx430_fail:
+    rx433_cur."!cursor_pass"(rx433_pos, "term:sym<routine_declarator>")
+    rx433_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx433_pos)
+    .return (rx433_cur)
+  rx433_fail:
 .annotate "line", 4
-    (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
-    lt rx430_pos, -1, rx430_done
-    eq rx430_pos, -1, rx430_fail
+    (rx433_rep, rx433_pos, $I10, $P10) = rx433_cur."!mark_fail"(0)
+    lt rx433_pos, -1, rx433_done
+    eq rx433_pos, -1, rx433_fail
     jump $I10
-  rx430_done:
-    rx430_cur."!cursor_fail"()
-    rx430_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
-    .return (rx430_cur)
+  rx433_done:
+    rx433_cur."!cursor_fail"()
+    rx433_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
+    .return (rx433_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1267204702.05125") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1272816833.94956") :method
 .annotate "line", 4
-    $P432 = self."!PREFIX__!subrule"("routine_declarator", "")
-    new $P433, "ResizablePMCArray"
-    push $P433, $P432
-    .return ($P433)
+    $P435 = self."!PREFIX__!subrule"("routine_declarator", "")
+    new $P436, "ResizablePMCArray"
+    push $P436, $P435
+    .return ($P436)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("107_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<regex_declarator>"  :subid("107_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx436_tgt
-    .local int rx436_pos
-    .local int rx436_off
-    .local int rx436_eos
-    .local int rx436_rep
-    .local pmc rx436_cur
-    (rx436_cur, rx436_pos, rx436_tgt) = self."!cursor_start"()
-    rx436_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
-    .lex unicode:"$\x{a2}", rx436_cur
+    .local string rx439_tgt
+    .local int rx439_pos
+    .local int rx439_off
+    .local int rx439_eos
+    .local int rx439_rep
+    .local pmc rx439_cur
+    (rx439_cur, rx439_pos, rx439_tgt) = self."!cursor_start"()
+    rx439_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
+    .lex unicode:"$\x{a2}", rx439_cur
     .local pmc match
     .lex "$/", match
-    length rx436_eos, rx436_tgt
-    set rx436_off, 0
-    lt rx436_pos, 2, rx436_start
-    sub rx436_off, rx436_pos, 1
-    substr rx436_tgt, rx436_tgt, rx436_off
-  rx436_start:
+    length rx439_eos, rx439_tgt
+    set rx439_off, 0
+    lt rx439_pos, 2, rx439_start
+    sub rx439_off, rx439_pos, 1
+    substr rx439_tgt, rx439_tgt, rx439_off
+  rx439_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan440_done
-    goto rxscan440_scan
-  rxscan440_loop:
-    ($P10) = rx436_cur."from"()
+    ne $I10, -1, rxscan443_done
+    goto rxscan443_scan
+  rxscan443_loop:
+    ($P10) = rx439_cur."from"()
     inc $P10
-    set rx436_pos, $P10
-    ge rx436_pos, rx436_eos, rxscan440_done
-  rxscan440_scan:
-    set_addr $I10, rxscan440_loop
-    rx436_cur."!mark_push"(0, rx436_pos, $I10)
-  rxscan440_done:
-.annotate "line", 222
+    set rx439_pos, $P10
+    ge rx439_pos, rx439_eos, rxscan443_done
+  rxscan443_scan:
+    set_addr $I10, rxscan443_loop
+    rx439_cur."!mark_push"(0, rx439_pos, $I10)
+  rxscan443_done:
+.annotate "line", 226
   # rx subrule "regex_declarator" subtype=capture negate=
-    rx436_cur."!cursor_pos"(rx436_pos)
-    $P10 = rx436_cur."regex_declarator"()
-    unless $P10, rx436_fail
-    rx436_cur."!mark_push"(0, -1, 0, $P10)
+    rx439_cur."!cursor_pos"(rx439_pos)
+    $P10 = rx439_cur."regex_declarator"()
+    unless $P10, rx439_fail
+    rx439_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("regex_declarator")
-    rx436_pos = $P10."pos"()
+    rx439_pos = $P10."pos"()
   # rx pass
-    rx436_cur."!cursor_pass"(rx436_pos, "term:sym<regex_declarator>")
-    rx436_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx436_pos)
-    .return (rx436_cur)
-  rx436_fail:
+    rx439_cur."!cursor_pass"(rx439_pos, "term:sym<regex_declarator>")
+    rx439_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx439_pos)
+    .return (rx439_cur)
+  rx439_fail:
 .annotate "line", 4
-    (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
-    lt rx436_pos, -1, rx436_done
-    eq rx436_pos, -1, rx436_fail
+    (rx439_rep, rx439_pos, $I10, $P10) = rx439_cur."!mark_fail"(0)
+    lt rx439_pos, -1, rx439_done
+    eq rx439_pos, -1, rx439_fail
     jump $I10
-  rx436_done:
-    rx436_cur."!cursor_fail"()
-    rx436_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
-    .return (rx436_cur)
+  rx439_done:
+    rx439_cur."!cursor_fail"()
+    rx439_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
+    .return (rx439_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1267204702.05125") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1272816833.94956") :method
 .annotate "line", 4
-    $P438 = self."!PREFIX__!subrule"("regex_declarator", "")
-    new $P439, "ResizablePMCArray"
-    push $P439, $P438
-    .return ($P439)
+    $P441 = self."!PREFIX__!subrule"("regex_declarator", "")
+    new $P442, "ResizablePMCArray"
+    push $P442, $P441
+    .return ($P442)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("109_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<statement_prefix>"  :subid("109_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx442_tgt
-    .local int rx442_pos
-    .local int rx442_off
-    .local int rx442_eos
-    .local int rx442_rep
-    .local pmc rx442_cur
-    (rx442_cur, rx442_pos, rx442_tgt) = self."!cursor_start"()
-    rx442_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
-    .lex unicode:"$\x{a2}", rx442_cur
+    .local string rx445_tgt
+    .local int rx445_pos
+    .local int rx445_off
+    .local int rx445_eos
+    .local int rx445_rep
+    .local pmc rx445_cur
+    (rx445_cur, rx445_pos, rx445_tgt) = self."!cursor_start"()
+    rx445_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
+    .lex unicode:"$\x{a2}", rx445_cur
     .local pmc match
     .lex "$/", match
-    length rx442_eos, rx442_tgt
-    set rx442_off, 0
-    lt rx442_pos, 2, rx442_start
-    sub rx442_off, rx442_pos, 1
-    substr rx442_tgt, rx442_tgt, rx442_off
-  rx442_start:
+    length rx445_eos, rx445_tgt
+    set rx445_off, 0
+    lt rx445_pos, 2, rx445_start
+    sub rx445_off, rx445_pos, 1
+    substr rx445_tgt, rx445_tgt, rx445_off
+  rx445_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan446_done
-    goto rxscan446_scan
-  rxscan446_loop:
-    ($P10) = rx442_cur."from"()
+    ne $I10, -1, rxscan449_done
+    goto rxscan449_scan
+  rxscan449_loop:
+    ($P10) = rx445_cur."from"()
     inc $P10
-    set rx442_pos, $P10
-    ge rx442_pos, rx442_eos, rxscan446_done
-  rxscan446_scan:
-    set_addr $I10, rxscan446_loop
-    rx442_cur."!mark_push"(0, rx442_pos, $I10)
-  rxscan446_done:
-.annotate "line", 223
+    set rx445_pos, $P10
+    ge rx445_pos, rx445_eos, rxscan449_done
+  rxscan449_scan:
+    set_addr $I10, rxscan449_loop
+    rx445_cur."!mark_push"(0, rx445_pos, $I10)
+  rxscan449_done:
+.annotate "line", 227
   # rx subrule "statement_prefix" subtype=capture negate=
-    rx442_cur."!cursor_pos"(rx442_pos)
-    $P10 = rx442_cur."statement_prefix"()
-    unless $P10, rx442_fail
-    rx442_cur."!mark_push"(0, -1, 0, $P10)
+    rx445_cur."!cursor_pos"(rx445_pos)
+    $P10 = rx445_cur."statement_prefix"()
+    unless $P10, rx445_fail
+    rx445_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_prefix")
-    rx442_pos = $P10."pos"()
+    rx445_pos = $P10."pos"()
   # rx pass
-    rx442_cur."!cursor_pass"(rx442_pos, "term:sym<statement_prefix>")
-    rx442_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx442_pos)
-    .return (rx442_cur)
-  rx442_fail:
+    rx445_cur."!cursor_pass"(rx445_pos, "term:sym<statement_prefix>")
+    rx445_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx445_pos)
+    .return (rx445_cur)
+  rx445_fail:
 .annotate "line", 4
-    (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
-    lt rx442_pos, -1, rx442_done
-    eq rx442_pos, -1, rx442_fail
+    (rx445_rep, rx445_pos, $I10, $P10) = rx445_cur."!mark_fail"(0)
+    lt rx445_pos, -1, rx445_done
+    eq rx445_pos, -1, rx445_fail
     jump $I10
-  rx442_done:
-    rx442_cur."!cursor_fail"()
-    rx442_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
-    .return (rx442_cur)
+  rx445_done:
+    rx445_cur."!cursor_fail"()
+    rx445_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
+    .return (rx445_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1267204702.05125") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1272816833.94956") :method
 .annotate "line", 4
-    $P444 = self."!PREFIX__!subrule"("statement_prefix", "")
-    new $P445, "ResizablePMCArray"
-    push $P445, $P444
-    .return ($P445)
+    $P447 = self."!PREFIX__!subrule"("statement_prefix", "")
+    new $P448, "ResizablePMCArray"
+    push $P448, $P447
+    .return ($P448)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("111_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<lambda>"  :subid("111_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx448_tgt
-    .local int rx448_pos
-    .local int rx448_off
-    .local int rx448_eos
-    .local int rx448_rep
-    .local pmc rx448_cur
-    (rx448_cur, rx448_pos, rx448_tgt) = self."!cursor_start"()
-    rx448_cur."!cursor_debug"("START ", "term:sym<lambda>")
-    .lex unicode:"$\x{a2}", rx448_cur
+    .local string rx451_tgt
+    .local int rx451_pos
+    .local int rx451_off
+    .local int rx451_eos
+    .local int rx451_rep
+    .local pmc rx451_cur
+    (rx451_cur, rx451_pos, rx451_tgt) = self."!cursor_start"()
+    rx451_cur."!cursor_debug"("START ", "term:sym<lambda>")
+    .lex unicode:"$\x{a2}", rx451_cur
     .local pmc match
     .lex "$/", match
-    length rx448_eos, rx448_tgt
-    set rx448_off, 0
-    lt rx448_pos, 2, rx448_start
-    sub rx448_off, rx448_pos, 1
-    substr rx448_tgt, rx448_tgt, rx448_off
-  rx448_start:
+    length rx451_eos, rx451_tgt
+    set rx451_off, 0
+    lt rx451_pos, 2, rx451_start
+    sub rx451_off, rx451_pos, 1
+    substr rx451_tgt, rx451_tgt, rx451_off
+  rx451_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan451_done
-    goto rxscan451_scan
-  rxscan451_loop:
-    ($P10) = rx448_cur."from"()
+    ne $I10, -1, rxscan454_done
+    goto rxscan454_scan
+  rxscan454_loop:
+    ($P10) = rx451_cur."from"()
     inc $P10
-    set rx448_pos, $P10
-    ge rx448_pos, rx448_eos, rxscan451_done
-  rxscan451_scan:
-    set_addr $I10, rxscan451_loop
-    rx448_cur."!mark_push"(0, rx448_pos, $I10)
-  rxscan451_done:
-.annotate "line", 224
+    set rx451_pos, $P10
+    ge rx451_pos, rx451_eos, rxscan454_done
+  rxscan454_scan:
+    set_addr $I10, rxscan454_loop
+    rx451_cur."!mark_push"(0, rx451_pos, $I10)
+  rxscan454_done:
+.annotate "line", 228
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx448_cur."!cursor_pos"(rx448_pos)
-    $P10 = rx448_cur."lambda"()
-    unless $P10, rx448_fail
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."lambda"()
+    unless $P10, rx451_fail
   # rx subrule "pblock" subtype=capture negate=
-    rx448_cur."!cursor_pos"(rx448_pos)
-    $P10 = rx448_cur."pblock"()
-    unless $P10, rx448_fail
-    rx448_cur."!mark_push"(0, -1, 0, $P10)
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."pblock"()
+    unless $P10, rx451_fail
+    rx451_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx448_pos = $P10."pos"()
+    rx451_pos = $P10."pos"()
   # rx pass
-    rx448_cur."!cursor_pass"(rx448_pos, "term:sym<lambda>")
-    rx448_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx448_pos)
-    .return (rx448_cur)
-  rx448_fail:
+    rx451_cur."!cursor_pass"(rx451_pos, "term:sym<lambda>")
+    rx451_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx451_pos)
+    .return (rx451_cur)
+  rx451_fail:
 .annotate "line", 4
-    (rx448_rep, rx448_pos, $I10, $P10) = rx448_cur."!mark_fail"(0)
-    lt rx448_pos, -1, rx448_done
-    eq rx448_pos, -1, rx448_fail
+    (rx451_rep, rx451_pos, $I10, $P10) = rx451_cur."!mark_fail"(0)
+    lt rx451_pos, -1, rx451_done
+    eq rx451_pos, -1, rx451_fail
     jump $I10
-  rx448_done:
-    rx448_cur."!cursor_fail"()
-    rx448_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
-    .return (rx448_cur)
+  rx451_done:
+    rx451_cur."!cursor_fail"()
+    rx451_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
+    .return (rx451_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("112_1267204702.05125") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("112_1272816833.94956") :method
 .annotate "line", 4
-    new $P450, "ResizablePMCArray"
-    push $P450, ""
-    .return ($P450)
+    new $P453, "ResizablePMCArray"
+    push $P453, ""
+    .return ($P453)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("113_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "fatarrow"  :subid("113_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx453_tgt
-    .local int rx453_pos
-    .local int rx453_off
-    .local int rx453_eos
-    .local int rx453_rep
-    .local pmc rx453_cur
-    (rx453_cur, rx453_pos, rx453_tgt) = self."!cursor_start"()
-    rx453_cur."!cursor_debug"("START ", "fatarrow")
-    .lex unicode:"$\x{a2}", rx453_cur
+    .local string rx456_tgt
+    .local int rx456_pos
+    .local int rx456_off
+    .local int rx456_eos
+    .local int rx456_rep
+    .local pmc rx456_cur
+    (rx456_cur, rx456_pos, rx456_tgt) = self."!cursor_start"()
+    rx456_cur."!cursor_debug"("START ", "fatarrow")
+    .lex unicode:"$\x{a2}", rx456_cur
     .local pmc match
     .lex "$/", match
-    length rx453_eos, rx453_tgt
-    set rx453_off, 0
-    lt rx453_pos, 2, rx453_start
-    sub rx453_off, rx453_pos, 1
-    substr rx453_tgt, rx453_tgt, rx453_off
-  rx453_start:
+    length rx456_eos, rx456_tgt
+    set rx456_off, 0
+    lt rx456_pos, 2, rx456_start
+    sub rx456_off, rx456_pos, 1
+    substr rx456_tgt, rx456_tgt, rx456_off
+  rx456_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan457_done
-    goto rxscan457_scan
-  rxscan457_loop:
-    ($P10) = rx453_cur."from"()
+    ne $I10, -1, rxscan460_done
+    goto rxscan460_scan
+  rxscan460_loop:
+    ($P10) = rx456_cur."from"()
     inc $P10
-    set rx453_pos, $P10
-    ge rx453_pos, rx453_eos, rxscan457_done
-  rxscan457_scan:
-    set_addr $I10, rxscan457_loop
-    rx453_cur."!mark_push"(0, rx453_pos, $I10)
-  rxscan457_done:
-.annotate "line", 227
+    set rx456_pos, $P10
+    ge rx456_pos, rx456_eos, rxscan460_done
+  rxscan460_scan:
+    set_addr $I10, rxscan460_loop
+    rx456_cur."!mark_push"(0, rx456_pos, $I10)
+  rxscan460_done:
+.annotate "line", 231
   # rx subrule "identifier" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."identifier"()
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."identifier"()
+    unless $P10, rx456_fail
+    rx456_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
-    rx453_pos = $P10."pos"()
-  # rx rxquantr458 ** 0..*
-    set_addr $I459, rxquantr458_done
-    rx453_cur."!mark_push"(0, rx453_pos, $I459)
-  rxquantr458_loop:
+    rx456_pos = $P10."pos"()
+  # rx rxquantr461 ** 0..*
+    set_addr $I462, rxquantr461_done
+    rx456_cur."!mark_push"(0, rx456_pos, $I462)
+  rxquantr461_loop:
   # rx enumcharlist negate=0 
-    ge rx453_pos, rx453_eos, rx453_fail
-    sub $I10, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I10, 1
+    ge rx456_pos, rx456_eos, rx456_fail
+    sub $I10, rx456_pos, rx456_off
+    substr $S10, rx456_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx453_fail
-    inc rx453_pos
-    (rx453_rep) = rx453_cur."!mark_commit"($I459)
-    rx453_cur."!mark_push"(rx453_rep, rx453_pos, $I459)
-    goto rxquantr458_loop
-  rxquantr458_done:
+    lt $I11, 0, rx456_fail
+    inc rx456_pos
+    (rx456_rep) = rx456_cur."!mark_commit"($I462)
+    rx456_cur."!mark_push"(rx456_rep, rx456_pos, $I462)
+    goto rxquantr461_loop
+  rxquantr461_done:
   # rx literal  "=>"
-    add $I11, rx453_pos, 2
-    gt $I11, rx453_eos, rx453_fail
-    sub $I11, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I11, 2
-    ne $S10, "=>", rx453_fail
-    add rx453_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."ws"()
-    unless $P10, rx453_fail
-    rx453_pos = $P10."pos"()
+    add $I11, rx456_pos, 2
+    gt $I11, rx456_eos, rx456_fail
+    sub $I11, rx456_pos, rx456_off
+    substr $S10, rx456_tgt, $I11, 2
+    ne $S10, "=>", rx456_fail
+    add rx456_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."ws"()
+    unless $P10, rx456_fail
+    rx456_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."EXPR"("i=")
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."EXPR"("i=")
+    unless $P10, rx456_fail
+    rx456_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("val")
-    rx453_pos = $P10."pos"()
-.annotate "line", 226
+    rx456_pos = $P10."pos"()
+.annotate "line", 230
   # rx pass
-    rx453_cur."!cursor_pass"(rx453_pos, "fatarrow")
-    rx453_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx453_pos)
-    .return (rx453_cur)
-  rx453_fail:
+    rx456_cur."!cursor_pass"(rx456_pos, "fatarrow")
+    rx456_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx456_pos)
+    .return (rx456_cur)
+  rx456_fail:
 .annotate "line", 4
-    (rx453_rep, rx453_pos, $I10, $P10) = rx453_cur."!mark_fail"(0)
-    lt rx453_pos, -1, rx453_done
-    eq rx453_pos, -1, rx453_fail
+    (rx456_rep, rx456_pos, $I10, $P10) = rx456_cur."!mark_fail"(0)
+    lt rx456_pos, -1, rx456_done
+    eq rx456_pos, -1, rx456_fail
     jump $I10
-  rx453_done:
-    rx453_cur."!cursor_fail"()
-    rx453_cur."!cursor_debug"("FAIL  ", "fatarrow")
-    .return (rx453_cur)
+  rx456_done:
+    rx456_cur."!cursor_fail"()
+    rx456_cur."!cursor_debug"("FAIL  ", "fatarrow")
+    .return (rx456_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("114_1267204702.05125") :method
+.sub "!PREFIX__fatarrow"  :subid("114_1272816833.94956") :method
 .annotate "line", 4
-    $P455 = self."!PREFIX__!subrule"("key", "")
-    new $P456, "ResizablePMCArray"
-    push $P456, $P455
-    .return ($P456)
+    $P458 = self."!PREFIX__!subrule"("key", "")
+    new $P459, "ResizablePMCArray"
+    push $P459, $P458
+    .return ($P459)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("115_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "colonpair"  :subid("115_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx461_tgt
-    .local int rx461_pos
-    .local int rx461_off
-    .local int rx461_eos
-    .local int rx461_rep
-    .local pmc rx461_cur
-    (rx461_cur, rx461_pos, rx461_tgt) = self."!cursor_start"()
-    rx461_cur."!cursor_debug"("START ", "colonpair")
-    rx461_cur."!cursor_caparray"("circumfix")
-    .lex unicode:"$\x{a2}", rx461_cur
+    .local string rx464_tgt
+    .local int rx464_pos
+    .local int rx464_off
+    .local int rx464_eos
+    .local int rx464_rep
+    .local pmc rx464_cur
+    (rx464_cur, rx464_pos, rx464_tgt) = self."!cursor_start"()
+    rx464_cur."!cursor_debug"("START ", "colonpair")
+    rx464_cur."!cursor_caparray"("circumfix")
+    .lex unicode:"$\x{a2}", rx464_cur
     .local pmc match
     .lex "$/", match
-    length rx461_eos, rx461_tgt
-    set rx461_off, 0
-    lt rx461_pos, 2, rx461_start
-    sub rx461_off, rx461_pos, 1
-    substr rx461_tgt, rx461_tgt, rx461_off
-  rx461_start:
+    length rx464_eos, rx464_tgt
+    set rx464_off, 0
+    lt rx464_pos, 2, rx464_start
+    sub rx464_off, rx464_pos, 1
+    substr rx464_tgt, rx464_tgt, rx464_off
+  rx464_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan467_done
-    goto rxscan467_scan
-  rxscan467_loop:
-    ($P10) = rx461_cur."from"()
+    ne $I10, -1, rxscan470_done
+    goto rxscan470_scan
+  rxscan470_loop:
+    ($P10) = rx464_cur."from"()
     inc $P10
-    set rx461_pos, $P10
-    ge rx461_pos, rx461_eos, rxscan467_done
-  rxscan467_scan:
-    set_addr $I10, rxscan467_loop
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-  rxscan467_done:
-.annotate "line", 231
+    set rx464_pos, $P10
+    ge rx464_pos, rx464_eos, rxscan470_done
+  rxscan470_scan:
+    set_addr $I10, rxscan470_loop
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+  rxscan470_done:
+.annotate "line", 235
   # rx literal  ":"
-    add $I11, rx461_pos, 1
-    gt $I11, rx461_eos, rx461_fail
-    sub $I11, rx461_pos, rx461_off
-    substr $S10, rx461_tgt, $I11, 1
-    ne $S10, ":", rx461_fail
-    add rx461_pos, 1
-  alt468_0:
-.annotate "line", 232
-    set_addr $I10, alt468_1
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 233
+    add $I11, rx464_pos, 1
+    gt $I11, rx464_eos, rx464_fail
+    sub $I11, rx464_pos, rx464_off
+    substr $S10, rx464_tgt, $I11, 1
+    ne $S10, ":", rx464_fail
+    add rx464_pos, 1
+  alt471_0:
+.annotate "line", 236
+    set_addr $I10, alt471_1
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+.annotate "line", 237
   # rx subcapture "not"
-    set_addr $I10, rxcap_469_fail
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
+    set_addr $I10, rxcap_472_fail
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
   # rx literal  "!"
-    add $I11, rx461_pos, 1
-    gt $I11, rx461_eos, rx461_fail
-    sub $I11, rx461_pos, rx461_off
-    substr $S10, rx461_tgt, $I11, 1
-    ne $S10, "!", rx461_fail
-    add rx461_pos, 1
-    set_addr $I10, rxcap_469_fail
-    ($I12, $I11) = rx461_cur."!mark_peek"($I10)
-    rx461_cur."!cursor_pos"($I11)
-    ($P10) = rx461_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx461_pos, "")
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx464_pos, 1
+    gt $I11, rx464_eos, rx464_fail
+    sub $I11, rx464_pos, rx464_off
+    substr $S10, rx464_tgt, $I11, 1
+    ne $S10, "!", rx464_fail
+    add rx464_pos, 1
+    set_addr $I10, rxcap_472_fail
+    ($I12, $I11) = rx464_cur."!mark_peek"($I10)
+    rx464_cur."!cursor_pos"($I11)
+    ($P10) = rx464_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx464_pos, "")
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("not")
-    goto rxcap_469_done
-  rxcap_469_fail:
-    goto rx461_fail
-  rxcap_469_done:
+    goto rxcap_472_done
+  rxcap_472_fail:
+    goto rx464_fail
+  rxcap_472_done:
   # rx subrule "identifier" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."identifier"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."identifier"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx461_pos = $P10."pos"()
-    goto alt468_end
-  alt468_1:
-    set_addr $I10, alt468_2
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 234
+    rx464_pos = $P10."pos"()
+    goto alt471_end
+  alt471_1:
+    set_addr $I10, alt471_2
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+.annotate "line", 238
   # rx subrule "identifier" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."identifier"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."identifier"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx461_pos = $P10."pos"()
-  # rx rxquantr470 ** 0..1
-    set_addr $I471, rxquantr470_done
-    rx461_cur."!mark_push"(0, rx461_pos, $I471)
-  rxquantr470_loop:
+    rx464_pos = $P10."pos"()
+  # rx rxquantr473 ** 0..1
+    set_addr $I474, rxquantr473_done
+    rx464_cur."!mark_push"(0, rx464_pos, $I474)
+  rxquantr473_loop:
   # rx subrule "circumfix" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."circumfix"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."circumfix"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx461_pos = $P10."pos"()
-    (rx461_rep) = rx461_cur."!mark_commit"($I471)
-  rxquantr470_done:
-    goto alt468_end
-  alt468_2:
-.annotate "line", 235
+    rx464_pos = $P10."pos"()
+    (rx464_rep) = rx464_cur."!mark_commit"($I474)
+  rxquantr473_done:
+    goto alt471_end
+  alt471_2:
+.annotate "line", 239
   # rx subrule "circumfix" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."circumfix"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."circumfix"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx461_pos = $P10."pos"()
-  alt468_end:
-.annotate "line", 230
+    rx464_pos = $P10."pos"()
+  alt471_end:
+.annotate "line", 234
   # rx pass
-    rx461_cur."!cursor_pass"(rx461_pos, "colonpair")
-    rx461_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx461_pos)
-    .return (rx461_cur)
-  rx461_fail:
+    rx464_cur."!cursor_pass"(rx464_pos, "colonpair")
+    rx464_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx464_pos)
+    .return (rx464_cur)
+  rx464_fail:
 .annotate "line", 4
-    (rx461_rep, rx461_pos, $I10, $P10) = rx461_cur."!mark_fail"(0)
-    lt rx461_pos, -1, rx461_done
-    eq rx461_pos, -1, rx461_fail
+    (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
+    lt rx464_pos, -1, rx464_done
+    eq rx464_pos, -1, rx464_fail
     jump $I10
-  rx461_done:
-    rx461_cur."!cursor_fail"()
-    rx461_cur."!cursor_debug"("FAIL  ", "colonpair")
-    .return (rx461_cur)
+  rx464_done:
+    rx464_cur."!cursor_fail"()
+    rx464_cur."!cursor_debug"("FAIL  ", "colonpair")
+    .return (rx464_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("116_1267204702.05125") :method
+.sub "!PREFIX__colonpair"  :subid("116_1272816833.94956") :method
 .annotate "line", 4
-    $P463 = self."!PREFIX__!subrule"("circumfix", ":")
-    $P464 = self."!PREFIX__!subrule"("identifier", ":")
-    $P465 = self."!PREFIX__!subrule"("identifier", ":!")
-    new $P466, "ResizablePMCArray"
-    push $P466, $P463
-    push $P466, $P464
-    push $P466, $P465
-    .return ($P466)
+    $P466 = self."!PREFIX__!subrule"("circumfix", ":")
+    $P467 = self."!PREFIX__!subrule"("identifier", ":")
+    $P468 = self."!PREFIX__!subrule"("identifier", ":!")
+    new $P469, "ResizablePMCArray"
+    push $P469, $P466
+    push $P469, $P467
+    push $P469, $P468
+    .return ($P469)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("117_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "variable"  :subid("117_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx473_tgt
-    .local int rx473_pos
-    .local int rx473_off
-    .local int rx473_eos
-    .local int rx473_rep
-    .local pmc rx473_cur
-    (rx473_cur, rx473_pos, rx473_tgt) = self."!cursor_start"()
-    rx473_cur."!cursor_debug"("START ", "variable")
-    rx473_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx473_cur
+    .local string rx476_tgt
+    .local int rx476_pos
+    .local int rx476_off
+    .local int rx476_eos
+    .local int rx476_rep
+    .local pmc rx476_cur
+    (rx476_cur, rx476_pos, rx476_tgt) = self."!cursor_start"()
+    rx476_cur."!cursor_debug"("START ", "variable")
+    rx476_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx476_cur
     .local pmc match
     .lex "$/", match
-    length rx473_eos, rx473_tgt
-    set rx473_off, 0
-    lt rx473_pos, 2, rx473_start
-    sub rx473_off, rx473_pos, 1
-    substr rx473_tgt, rx473_tgt, rx473_off
-  rx473_start:
+    length rx476_eos, rx476_tgt
+    set rx476_off, 0
+    lt rx476_pos, 2, rx476_start
+    sub rx476_off, rx476_pos, 1
+    substr rx476_tgt, rx476_tgt, rx476_off
+  rx476_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan478_done
-    goto rxscan478_scan
-  rxscan478_loop:
-    ($P10) = rx473_cur."from"()
+    ne $I10, -1, rxscan481_done
+    goto rxscan481_scan
+  rxscan481_loop:
+    ($P10) = rx476_cur."from"()
     inc $P10
-    set rx473_pos, $P10
-    ge rx473_pos, rx473_eos, rxscan478_done
-  rxscan478_scan:
-    set_addr $I10, rxscan478_loop
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-  rxscan478_done:
-  alt479_0:
-.annotate "line", 239
-    set_addr $I10, alt479_1
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 240
+    set rx476_pos, $P10
+    ge rx476_pos, rx476_eos, rxscan481_done
+  rxscan481_scan:
+    set_addr $I10, rxscan481_loop
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+  rxscan481_done:
+  alt482_0:
+.annotate "line", 243
+    set_addr $I10, alt482_1
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+.annotate "line", 244
   # rx subrule "sigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."sigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."sigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx473_pos = $P10."pos"()
-  # rx rxquantr480 ** 0..1
-    set_addr $I481, rxquantr480_done
-    rx473_cur."!mark_push"(0, rx473_pos, $I481)
-  rxquantr480_loop:
+    rx476_pos = $P10."pos"()
+  # rx rxquantr483 ** 0..1
+    set_addr $I484, rxquantr483_done
+    rx476_cur."!mark_push"(0, rx476_pos, $I484)
+  rxquantr483_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."twigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."twigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx473_pos = $P10."pos"()
-    (rx473_rep) = rx473_cur."!mark_commit"($I481)
-  rxquantr480_done:
+    rx476_pos = $P10."pos"()
+    (rx476_rep) = rx476_cur."!mark_commit"($I484)
+  rxquantr483_done:
   # rx subrule "name" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."name"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."name"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    rx473_pos = $P10."pos"()
-    goto alt479_end
-  alt479_1:
-    set_addr $I10, alt479_2
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 241
+    rx476_pos = $P10."pos"()
+    goto alt482_end
+  alt482_1:
+    set_addr $I10, alt482_2
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+.annotate "line", 245
   # rx subrule "sigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."sigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."sigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx473_pos = $P10."pos"()
+    rx476_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx473_pos, rx473_eos, rx473_fail
-    sub $I10, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I10, 1
+    ge rx476_pos, rx476_eos, rx476_fail
+    sub $I10, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I10, 1
     index $I11, "<[", $S10
-    lt $I11, 0, rx473_fail
+    lt $I11, 0, rx476_fail
   # rx subrule "postcircumfix" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."postcircumfix"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."postcircumfix"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("postcircumfix")
-    rx473_pos = $P10."pos"()
-    goto alt479_end
-  alt479_2:
-.annotate "line", 242
+    rx476_pos = $P10."pos"()
+    goto alt482_end
+  alt482_2:
+.annotate "line", 246
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_482_fail
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+    set_addr $I10, rxcap_485_fail
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
   # rx literal  "$"
-    add $I11, rx473_pos, 1
-    gt $I11, rx473_eos, rx473_fail
-    sub $I11, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I11, 1
-    ne $S10, "$", rx473_fail
-    add rx473_pos, 1
-    set_addr $I10, rxcap_482_fail
-    ($I12, $I11) = rx473_cur."!mark_peek"($I10)
-    rx473_cur."!cursor_pos"($I11)
-    ($P10) = rx473_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx473_pos, "")
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx476_pos, 1
+    gt $I11, rx476_eos, rx476_fail
+    sub $I11, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I11, 1
+    ne $S10, "$", rx476_fail
+    add rx476_pos, 1
+    set_addr $I10, rxcap_485_fail
+    ($I12, $I11) = rx476_cur."!mark_peek"($I10)
+    rx476_cur."!cursor_pos"($I11)
+    ($P10) = rx476_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx476_pos, "")
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_482_done
-  rxcap_482_fail:
-    goto rx473_fail
-  rxcap_482_done:
+    goto rxcap_485_done
+  rxcap_485_fail:
+    goto rx476_fail
+  rxcap_485_done:
   # rx subcapture "desigilname"
-    set_addr $I10, rxcap_483_fail
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+    set_addr $I10, rxcap_486_fail
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx473_pos, rx473_eos, rx473_fail
-    sub $I10, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I10, 1
+    ge rx476_pos, rx476_eos, rx476_fail
+    sub $I10, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I10, 1
     index $I11, "/_!", $S10
-    lt $I11, 0, rx473_fail
-    inc rx473_pos
-    set_addr $I10, rxcap_483_fail
-    ($I12, $I11) = rx473_cur."!mark_peek"($I10)
-    rx473_cur."!cursor_pos"($I11)
-    ($P10) = rx473_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx473_pos, "")
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx476_fail
+    inc rx476_pos
+    set_addr $I10, rxcap_486_fail
+    ($I12, $I11) = rx476_cur."!mark_peek"($I10)
+    rx476_cur."!cursor_pos"($I11)
+    ($P10) = rx476_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx476_pos, "")
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    goto rxcap_483_done
-  rxcap_483_fail:
-    goto rx473_fail
-  rxcap_483_done:
-  alt479_end:
-.annotate "line", 239
+    goto rxcap_486_done
+  rxcap_486_fail:
+    goto rx476_fail
+  rxcap_486_done:
+  alt482_end:
+.annotate "line", 243
   # rx pass
-    rx473_cur."!cursor_pass"(rx473_pos, "variable")
-    rx473_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx473_pos)
-    .return (rx473_cur)
-  rx473_fail:
+    rx476_cur."!cursor_pass"(rx476_pos, "variable")
+    rx476_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx476_pos)
+    .return (rx476_cur)
+  rx476_fail:
 .annotate "line", 4
-    (rx473_rep, rx473_pos, $I10, $P10) = rx473_cur."!mark_fail"(0)
-    lt rx473_pos, -1, rx473_done
-    eq rx473_pos, -1, rx473_fail
+    (rx476_rep, rx476_pos, $I10, $P10) = rx476_cur."!mark_fail"(0)
+    lt rx476_pos, -1, rx476_done
+    eq rx476_pos, -1, rx476_fail
     jump $I10
-  rx473_done:
-    rx473_cur."!cursor_fail"()
-    rx473_cur."!cursor_debug"("FAIL  ", "variable")
-    .return (rx473_cur)
+  rx476_done:
+    rx476_cur."!cursor_fail"()
+    rx476_cur."!cursor_debug"("FAIL  ", "variable")
+    .return (rx476_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("118_1267204702.05125") :method
+.sub "!PREFIX__variable"  :subid("118_1272816833.94956") :method
 .annotate "line", 4
-    $P475 = self."!PREFIX__!subrule"("sigil", "")
-    $P476 = self."!PREFIX__!subrule"("sigil", "")
-    new $P477, "ResizablePMCArray"
-    push $P477, "$!"
-    push $P477, "$_"
-    push $P477, "$/"
-    push $P477, $P475
-    push $P477, $P476
-    .return ($P477)
+    $P478 = self."!PREFIX__!subrule"("sigil", "")
+    $P479 = self."!PREFIX__!subrule"("sigil", "")
+    new $P480, "ResizablePMCArray"
+    push $P480, "$!"
+    push $P480, "$_"
+    push $P480, "$/"
+    push $P480, $P478
+    push $P480, $P479
+    .return ($P480)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("119_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "sigil"  :subid("119_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx485_tgt
-    .local int rx485_pos
-    .local int rx485_off
-    .local int rx485_eos
-    .local int rx485_rep
-    .local pmc rx485_cur
-    (rx485_cur, rx485_pos, rx485_tgt) = self."!cursor_start"()
-    rx485_cur."!cursor_debug"("START ", "sigil")
-    .lex unicode:"$\x{a2}", rx485_cur
+    .local string rx488_tgt
+    .local int rx488_pos
+    .local int rx488_off
+    .local int rx488_eos
+    .local int rx488_rep
+    .local pmc rx488_cur
+    (rx488_cur, rx488_pos, rx488_tgt) = self."!cursor_start"()
+    rx488_cur."!cursor_debug"("START ", "sigil")
+    .lex unicode:"$\x{a2}", rx488_cur
     .local pmc match
     .lex "$/", match
-    length rx485_eos, rx485_tgt
-    set rx485_off, 0
-    lt rx485_pos, 2, rx485_start
-    sub rx485_off, rx485_pos, 1
-    substr rx485_tgt, rx485_tgt, rx485_off
-  rx485_start:
+    length rx488_eos, rx488_tgt
+    set rx488_off, 0
+    lt rx488_pos, 2, rx488_start
+    sub rx488_off, rx488_pos, 1
+    substr rx488_tgt, rx488_tgt, rx488_off
+  rx488_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan488_done
-    goto rxscan488_scan
-  rxscan488_loop:
-    ($P10) = rx485_cur."from"()
+    ne $I10, -1, rxscan491_done
+    goto rxscan491_scan
+  rxscan491_loop:
+    ($P10) = rx488_cur."from"()
     inc $P10
-    set rx485_pos, $P10
-    ge rx485_pos, rx485_eos, rxscan488_done
-  rxscan488_scan:
-    set_addr $I10, rxscan488_loop
-    rx485_cur."!mark_push"(0, rx485_pos, $I10)
-  rxscan488_done:
-.annotate "line", 245
+    set rx488_pos, $P10
+    ge rx488_pos, rx488_eos, rxscan491_done
+  rxscan491_scan:
+    set_addr $I10, rxscan491_loop
+    rx488_cur."!mark_push"(0, rx488_pos, $I10)
+  rxscan491_done:
+.annotate "line", 249
   # rx enumcharlist negate=0 
-    ge rx485_pos, rx485_eos, rx485_fail
-    sub $I10, rx485_pos, rx485_off
-    substr $S10, rx485_tgt, $I10, 1
+    ge rx488_pos, rx488_eos, rx488_fail
+    sub $I10, rx488_pos, rx488_off
+    substr $S10, rx488_tgt, $I10, 1
     index $I11, "$@%&", $S10
-    lt $I11, 0, rx485_fail
-    inc rx485_pos
+    lt $I11, 0, rx488_fail
+    inc rx488_pos
   # rx pass
-    rx485_cur."!cursor_pass"(rx485_pos, "sigil")
-    rx485_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx485_pos)
-    .return (rx485_cur)
-  rx485_fail:
+    rx488_cur."!cursor_pass"(rx488_pos, "sigil")
+    rx488_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx488_pos)
+    .return (rx488_cur)
+  rx488_fail:
 .annotate "line", 4
-    (rx485_rep, rx485_pos, $I10, $P10) = rx485_cur."!mark_fail"(0)
-    lt rx485_pos, -1, rx485_done
-    eq rx485_pos, -1, rx485_fail
+    (rx488_rep, rx488_pos, $I10, $P10) = rx488_cur."!mark_fail"(0)
+    lt rx488_pos, -1, rx488_done
+    eq rx488_pos, -1, rx488_fail
     jump $I10
-  rx485_done:
-    rx485_cur."!cursor_fail"()
-    rx485_cur."!cursor_debug"("FAIL  ", "sigil")
-    .return (rx485_cur)
+  rx488_done:
+    rx488_cur."!cursor_fail"()
+    rx488_cur."!cursor_debug"("FAIL  ", "sigil")
+    .return (rx488_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("120_1267204702.05125") :method
+.sub "!PREFIX__sigil"  :subid("120_1272816833.94956") :method
 .annotate "line", 4
-    new $P487, "ResizablePMCArray"
-    push $P487, "&"
-    push $P487, "%"
-    push $P487, "@"
-    push $P487, "$"
-    .return ($P487)
+    new $P490, "ResizablePMCArray"
+    push $P490, "&"
+    push $P490, "%"
+    push $P490, "@"
+    push $P490, "$"
+    .return ($P490)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("121_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "twigil"  :subid("121_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx490_tgt
-    .local int rx490_pos
-    .local int rx490_off
-    .local int rx490_eos
-    .local int rx490_rep
-    .local pmc rx490_cur
-    (rx490_cur, rx490_pos, rx490_tgt) = self."!cursor_start"()
-    rx490_cur."!cursor_debug"("START ", "twigil")
-    .lex unicode:"$\x{a2}", rx490_cur
+    .local string rx493_tgt
+    .local int rx493_pos
+    .local int rx493_off
+    .local int rx493_eos
+    .local int rx493_rep
+    .local pmc rx493_cur
+    (rx493_cur, rx493_pos, rx493_tgt) = self."!cursor_start"()
+    rx493_cur."!cursor_debug"("START ", "twigil")
+    .lex unicode:"$\x{a2}", rx493_cur
     .local pmc match
     .lex "$/", match
-    length rx490_eos, rx490_tgt
-    set rx490_off, 0
-    lt rx490_pos, 2, rx490_start
-    sub rx490_off, rx490_pos, 1
-    substr rx490_tgt, rx490_tgt, rx490_off
-  rx490_start:
+    length rx493_eos, rx493_tgt
+    set rx493_off, 0
+    lt rx493_pos, 2, rx493_start
+    sub rx493_off, rx493_pos, 1
+    substr rx493_tgt, rx493_tgt, rx493_off
+  rx493_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan493_done
-    goto rxscan493_scan
-  rxscan493_loop:
-    ($P10) = rx490_cur."from"()
+    ne $I10, -1, rxscan496_done
+    goto rxscan496_scan
+  rxscan496_loop:
+    ($P10) = rx493_cur."from"()
     inc $P10
-    set rx490_pos, $P10
-    ge rx490_pos, rx490_eos, rxscan493_done
-  rxscan493_scan:
-    set_addr $I10, rxscan493_loop
-    rx490_cur."!mark_push"(0, rx490_pos, $I10)
-  rxscan493_done:
-.annotate "line", 247
+    set rx493_pos, $P10
+    ge rx493_pos, rx493_eos, rxscan496_done
+  rxscan496_scan:
+    set_addr $I10, rxscan496_loop
+    rx493_cur."!mark_push"(0, rx493_pos, $I10)
+  rxscan496_done:
+.annotate "line", 251
   # rx enumcharlist negate=0 
-    ge rx490_pos, rx490_eos, rx490_fail
-    sub $I10, rx490_pos, rx490_off
-    substr $S10, rx490_tgt, $I10, 1
+    ge rx493_pos, rx493_eos, rx493_fail
+    sub $I10, rx493_pos, rx493_off
+    substr $S10, rx493_tgt, $I10, 1
     index $I11, "*!?", $S10
-    lt $I11, 0, rx490_fail
-    inc rx490_pos
+    lt $I11, 0, rx493_fail
+    inc rx493_pos
   # rx pass
-    rx490_cur."!cursor_pass"(rx490_pos, "twigil")
-    rx490_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx490_pos)
-    .return (rx490_cur)
-  rx490_fail:
+    rx493_cur."!cursor_pass"(rx493_pos, "twigil")
+    rx493_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx493_pos)
+    .return (rx493_cur)
+  rx493_fail:
 .annotate "line", 4
-    (rx490_rep, rx490_pos, $I10, $P10) = rx490_cur."!mark_fail"(0)
-    lt rx490_pos, -1, rx490_done
-    eq rx490_pos, -1, rx490_fail
+    (rx493_rep, rx493_pos, $I10, $P10) = rx493_cur."!mark_fail"(0)
+    lt rx493_pos, -1, rx493_done
+    eq rx493_pos, -1, rx493_fail
     jump $I10
-  rx490_done:
-    rx490_cur."!cursor_fail"()
-    rx490_cur."!cursor_debug"("FAIL  ", "twigil")
-    .return (rx490_cur)
+  rx493_done:
+    rx493_cur."!cursor_fail"()
+    rx493_cur."!cursor_debug"("FAIL  ", "twigil")
+    .return (rx493_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("122_1267204702.05125") :method
+.sub "!PREFIX__twigil"  :subid("122_1272816833.94956") :method
 .annotate "line", 4
-    new $P492, "ResizablePMCArray"
-    push $P492, "?"
-    push $P492, "!"
-    push $P492, "*"
-    .return ($P492)
+    new $P495, "ResizablePMCArray"
+    push $P495, "?"
+    push $P495, "!"
+    push $P495, "*"
+    .return ($P495)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("123_1267204702.05125") :method
-.annotate "line", 249
-    $P495 = self."!protoregex"("package_declarator")
-    .return ($P495)
+.sub "package_declarator"  :subid("123_1272816833.94956") :method
+.annotate "line", 253
+    $P498 = self."!protoregex"("package_declarator")
+    .return ($P498)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("124_1267204702.05125") :method
-.annotate "line", 249
-    $P497 = self."!PREFIX__!protoregex"("package_declarator")
-    .return ($P497)
+.sub "!PREFIX__package_declarator"  :subid("124_1272816833.94956") :method
+.annotate "line", 253
+    $P500 = self."!PREFIX__!protoregex"("package_declarator")
+    .return ($P500)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("125_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_declarator:sym<module>"  :subid("125_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx499_tgt
-    .local int rx499_pos
-    .local int rx499_off
-    .local int rx499_eos
-    .local int rx499_rep
-    .local pmc rx499_cur
-    (rx499_cur, rx499_pos, rx499_tgt) = self."!cursor_start"()
-    rx499_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
-    .lex unicode:"$\x{a2}", rx499_cur
-    .local pmc match
-    .lex "$/", match
-    length rx499_eos, rx499_tgt
-    set rx499_off, 0
-    lt rx499_pos, 2, rx499_start
-    sub rx499_off, rx499_pos, 1
-    substr rx499_tgt, rx499_tgt, rx499_off
-  rx499_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan503_done
-    goto rxscan503_scan
-  rxscan503_loop:
-    ($P10) = rx499_cur."from"()
-    inc $P10
-    set rx499_pos, $P10
-    ge rx499_pos, rx499_eos, rxscan503_done
-  rxscan503_scan:
-    set_addr $I10, rxscan503_loop
-    rx499_cur."!mark_push"(0, rx499_pos, $I10)
-  rxscan503_done:
-.annotate "line", 250
+    .local string rx502_tgt
+    .local int rx502_pos
+    .local int rx502_off
+    .local int rx502_eos
+    .local int rx502_rep
+    .local pmc rx502_cur
+    (rx502_cur, rx502_pos, rx502_tgt) = self."!cursor_start"()
+    rx502_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
+    .lex unicode:"$\x{a2}", rx502_cur
+    .local pmc match
+    .lex "$/", match
+    length rx502_eos, rx502_tgt
+    set rx502_off, 0
+    lt rx502_pos, 2, rx502_start
+    sub rx502_off, rx502_pos, 1
+    substr rx502_tgt, rx502_tgt, rx502_off
+  rx502_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan506_done
+    goto rxscan506_scan
+  rxscan506_loop:
+    ($P10) = rx502_cur."from"()
+    inc $P10
+    set rx502_pos, $P10
+    ge rx502_pos, rx502_eos, rxscan506_done
+  rxscan506_scan:
+    set_addr $I10, rxscan506_loop
+    rx502_cur."!mark_push"(0, rx502_pos, $I10)
+  rxscan506_done:
+.annotate "line", 254
   # rx subcapture "sym"
-    set_addr $I10, rxcap_504_fail
-    rx499_cur."!mark_push"(0, rx499_pos, $I10)
+    set_addr $I10, rxcap_507_fail
+    rx502_cur."!mark_push"(0, rx502_pos, $I10)
   # rx literal  "module"
-    add $I11, rx499_pos, 6
-    gt $I11, rx499_eos, rx499_fail
-    sub $I11, rx499_pos, rx499_off
-    substr $S10, rx499_tgt, $I11, 6
-    ne $S10, "module", rx499_fail
-    add rx499_pos, 6
-    set_addr $I10, rxcap_504_fail
-    ($I12, $I11) = rx499_cur."!mark_peek"($I10)
-    rx499_cur."!cursor_pos"($I11)
-    ($P10) = rx499_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx499_pos, "")
-    rx499_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx502_pos, 6
+    gt $I11, rx502_eos, rx502_fail
+    sub $I11, rx502_pos, rx502_off
+    substr $S10, rx502_tgt, $I11, 6
+    ne $S10, "module", rx502_fail
+    add rx502_pos, 6
+    set_addr $I10, rxcap_507_fail
+    ($I12, $I11) = rx502_cur."!mark_peek"($I10)
+    rx502_cur."!cursor_pos"($I11)
+    ($P10) = rx502_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx502_pos, "")
+    rx502_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_504_done
-  rxcap_504_fail:
-    goto rx499_fail
-  rxcap_504_done:
+    goto rxcap_507_done
+  rxcap_507_fail:
+    goto rx502_fail
+  rxcap_507_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx499_cur."!cursor_pos"(rx499_pos)
-    $P10 = rx499_cur."package_def"()
-    unless $P10, rx499_fail
-    rx499_cur."!mark_push"(0, -1, 0, $P10)
+    rx502_cur."!cursor_pos"(rx502_pos)
+    $P10 = rx502_cur."package_def"()
+    unless $P10, rx502_fail
+    rx502_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx499_pos = $P10."pos"()
+    rx502_pos = $P10."pos"()
   # rx pass
-    rx499_cur."!cursor_pass"(rx499_pos, "package_declarator:sym<module>")
-    rx499_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx499_pos)
-    .return (rx499_cur)
-  rx499_fail:
+    rx502_cur."!cursor_pass"(rx502_pos, "package_declarator:sym<module>")
+    rx502_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx502_pos)
+    .return (rx502_cur)
+  rx502_fail:
 .annotate "line", 4
-    (rx499_rep, rx499_pos, $I10, $P10) = rx499_cur."!mark_fail"(0)
-    lt rx499_pos, -1, rx499_done
-    eq rx499_pos, -1, rx499_fail
+    (rx502_rep, rx502_pos, $I10, $P10) = rx502_cur."!mark_fail"(0)
+    lt rx502_pos, -1, rx502_done
+    eq rx502_pos, -1, rx502_fail
     jump $I10
-  rx499_done:
-    rx499_cur."!cursor_fail"()
-    rx499_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
-    .return (rx499_cur)
+  rx502_done:
+    rx502_cur."!cursor_fail"()
+    rx502_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
+    .return (rx502_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1267204702.05125") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1272816833.94956") :method
 .annotate "line", 4
-    $P501 = self."!PREFIX__!subrule"("package_def", "module")
-    new $P502, "ResizablePMCArray"
-    push $P502, $P501
-    .return ($P502)
+    $P504 = self."!PREFIX__!subrule"("package_def", "module")
+    new $P505, "ResizablePMCArray"
+    push $P505, $P504
+    .return ($P505)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("127_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_declarator:sym<class>"  :subid("127_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx506_tgt
-    .local int rx506_pos
-    .local int rx506_off
-    .local int rx506_eos
-    .local int rx506_rep
-    .local pmc rx506_cur
-    (rx506_cur, rx506_pos, rx506_tgt) = self."!cursor_start"()
-    rx506_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
-    .lex unicode:"$\x{a2}", rx506_cur
+    .local string rx509_tgt
+    .local int rx509_pos
+    .local int rx509_off
+    .local int rx509_eos
+    .local int rx509_rep
+    .local pmc rx509_cur
+    (rx509_cur, rx509_pos, rx509_tgt) = self."!cursor_start"()
+    rx509_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
+    .lex unicode:"$\x{a2}", rx509_cur
     .local pmc match
     .lex "$/", match
-    length rx506_eos, rx506_tgt
-    set rx506_off, 0
-    lt rx506_pos, 2, rx506_start
-    sub rx506_off, rx506_pos, 1
-    substr rx506_tgt, rx506_tgt, rx506_off
-  rx506_start:
+    length rx509_eos, rx509_tgt
+    set rx509_off, 0
+    lt rx509_pos, 2, rx509_start
+    sub rx509_off, rx509_pos, 1
+    substr rx509_tgt, rx509_tgt, rx509_off
+  rx509_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan511_done
-    goto rxscan511_scan
-  rxscan511_loop:
-    ($P10) = rx506_cur."from"()
+    ne $I10, -1, rxscan514_done
+    goto rxscan514_scan
+  rxscan514_loop:
+    ($P10) = rx509_cur."from"()
     inc $P10
-    set rx506_pos, $P10
-    ge rx506_pos, rx506_eos, rxscan511_done
-  rxscan511_scan:
-    set_addr $I10, rxscan511_loop
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  rxscan511_done:
-.annotate "line", 251
+    set rx509_pos, $P10
+    ge rx509_pos, rx509_eos, rxscan514_done
+  rxscan514_scan:
+    set_addr $I10, rxscan514_loop
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  rxscan514_done:
+.annotate "line", 255
   # rx subcapture "sym"
-    set_addr $I10, rxcap_513_fail
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  alt512_0:
-    set_addr $I10, alt512_1
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
+    set_addr $I10, rxcap_516_fail
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  alt515_0:
+    set_addr $I10, alt515_1
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
   # rx literal  "class"
-    add $I11, rx506_pos, 5
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 5
-    ne $S10, "class", rx506_fail
-    add rx506_pos, 5
-    goto alt512_end
-  alt512_1:
+    add $I11, rx509_pos, 5
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    substr $S10, rx509_tgt, $I11, 5
+    ne $S10, "class", rx509_fail
+    add rx509_pos, 5
+    goto alt515_end
+  alt515_1:
   # rx literal  "grammar"
-    add $I11, rx506_pos, 7
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 7
-    ne $S10, "grammar", rx506_fail
-    add rx506_pos, 7
-  alt512_end:
-    set_addr $I10, rxcap_513_fail
-    ($I12, $I11) = rx506_cur."!mark_peek"($I10)
-    rx506_cur."!cursor_pos"($I11)
-    ($P10) = rx506_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx506_pos, "")
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx509_pos, 7
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    substr $S10, rx509_tgt, $I11, 7
+    ne $S10, "grammar", rx509_fail
+    add rx509_pos, 7
+  alt515_end:
+    set_addr $I10, rxcap_516_fail
+    ($I12, $I11) = rx509_cur."!mark_peek"($I10)
+    rx509_cur."!cursor_pos"($I11)
+    ($P10) = rx509_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx509_pos, "")
+    rx509_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_513_done
-  rxcap_513_fail:
-    goto rx506_fail
-  rxcap_513_done:
+    goto rxcap_516_done
+  rxcap_516_fail:
+    goto rx509_fail
+  rxcap_516_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    $P10 = rx506_cur."package_def"()
-    unless $P10, rx506_fail
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    rx509_cur."!cursor_pos"(rx509_pos)
+    $P10 = rx509_cur."package_def"()
+    unless $P10, rx509_fail
+    rx509_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx506_pos = $P10."pos"()
+    rx509_pos = $P10."pos"()
   # rx pass
-    rx506_cur."!cursor_pass"(rx506_pos, "package_declarator:sym<class>")
-    rx506_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx506_pos)
-    .return (rx506_cur)
-  rx506_fail:
+    rx509_cur."!cursor_pass"(rx509_pos, "package_declarator:sym<class>")
+    rx509_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx509_pos)
+    .return (rx509_cur)
+  rx509_fail:
 .annotate "line", 4
-    (rx506_rep, rx506_pos, $I10, $P10) = rx506_cur."!mark_fail"(0)
-    lt rx506_pos, -1, rx506_done
-    eq rx506_pos, -1, rx506_fail
+    (rx509_rep, rx509_pos, $I10, $P10) = rx509_cur."!mark_fail"(0)
+    lt rx509_pos, -1, rx509_done
+    eq rx509_pos, -1, rx509_fail
     jump $I10
-  rx506_done:
-    rx506_cur."!cursor_fail"()
-    rx506_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
-    .return (rx506_cur)
+  rx509_done:
+    rx509_cur."!cursor_fail"()
+    rx509_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
+    .return (rx509_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1267204702.05125") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1272816833.94956") :method
 .annotate "line", 4
-    $P508 = self."!PREFIX__!subrule"("package_def", "grammar")
-    $P509 = self."!PREFIX__!subrule"("package_def", "class")
-    new $P510, "ResizablePMCArray"
-    push $P510, $P508
-    push $P510, $P509
-    .return ($P510)
+    $P511 = self."!PREFIX__!subrule"("package_def", "grammar")
+    $P512 = self."!PREFIX__!subrule"("package_def", "class")
+    new $P513, "ResizablePMCArray"
+    push $P513, $P511
+    push $P513, $P512
+    .return ($P513)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("129_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_def"  :subid("129_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx515_tgt
-    .local int rx515_pos
-    .local int rx515_off
-    .local int rx515_eos
-    .local int rx515_rep
-    .local pmc rx515_cur
-    (rx515_cur, rx515_pos, rx515_tgt) = self."!cursor_start"()
-    rx515_cur."!cursor_debug"("START ", "package_def")
-    rx515_cur."!cursor_caparray"("parent")
-    .lex unicode:"$\x{a2}", rx515_cur
+    .local string rx518_tgt
+    .local int rx518_pos
+    .local int rx518_off
+    .local int rx518_eos
+    .local int rx518_rep
+    .local pmc rx518_cur
+    (rx518_cur, rx518_pos, rx518_tgt) = self."!cursor_start"()
+    rx518_cur."!cursor_debug"("START ", "package_def")
+    rx518_cur."!cursor_caparray"("parent")
+    .lex unicode:"$\x{a2}", rx518_cur
     .local pmc match
     .lex "$/", match
-    length rx515_eos, rx515_tgt
-    set rx515_off, 0
-    lt rx515_pos, 2, rx515_start
-    sub rx515_off, rx515_pos, 1
-    substr rx515_tgt, rx515_tgt, rx515_off
-  rx515_start:
+    length rx518_eos, rx518_tgt
+    set rx518_off, 0
+    lt rx518_pos, 2, rx518_start
+    sub rx518_off, rx518_pos, 1
+    substr rx518_tgt, rx518_tgt, rx518_off
+  rx518_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan518_done
-    goto rxscan518_scan
-  rxscan518_loop:
-    ($P10) = rx515_cur."from"()
+    ne $I10, -1, rxscan521_done
+    goto rxscan521_scan
+  rxscan521_loop:
+    ($P10) = rx518_cur."from"()
     inc $P10
-    set rx515_pos, $P10
-    ge rx515_pos, rx515_eos, rxscan518_done
-  rxscan518_scan:
-    set_addr $I10, rxscan518_loop
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-  rxscan518_done:
-.annotate "line", 253
+    set rx518_pos, $P10
+    ge rx518_pos, rx518_eos, rxscan521_done
+  rxscan521_scan:
+    set_addr $I10, rxscan521_loop
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+  rxscan521_done:
+.annotate "line", 257
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 254
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 258
   # rx subrule "name" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."name"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."name"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx515_pos = $P10."pos"()
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 255
-  # rx rxquantr521 ** 0..1
-    set_addr $I525, rxquantr521_done
-    rx515_cur."!mark_push"(0, rx515_pos, $I525)
-  rxquantr521_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 259
+  # rx rxquantr524 ** 0..1
+    set_addr $I528, rxquantr524_done
+    rx518_cur."!mark_push"(0, rx518_pos, $I528)
+  rxquantr524_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx literal  "is"
-    add $I11, rx515_pos, 2
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I11, 2
-    ne $S10, "is", rx515_fail
-    add rx515_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    add $I11, rx518_pos, 2
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I11, 2
+    ne $S10, "is", rx518_fail
+    add rx518_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "name" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."name"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."name"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parent")
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    (rx515_rep) = rx515_cur."!mark_commit"($I525)
-  rxquantr521_done:
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  alt527_0:
-.annotate "line", 256
-    set_addr $I10, alt527_1
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 257
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    (rx518_rep) = rx518_cur."!mark_commit"($I528)
+  rxquantr524_done:
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  alt530_0:
+.annotate "line", 260
+    set_addr $I10, alt530_1
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate "line", 261
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx515_pos, 1
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I11, 1
-    ne $S10, ";", rx515_fail
-    add rx515_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I11, 1
+    ne $S10, ";", rx518_fail
+    add rx518_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "comp_unit" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."comp_unit"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."comp_unit"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("comp_unit")
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt527_end
-  alt527_1:
-    set_addr $I10, alt527_2
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 258
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    goto alt530_end
+  alt530_1:
+    set_addr $I10, alt530_2
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate "line", 262
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx515_pos, rx515_eos, rx515_fail
-    sub $I10, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I10, 1
+    ge rx518_pos, rx518_eos, rx518_fail
+    sub $I10, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx515_fail
+    lt $I11, 0, rx518_fail
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "block" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."block"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."block"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx515_pos = $P10."pos"()
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt527_end
-  alt527_2:
-.annotate "line", 259
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    goto alt530_end
+  alt530_2:
+.annotate "line", 263
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."panic"("Malformed package declaration")
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  alt527_end:
-.annotate "line", 260
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."panic"("Malformed package declaration")
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  alt530_end:
+.annotate "line", 264
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 253
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 257
   # rx pass
-    rx515_cur."!cursor_pass"(rx515_pos, "package_def")
-    rx515_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx515_pos)
-    .return (rx515_cur)
-  rx515_fail:
+    rx518_cur."!cursor_pass"(rx518_pos, "package_def")
+    rx518_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx518_pos)
+    .return (rx518_cur)
+  rx518_fail:
 .annotate "line", 4
-    (rx515_rep, rx515_pos, $I10, $P10) = rx515_cur."!mark_fail"(0)
-    lt rx515_pos, -1, rx515_done
-    eq rx515_pos, -1, rx515_fail
+    (rx518_rep, rx518_pos, $I10, $P10) = rx518_cur."!mark_fail"(0)
+    lt rx518_pos, -1, rx518_done
+    eq rx518_pos, -1, rx518_fail
     jump $I10
-  rx515_done:
-    rx515_cur."!cursor_fail"()
-    rx515_cur."!cursor_debug"("FAIL  ", "package_def")
-    .return (rx515_cur)
+  rx518_done:
+    rx518_cur."!cursor_fail"()
+    rx518_cur."!cursor_debug"("FAIL  ", "package_def")
+    .return (rx518_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("130_1267204702.05125") :method
+.sub "!PREFIX__package_def"  :subid("130_1272816833.94956") :method
 .annotate "line", 4
-    new $P517, "ResizablePMCArray"
-    push $P517, ""
-    .return ($P517)
+    new $P520, "ResizablePMCArray"
+    push $P520, ""
+    .return ($P520)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("131_1267204702.05125") :method
-.annotate "line", 263
-    $P538 = self."!protoregex"("scope_declarator")
-    .return ($P538)
+.sub "scope_declarator"  :subid("131_1272816833.94956") :method
+.annotate "line", 267
+    $P541 = self."!protoregex"("scope_declarator")
+    .return ($P541)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("132_1267204702.05125") :method
-.annotate "line", 263
-    $P540 = self."!PREFIX__!protoregex"("scope_declarator")
-    .return ($P540)
+.sub "!PREFIX__scope_declarator"  :subid("132_1272816833.94956") :method
+.annotate "line", 267
+    $P543 = self."!PREFIX__!protoregex"("scope_declarator")
+    .return ($P543)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("133_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<my>"  :subid("133_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx542_tgt
-    .local int rx542_pos
-    .local int rx542_off
-    .local int rx542_eos
-    .local int rx542_rep
-    .local pmc rx542_cur
-    (rx542_cur, rx542_pos, rx542_tgt) = self."!cursor_start"()
-    rx542_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
-    .lex unicode:"$\x{a2}", rx542_cur
-    .local pmc match
-    .lex "$/", match
-    length rx542_eos, rx542_tgt
-    set rx542_off, 0
-    lt rx542_pos, 2, rx542_start
-    sub rx542_off, rx542_pos, 1
-    substr rx542_tgt, rx542_tgt, rx542_off
-  rx542_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan546_done
-    goto rxscan546_scan
-  rxscan546_loop:
-    ($P10) = rx542_cur."from"()
-    inc $P10
-    set rx542_pos, $P10
-    ge rx542_pos, rx542_eos, rxscan546_done
-  rxscan546_scan:
-    set_addr $I10, rxscan546_loop
-    rx542_cur."!mark_push"(0, rx542_pos, $I10)
-  rxscan546_done:
-.annotate "line", 264
+    .local string rx545_tgt
+    .local int rx545_pos
+    .local int rx545_off
+    .local int rx545_eos
+    .local int rx545_rep
+    .local pmc rx545_cur
+    (rx545_cur, rx545_pos, rx545_tgt) = self."!cursor_start"()
+    rx545_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
+    .lex unicode:"$\x{a2}", rx545_cur
+    .local pmc match
+    .lex "$/", match
+    length rx545_eos, rx545_tgt
+    set rx545_off, 0
+    lt rx545_pos, 2, rx545_start
+    sub rx545_off, rx545_pos, 1
+    substr rx545_tgt, rx545_tgt, rx545_off
+  rx545_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan549_done
+    goto rxscan549_scan
+  rxscan549_loop:
+    ($P10) = rx545_cur."from"()
+    inc $P10
+    set rx545_pos, $P10
+    ge rx545_pos, rx545_eos, rxscan549_done
+  rxscan549_scan:
+    set_addr $I10, rxscan549_loop
+    rx545_cur."!mark_push"(0, rx545_pos, $I10)
+  rxscan549_done:
+.annotate "line", 268
   # rx subcapture "sym"
-    set_addr $I10, rxcap_547_fail
-    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+    set_addr $I10, rxcap_550_fail
+    rx545_cur."!mark_push"(0, rx545_pos, $I10)
   # rx literal  "my"
-    add $I11, rx542_pos, 2
-    gt $I11, rx542_eos, rx542_fail
-    sub $I11, rx542_pos, rx542_off
-    substr $S10, rx542_tgt, $I11, 2
-    ne $S10, "my", rx542_fail
-    add rx542_pos, 2
-    set_addr $I10, rxcap_547_fail
-    ($I12, $I11) = rx542_cur."!mark_peek"($I10)
-    rx542_cur."!cursor_pos"($I11)
-    ($P10) = rx542_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx542_pos, "")
-    rx542_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx545_pos, 2
+    gt $I11, rx545_eos, rx545_fail
+    sub $I11, rx545_pos, rx545_off
+    substr $S10, rx545_tgt, $I11, 2
+    ne $S10, "my", rx545_fail
+    add rx545_pos, 2
+    set_addr $I10, rxcap_550_fail
+    ($I12, $I11) = rx545_cur."!mark_peek"($I10)
+    rx545_cur."!cursor_pos"($I11)
+    ($P10) = rx545_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx545_pos, "")
+    rx545_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_547_done
-  rxcap_547_fail:
-    goto rx542_fail
-  rxcap_547_done:
+    goto rxcap_550_done
+  rxcap_550_fail:
+    goto rx545_fail
+  rxcap_550_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx542_cur."!cursor_pos"(rx542_pos)
-    $P10 = rx542_cur."scoped"("my")
-    unless $P10, rx542_fail
-    rx542_cur."!mark_push"(0, -1, 0, $P10)
+    rx545_cur."!cursor_pos"(rx545_pos)
+    $P10 = rx545_cur."scoped"("my")
+    unless $P10, rx545_fail
+    rx545_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx542_pos = $P10."pos"()
+    rx545_pos = $P10."pos"()
   # rx pass
-    rx542_cur."!cursor_pass"(rx542_pos, "scope_declarator:sym<my>")
-    rx542_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx542_pos)
-    .return (rx542_cur)
-  rx542_fail:
+    rx545_cur."!cursor_pass"(rx545_pos, "scope_declarator:sym<my>")
+    rx545_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx545_pos)
+    .return (rx545_cur)
+  rx545_fail:
 .annotate "line", 4
-    (rx542_rep, rx542_pos, $I10, $P10) = rx542_cur."!mark_fail"(0)
-    lt rx542_pos, -1, rx542_done
-    eq rx542_pos, -1, rx542_fail
+    (rx545_rep, rx545_pos, $I10, $P10) = rx545_cur."!mark_fail"(0)
+    lt rx545_pos, -1, rx545_done
+    eq rx545_pos, -1, rx545_fail
     jump $I10
-  rx542_done:
-    rx542_cur."!cursor_fail"()
-    rx542_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
-    .return (rx542_cur)
+  rx545_done:
+    rx545_cur."!cursor_fail"()
+    rx545_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
+    .return (rx545_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1272816833.94956") :method
 .annotate "line", 4
-    $P544 = self."!PREFIX__!subrule"("scoped", "my")
-    new $P545, "ResizablePMCArray"
-    push $P545, $P544
-    .return ($P545)
+    $P547 = self."!PREFIX__!subrule"("scoped", "my")
+    new $P548, "ResizablePMCArray"
+    push $P548, $P547
+    .return ($P548)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("135_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<our>"  :subid("135_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx549_tgt
-    .local int rx549_pos
-    .local int rx549_off
-    .local int rx549_eos
-    .local int rx549_rep
-    .local pmc rx549_cur
-    (rx549_cur, rx549_pos, rx549_tgt) = self."!cursor_start"()
-    rx549_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
-    .lex unicode:"$\x{a2}", rx549_cur
+    .local string rx552_tgt
+    .local int rx552_pos
+    .local int rx552_off
+    .local int rx552_eos
+    .local int rx552_rep
+    .local pmc rx552_cur
+    (rx552_cur, rx552_pos, rx552_tgt) = self."!cursor_start"()
+    rx552_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
+    .lex unicode:"$\x{a2}", rx552_cur
     .local pmc match
     .lex "$/", match
-    length rx549_eos, rx549_tgt
-    set rx549_off, 0
-    lt rx549_pos, 2, rx549_start
-    sub rx549_off, rx549_pos, 1
-    substr rx549_tgt, rx549_tgt, rx549_off
-  rx549_start:
+    length rx552_eos, rx552_tgt
+    set rx552_off, 0
+    lt rx552_pos, 2, rx552_start
+    sub rx552_off, rx552_pos, 1
+    substr rx552_tgt, rx552_tgt, rx552_off
+  rx552_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan553_done
-    goto rxscan553_scan
-  rxscan553_loop:
-    ($P10) = rx549_cur."from"()
+    ne $I10, -1, rxscan556_done
+    goto rxscan556_scan
+  rxscan556_loop:
+    ($P10) = rx552_cur."from"()
     inc $P10
-    set rx549_pos, $P10
-    ge rx549_pos, rx549_eos, rxscan553_done
-  rxscan553_scan:
-    set_addr $I10, rxscan553_loop
-    rx549_cur."!mark_push"(0, rx549_pos, $I10)
-  rxscan553_done:
-.annotate "line", 265
+    set rx552_pos, $P10
+    ge rx552_pos, rx552_eos, rxscan556_done
+  rxscan556_scan:
+    set_addr $I10, rxscan556_loop
+    rx552_cur."!mark_push"(0, rx552_pos, $I10)
+  rxscan556_done:
+.annotate "line", 269
   # rx subcapture "sym"
-    set_addr $I10, rxcap_554_fail
-    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+    set_addr $I10, rxcap_557_fail
+    rx552_cur."!mark_push"(0, rx552_pos, $I10)
   # rx literal  "our"
-    add $I11, rx549_pos, 3
-    gt $I11, rx549_eos, rx549_fail
-    sub $I11, rx549_pos, rx549_off
-    substr $S10, rx549_tgt, $I11, 3
-    ne $S10, "our", rx549_fail
-    add rx549_pos, 3
-    set_addr $I10, rxcap_554_fail
-    ($I12, $I11) = rx549_cur."!mark_peek"($I10)
-    rx549_cur."!cursor_pos"($I11)
-    ($P10) = rx549_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx549_pos, "")
-    rx549_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx552_pos, 3
+    gt $I11, rx552_eos, rx552_fail
+    sub $I11, rx552_pos, rx552_off
+    substr $S10, rx552_tgt, $I11, 3
+    ne $S10, "our", rx552_fail
+    add rx552_pos, 3
+    set_addr $I10, rxcap_557_fail
+    ($I12, $I11) = rx552_cur."!mark_peek"($I10)
+    rx552_cur."!cursor_pos"($I11)
+    ($P10) = rx552_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx552_pos, "")
+    rx552_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_554_done
-  rxcap_554_fail:
-    goto rx549_fail
-  rxcap_554_done:
+    goto rxcap_557_done
+  rxcap_557_fail:
+    goto rx552_fail
+  rxcap_557_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx549_cur."!cursor_pos"(rx549_pos)
-    $P10 = rx549_cur."scoped"("our")
-    unless $P10, rx549_fail
-    rx549_cur."!mark_push"(0, -1, 0, $P10)
+    rx552_cur."!cursor_pos"(rx552_pos)
+    $P10 = rx552_cur."scoped"("our")
+    unless $P10, rx552_fail
+    rx552_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx549_pos = $P10."pos"()
+    rx552_pos = $P10."pos"()
   # rx pass
-    rx549_cur."!cursor_pass"(rx549_pos, "scope_declarator:sym<our>")
-    rx549_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx549_pos)
-    .return (rx549_cur)
-  rx549_fail:
+    rx552_cur."!cursor_pass"(rx552_pos, "scope_declarator:sym<our>")
+    rx552_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx552_pos)
+    .return (rx552_cur)
+  rx552_fail:
 .annotate "line", 4
-    (rx549_rep, rx549_pos, $I10, $P10) = rx549_cur."!mark_fail"(0)
-    lt rx549_pos, -1, rx549_done
-    eq rx549_pos, -1, rx549_fail
+    (rx552_rep, rx552_pos, $I10, $P10) = rx552_cur."!mark_fail"(0)
+    lt rx552_pos, -1, rx552_done
+    eq rx552_pos, -1, rx552_fail
     jump $I10
-  rx549_done:
-    rx549_cur."!cursor_fail"()
-    rx549_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
-    .return (rx549_cur)
+  rx552_done:
+    rx552_cur."!cursor_fail"()
+    rx552_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
+    .return (rx552_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1272816833.94956") :method
 .annotate "line", 4
-    $P551 = self."!PREFIX__!subrule"("scoped", "our")
-    new $P552, "ResizablePMCArray"
-    push $P552, $P551
-    .return ($P552)
+    $P554 = self."!PREFIX__!subrule"("scoped", "our")
+    new $P555, "ResizablePMCArray"
+    push $P555, $P554
+    .return ($P555)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("137_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<has>"  :subid("137_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx556_tgt
-    .local int rx556_pos
-    .local int rx556_off
-    .local int rx556_eos
-    .local int rx556_rep
-    .local pmc rx556_cur
-    (rx556_cur, rx556_pos, rx556_tgt) = self."!cursor_start"()
-    rx556_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
-    .lex unicode:"$\x{a2}", rx556_cur
+    .local string rx559_tgt
+    .local int rx559_pos
+    .local int rx559_off
+    .local int rx559_eos
+    .local int rx559_rep
+    .local pmc rx559_cur
+    (rx559_cur, rx559_pos, rx559_tgt) = self."!cursor_start"()
+    rx559_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
+    .lex unicode:"$\x{a2}", rx559_cur
     .local pmc match
     .lex "$/", match
-    length rx556_eos, rx556_tgt
-    set rx556_off, 0
-    lt rx556_pos, 2, rx556_start
-    sub rx556_off, rx556_pos, 1
-    substr rx556_tgt, rx556_tgt, rx556_off
-  rx556_start:
+    length rx559_eos, rx559_tgt
+    set rx559_off, 0
+    lt rx559_pos, 2, rx559_start
+    sub rx559_off, rx559_pos, 1
+    substr rx559_tgt, rx559_tgt, rx559_off
+  rx559_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan560_done
-    goto rxscan560_scan
-  rxscan560_loop:
-    ($P10) = rx556_cur."from"()
+    ne $I10, -1, rxscan563_done
+    goto rxscan563_scan
+  rxscan563_loop:
+    ($P10) = rx559_cur."from"()
     inc $P10
-    set rx556_pos, $P10
-    ge rx556_pos, rx556_eos, rxscan560_done
-  rxscan560_scan:
-    set_addr $I10, rxscan560_loop
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
-  rxscan560_done:
-.annotate "line", 266
+    set rx559_pos, $P10
+    ge rx559_pos, rx559_eos, rxscan563_done
+  rxscan563_scan:
+    set_addr $I10, rxscan563_loop
+    rx559_cur."!mark_push"(0, rx559_pos, $I10)
+  rxscan563_done:
+.annotate "line", 270
   # rx subcapture "sym"
-    set_addr $I10, rxcap_561_fail
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
+    set_addr $I10, rxcap_564_fail
+    rx559_cur."!mark_push"(0, rx559_pos, $I10)
   # rx literal  "has"
-    add $I11, rx556_pos, 3
-    gt $I11, rx556_eos, rx556_fail
-    sub $I11, rx556_pos, rx556_off
-    substr $S10, rx556_tgt, $I11, 3
-    ne $S10, "has", rx556_fail
-    add rx556_pos, 3
-    set_addr $I10, rxcap_561_fail
-    ($I12, $I11) = rx556_cur."!mark_peek"($I10)
-    rx556_cur."!cursor_pos"($I11)
-    ($P10) = rx556_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx556_pos, "")
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx559_pos, 3
+    gt $I11, rx559_eos, rx559_fail
+    sub $I11, rx559_pos, rx559_off
+    substr $S10, rx559_tgt, $I11, 3
+    ne $S10, "has", rx559_fail
+    add rx559_pos, 3
+    set_addr $I10, rxcap_564_fail
+    ($I12, $I11) = rx559_cur."!mark_peek"($I10)
+    rx559_cur."!cursor_pos"($I11)
+    ($P10) = rx559_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx559_pos, "")
+    rx559_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_561_done
-  rxcap_561_fail:
-    goto rx556_fail
-  rxcap_561_done:
+    goto rxcap_564_done
+  rxcap_564_fail:
+    goto rx559_fail
+  rxcap_564_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx556_cur."!cursor_pos"(rx556_pos)
-    $P10 = rx556_cur."scoped"("has")
-    unless $P10, rx556_fail
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    rx559_cur."!cursor_pos"(rx559_pos)
+    $P10 = rx559_cur."scoped"("has")
+    unless $P10, rx559_fail
+    rx559_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx556_pos = $P10."pos"()
+    rx559_pos = $P10."pos"()
   # rx pass
-    rx556_cur."!cursor_pass"(rx556_pos, "scope_declarator:sym<has>")
-    rx556_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx556_pos)
-    .return (rx556_cur)
-  rx556_fail:
+    rx559_cur."!cursor_pass"(rx559_pos, "scope_declarator:sym<has>")
+    rx559_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx559_pos)
+    .return (rx559_cur)
+  rx559_fail:
 .annotate "line", 4
-    (rx556_rep, rx556_pos, $I10, $P10) = rx556_cur."!mark_fail"(0)
-    lt rx556_pos, -1, rx556_done
-    eq rx556_pos, -1, rx556_fail
+    (rx559_rep, rx559_pos, $I10, $P10) = rx559_cur."!mark_fail"(0)
+    lt rx559_pos, -1, rx559_done
+    eq rx559_pos, -1, rx559_fail
     jump $I10
-  rx556_done:
-    rx556_cur."!cursor_fail"()
-    rx556_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
-    .return (rx556_cur)
+  rx559_done:
+    rx559_cur."!cursor_fail"()
+    rx559_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
+    .return (rx559_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1272816833.94956") :method
 .annotate "line", 4
-    $P558 = self."!PREFIX__!subrule"("scoped", "has")
-    new $P559, "ResizablePMCArray"
-    push $P559, $P558
-    .return ($P559)
+    $P561 = self."!PREFIX__!subrule"("scoped", "has")
+    new $P562, "ResizablePMCArray"
+    push $P562, $P561
+    .return ($P562)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("139_1267204702.05125") :method :outer("11_1267204702.05125")
-    .param pmc param_563
-.annotate "line", 268
-    .lex "$*SCOPE", param_563
+.sub "scoped"  :subid("139_1272816833.94956") :method :outer("11_1272816833.94956")
+    .param pmc param_566
+.annotate "line", 272
+    .lex "$*SCOPE", param_566
 .annotate "line", 4
-    .local string rx564_tgt
-    .local int rx564_pos
-    .local int rx564_off
-    .local int rx564_eos
-    .local int rx564_rep
-    .local pmc rx564_cur
-    (rx564_cur, rx564_pos, rx564_tgt) = self."!cursor_start"()
-    rx564_cur."!cursor_debug"("START ", "scoped")
-    .lex unicode:"$\x{a2}", rx564_cur
-    .local pmc match
-    .lex "$/", match
-    length rx564_eos, rx564_tgt
-    set rx564_off, 0
-    lt rx564_pos, 2, rx564_start
-    sub rx564_off, rx564_pos, 1
-    substr rx564_tgt, rx564_tgt, rx564_off
-  rx564_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan567_done
-    goto rxscan567_scan
-  rxscan567_loop:
-    ($P10) = rx564_cur."from"()
-    inc $P10
-    set rx564_pos, $P10
-    ge rx564_pos, rx564_eos, rxscan567_done
-  rxscan567_scan:
-    set_addr $I10, rxscan567_loop
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-  rxscan567_done:
-  alt568_0:
-.annotate "line", 268
-    set_addr $I10, alt568_1
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-.annotate "line", 269
+    .local string rx567_tgt
+    .local int rx567_pos
+    .local int rx567_off
+    .local int rx567_eos
+    .local int rx567_rep
+    .local pmc rx567_cur
+    (rx567_cur, rx567_pos, rx567_tgt) = self."!cursor_start"()
+    rx567_cur."!cursor_debug"("START ", "scoped")
+    .lex unicode:"$\x{a2}", rx567_cur
+    .local pmc match
+    .lex "$/", match
+    length rx567_eos, rx567_tgt
+    set rx567_off, 0
+    lt rx567_pos, 2, rx567_start
+    sub rx567_off, rx567_pos, 1
+    substr rx567_tgt, rx567_tgt, rx567_off
+  rx567_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan570_done
+    goto rxscan570_scan
+  rxscan570_loop:
+    ($P10) = rx567_cur."from"()
+    inc $P10
+    set rx567_pos, $P10
+    ge rx567_pos, rx567_eos, rxscan570_done
+  rxscan570_scan:
+    set_addr $I10, rxscan570_loop
+    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+  rxscan570_done:
+  alt571_0:
+.annotate "line", 272
+    set_addr $I10, alt571_1
+    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+.annotate "line", 273
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
   # rx subrule "variable_declarator" subtype=capture negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."variable_declarator"()
-    unless $P10, rx564_fail
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."variable_declarator"()
+    unless $P10, rx567_fail
+    rx567_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable_declarator")
-    rx564_pos = $P10."pos"()
+    rx567_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
-    goto alt568_end
-  alt568_1:
-.annotate "line", 270
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
+    goto alt571_end
+  alt571_1:
+.annotate "line", 274
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."routine_declarator"()
-    unless $P10, rx564_fail
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."routine_declarator"()
+    unless $P10, rx567_fail
+    rx567_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx564_pos = $P10."pos"()
+    rx567_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
-  alt568_end:
-.annotate "line", 268
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
+  alt571_end:
+.annotate "line", 272
   # rx pass
-    rx564_cur."!cursor_pass"(rx564_pos, "scoped")
-    rx564_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx564_pos)
-    .return (rx564_cur)
-  rx564_fail:
+    rx567_cur."!cursor_pass"(rx567_pos, "scoped")
+    rx567_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx567_pos)
+    .return (rx567_cur)
+  rx567_fail:
 .annotate "line", 4
-    (rx564_rep, rx564_pos, $I10, $P10) = rx564_cur."!mark_fail"(0)
-    lt rx564_pos, -1, rx564_done
-    eq rx564_pos, -1, rx564_fail
+    (rx567_rep, rx567_pos, $I10, $P10) = rx567_cur."!mark_fail"(0)
+    lt rx567_pos, -1, rx567_done
+    eq rx567_pos, -1, rx567_fail
     jump $I10
-  rx564_done:
-    rx564_cur."!cursor_fail"()
-    rx564_cur."!cursor_debug"("FAIL  ", "scoped")
-    .return (rx564_cur)
+  rx567_done:
+    rx567_cur."!cursor_fail"()
+    rx567_cur."!cursor_debug"("FAIL  ", "scoped")
+    .return (rx567_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("140_1267204702.05125") :method
+.sub "!PREFIX__scoped"  :subid("140_1272816833.94956") :method
 .annotate "line", 4
-    new $P566, "ResizablePMCArray"
-    push $P566, ""
-    push $P566, ""
-    .return ($P566)
+    new $P569, "ResizablePMCArray"
+    push $P569, ""
+    push $P569, ""
+    .return ($P569)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("141_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "variable_declarator"  :subid("141_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx574_tgt
-    .local int rx574_pos
-    .local int rx574_off
-    .local int rx574_eos
-    .local int rx574_rep
-    .local pmc rx574_cur
-    (rx574_cur, rx574_pos, rx574_tgt) = self."!cursor_start"()
-    rx574_cur."!cursor_debug"("START ", "variable_declarator")
-    .lex unicode:"$\x{a2}", rx574_cur
-    .local pmc match
-    .lex "$/", match
-    length rx574_eos, rx574_tgt
-    set rx574_off, 0
-    lt rx574_pos, 2, rx574_start
-    sub rx574_off, rx574_pos, 1
-    substr rx574_tgt, rx574_tgt, rx574_off
-  rx574_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan578_done
-    goto rxscan578_scan
-  rxscan578_loop:
-    ($P10) = rx574_cur."from"()
-    inc $P10
-    set rx574_pos, $P10
-    ge rx574_pos, rx574_eos, rxscan578_done
-  rxscan578_scan:
-    set_addr $I10, rxscan578_loop
-    rx574_cur."!mark_push"(0, rx574_pos, $I10)
-  rxscan578_done:
-.annotate "line", 273
+    .local string rx577_tgt
+    .local int rx577_pos
+    .local int rx577_off
+    .local int rx577_eos
+    .local int rx577_rep
+    .local pmc rx577_cur
+    (rx577_cur, rx577_pos, rx577_tgt) = self."!cursor_start"()
+    rx577_cur."!cursor_debug"("START ", "variable_declarator")
+    .lex unicode:"$\x{a2}", rx577_cur
+    .local pmc match
+    .lex "$/", match
+    length rx577_eos, rx577_tgt
+    set rx577_off, 0
+    lt rx577_pos, 2, rx577_start
+    sub rx577_off, rx577_pos, 1
+    substr rx577_tgt, rx577_tgt, rx577_off
+  rx577_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan581_done
+    goto rxscan581_scan
+  rxscan581_loop:
+    ($P10) = rx577_cur."from"()
+    inc $P10
+    set rx577_pos, $P10
+    ge rx577_pos, rx577_eos, rxscan581_done
+  rxscan581_scan:
+    set_addr $I10, rxscan581_loop
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
+  rxscan581_done:
+.annotate "line", 277
   # rx subrule "variable" subtype=capture negate=
-    rx574_cur."!cursor_pos"(rx574_pos)
-    $P10 = rx574_cur."variable"()
-    unless $P10, rx574_fail
-    rx574_cur."!mark_push"(0, -1, 0, $P10)
+    rx577_cur."!cursor_pos"(rx577_pos)
+    $P10 = rx577_cur."variable"()
+    unless $P10, rx577_fail
+    rx577_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx574_pos = $P10."pos"()
+    rx577_pos = $P10."pos"()
   # rx pass
-    rx574_cur."!cursor_pass"(rx574_pos, "variable_declarator")
-    rx574_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx574_pos)
-    .return (rx574_cur)
-  rx574_fail:
+    rx577_cur."!cursor_pass"(rx577_pos, "variable_declarator")
+    rx577_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx577_pos)
+    .return (rx577_cur)
+  rx577_fail:
 .annotate "line", 4
-    (rx574_rep, rx574_pos, $I10, $P10) = rx574_cur."!mark_fail"(0)
-    lt rx574_pos, -1, rx574_done
-    eq rx574_pos, -1, rx574_fail
+    (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
+    lt rx577_pos, -1, rx577_done
+    eq rx577_pos, -1, rx577_fail
     jump $I10
-  rx574_done:
-    rx574_cur."!cursor_fail"()
-    rx574_cur."!cursor_debug"("FAIL  ", "variable_declarator")
-    .return (rx574_cur)
+  rx577_done:
+    rx577_cur."!cursor_fail"()
+    rx577_cur."!cursor_debug"("FAIL  ", "variable_declarator")
+    .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("142_1267204702.05125") :method
+.sub "!PREFIX__variable_declarator"  :subid("142_1272816833.94956") :method
 .annotate "line", 4
-    $P576 = self."!PREFIX__!subrule"("variable", "")
-    new $P577, "ResizablePMCArray"
-    push $P577, $P576
-    .return ($P577)
+    $P579 = self."!PREFIX__!subrule"("variable", "")
+    new $P580, "ResizablePMCArray"
+    push $P580, $P579
+    .return ($P580)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("143_1267204702.05125") :method
-.annotate "line", 275
-    $P580 = self."!protoregex"("routine_declarator")
-    .return ($P580)
+.sub "routine_declarator"  :subid("143_1272816833.94956") :method
+.annotate "line", 279
+    $P583 = self."!protoregex"("routine_declarator")
+    .return ($P583)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("144_1267204702.05125") :method
-.annotate "line", 275
-    $P582 = self."!PREFIX__!protoregex"("routine_declarator")
-    .return ($P582)
+.sub "!PREFIX__routine_declarator"  :subid("144_1272816833.94956") :method
+.annotate "line", 279
+    $P585 = self."!PREFIX__!protoregex"("routine_declarator")
+    .return ($P585)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("145_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_declarator:sym<sub>"  :subid("145_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx584_tgt
-    .local int rx584_pos
-    .local int rx584_off
-    .local int rx584_eos
-    .local int rx584_rep
-    .local pmc rx584_cur
-    (rx584_cur, rx584_pos, rx584_tgt) = self."!cursor_start"()
-    rx584_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
-    .lex unicode:"$\x{a2}", rx584_cur
-    .local pmc match
-    .lex "$/", match
-    length rx584_eos, rx584_tgt
-    set rx584_off, 0
-    lt rx584_pos, 2, rx584_start
-    sub rx584_off, rx584_pos, 1
-    substr rx584_tgt, rx584_tgt, rx584_off
-  rx584_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan588_done
-    goto rxscan588_scan
-  rxscan588_loop:
-    ($P10) = rx584_cur."from"()
-    inc $P10
-    set rx584_pos, $P10
-    ge rx584_pos, rx584_eos, rxscan588_done
-  rxscan588_scan:
-    set_addr $I10, rxscan588_loop
-    rx584_cur."!mark_push"(0, rx584_pos, $I10)
-  rxscan588_done:
-.annotate "line", 276
+    .local string rx587_tgt
+    .local int rx587_pos
+    .local int rx587_off
+    .local int rx587_eos
+    .local int rx587_rep
+    .local pmc rx587_cur
+    (rx587_cur, rx587_pos, rx587_tgt) = self."!cursor_start"()
+    rx587_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
+    .lex unicode:"$\x{a2}", rx587_cur
+    .local pmc match
+    .lex "$/", match
+    length rx587_eos, rx587_tgt
+    set rx587_off, 0
+    lt rx587_pos, 2, rx587_start
+    sub rx587_off, rx587_pos, 1
+    substr rx587_tgt, rx587_tgt, rx587_off
+  rx587_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan591_done
+    goto rxscan591_scan
+  rxscan591_loop:
+    ($P10) = rx587_cur."from"()
+    inc $P10
+    set rx587_pos, $P10
+    ge rx587_pos, rx587_eos, rxscan591_done
+  rxscan591_scan:
+    set_addr $I10, rxscan591_loop
+    rx587_cur."!mark_push"(0, rx587_pos, $I10)
+  rxscan591_done:
+.annotate "line", 280
   # rx subcapture "sym"
-    set_addr $I10, rxcap_589_fail
-    rx584_cur."!mark_push"(0, rx584_pos, $I10)
+    set_addr $I10, rxcap_592_fail
+    rx587_cur."!mark_push"(0, rx587_pos, $I10)
   # rx literal  "sub"
-    add $I11, rx584_pos, 3
-    gt $I11, rx584_eos, rx584_fail
-    sub $I11, rx584_pos, rx584_off
-    substr $S10, rx584_tgt, $I11, 3
-    ne $S10, "sub", rx584_fail
-    add rx584_pos, 3
-    set_addr $I10, rxcap_589_fail
-    ($I12, $I11) = rx584_cur."!mark_peek"($I10)
-    rx584_cur."!cursor_pos"($I11)
-    ($P10) = rx584_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx584_pos, "")
-    rx584_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx587_pos, 3
+    gt $I11, rx587_eos, rx587_fail
+    sub $I11, rx587_pos, rx587_off
+    substr $S10, rx587_tgt, $I11, 3
+    ne $S10, "sub", rx587_fail
+    add rx587_pos, 3
+    set_addr $I10, rxcap_592_fail
+    ($I12, $I11) = rx587_cur."!mark_peek"($I10)
+    rx587_cur."!cursor_pos"($I11)
+    ($P10) = rx587_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx587_pos, "")
+    rx587_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_589_done
-  rxcap_589_fail:
-    goto rx584_fail
-  rxcap_589_done:
+    goto rxcap_592_done
+  rxcap_592_fail:
+    goto rx587_fail
+  rxcap_592_done:
   # rx subrule "routine_def" subtype=capture negate=
-    rx584_cur."!cursor_pos"(rx584_pos)
-    $P10 = rx584_cur."routine_def"()
-    unless $P10, rx584_fail
-    rx584_cur."!mark_push"(0, -1, 0, $P10)
+    rx587_cur."!cursor_pos"(rx587_pos)
+    $P10 = rx587_cur."routine_def"()
+    unless $P10, rx587_fail
+    rx587_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_def")
-    rx584_pos = $P10."pos"()
+    rx587_pos = $P10."pos"()
   # rx pass
-    rx584_cur."!cursor_pass"(rx584_pos, "routine_declarator:sym<sub>")
-    rx584_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx584_pos)
-    .return (rx584_cur)
-  rx584_fail:
+    rx587_cur."!cursor_pass"(rx587_pos, "routine_declarator:sym<sub>")
+    rx587_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx587_pos)
+    .return (rx587_cur)
+  rx587_fail:
 .annotate "line", 4
-    (rx584_rep, rx584_pos, $I10, $P10) = rx584_cur."!mark_fail"(0)
-    lt rx584_pos, -1, rx584_done
-    eq rx584_pos, -1, rx584_fail
+    (rx587_rep, rx587_pos, $I10, $P10) = rx587_cur."!mark_fail"(0)
+    lt rx587_pos, -1, rx587_done
+    eq rx587_pos, -1, rx587_fail
     jump $I10
-  rx584_done:
-    rx584_cur."!cursor_fail"()
-    rx584_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
-    .return (rx584_cur)
+  rx587_done:
+    rx587_cur."!cursor_fail"()
+    rx587_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
+    .return (rx587_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1267204702.05125") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1272816833.94956") :method
 .annotate "line", 4
-    $P586 = self."!PREFIX__!subrule"("routine_def", "sub")
-    new $P587, "ResizablePMCArray"
-    push $P587, $P586
-    .return ($P587)
+    $P589 = self."!PREFIX__!subrule"("routine_def", "sub")
+    new $P590, "ResizablePMCArray"
+    push $P590, $P589
+    .return ($P590)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("147_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_declarator:sym<method>"  :subid("147_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx591_tgt
-    .local int rx591_pos
-    .local int rx591_off
-    .local int rx591_eos
-    .local int rx591_rep
-    .local pmc rx591_cur
-    (rx591_cur, rx591_pos, rx591_tgt) = self."!cursor_start"()
-    rx591_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
-    .lex unicode:"$\x{a2}", rx591_cur
-    .local pmc match
-    .lex "$/", match
-    length rx591_eos, rx591_tgt
-    set rx591_off, 0
-    lt rx591_pos, 2, rx591_start
-    sub rx591_off, rx591_pos, 1
-    substr rx591_tgt, rx591_tgt, rx591_off
-  rx591_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan595_done
-    goto rxscan595_scan
-  rxscan595_loop:
-    ($P10) = rx591_cur."from"()
-    inc $P10
-    set rx591_pos, $P10
-    ge rx591_pos, rx591_eos, rxscan595_done
-  rxscan595_scan:
-    set_addr $I10, rxscan595_loop
-    rx591_cur."!mark_push"(0, rx591_pos, $I10)
-  rxscan595_done:
-.annotate "line", 277
+    .local string rx594_tgt
+    .local int rx594_pos
+    .local int rx594_off
+    .local int rx594_eos
+    .local int rx594_rep
+    .local pmc rx594_cur
+    (rx594_cur, rx594_pos, rx594_tgt) = self."!cursor_start"()
+    rx594_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
+    .lex unicode:"$\x{a2}", rx594_cur
+    .local pmc match
+    .lex "$/", match
+    length rx594_eos, rx594_tgt
+    set rx594_off, 0
+    lt rx594_pos, 2, rx594_start
+    sub rx594_off, rx594_pos, 1
+    substr rx594_tgt, rx594_tgt, rx594_off
+  rx594_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan598_done
+    goto rxscan598_scan
+  rxscan598_loop:
+    ($P10) = rx594_cur."from"()
+    inc $P10
+    set rx594_pos, $P10
+    ge rx594_pos, rx594_eos, rxscan598_done
+  rxscan598_scan:
+    set_addr $I10, rxscan598_loop
+    rx594_cur."!mark_push"(0, rx594_pos, $I10)
+  rxscan598_done:
+.annotate "line", 281
   # rx subcapture "sym"
-    set_addr $I10, rxcap_596_fail
-    rx591_cur."!mark_push"(0, rx591_pos, $I10)
+    set_addr $I10, rxcap_599_fail
+    rx594_cur."!mark_push"(0, rx594_pos, $I10)
   # rx literal  "method"
-    add $I11, rx591_pos, 6
-    gt $I11, rx591_eos, rx591_fail
-    sub $I11, rx591_pos, rx591_off
-    substr $S10, rx591_tgt, $I11, 6
-    ne $S10, "method", rx591_fail
-    add rx591_pos, 6
-    set_addr $I10, rxcap_596_fail
-    ($I12, $I11) = rx591_cur."!mark_peek"($I10)
-    rx591_cur."!cursor_pos"($I11)
-    ($P10) = rx591_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx591_pos, "")
-    rx591_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx594_pos, 6
+    gt $I11, rx594_eos, rx594_fail
+    sub $I11, rx594_pos, rx594_off
+    substr $S10, rx594_tgt, $I11, 6
+    ne $S10, "method", rx594_fail
+    add rx594_pos, 6
+    set_addr $I10, rxcap_599_fail
+    ($I12, $I11) = rx594_cur."!mark_peek"($I10)
+    rx594_cur."!cursor_pos"($I11)
+    ($P10) = rx594_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx594_pos, "")
+    rx594_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_596_done
-  rxcap_596_fail:
-    goto rx591_fail
-  rxcap_596_done:
+    goto rxcap_599_done
+  rxcap_599_fail:
+    goto rx594_fail
+  rxcap_599_done:
   # rx subrule "method_def" subtype=capture negate=
-    rx591_cur."!cursor_pos"(rx591_pos)
-    $P10 = rx591_cur."method_def"()
-    unless $P10, rx591_fail
-    rx591_cur."!mark_push"(0, -1, 0, $P10)
+    rx594_cur."!cursor_pos"(rx594_pos)
+    $P10 = rx594_cur."method_def"()
+    unless $P10, rx594_fail
+    rx594_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("method_def")
-    rx591_pos = $P10."pos"()
+    rx594_pos = $P10."pos"()
   # rx pass
-    rx591_cur."!cursor_pass"(rx591_pos, "routine_declarator:sym<method>")
-    rx591_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx591_pos)
-    .return (rx591_cur)
-  rx591_fail:
+    rx594_cur."!cursor_pass"(rx594_pos, "routine_declarator:sym<method>")
+    rx594_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx594_pos)
+    .return (rx594_cur)
+  rx594_fail:
 .annotate "line", 4
-    (rx591_rep, rx591_pos, $I10, $P10) = rx591_cur."!mark_fail"(0)
-    lt rx591_pos, -1, rx591_done
-    eq rx591_pos, -1, rx591_fail
+    (rx594_rep, rx594_pos, $I10, $P10) = rx594_cur."!mark_fail"(0)
+    lt rx594_pos, -1, rx594_done
+    eq rx594_pos, -1, rx594_fail
     jump $I10
-  rx591_done:
-    rx591_cur."!cursor_fail"()
-    rx591_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
-    .return (rx591_cur)
+  rx594_done:
+    rx594_cur."!cursor_fail"()
+    rx594_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
+    .return (rx594_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1267204702.05125") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1272816833.94956") :method
 .annotate "line", 4
-    $P593 = self."!PREFIX__!subrule"("method_def", "method")
-    new $P594, "ResizablePMCArray"
-    push $P594, $P593
-    .return ($P594)
+    $P596 = self."!PREFIX__!subrule"("method_def", "method")
+    new $P597, "ResizablePMCArray"
+    push $P597, $P596
+    .return ($P597)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("149_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_def"  :subid("149_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx598_tgt
-    .local int rx598_pos
-    .local int rx598_off
-    .local int rx598_eos
-    .local int rx598_rep
-    .local pmc rx598_cur
-    (rx598_cur, rx598_pos, rx598_tgt) = self."!cursor_start"()
-    rx598_cur."!cursor_debug"("START ", "routine_def")
-    rx598_cur."!cursor_caparray"("deflongname", "sigil")
-    .lex unicode:"$\x{a2}", rx598_cur
+    .local string rx601_tgt
+    .local int rx601_pos
+    .local int rx601_off
+    .local int rx601_eos
+    .local int rx601_rep
+    .local pmc rx601_cur
+    (rx601_cur, rx601_pos, rx601_tgt) = self."!cursor_start"()
+    rx601_cur."!cursor_debug"("START ", "routine_def")
+    rx601_cur."!cursor_caparray"("sigil", "deflongname")
+    .lex unicode:"$\x{a2}", rx601_cur
     .local pmc match
     .lex "$/", match
-    length rx598_eos, rx598_tgt
-    set rx598_off, 0
-    lt rx598_pos, 2, rx598_start
-    sub rx598_off, rx598_pos, 1
-    substr rx598_tgt, rx598_tgt, rx598_off
-  rx598_start:
+    length rx601_eos, rx601_tgt
+    set rx601_off, 0
+    lt rx601_pos, 2, rx601_start
+    sub rx601_off, rx601_pos, 1
+    substr rx601_tgt, rx601_tgt, rx601_off
+  rx601_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan601_done
-    goto rxscan601_scan
-  rxscan601_loop:
-    ($P10) = rx598_cur."from"()
+    ne $I10, -1, rxscan604_done
+    goto rxscan604_scan
+  rxscan604_loop:
+    ($P10) = rx601_cur."from"()
     inc $P10
-    set rx598_pos, $P10
-    ge rx598_pos, rx598_eos, rxscan601_done
-  rxscan601_scan:
-    set_addr $I10, rxscan601_loop
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  rxscan601_done:
-.annotate "line", 279
+    set rx601_pos, $P10
+    ge rx601_pos, rx601_eos, rxscan604_done
+  rxscan604_scan:
+    set_addr $I10, rxscan604_loop
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  rxscan604_done:
+.annotate "line", 283
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 280
-  # rx rxquantr603 ** 0..1
-    set_addr $I609, rxquantr603_done
-    rx598_cur."!mark_push"(0, rx598_pos, $I609)
-  rxquantr603_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 284
+  # rx rxquantr606 ** 0..1
+    set_addr $I612, rxquantr606_done
+    rx601_cur."!mark_push"(0, rx601_pos, $I612)
+  rxquantr606_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_607_fail
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  # rx rxquantr605 ** 0..1
-    set_addr $I606, rxquantr605_done
-    rx598_cur."!mark_push"(0, rx598_pos, $I606)
-  rxquantr605_loop:
+    set_addr $I10, rxcap_610_fail
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  # rx rxquantr608 ** 0..1
+    set_addr $I609, rxquantr608_done
+    rx601_cur."!mark_push"(0, rx601_pos, $I609)
+  rxquantr608_loop:
   # rx literal  "&"
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, "&", rx598_fail
-    add rx598_pos, 1
-    (rx598_rep) = rx598_cur."!mark_commit"($I606)
-  rxquantr605_done:
-    set_addr $I10, rxcap_607_fail
-    ($I12, $I11) = rx598_cur."!mark_peek"($I10)
-    rx598_cur."!cursor_pos"($I11)
-    ($P10) = rx598_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx598_pos, "")
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, "&", rx601_fail
+    add rx601_pos, 1
+    (rx601_rep) = rx601_cur."!mark_commit"($I609)
+  rxquantr608_done:
+    set_addr $I10, rxcap_610_fail
+    ($I12, $I11) = rx601_cur."!mark_peek"($I10)
+    rx601_cur."!cursor_pos"($I11)
+    ($P10) = rx601_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx601_pos, "")
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_607_done
-  rxcap_607_fail:
-    goto rx598_fail
-  rxcap_607_done:
+    goto rxcap_610_done
+  rxcap_610_fail:
+    goto rx601_fail
+  rxcap_610_done:
   # rx subrule "deflongname" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."deflongname"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."deflongname"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-    (rx598_rep) = rx598_cur."!mark_commit"($I609)
-  rxquantr603_done:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 281
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+    (rx601_rep) = rx601_cur."!mark_commit"($I612)
+  rxquantr606_done:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 285
   # rx subrule "newpad" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."newpad"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  alt612_0:
-.annotate "line", 282
-    set_addr $I10, alt612_1
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."newpad"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  alt615_0:
+.annotate "line", 286
+    set_addr $I10, alt615_1
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, "(", rx598_fail
-    add rx598_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, "(", rx601_fail
+    add rx601_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."signature"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."signature"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, ")", rx598_fail
-    add rx598_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-    goto alt612_end
-  alt612_1:
-.annotate "line", 283
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, ")", rx601_fail
+    add rx601_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+    goto alt615_end
+  alt615_1:
+.annotate "line", 287
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  alt612_end:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 284
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  alt615_end:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 288
   # rx subrule "blockoid" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."blockoid"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."blockoid"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 279
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 283
   # rx pass
-    rx598_cur."!cursor_pass"(rx598_pos, "routine_def")
-    rx598_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx598_pos)
-    .return (rx598_cur)
-  rx598_fail:
+    rx601_cur."!cursor_pass"(rx601_pos, "routine_def")
+    rx601_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx601_pos)
+    .return (rx601_cur)
+  rx601_fail:
 .annotate "line", 4
-    (rx598_rep, rx598_pos, $I10, $P10) = rx598_cur."!mark_fail"(0)
-    lt rx598_pos, -1, rx598_done
-    eq rx598_pos, -1, rx598_fail
+    (rx601_rep, rx601_pos, $I10, $P10) = rx601_cur."!mark_fail"(0)
+    lt rx601_pos, -1, rx601_done
+    eq rx601_pos, -1, rx601_fail
     jump $I10
-  rx598_done:
-    rx598_cur."!cursor_fail"()
-    rx598_cur."!cursor_debug"("FAIL  ", "routine_def")
-    .return (rx598_cur)
+  rx601_done:
+    rx601_cur."!cursor_fail"()
+    rx601_cur."!cursor_debug"("FAIL  ", "routine_def")
+    .return (rx601_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("150_1267204702.05125") :method
+.sub "!PREFIX__routine_def"  :subid("150_1272816833.94956") :method
 .annotate "line", 4
-    new $P600, "ResizablePMCArray"
-    push $P600, ""
-    .return ($P600)
+    new $P603, "ResizablePMCArray"
+    push $P603, ""
+    .return ($P603)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("151_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "method_def"  :subid("151_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx622_tgt
-    .local int rx622_pos
-    .local int rx622_off
-    .local int rx622_eos
-    .local int rx622_rep
-    .local pmc rx622_cur
-    (rx622_cur, rx622_pos, rx622_tgt) = self."!cursor_start"()
-    rx622_cur."!cursor_debug"("START ", "method_def")
-    rx622_cur."!cursor_caparray"("deflongname")
-    .lex unicode:"$\x{a2}", rx622_cur
-    .local pmc match
-    .lex "$/", match
-    length rx622_eos, rx622_tgt
-    set rx622_off, 0
-    lt rx622_pos, 2, rx622_start
-    sub rx622_off, rx622_pos, 1
-    substr rx622_tgt, rx622_tgt, rx622_off
-  rx622_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan625_done
-    goto rxscan625_scan
-  rxscan625_loop:
-    ($P10) = rx622_cur."from"()
-    inc $P10
-    set rx622_pos, $P10
-    ge rx622_pos, rx622_eos, rxscan625_done
-  rxscan625_scan:
-    set_addr $I10, rxscan625_loop
-    rx622_cur."!mark_push"(0, rx622_pos, $I10)
-  rxscan625_done:
-.annotate "line", 287
+    .local string rx625_tgt
+    .local int rx625_pos
+    .local int rx625_off
+    .local int rx625_eos
+    .local int rx625_rep
+    .local pmc rx625_cur
+    (rx625_cur, rx625_pos, rx625_tgt) = self."!cursor_start"()
+    rx625_cur."!cursor_debug"("START ", "method_def")
+    rx625_cur."!cursor_caparray"("deflongname")
+    .lex unicode:"$\x{a2}", rx625_cur
+    .local pmc match
+    .lex "$/", match
+    length rx625_eos, rx625_tgt
+    set rx625_off, 0
+    lt rx625_pos, 2, rx625_start
+    sub rx625_off, rx625_pos, 1
+    substr rx625_tgt, rx625_tgt, rx625_off
+  rx625_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan628_done
+    goto rxscan628_scan
+  rxscan628_loop:
+    ($P10) = rx625_cur."from"()
+    inc $P10
+    set rx625_pos, $P10
+    ge rx625_pos, rx625_eos, rxscan628_done
+  rxscan628_scan:
+    set_addr $I10, rxscan628_loop
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  rxscan628_done:
+.annotate "line", 291
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 288
-  # rx rxquantr627 ** 0..1
-    set_addr $I628, rxquantr627_done
-    rx622_cur."!mark_push"(0, rx622_pos, $I628)
-  rxquantr627_loop:
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 292
+  # rx rxquantr630 ** 0..1
+    set_addr $I631, rxquantr630_done
+    rx625_cur."!mark_push"(0, rx625_pos, $I631)
+  rxquantr630_loop:
   # rx subrule "deflongname" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."deflongname"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."deflongname"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx622_pos = $P10."pos"()
-    (rx622_rep) = rx622_cur."!mark_commit"($I628)
-  rxquantr627_done:
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 289
+    rx625_pos = $P10."pos"()
+    (rx625_rep) = rx625_cur."!mark_commit"($I631)
+  rxquantr630_done:
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 293
   # rx subrule "newpad" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."newpad"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  alt631_0:
-.annotate "line", 290
-    set_addr $I10, alt631_1
-    rx622_cur."!mark_push"(0, rx622_pos, $I10)
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."newpad"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  alt634_0:
+.annotate "line", 294
+    set_addr $I10, alt634_1
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx622_pos, 1
-    gt $I11, rx622_eos, rx622_fail
-    sub $I11, rx622_pos, rx622_off
-    substr $S10, rx622_tgt, $I11, 1
-    ne $S10, "(", rx622_fail
-    add rx622_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    add $I11, rx625_pos, 1
+    gt $I11, rx625_eos, rx625_fail
+    sub $I11, rx625_pos, rx625_off
+    substr $S10, rx625_tgt, $I11, 1
+    ne $S10, "(", rx625_fail
+    add rx625_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."signature"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."signature"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx622_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx622_pos, 1
-    gt $I11, rx622_eos, rx622_fail
-    sub $I11, rx622_pos, rx622_off
-    substr $S10, rx622_tgt, $I11, 1
-    ne $S10, ")", rx622_fail
-    add rx622_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-    goto alt631_end
-  alt631_1:
-.annotate "line", 291
+    add $I11, rx625_pos, 1
+    gt $I11, rx625_eos, rx625_fail
+    sub $I11, rx625_pos, rx625_off
+    substr $S10, rx625_tgt, $I11, 1
+    ne $S10, ")", rx625_fail
+    add rx625_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+    goto alt634_end
+  alt634_1:
+.annotate "line", 295
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  alt631_end:
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 292
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  alt634_end:
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 296
   # rx subrule "blockoid" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."blockoid"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."blockoid"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx622_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 287
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 291
   # rx pass
-    rx622_cur."!cursor_pass"(rx622_pos, "method_def")
-    rx622_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx622_pos)
-    .return (rx622_cur)
-  rx622_fail:
+    rx625_cur."!cursor_pass"(rx625_pos, "method_def")
+    rx625_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx625_pos)
+    .return (rx625_cur)
+  rx625_fail:
 .annotate "line", 4
-    (rx622_rep, rx622_pos, $I10, $P10) = rx622_cur."!mark_fail"(0)
-    lt rx622_pos, -1, rx622_done
-    eq rx622_pos, -1, rx622_fail
+    (rx625_rep, rx625_pos, $I10, $P10) = rx625_cur."!mark_fail"(0)
+    lt rx625_pos, -1, rx625_done
+    eq rx625_pos, -1, rx625_fail
     jump $I10
-  rx622_done:
-    rx622_cur."!cursor_fail"()
-    rx622_cur."!cursor_debug"("FAIL  ", "method_def")
-    .return (rx622_cur)
+  rx625_done:
+    rx625_cur."!cursor_fail"()
+    rx625_cur."!cursor_debug"("FAIL  ", "method_def")
+    .return (rx625_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("152_1267204702.05125") :method
+.sub "!PREFIX__method_def"  :subid("152_1272816833.94956") :method
 .annotate "line", 4
-    new $P624, "ResizablePMCArray"
-    push $P624, ""
-    .return ($P624)
+    new $P627, "ResizablePMCArray"
+    push $P627, ""
+    .return ($P627)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("153_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "signature"  :subid("153_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx641_tgt
-    .local int rx641_pos
-    .local int rx641_off
-    .local int rx641_eos
-    .local int rx641_rep
-    .local pmc rx641_cur
-    (rx641_cur, rx641_pos, rx641_tgt) = self."!cursor_start"()
-    rx641_cur."!cursor_debug"("START ", "signature")
-    rx641_cur."!cursor_caparray"("parameter")
-    .lex unicode:"$\x{a2}", rx641_cur
+    .local string rx644_tgt
+    .local int rx644_pos
+    .local int rx644_off
+    .local int rx644_eos
+    .local int rx644_rep
+    .local pmc rx644_cur
+    (rx644_cur, rx644_pos, rx644_tgt) = self."!cursor_start"()
+    rx644_cur."!cursor_debug"("START ", "signature")
+    rx644_cur."!cursor_caparray"("parameter")
+    .lex unicode:"$\x{a2}", rx644_cur
     .local pmc match
     .lex "$/", match
-    length rx641_eos, rx641_tgt
-    set rx641_off, 0
-    lt rx641_pos, 2, rx641_start
-    sub rx641_off, rx641_pos, 1
-    substr rx641_tgt, rx641_tgt, rx641_off
-  rx641_start:
+    length rx644_eos, rx644_tgt
+    set rx644_off, 0
+    lt rx644_pos, 2, rx644_start
+    sub rx644_off, rx644_pos, 1
+    substr rx644_tgt, rx644_tgt, rx644_off
+  rx644_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan644_done
-    goto rxscan644_scan
-  rxscan644_loop:
-    ($P10) = rx641_cur."from"()
+    ne $I10, -1, rxscan647_done
+    goto rxscan647_scan
+  rxscan647_loop:
+    ($P10) = rx644_cur."from"()
     inc $P10
-    set rx641_pos, $P10
-    ge rx641_pos, rx641_eos, rxscan644_done
-  rxscan644_scan:
-    set_addr $I10, rxscan644_loop
-    rx641_cur."!mark_push"(0, rx641_pos, $I10)
-  rxscan644_done:
-.annotate "line", 295
-  # rx rxquantr645 ** 0..1
-    set_addr $I648, rxquantr645_done
-    rx641_cur."!mark_push"(0, rx641_pos, $I648)
-  rxquantr645_loop:
-  # rx rxquantr646 ** 1..*
-    set_addr $I647, rxquantr646_done
-    rx641_cur."!mark_push"(0, -1, $I647)
-  rxquantr646_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."ws"()
-    unless $P10, rx641_fail
-    rx641_pos = $P10."pos"()
+    set rx644_pos, $P10
+    ge rx644_pos, rx644_eos, rxscan647_done
+  rxscan647_scan:
+    set_addr $I10, rxscan647_loop
+    rx644_cur."!mark_push"(0, rx644_pos, $I10)
+  rxscan647_done:
+.annotate "line", 299
+  # rx rxquantr648 ** 0..1
+    set_addr $I651, rxquantr648_done
+    rx644_cur."!mark_push"(0, rx644_pos, $I651)
+  rxquantr648_loop:
+  # rx rxquantr649 ** 1..*
+    set_addr $I650, rxquantr649_done
+    rx644_cur."!mark_push"(0, -1, $I650)
+  rxquantr649_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."ws"()
+    unless $P10, rx644_fail
+    rx644_pos = $P10."pos"()
   # rx subrule "parameter" subtype=capture negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."parameter"()
-    unless $P10, rx641_fail
-    rx641_cur."!mark_push"(0, -1, 0, $P10)
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."parameter"()
+    unless $P10, rx644_fail
+    rx644_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parameter")
-    rx641_pos = $P10."pos"()
+    rx644_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."ws"()
-    unless $P10, rx641_fail
-    rx641_pos = $P10."pos"()
-    (rx641_rep) = rx641_cur."!mark_commit"($I647)
-    rx641_cur."!mark_push"(rx641_rep, rx641_pos, $I647)
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."ws"()
+    unless $P10, rx644_fail
+    rx644_pos = $P10."pos"()
+    (rx644_rep) = rx644_cur."!mark_commit"($I650)
+    rx644_cur."!mark_push"(rx644_rep, rx644_pos, $I650)
   # rx literal  ","
-    add $I11, rx641_pos, 1
-    gt $I11, rx641_eos, rx641_fail
-    sub $I11, rx641_pos, rx641_off
-    substr $S10, rx641_tgt, $I11, 1
-    ne $S10, ",", rx641_fail
-    add rx641_pos, 1
-    goto rxquantr646_loop
-  rxquantr646_done:
-    (rx641_rep) = rx641_cur."!mark_commit"($I648)
-  rxquantr645_done:
+    add $I11, rx644_pos, 1
+    gt $I11, rx644_eos, rx644_fail
+    sub $I11, rx644_pos, rx644_off
+    substr $S10, rx644_tgt, $I11, 1
+    ne $S10, ",", rx644_fail
+    add rx644_pos, 1
+    goto rxquantr649_loop
+  rxquantr649_done:
+    (rx644_rep) = rx644_cur."!mark_commit"($I651)
+  rxquantr648_done:
   # rx pass
-    rx641_cur."!cursor_pass"(rx641_pos, "signature")
-    rx641_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx641_pos)
-    .return (rx641_cur)
-  rx641_fail:
+    rx644_cur."!cursor_pass"(rx644_pos, "signature")
+    rx644_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx644_pos)
+    .return (rx644_cur)
+  rx644_fail:
 .annotate "line", 4
-    (rx641_rep, rx641_pos, $I10, $P10) = rx641_cur."!mark_fail"(0)
-    lt rx641_pos, -1, rx641_done
-    eq rx641_pos, -1, rx641_fail
+    (rx644_rep, rx644_pos, $I10, $P10) = rx644_cur."!mark_fail"(0)
+    lt rx644_pos, -1, rx644_done
+    eq rx644_pos, -1, rx644_fail
     jump $I10
-  rx641_done:
-    rx641_cur."!cursor_fail"()
-    rx641_cur."!cursor_debug"("FAIL  ", "signature")
-    .return (rx641_cur)
+  rx644_done:
+    rx644_cur."!cursor_fail"()
+    rx644_cur."!cursor_debug"("FAIL  ", "signature")
+    .return (rx644_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("154_1267204702.05125") :method
+.sub "!PREFIX__signature"  :subid("154_1272816833.94956") :method
 .annotate "line", 4
-    new $P643, "ResizablePMCArray"
-    push $P643, ""
-    .return ($P643)
+    new $P646, "ResizablePMCArray"
+    push $P646, ""
+    .return ($P646)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("155_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "parameter"  :subid("155_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx650_tgt
-    .local int rx650_pos
-    .local int rx650_off
-    .local int rx650_eos
-    .local int rx650_rep
-    .local pmc rx650_cur
-    (rx650_cur, rx650_pos, rx650_tgt) = self."!cursor_start"()
-    rx650_cur."!cursor_debug"("START ", "parameter")
-    rx650_cur."!cursor_caparray"("default_value")
-    .lex unicode:"$\x{a2}", rx650_cur
+    .local string rx653_tgt
+    .local int rx653_pos
+    .local int rx653_off
+    .local int rx653_eos
+    .local int rx653_rep
+    .local pmc rx653_cur
+    (rx653_cur, rx653_pos, rx653_tgt) = self."!cursor_start"()
+    rx653_cur."!cursor_debug"("START ", "parameter")
+    rx653_cur."!cursor_caparray"("default_value")
+    .lex unicode:"$\x{a2}", rx653_cur
     .local pmc match
     .lex "$/", match
-    length rx650_eos, rx650_tgt
-    set rx650_off, 0
-    lt rx650_pos, 2, rx650_start
-    sub rx650_off, rx650_pos, 1
-    substr rx650_tgt, rx650_tgt, rx650_off
-  rx650_start:
+    length rx653_eos, rx653_tgt
+    set rx653_off, 0
+    lt rx653_pos, 2, rx653_start
+    sub rx653_off, rx653_pos, 1
+    substr rx653_tgt, rx653_tgt, rx653_off
+  rx653_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan656_done
-    goto rxscan656_scan
-  rxscan656_loop:
-    ($P10) = rx650_cur."from"()
+    ne $I10, -1, rxscan659_done
+    goto rxscan659_scan
+  rxscan659_loop:
+    ($P10) = rx653_cur."from"()
     inc $P10
-    set rx650_pos, $P10
-    ge rx650_pos, rx650_eos, rxscan656_done
-  rxscan656_scan:
-    set_addr $I10, rxscan656_loop
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  rxscan656_done:
-  alt657_0:
-.annotate "line", 298
-    set_addr $I10, alt657_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-.annotate "line", 299
+    set rx653_pos, $P10
+    ge rx653_pos, rx653_eos, rxscan659_done
+  rxscan659_scan:
+    set_addr $I10, rxscan659_loop
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+  rxscan659_done:
+  alt660_0:
+.annotate "line", 302
+    set_addr $I10, alt660_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+.annotate "line", 303
   # rx subcapture "quant"
-    set_addr $I10, rxcap_658_fail
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    set_addr $I10, rxcap_661_fail
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "*"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "*", rx650_fail
-    add rx650_pos, 1
-    set_addr $I10, rxcap_658_fail
-    ($I12, $I11) = rx650_cur."!mark_peek"($I10)
-    rx650_cur."!cursor_pos"($I11)
-    ($P10) = rx650_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx650_pos, "")
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "*", rx653_fail
+    add rx653_pos, 1
+    set_addr $I10, rxcap_661_fail
+    ($I12, $I11) = rx653_cur."!mark_peek"($I10)
+    rx653_cur."!cursor_pos"($I11)
+    ($P10) = rx653_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx653_pos, "")
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_658_done
-  rxcap_658_fail:
-    goto rx650_fail
-  rxcap_658_done:
+    goto rxcap_661_done
+  rxcap_661_fail:
+    goto rx653_fail
+  rxcap_661_done:
   # rx subrule "param_var" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."param_var"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."param_var"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx650_pos = $P10."pos"()
-    goto alt657_end
-  alt657_1:
-  alt659_0:
-.annotate "line", 300
-    set_addr $I10, alt659_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    rx653_pos = $P10."pos"()
+    goto alt660_end
+  alt660_1:
+  alt662_0:
+.annotate "line", 304
+    set_addr $I10, alt662_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx subrule "param_var" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."param_var"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."param_var"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx650_pos = $P10."pos"()
-    goto alt659_end
-  alt659_1:
+    rx653_pos = $P10."pos"()
+    goto alt662_end
+  alt662_1:
   # rx subrule "named_param" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."named_param"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."named_param"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("named_param")
-    rx650_pos = $P10."pos"()
-  alt659_end:
+    rx653_pos = $P10."pos"()
+  alt662_end:
   # rx subcapture "quant"
-    set_addr $I10, rxcap_661_fail
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  alt660_0:
-    set_addr $I10, alt660_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    set_addr $I10, rxcap_664_fail
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+  alt663_0:
+    set_addr $I10, alt663_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "?"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "?", rx650_fail
-    add rx650_pos, 1
-    goto alt660_end
-  alt660_1:
-    set_addr $I10, alt660_2
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "?", rx653_fail
+    add rx653_pos, 1
+    goto alt663_end
+  alt663_1:
+    set_addr $I10, alt663_2
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "!"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "!", rx650_fail
-    add rx650_pos, 1
-    goto alt660_end
-  alt660_2:
-  alt660_end:
-    set_addr $I10, rxcap_661_fail
-    ($I12, $I11) = rx650_cur."!mark_peek"($I10)
-    rx650_cur."!cursor_pos"($I11)
-    ($P10) = rx650_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx650_pos, "")
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "!", rx653_fail
+    add rx653_pos, 1
+    goto alt663_end
+  alt663_2:
+  alt663_end:
+    set_addr $I10, rxcap_664_fail
+    ($I12, $I11) = rx653_cur."!mark_peek"($I10)
+    rx653_cur."!cursor_pos"($I11)
+    ($P10) = rx653_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx653_pos, "")
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_661_done
-  rxcap_661_fail:
-    goto rx650_fail
-  rxcap_661_done:
-  alt657_end:
-.annotate "line", 302
-  # rx rxquantr662 ** 0..1
-    set_addr $I663, rxquantr662_done
-    rx650_cur."!mark_push"(0, rx650_pos, $I663)
-  rxquantr662_loop:
+    goto rxcap_664_done
+  rxcap_664_fail:
+    goto rx653_fail
+  rxcap_664_done:
+  alt660_end:
+.annotate "line", 306
+  # rx rxquantr665 ** 0..1
+    set_addr $I666, rxquantr665_done
+    rx653_cur."!mark_push"(0, rx653_pos, $I666)
+  rxquantr665_loop:
   # rx subrule "default_value" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."default_value"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."default_value"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("default_value")
-    rx650_pos = $P10."pos"()
-    (rx650_rep) = rx650_cur."!mark_commit"($I663)
-  rxquantr662_done:
-.annotate "line", 297
+    rx653_pos = $P10."pos"()
+    (rx653_rep) = rx653_cur."!mark_commit"($I666)
+  rxquantr665_done:
+.annotate "line", 301
   # rx pass
-    rx650_cur."!cursor_pass"(rx650_pos, "parameter")
-    rx650_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx650_pos)
-    .return (rx650_cur)
-  rx650_fail:
+    rx653_cur."!cursor_pass"(rx653_pos, "parameter")
+    rx653_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx653_pos)
+    .return (rx653_cur)
+  rx653_fail:
 .annotate "line", 4
-    (rx650_rep, rx650_pos, $I10, $P10) = rx650_cur."!mark_fail"(0)
-    lt rx650_pos, -1, rx650_done
-    eq rx650_pos, -1, rx650_fail
+    (rx653_rep, rx653_pos, $I10, $P10) = rx653_cur."!mark_fail"(0)
+    lt rx653_pos, -1, rx653_done
+    eq rx653_pos, -1, rx653_fail
     jump $I10
-  rx650_done:
-    rx650_cur."!cursor_fail"()
-    rx650_cur."!cursor_debug"("FAIL  ", "parameter")
-    .return (rx650_cur)
+  rx653_done:
+    rx653_cur."!cursor_fail"()
+    rx653_cur."!cursor_debug"("FAIL  ", "parameter")
+    .return (rx653_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("156_1267204702.05125") :method
+.sub "!PREFIX__parameter"  :subid("156_1272816833.94956") :method
 .annotate "line", 4
-    $P652 = self."!PREFIX__!subrule"("named_param", "")
-    $P653 = self."!PREFIX__!subrule"("param_var", "")
-    $P654 = self."!PREFIX__!subrule"("param_var", "*")
-    new $P655, "ResizablePMCArray"
-    push $P655, $P652
-    push $P655, $P653
-    push $P655, $P654
-    .return ($P655)
+    $P655 = self."!PREFIX__!subrule"("named_param", "")
+    $P656 = self."!PREFIX__!subrule"("param_var", "")
+    $P657 = self."!PREFIX__!subrule"("param_var", "*")
+    new $P658, "ResizablePMCArray"
+    push $P658, $P655
+    push $P658, $P656
+    push $P658, $P657
+    .return ($P658)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("157_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "param_var"  :subid("157_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx665_tgt
-    .local int rx665_pos
-    .local int rx665_off
-    .local int rx665_eos
-    .local int rx665_rep
-    .local pmc rx665_cur
-    (rx665_cur, rx665_pos, rx665_tgt) = self."!cursor_start"()
-    rx665_cur."!cursor_debug"("START ", "param_var")
-    rx665_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx665_cur
+    .local string rx668_tgt
+    .local int rx668_pos
+    .local int rx668_off
+    .local int rx668_eos
+    .local int rx668_rep
+    .local pmc rx668_cur
+    (rx668_cur, rx668_pos, rx668_tgt) = self."!cursor_start"()
+    rx668_cur."!cursor_debug"("START ", "param_var")
+    rx668_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx668_cur
     .local pmc match
     .lex "$/", match
-    length rx665_eos, rx665_tgt
-    set rx665_off, 0
-    lt rx665_pos, 2, rx665_start
-    sub rx665_off, rx665_pos, 1
-    substr rx665_tgt, rx665_tgt, rx665_off
-  rx665_start:
+    length rx668_eos, rx668_tgt
+    set rx668_off, 0
+    lt rx668_pos, 2, rx668_start
+    sub rx668_off, rx668_pos, 1
+    substr rx668_tgt, rx668_tgt, rx668_off
+  rx668_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan669_done
-    goto rxscan669_scan
-  rxscan669_loop:
-    ($P10) = rx665_cur."from"()
+    ne $I10, -1, rxscan672_done
+    goto rxscan672_scan
+  rxscan672_loop:
+    ($P10) = rx668_cur."from"()
     inc $P10
-    set rx665_pos, $P10
-    ge rx665_pos, rx665_eos, rxscan669_done
-  rxscan669_scan:
-    set_addr $I10, rxscan669_loop
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
-  rxscan669_done:
-.annotate "line", 306
+    set rx668_pos, $P10
+    ge rx668_pos, rx668_eos, rxscan672_done
+  rxscan672_scan:
+    set_addr $I10, rxscan672_loop
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
+  rxscan672_done:
+.annotate "line", 310
   # rx subrule "sigil" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."sigil"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."sigil"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx665_pos = $P10."pos"()
-  # rx rxquantr670 ** 0..1
-    set_addr $I671, rxquantr670_done
-    rx665_cur."!mark_push"(0, rx665_pos, $I671)
-  rxquantr670_loop:
+    rx668_pos = $P10."pos"()
+  # rx rxquantr673 ** 0..1
+    set_addr $I674, rxquantr673_done
+    rx668_cur."!mark_push"(0, rx668_pos, $I674)
+  rxquantr673_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."twigil"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."twigil"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx665_pos = $P10."pos"()
-    (rx665_rep) = rx665_cur."!mark_commit"($I671)
-  rxquantr670_done:
-  alt672_0:
-.annotate "line", 307
-    set_addr $I10, alt672_1
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
+    rx668_pos = $P10."pos"()
+    (rx668_rep) = rx668_cur."!mark_commit"($I674)
+  rxquantr673_done:
+  alt675_0:
+.annotate "line", 311
+    set_addr $I10, alt675_1
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
   # rx subrule "ident" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."ident"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."ident"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx665_pos = $P10."pos"()
-    goto alt672_end
-  alt672_1:
+    rx668_pos = $P10."pos"()
+    goto alt675_end
+  alt675_1:
   # rx subcapture "name"
-    set_addr $I10, rxcap_673_fail
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
+    set_addr $I10, rxcap_676_fail
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx665_pos, rx665_eos, rx665_fail
-    sub $I10, rx665_pos, rx665_off
-    substr $S10, rx665_tgt, $I10, 1
+    ge rx668_pos, rx668_eos, rx668_fail
+    sub $I10, rx668_pos, rx668_off
+    substr $S10, rx668_tgt, $I10, 1
     index $I11, "/!", $S10
-    lt $I11, 0, rx665_fail
-    inc rx665_pos
-    set_addr $I10, rxcap_673_fail
-    ($I12, $I11) = rx665_cur."!mark_peek"($I10)
-    rx665_cur."!cursor_pos"($I11)
-    ($P10) = rx665_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx665_pos, "")
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx668_fail
+    inc rx668_pos
+    set_addr $I10, rxcap_676_fail
+    ($I12, $I11) = rx668_cur."!mark_peek"($I10)
+    rx668_cur."!cursor_pos"($I11)
+    ($P10) = rx668_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx668_pos, "")
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_673_done
-  rxcap_673_fail:
-    goto rx665_fail
-  rxcap_673_done:
-  alt672_end:
-.annotate "line", 305
+    goto rxcap_676_done
+  rxcap_676_fail:
+    goto rx668_fail
+  rxcap_676_done:
+  alt675_end:
+.annotate "line", 309
   # rx pass
-    rx665_cur."!cursor_pass"(rx665_pos, "param_var")
-    rx665_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx665_pos)
-    .return (rx665_cur)
-  rx665_fail:
+    rx668_cur."!cursor_pass"(rx668_pos, "param_var")
+    rx668_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx668_pos)
+    .return (rx668_cur)
+  rx668_fail:
 .annotate "line", 4
-    (rx665_rep, rx665_pos, $I10, $P10) = rx665_cur."!mark_fail"(0)
-    lt rx665_pos, -1, rx665_done
-    eq rx665_pos, -1, rx665_fail
+    (rx668_rep, rx668_pos, $I10, $P10) = rx668_cur."!mark_fail"(0)
+    lt rx668_pos, -1, rx668_done
+    eq rx668_pos, -1, rx668_fail
     jump $I10
-  rx665_done:
-    rx665_cur."!cursor_fail"()
-    rx665_cur."!cursor_debug"("FAIL  ", "param_var")
-    .return (rx665_cur)
+  rx668_done:
+    rx668_cur."!cursor_fail"()
+    rx668_cur."!cursor_debug"("FAIL  ", "param_var")
+    .return (rx668_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("158_1267204702.05125") :method
+.sub "!PREFIX__param_var"  :subid("158_1272816833.94956") :method
 .annotate "line", 4
-    $P667 = self."!PREFIX__!subrule"("sigil", "")
-    new $P668, "ResizablePMCArray"
-    push $P668, $P667
-    .return ($P668)
+    $P670 = self."!PREFIX__!subrule"("sigil", "")
+    new $P671, "ResizablePMCArray"
+    push $P671, $P670
+    .return ($P671)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("159_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "named_param"  :subid("159_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx675_tgt
-    .local int rx675_pos
-    .local int rx675_off
-    .local int rx675_eos
-    .local int rx675_rep
-    .local pmc rx675_cur
-    (rx675_cur, rx675_pos, rx675_tgt) = self."!cursor_start"()
-    rx675_cur."!cursor_debug"("START ", "named_param")
-    .lex unicode:"$\x{a2}", rx675_cur
+    .local string rx678_tgt
+    .local int rx678_pos
+    .local int rx678_off
+    .local int rx678_eos
+    .local int rx678_rep
+    .local pmc rx678_cur
+    (rx678_cur, rx678_pos, rx678_tgt) = self."!cursor_start"()
+    rx678_cur."!cursor_debug"("START ", "named_param")
+    .lex unicode:"$\x{a2}", rx678_cur
     .local pmc match
     .lex "$/", match
-    length rx675_eos, rx675_tgt
-    set rx675_off, 0
-    lt rx675_pos, 2, rx675_start
-    sub rx675_off, rx675_pos, 1
-    substr rx675_tgt, rx675_tgt, rx675_off
-  rx675_start:
+    length rx678_eos, rx678_tgt
+    set rx678_off, 0
+    lt rx678_pos, 2, rx678_start
+    sub rx678_off, rx678_pos, 1
+    substr rx678_tgt, rx678_tgt, rx678_off
+  rx678_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan679_done
-    goto rxscan679_scan
-  rxscan679_loop:
-    ($P10) = rx675_cur."from"()
+    ne $I10, -1, rxscan682_done
+    goto rxscan682_scan
+  rxscan682_loop:
+    ($P10) = rx678_cur."from"()
     inc $P10
-    set rx675_pos, $P10
-    ge rx675_pos, rx675_eos, rxscan679_done
-  rxscan679_scan:
-    set_addr $I10, rxscan679_loop
-    rx675_cur."!mark_push"(0, rx675_pos, $I10)
-  rxscan679_done:
-.annotate "line", 311
+    set rx678_pos, $P10
+    ge rx678_pos, rx678_eos, rxscan682_done
+  rxscan682_scan:
+    set_addr $I10, rxscan682_loop
+    rx678_cur."!mark_push"(0, rx678_pos, $I10)
+  rxscan682_done:
+.annotate "line", 315
   # rx literal  ":"
-    add $I11, rx675_pos, 1
-    gt $I11, rx675_eos, rx675_fail
-    sub $I11, rx675_pos, rx675_off
-    substr $S10, rx675_tgt, $I11, 1
-    ne $S10, ":", rx675_fail
-    add rx675_pos, 1
+    add $I11, rx678_pos, 1
+    gt $I11, rx678_eos, rx678_fail
+    sub $I11, rx678_pos, rx678_off
+    substr $S10, rx678_tgt, $I11, 1
+    ne $S10, ":", rx678_fail
+    add rx678_pos, 1
   # rx subrule "param_var" subtype=capture negate=
-    rx675_cur."!cursor_pos"(rx675_pos)
-    $P10 = rx675_cur."param_var"()
-    unless $P10, rx675_fail
-    rx675_cur."!mark_push"(0, -1, 0, $P10)
+    rx678_cur."!cursor_pos"(rx678_pos)
+    $P10 = rx678_cur."param_var"()
+    unless $P10, rx678_fail
+    rx678_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx675_pos = $P10."pos"()
-.annotate "line", 310
+    rx678_pos = $P10."pos"()
+.annotate "line", 314
   # rx pass
-    rx675_cur."!cursor_pass"(rx675_pos, "named_param")
-    rx675_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx675_pos)
-    .return (rx675_cur)
-  rx675_fail:
+    rx678_cur."!cursor_pass"(rx678_pos, "named_param")
+    rx678_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx678_pos)
+    .return (rx678_cur)
+  rx678_fail:
 .annotate "line", 4
-    (rx675_rep, rx675_pos, $I10, $P10) = rx675_cur."!mark_fail"(0)
-    lt rx675_pos, -1, rx675_done
-    eq rx675_pos, -1, rx675_fail
+    (rx678_rep, rx678_pos, $I10, $P10) = rx678_cur."!mark_fail"(0)
+    lt rx678_pos, -1, rx678_done
+    eq rx678_pos, -1, rx678_fail
     jump $I10
-  rx675_done:
-    rx675_cur."!cursor_fail"()
-    rx675_cur."!cursor_debug"("FAIL  ", "named_param")
-    .return (rx675_cur)
+  rx678_done:
+    rx678_cur."!cursor_fail"()
+    rx678_cur."!cursor_debug"("FAIL  ", "named_param")
+    .return (rx678_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("160_1267204702.05125") :method
+.sub "!PREFIX__named_param"  :subid("160_1272816833.94956") :method
 .annotate "line", 4
-    $P677 = self."!PREFIX__!subrule"("param_var", ":")
-    new $P678, "ResizablePMCArray"
-    push $P678, $P677
-    .return ($P678)
+    $P680 = self."!PREFIX__!subrule"("param_var", ":")
+    new $P681, "ResizablePMCArray"
+    push $P681, $P680
+    .return ($P681)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("161_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "default_value"  :subid("161_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx681_tgt
-    .local int rx681_pos
-    .local int rx681_off
-    .local int rx681_eos
-    .local int rx681_rep
-    .local pmc rx681_cur
-    (rx681_cur, rx681_pos, rx681_tgt) = self."!cursor_start"()
-    rx681_cur."!cursor_debug"("START ", "default_value")
-    .lex unicode:"$\x{a2}", rx681_cur
+    .local string rx684_tgt
+    .local int rx684_pos
+    .local int rx684_off
+    .local int rx684_eos
+    .local int rx684_rep
+    .local pmc rx684_cur
+    (rx684_cur, rx684_pos, rx684_tgt) = self."!cursor_start"()
+    rx684_cur."!cursor_debug"("START ", "default_value")
+    .lex unicode:"$\x{a2}", rx684_cur
     .local pmc match
     .lex "$/", match
-    length rx681_eos, rx681_tgt
-    set rx681_off, 0
-    lt rx681_pos, 2, rx681_start
-    sub rx681_off, rx681_pos, 1
-    substr rx681_tgt, rx681_tgt, rx681_off
-  rx681_start:
+    length rx684_eos, rx684_tgt
+    set rx684_off, 0
+    lt rx684_pos, 2, rx684_start
+    sub rx684_off, rx684_pos, 1
+    substr rx684_tgt, rx684_tgt, rx684_off
+  rx684_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan684_done
-    goto rxscan684_scan
-  rxscan684_loop:
-    ($P10) = rx681_cur."from"()
+    ne $I10, -1, rxscan687_done
+    goto rxscan687_scan
+  rxscan687_loop:
+    ($P10) = rx684_cur."from"()
     inc $P10
-    set rx681_pos, $P10
-    ge rx681_pos, rx681_eos, rxscan684_done
-  rxscan684_scan:
-    set_addr $I10, rxscan684_loop
-    rx681_cur."!mark_push"(0, rx681_pos, $I10)
-  rxscan684_done:
-.annotate "line", 314
+    set rx684_pos, $P10
+    ge rx684_pos, rx684_eos, rxscan687_done
+  rxscan687_scan:
+    set_addr $I10, rxscan687_loop
+    rx684_cur."!mark_push"(0, rx684_pos, $I10)
+  rxscan687_done:
+.annotate "line", 318
   # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx literal  "="
-    add $I11, rx681_pos, 1
-    gt $I11, rx681_eos, rx681_fail
-    sub $I11, rx681_pos, rx681_off
-    substr $S10, rx681_tgt, $I11, 1
-    ne $S10, "=", rx681_fail
-    add rx681_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    add $I11, rx684_pos, 1
+    gt $I11, rx684_eos, rx684_fail
+    sub $I11, rx684_pos, rx684_off
+    substr $S10, rx684_tgt, $I11, 1
+    ne $S10, "=", rx684_fail
+    add rx684_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."EXPR"("i=")
-    unless $P10, rx681_fail
-    rx681_cur."!mark_push"(0, -1, 0, $P10)
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."EXPR"("i=")
+    unless $P10, rx684_fail
+    rx684_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx681_pos = $P10."pos"()
+    rx684_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx pass
-    rx681_cur."!cursor_pass"(rx681_pos, "default_value")
-    rx681_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx681_pos)
-    .return (rx681_cur)
-  rx681_fail:
+    rx684_cur."!cursor_pass"(rx684_pos, "default_value")
+    rx684_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx684_pos)
+    .return (rx684_cur)
+  rx684_fail:
 .annotate "line", 4
-    (rx681_rep, rx681_pos, $I10, $P10) = rx681_cur."!mark_fail"(0)
-    lt rx681_pos, -1, rx681_done
-    eq rx681_pos, -1, rx681_fail
+    (rx684_rep, rx684_pos, $I10, $P10) = rx684_cur."!mark_fail"(0)
+    lt rx684_pos, -1, rx684_done
+    eq rx684_pos, -1, rx684_fail
     jump $I10
-  rx681_done:
-    rx681_cur."!cursor_fail"()
-    rx681_cur."!cursor_debug"("FAIL  ", "default_value")
-    .return (rx681_cur)
+  rx684_done:
+    rx684_cur."!cursor_fail"()
+    rx684_cur."!cursor_debug"("FAIL  ", "default_value")
+    .return (rx684_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("162_1267204702.05125") :method
+.sub "!PREFIX__default_value"  :subid("162_1272816833.94956") :method
 .annotate "line", 4
-    new $P683, "ResizablePMCArray"
-    push $P683, ""
-    .return ($P683)
+    new $P686, "ResizablePMCArray"
+    push $P686, ""
+    .return ($P686)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("163_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "regex_declarator"  :subid("163_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx689_tgt
-    .local int rx689_pos
-    .local int rx689_off
-    .local int rx689_eos
-    .local int rx689_rep
-    .local pmc rx689_cur
-    (rx689_cur, rx689_pos, rx689_tgt) = self."!cursor_start"()
-    rx689_cur."!cursor_debug"("START ", "regex_declarator")
-    rx689_cur."!cursor_caparray"("signature")
-    .lex unicode:"$\x{a2}", rx689_cur
-    .local pmc match
-    .lex "$/", match
-    length rx689_eos, rx689_tgt
-    set rx689_off, 0
-    lt rx689_pos, 2, rx689_start
-    sub rx689_off, rx689_pos, 1
-    substr rx689_tgt, rx689_tgt, rx689_off
-  rx689_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan692_done
-    goto rxscan692_scan
-  rxscan692_loop:
-    ($P10) = rx689_cur."from"()
-    inc $P10
-    set rx689_pos, $P10
-    ge rx689_pos, rx689_eos, rxscan692_done
-  rxscan692_scan:
-    set_addr $I10, rxscan692_loop
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  rxscan692_done:
-.annotate "line", 316
+    .local string rx692_tgt
+    .local int rx692_pos
+    .local int rx692_off
+    .local int rx692_eos
+    .local int rx692_rep
+    .local pmc rx692_cur
+    (rx692_cur, rx692_pos, rx692_tgt) = self."!cursor_start"()
+    rx692_cur."!cursor_debug"("START ", "regex_declarator")
+    rx692_cur."!cursor_caparray"("signature")
+    .lex unicode:"$\x{a2}", rx692_cur
+    .local pmc match
+    .lex "$/", match
+    length rx692_eos, rx692_tgt
+    set rx692_off, 0
+    lt rx692_pos, 2, rx692_start
+    sub rx692_off, rx692_pos, 1
+    substr rx692_tgt, rx692_tgt, rx692_off
+  rx692_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan695_done
+    goto rxscan695_scan
+  rxscan695_loop:
+    ($P10) = rx692_cur."from"()
+    inc $P10
+    set rx692_pos, $P10
+    ge rx692_pos, rx692_eos, rxscan695_done
+  rxscan695_scan:
+    set_addr $I10, rxscan695_loop
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+  rxscan695_done:
+.annotate "line", 320
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt694_0:
-.annotate "line", 317
-    set_addr $I10, alt694_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 318
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt697_0:
+.annotate "line", 321
+    set_addr $I10, alt697_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+.annotate "line", 322
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subcapture "proto"
-    set_addr $I10, rxcap_696_fail
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    set_addr $I10, rxcap_699_fail
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "proto"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "proto", rx689_fail
-    add rx689_pos, 5
-    set_addr $I10, rxcap_696_fail
-    ($I12, $I11) = rx689_cur."!mark_peek"($I10)
-    rx689_cur."!cursor_pos"($I11)
-    ($P10) = rx689_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx689_pos, "")
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "proto", rx692_fail
+    add rx692_pos, 5
+    set_addr $I10, rxcap_699_fail
+    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
+    rx692_cur."!cursor_pos"($I11)
+    ($P10) = rx692_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx692_pos, "")
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("proto")
-    goto rxcap_696_done
-  rxcap_696_fail:
-    goto rx689_fail
-  rxcap_696_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt698_0:
-    set_addr $I10, alt698_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    goto rxcap_699_done
+  rxcap_699_fail:
+    goto rx692_fail
+  rxcap_699_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt701_0:
+    set_addr $I10, alt701_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "regex", rx689_fail
-    add rx689_pos, 5
-    goto alt698_end
-  alt698_1:
-    set_addr $I10, alt698_2
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "regex", rx692_fail
+    add rx692_pos, 5
+    goto alt701_end
+  alt701_1:
+    set_addr $I10, alt701_2
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "token"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "token", rx689_fail
-    add rx689_pos, 5
-    goto alt698_end
-  alt698_2:
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "token", rx692_fail
+    add rx692_pos, 5
+    goto alt701_end
+  alt701_2:
   # rx literal  "rule"
-    add $I11, rx689_pos, 4
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 4
-    ne $S10, "rule", rx689_fail
-    add rx689_pos, 4
-  alt698_end:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 319
+    add $I11, rx692_pos, 4
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 4
+    ne $S10, "rule", rx692_fail
+    add rx692_pos, 4
+  alt701_end:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 323
   # rx subrule "deflongname" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."deflongname"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."deflongname"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt701_0:
-.annotate "line", 320
-    set_addr $I10, alt701_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 321
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt704_0:
+.annotate "line", 324
+    set_addr $I10, alt704_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+.annotate "line", 325
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "{"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "{", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "{", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "<...>"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "<...>", rx689_fail
-    add rx689_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "<...>", rx692_fail
+    add rx692_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "}", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "}", rx692_fail
+    add rx692_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ENDSTMT"()
-    unless $P10, rx689_fail
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-    goto alt701_end
-  alt701_1:
-.annotate "line", 322
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ENDSTMT"()
+    unless $P10, rx692_fail
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+    goto alt704_end
+  alt704_1:
+.annotate "line", 326
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."panic"("Proto regex body must be <...>")
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt701_end:
-.annotate "line", 323
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."panic"("Proto regex body must be <...>")
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt704_end:
+.annotate "line", 327
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 318
-    goto alt694_end
-  alt694_1:
-.annotate "line", 324
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 322
+    goto alt697_end
+  alt697_1:
+.annotate "line", 328
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subcapture "sym"
-    set_addr $I10, rxcap_711_fail
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  alt710_0:
-    set_addr $I10, alt710_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    set_addr $I10, rxcap_714_fail
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+  alt713_0:
+    set_addr $I10, alt713_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "regex", rx689_fail
-    add rx689_pos, 5
-    goto alt710_end
-  alt710_1:
-    set_addr $I10, alt710_2
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "regex", rx692_fail
+    add rx692_pos, 5
+    goto alt713_end
+  alt713_1:
+    set_addr $I10, alt713_2
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "token"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "token", rx689_fail
-    add rx689_pos, 5
-    goto alt710_end
-  alt710_2:
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "token", rx692_fail
+    add rx692_pos, 5
+    goto alt713_end
+  alt713_2:
   # rx literal  "rule"
-    add $I11, rx689_pos, 4
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 4
-    ne $S10, "rule", rx689_fail
-    add rx689_pos, 4
-  alt710_end:
-    set_addr $I10, rxcap_711_fail
-    ($I12, $I11) = rx689_cur."!mark_peek"($I10)
-    rx689_cur."!cursor_pos"($I11)
-    ($P10) = rx689_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx689_pos, "")
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx692_pos, 4
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 4
+    ne $S10, "rule", rx692_fail
+    add rx692_pos, 4
+  alt713_end:
+    set_addr $I10, rxcap_714_fail
+    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
+    rx692_cur."!cursor_pos"($I11)
+    ($P10) = rx692_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx692_pos, "")
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_711_done
-  rxcap_711_fail:
-    goto rx689_fail
-  rxcap_711_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 325
+    goto rxcap_714_done
+  rxcap_714_fail:
+    goto rx692_fail
+  rxcap_714_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 329
   # rx subrule "deflongname" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."deflongname"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."deflongname"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 326
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 330
   # rx subrule "newpad" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."newpad"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 327
-  # rx rxquantr715 ** 0..1
-    set_addr $I720, rxquantr715_done
-    rx689_cur."!mark_push"(0, rx689_pos, $I720)
-  rxquantr715_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."newpad"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 331
+  # rx rxquantr718 ** 0..1
+    set_addr $I723, rxquantr718_done
+    rx692_cur."!mark_push"(0, rx692_pos, $I723)
+  rxquantr718_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "(", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "(", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."signature"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."signature"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, ")", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-    (rx689_rep) = rx689_cur."!mark_commit"($I720)
-  rxquantr715_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 328
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, ")", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+    (rx692_rep) = rx692_cur."!mark_commit"($I723)
+  rxquantr718_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 332
   # rx reduce name="regex_declarator" key="open"
-    rx689_cur."!cursor_pos"(rx689_pos)
-    rx689_cur."!reduce"("regex_declarator", "open")
+    rx692_cur."!cursor_pos"(rx692_pos)
+    rx692_cur."!reduce"("regex_declarator", "open")
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 329
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 333
   # rx literal  "{"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "{", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "{", rx692_fail
+    add rx692_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "}", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "}", rx692_fail
+    add rx692_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ENDSTMT"()
-    unless $P10, rx689_fail
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt694_end:
-.annotate "line", 330
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ENDSTMT"()
+    unless $P10, rx692_fail
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt697_end:
+.annotate "line", 334
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 316
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 320
   # rx pass
-    rx689_cur."!cursor_pass"(rx689_pos, "regex_declarator")
-    rx689_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx689_pos)
-    .return (rx689_cur)
-  rx689_fail:
+    rx692_cur."!cursor_pass"(rx692_pos, "regex_declarator")
+    rx692_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx692_pos)
+    .return (rx692_cur)
+  rx692_fail:
 .annotate "line", 4
-    (rx689_rep, rx689_pos, $I10, $P10) = rx689_cur."!mark_fail"(0)
-    lt rx689_pos, -1, rx689_done
-    eq rx689_pos, -1, rx689_fail
+    (rx692_rep, rx692_pos, $I10, $P10) = rx692_cur."!mark_fail"(0)
+    lt rx692_pos, -1, rx692_done
+    eq rx692_pos, -1, rx692_fail
     jump $I10
-  rx689_done:
-    rx689_cur."!cursor_fail"()
-    rx689_cur."!cursor_debug"("FAIL  ", "regex_declarator")
-    .return (rx689_cur)
+  rx692_done:
+    rx692_cur."!cursor_fail"()
+    rx692_cur."!cursor_debug"("FAIL  ", "regex_declarator")
+    .return (rx692_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("164_1267204702.05125") :method
+.sub "!PREFIX__regex_declarator"  :subid("164_1272816833.94956") :method
 .annotate "line", 4
-    new $P691, "ResizablePMCArray"
-    push $P691, ""
-    .return ($P691)
+    new $P694, "ResizablePMCArray"
+    push $P694, ""
+    .return ($P694)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("165_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "dotty"  :subid("165_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx726_tgt
-    .local int rx726_pos
-    .local int rx726_off
-    .local int rx726_eos
-    .local int rx726_rep
-    .local pmc rx726_cur
-    (rx726_cur, rx726_pos, rx726_tgt) = self."!cursor_start"()
-    rx726_cur."!cursor_debug"("START ", "dotty")
-    rx726_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx726_cur
+    .local string rx729_tgt
+    .local int rx729_pos
+    .local int rx729_off
+    .local int rx729_eos
+    .local int rx729_rep
+    .local pmc rx729_cur
+    (rx729_cur, rx729_pos, rx729_tgt) = self."!cursor_start"()
+    rx729_cur."!cursor_debug"("START ", "dotty")
+    rx729_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx729_cur
     .local pmc match
     .lex "$/", match
-    length rx726_eos, rx726_tgt
-    set rx726_off, 0
-    lt rx726_pos, 2, rx726_start
-    sub rx726_off, rx726_pos, 1
-    substr rx726_tgt, rx726_tgt, rx726_off
-  rx726_start:
+    length rx729_eos, rx729_tgt
+    set rx729_off, 0
+    lt rx729_pos, 2, rx729_start
+    sub rx729_off, rx729_pos, 1
+    substr rx729_tgt, rx729_tgt, rx729_off
+  rx729_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan730_done
-    goto rxscan730_scan
-  rxscan730_loop:
-    ($P10) = rx726_cur."from"()
+    ne $I10, -1, rxscan733_done
+    goto rxscan733_scan
+  rxscan733_loop:
+    ($P10) = rx729_cur."from"()
     inc $P10
-    set rx726_pos, $P10
-    ge rx726_pos, rx726_eos, rxscan730_done
-  rxscan730_scan:
-    set_addr $I10, rxscan730_loop
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
-  rxscan730_done:
-.annotate "line", 334
+    set rx729_pos, $P10
+    ge rx729_pos, rx729_eos, rxscan733_done
+  rxscan733_scan:
+    set_addr $I10, rxscan733_loop
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
+  rxscan733_done:
+.annotate "line", 338
   # rx literal  "."
-    add $I11, rx726_pos, 1
-    gt $I11, rx726_eos, rx726_fail
-    sub $I11, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I11, 1
-    ne $S10, ".", rx726_fail
-    add rx726_pos, 1
-  alt731_0:
-.annotate "line", 335
-    set_addr $I10, alt731_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+    add $I11, rx729_pos, 1
+    gt $I11, rx729_eos, rx729_fail
+    sub $I11, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I11, 1
+    ne $S10, ".", rx729_fail
+    add rx729_pos, 1
+  alt734_0:
+.annotate "line", 339
+    set_addr $I10, alt734_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
   # rx subrule "identifier" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."identifier"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."identifier"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname=identifier")
-    rx726_pos = $P10."pos"()
-    goto alt731_end
-  alt731_1:
-.annotate "line", 336
+    rx729_pos = $P10."pos"()
+    goto alt734_end
+  alt734_1:
+.annotate "line", 340
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "'\"", $S10
-    lt $I11, 0, rx726_fail
+    lt $I11, 0, rx729_fail
   # rx subrule "quote" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."quote"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."quote"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx726_pos = $P10."pos"()
-  alt732_0:
-.annotate "line", 337
-    set_addr $I10, alt732_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+    rx729_pos = $P10."pos"()
+  alt735_0:
+.annotate "line", 341
+    set_addr $I10, alt735_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx726_fail
-    goto alt732_end
-  alt732_1:
+    lt $I11, 0, rx729_fail
+    goto alt735_end
+  alt735_1:
   # rx subrule "panic" subtype=method negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."panic"("Quoted method name requires parenthesized arguments")
-    unless $P10, rx726_fail
-    rx726_pos = $P10."pos"()
-  alt732_end:
-  alt731_end:
-.annotate "line", 343
-  # rx rxquantr733 ** 0..1
-    set_addr $I735, rxquantr733_done
-    rx726_cur."!mark_push"(0, rx726_pos, $I735)
-  rxquantr733_loop:
-  alt734_0:
-.annotate "line", 340
-    set_addr $I10, alt734_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
-.annotate "line", 341
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."panic"("Quoted method name requires parenthesized arguments")
+    unless $P10, rx729_fail
+    rx729_pos = $P10."pos"()
+  alt735_end:
+  alt734_end:
+.annotate "line", 347
+  # rx rxquantr736 ** 0..1
+    set_addr $I738, rxquantr736_done
+    rx729_cur."!mark_push"(0, rx729_pos, $I738)
+  rxquantr736_loop:
+  alt737_0:
+.annotate "line", 344
+    set_addr $I10, alt737_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
+.annotate "line", 345
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx726_fail
+    lt $I11, 0, rx729_fail
   # rx subrule "args" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."args"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."args"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx726_pos = $P10."pos"()
-    goto alt734_end
-  alt734_1:
-.annotate "line", 342
+    rx729_pos = $P10."pos"()
+    goto alt737_end
+  alt737_1:
+.annotate "line", 346
   # rx literal  ":"
-    add $I11, rx726_pos, 1
-    gt $I11, rx726_eos, rx726_fail
-    sub $I11, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I11, 1
-    ne $S10, ":", rx726_fail
-    add rx726_pos, 1
+    add $I11, rx729_pos, 1
+    gt $I11, rx729_eos, rx729_fail
+    sub $I11, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I11, 1
+    ne $S10, ":", rx729_fail
+    add rx729_pos, 1
   # rx charclass s
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    is_cclass $I11, 32, rx726_tgt, $I10
-    unless $I11, rx726_fail
-    inc rx726_pos
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    is_cclass $I11, 32, rx729_tgt, $I10
+    unless $I11, rx729_fail
+    inc rx729_pos
   # rx subrule "arglist" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."arglist"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."arglist"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx726_pos = $P10."pos"()
-  alt734_end:
-.annotate "line", 343
-    (rx726_rep) = rx726_cur."!mark_commit"($I735)
-  rxquantr733_done:
-.annotate "line", 333
+    rx729_pos = $P10."pos"()
+  alt737_end:
+.annotate "line", 347
+    (rx729_rep) = rx729_cur."!mark_commit"($I738)
+  rxquantr736_done:
+.annotate "line", 337
   # rx pass
-    rx726_cur."!cursor_pass"(rx726_pos, "dotty")
-    rx726_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx726_pos)
-    .return (rx726_cur)
-  rx726_fail:
+    rx729_cur."!cursor_pass"(rx729_pos, "dotty")
+    rx729_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx729_pos)
+    .return (rx729_cur)
+  rx729_fail:
 .annotate "line", 4
-    (rx726_rep, rx726_pos, $I10, $P10) = rx726_cur."!mark_fail"(0)
-    lt rx726_pos, -1, rx726_done
-    eq rx726_pos, -1, rx726_fail
+    (rx729_rep, rx729_pos, $I10, $P10) = rx729_cur."!mark_fail"(0)
+    lt rx729_pos, -1, rx729_done
+    eq rx729_pos, -1, rx729_fail
     jump $I10
-  rx726_done:
-    rx726_cur."!cursor_fail"()
-    rx726_cur."!cursor_debug"("FAIL  ", "dotty")
-    .return (rx726_cur)
+  rx729_done:
+    rx729_cur."!cursor_fail"()
+    rx729_cur."!cursor_debug"("FAIL  ", "dotty")
+    .return (rx729_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("166_1267204702.05125") :method
+.sub "!PREFIX__dotty"  :subid("166_1272816833.94956") :method
 .annotate "line", 4
-    $P728 = self."!PREFIX__!subrule"("longname=identifier", ".")
-    new $P729, "ResizablePMCArray"
-    push $P729, "'"
-    push $P729, "\""
-    push $P729, $P728
-    .return ($P729)
+    $P731 = self."!PREFIX__!subrule"("longname=identifier", ".")
+    new $P732, "ResizablePMCArray"
+    push $P732, "'"
+    push $P732, "\""
+    push $P732, $P731
+    .return ($P732)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term"  :subid("167_1267204702.05125") :method
-.annotate "line", 347
-    $P737 = self."!protoregex"("term")
-    .return ($P737)
+.sub "term"  :subid("167_1272816833.94956") :method
+.annotate "line", 351
+    $P740 = self."!protoregex"("term")
+    .return ($P740)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("168_1267204702.05125") :method
-.annotate "line", 347
-    $P739 = self."!PREFIX__!protoregex"("term")
-    .return ($P739)
+.sub "!PREFIX__term"  :subid("168_1272816833.94956") :method
+.annotate "line", 351
+    $P742 = self."!PREFIX__!protoregex"("term")
+    .return ($P742)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("169_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<self>"  :subid("169_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx741_tgt
-    .local int rx741_pos
-    .local int rx741_off
-    .local int rx741_eos
-    .local int rx741_rep
-    .local pmc rx741_cur
-    (rx741_cur, rx741_pos, rx741_tgt) = self."!cursor_start"()
-    rx741_cur."!cursor_debug"("START ", "term:sym<self>")
-    .lex unicode:"$\x{a2}", rx741_cur
-    .local pmc match
-    .lex "$/", match
-    length rx741_eos, rx741_tgt
-    set rx741_off, 0
-    lt rx741_pos, 2, rx741_start
-    sub rx741_off, rx741_pos, 1
-    substr rx741_tgt, rx741_tgt, rx741_off
-  rx741_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan744_done
-    goto rxscan744_scan
-  rxscan744_loop:
-    ($P10) = rx741_cur."from"()
-    inc $P10
-    set rx741_pos, $P10
-    ge rx741_pos, rx741_eos, rxscan744_done
-  rxscan744_scan:
-    set_addr $I10, rxscan744_loop
-    rx741_cur."!mark_push"(0, rx741_pos, $I10)
-  rxscan744_done:
-.annotate "line", 349
+    .local string rx744_tgt
+    .local int rx744_pos
+    .local int rx744_off
+    .local int rx744_eos
+    .local int rx744_rep
+    .local pmc rx744_cur
+    (rx744_cur, rx744_pos, rx744_tgt) = self."!cursor_start"()
+    rx744_cur."!cursor_debug"("START ", "term:sym<self>")
+    .lex unicode:"$\x{a2}", rx744_cur
+    .local pmc match
+    .lex "$/", match
+    length rx744_eos, rx744_tgt
+    set rx744_off, 0
+    lt rx744_pos, 2, rx744_start
+    sub rx744_off, rx744_pos, 1
+    substr rx744_tgt, rx744_tgt, rx744_off
+  rx744_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan747_done
+    goto rxscan747_scan
+  rxscan747_loop:
+    ($P10) = rx744_cur."from"()
+    inc $P10
+    set rx744_pos, $P10
+    ge rx744_pos, rx744_eos, rxscan747_done
+  rxscan747_scan:
+    set_addr $I10, rxscan747_loop
+    rx744_cur."!mark_push"(0, rx744_pos, $I10)
+  rxscan747_done:
+.annotate "line", 353
   # rx subcapture "sym"
-    set_addr $I10, rxcap_745_fail
-    rx741_cur."!mark_push"(0, rx741_pos, $I10)
+    set_addr $I10, rxcap_748_fail
+    rx744_cur."!mark_push"(0, rx744_pos, $I10)
   # rx literal  "self"
-    add $I11, rx741_pos, 4
-    gt $I11, rx741_eos, rx741_fail
-    sub $I11, rx741_pos, rx741_off
-    substr $S10, rx741_tgt, $I11, 4
-    ne $S10, "self", rx741_fail
-    add rx741_pos, 4
-    set_addr $I10, rxcap_745_fail
-    ($I12, $I11) = rx741_cur."!mark_peek"($I10)
-    rx741_cur."!cursor_pos"($I11)
-    ($P10) = rx741_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx741_pos, "")
-    rx741_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx744_pos, 4
+    gt $I11, rx744_eos, rx744_fail
+    sub $I11, rx744_pos, rx744_off
+    substr $S10, rx744_tgt, $I11, 4
+    ne $S10, "self", rx744_fail
+    add rx744_pos, 4
+    set_addr $I10, rxcap_748_fail
+    ($I12, $I11) = rx744_cur."!mark_peek"($I10)
+    rx744_cur."!cursor_pos"($I11)
+    ($P10) = rx744_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx744_pos, "")
+    rx744_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_745_done
-  rxcap_745_fail:
-    goto rx741_fail
-  rxcap_745_done:
+    goto rxcap_748_done
+  rxcap_748_fail:
+    goto rx744_fail
+  rxcap_748_done:
   # rxanchor rwb
-    le rx741_pos, 0, rx741_fail
-    sub $I10, rx741_pos, rx741_off
-    is_cclass $I11, 8192, rx741_tgt, $I10
-    if $I11, rx741_fail
+    le rx744_pos, 0, rx744_fail
+    sub $I10, rx744_pos, rx744_off
+    is_cclass $I11, 8192, rx744_tgt, $I10
+    if $I11, rx744_fail
     dec $I10
-    is_cclass $I11, 8192, rx741_tgt, $I10
-    unless $I11, rx741_fail
+    is_cclass $I11, 8192, rx744_tgt, $I10
+    unless $I11, rx744_fail
   # rx pass
-    rx741_cur."!cursor_pass"(rx741_pos, "term:sym<self>")
-    rx741_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx741_pos)
-    .return (rx741_cur)
-  rx741_fail:
+    rx744_cur."!cursor_pass"(rx744_pos, "term:sym<self>")
+    rx744_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx744_pos)
+    .return (rx744_cur)
+  rx744_fail:
 .annotate "line", 4
-    (rx741_rep, rx741_pos, $I10, $P10) = rx741_cur."!mark_fail"(0)
-    lt rx741_pos, -1, rx741_done
-    eq rx741_pos, -1, rx741_fail
+    (rx744_rep, rx744_pos, $I10, $P10) = rx744_cur."!mark_fail"(0)
+    lt rx744_pos, -1, rx744_done
+    eq rx744_pos, -1, rx744_fail
     jump $I10
-  rx741_done:
-    rx741_cur."!cursor_fail"()
-    rx741_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
-    .return (rx741_cur)
+  rx744_done:
+    rx744_cur."!cursor_fail"()
+    rx744_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
+    .return (rx744_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("170_1267204702.05125") :method
+.sub "!PREFIX__term:sym<self>"  :subid("170_1272816833.94956") :method
 .annotate "line", 4
-    new $P743, "ResizablePMCArray"
-    push $P743, "self"
-    .return ($P743)
+    new $P746, "ResizablePMCArray"
+    push $P746, "self"
+    .return ($P746)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("171_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<identifier>"  :subid("171_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx747_tgt
-    .local int rx747_pos
-    .local int rx747_off
-    .local int rx747_eos
-    .local int rx747_rep
-    .local pmc rx747_cur
-    (rx747_cur, rx747_pos, rx747_tgt) = self."!cursor_start"()
-    rx747_cur."!cursor_debug"("START ", "term:sym<identifier>")
-    .lex unicode:"$\x{a2}", rx747_cur
-    .local pmc match
-    .lex "$/", match
-    length rx747_eos, rx747_tgt
-    set rx747_off, 0
-    lt rx747_pos, 2, rx747_start
-    sub rx747_off, rx747_pos, 1
-    substr rx747_tgt, rx747_tgt, rx747_off
-  rx747_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan751_done
-    goto rxscan751_scan
-  rxscan751_loop:
-    ($P10) = rx747_cur."from"()
-    inc $P10
-    set rx747_pos, $P10
-    ge rx747_pos, rx747_eos, rxscan751_done
-  rxscan751_scan:
-    set_addr $I10, rxscan751_loop
-    rx747_cur."!mark_push"(0, rx747_pos, $I10)
-  rxscan751_done:
-.annotate "line", 352
+    .local string rx750_tgt
+    .local int rx750_pos
+    .local int rx750_off
+    .local int rx750_eos
+    .local int rx750_rep
+    .local pmc rx750_cur
+    (rx750_cur, rx750_pos, rx750_tgt) = self."!cursor_start"()
+    rx750_cur."!cursor_debug"("START ", "term:sym<identifier>")
+    .lex unicode:"$\x{a2}", rx750_cur
+    .local pmc match
+    .lex "$/", match
+    length rx750_eos, rx750_tgt
+    set rx750_off, 0
+    lt rx750_pos, 2, rx750_start
+    sub rx750_off, rx750_pos, 1
+    substr rx750_tgt, rx750_tgt, rx750_off
+  rx750_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan754_done
+    goto rxscan754_scan
+  rxscan754_loop:
+    ($P10) = rx750_cur."from"()
+    inc $P10
+    set rx750_pos, $P10
+    ge rx750_pos, rx750_eos, rxscan754_done
+  rxscan754_scan:
+    set_addr $I10, rxscan754_loop
+    rx750_cur."!mark_push"(0, rx750_pos, $I10)
+  rxscan754_done:
+.annotate "line", 356
   # rx subrule "identifier" subtype=capture negate=
-    rx747_cur."!cursor_pos"(rx747_pos)
-    $P10 = rx747_cur."identifier"()
-    unless $P10, rx747_fail
-    rx747_cur."!mark_push"(0, -1, 0, $P10)
+    rx750_cur."!cursor_pos"(rx750_pos)
+    $P10 = rx750_cur."identifier"()
+    unless $P10, rx750_fail
+    rx750_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx747_pos = $P10."pos"()
+    rx750_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx747_pos, rx747_eos, rx747_fail
-    sub $I10, rx747_pos, rx747_off
-    substr $S10, rx747_tgt, $I10, 1
+    ge rx750_pos, rx750_eos, rx750_fail
+    sub $I10, rx750_pos, rx750_off
+    substr $S10, rx750_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx747_fail
+    lt $I11, 0, rx750_fail
   # rx subrule "args" subtype=capture negate=
-    rx747_cur."!cursor_pos"(rx747_pos)
-    $P10 = rx747_cur."args"()
-    unless $P10, rx747_fail
-    rx747_cur."!mark_push"(0, -1, 0, $P10)
+    rx750_cur."!cursor_pos"(rx750_pos)
+    $P10 = rx750_cur."args"()
+    unless $P10, rx750_fail
+    rx750_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx747_pos = $P10."pos"()
-.annotate "line", 351
+    rx750_pos = $P10."pos"()
+.annotate "line", 355
   # rx pass
-    rx747_cur."!cursor_pass"(rx747_pos, "term:sym<identifier>")
-    rx747_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx747_pos)
-    .return (rx747_cur)
-  rx747_fail:
+    rx750_cur."!cursor_pass"(rx750_pos, "term:sym<identifier>")
+    rx750_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx750_pos)
+    .return (rx750_cur)
+  rx750_fail:
 .annotate "line", 4
-    (rx747_rep, rx747_pos, $I10, $P10) = rx747_cur."!mark_fail"(0)
-    lt rx747_pos, -1, rx747_done
-    eq rx747_pos, -1, rx747_fail
+    (rx750_rep, rx750_pos, $I10, $P10) = rx750_cur."!mark_fail"(0)
+    lt rx750_pos, -1, rx750_done
+    eq rx750_pos, -1, rx750_fail
     jump $I10
-  rx747_done:
-    rx747_cur."!cursor_fail"()
-    rx747_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
-    .return (rx747_cur)
+  rx750_done:
+    rx750_cur."!cursor_fail"()
+    rx750_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
+    .return (rx750_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("172_1267204702.05125") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("172_1272816833.94956") :method
 .annotate "line", 4
-    $P749 = self."!PREFIX__!subrule"("identifier", "")
-    new $P750, "ResizablePMCArray"
-    push $P750, $P749
-    .return ($P750)
+    $P752 = self."!PREFIX__!subrule"("identifier", "")
+    new $P753, "ResizablePMCArray"
+    push $P753, $P752
+    .return ($P753)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("173_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<name>"  :subid("173_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx753_tgt
-    .local int rx753_pos
-    .local int rx753_off
-    .local int rx753_eos
-    .local int rx753_rep
-    .local pmc rx753_cur
-    (rx753_cur, rx753_pos, rx753_tgt) = self."!cursor_start"()
-    rx753_cur."!cursor_debug"("START ", "term:sym<name>")
-    rx753_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx753_cur
+    .local string rx756_tgt
+    .local int rx756_pos
+    .local int rx756_off
+    .local int rx756_eos
+    .local int rx756_rep
+    .local pmc rx756_cur
+    (rx756_cur, rx756_pos, rx756_tgt) = self."!cursor_start"()
+    rx756_cur."!cursor_debug"("START ", "term:sym<name>")
+    rx756_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx756_cur
     .local pmc match
     .lex "$/", match
-    length rx753_eos, rx753_tgt
-    set rx753_off, 0
-    lt rx753_pos, 2, rx753_start
-    sub rx753_off, rx753_pos, 1
-    substr rx753_tgt, rx753_tgt, rx753_off
-  rx753_start:
+    length rx756_eos, rx756_tgt
+    set rx756_off, 0
+    lt rx756_pos, 2, rx756_start
+    sub rx756_off, rx756_pos, 1
+    substr rx756_tgt, rx756_tgt, rx756_off
+  rx756_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan757_done
-    goto rxscan757_scan
-  rxscan757_loop:
-    ($P10) = rx753_cur."from"()
+    ne $I10, -1, rxscan760_done
+    goto rxscan760_scan
+  rxscan760_loop:
+    ($P10) = rx756_cur."from"()
     inc $P10
-    set rx753_pos, $P10
-    ge rx753_pos, rx753_eos, rxscan757_done
-  rxscan757_scan:
-    set_addr $I10, rxscan757_loop
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-  rxscan757_done:
-.annotate "line", 356
+    set rx756_pos, $P10
+    ge rx756_pos, rx756_eos, rxscan760_done
+  rxscan760_scan:
+    set_addr $I10, rxscan760_loop
+    rx756_cur."!mark_push"(0, rx756_pos, $I10)
+  rxscan760_done:
+.annotate "line", 360
   # rx subrule "name" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."name"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
+    rx756_cur."!cursor_pos"(rx756_pos)
+    $P10 = rx756_cur."name"()
+    unless $P10, rx756_fail
+    rx756_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx753_pos = $P10."pos"()
-  # rx rxquantr758 ** 0..1
-    set_addr $I759, rxquantr758_done
-    rx753_cur."!mark_push"(0, rx753_pos, $I759)
-  rxquantr758_loop:
+    rx756_pos = $P10."pos"()
+  # rx rxquantr761 ** 0..1
+    set_addr $I762, rxquantr761_done
+    rx756_cur."!mark_push"(0, rx756_pos, $I762)
+  rxquantr761_loop:
   # rx subrule "args" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."args"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
+    rx756_cur."!cursor_pos"(rx756_pos)
+    $P10 = rx756_cur."args"()
+    unless $P10, rx756_fail
+    rx756_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx753_pos = $P10."pos"()
-    (rx753_rep) = rx753_cur."!mark_commit"($I759)
-  rxquantr758_done:
-.annotate "line", 355
+    rx756_pos = $P10."pos"()
+    (rx756_rep) = rx756_cur."!mark_commit"($I762)
+  rxquantr761_done:
+.annotate "line", 359
   # rx pass
-    rx753_cur."!cursor_pass"(rx753_pos, "term:sym<name>")
-    rx753_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx753_pos)
-    .return (rx753_cur)
-  rx753_fail:
+    rx756_cur."!cursor_pass"(rx756_pos, "term:sym<name>")
+    rx756_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx756_pos)
+    .return (rx756_cur)
+  rx756_fail:
 .annotate "line", 4
-    (rx753_rep, rx753_pos, $I10, $P10) = rx753_cur."!mark_fail"(0)
-    lt rx753_pos, -1, rx753_done
-    eq rx753_pos, -1, rx753_fail
+    (rx756_rep, rx756_pos, $I10, $P10) = rx756_cur."!mark_fail"(0)
+    lt rx756_pos, -1, rx756_done
+    eq rx756_pos, -1, rx756_fail
     jump $I10
-  rx753_done:
-    rx753_cur."!cursor_fail"()
-    rx753_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
-    .return (rx753_cur)
+  rx756_done:
+    rx756_cur."!cursor_fail"()
+    rx756_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
+    .return (rx756_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("174_1267204702.05125") :method
+.sub "!PREFIX__term:sym<name>"  :subid("174_1272816833.94956") :method
 .annotate "line", 4
-    $P755 = self."!PREFIX__!subrule"("name", "")
-    new $P756, "ResizablePMCArray"
-    push $P756, $P755
-    .return ($P756)
+    $P758 = self."!PREFIX__!subrule"("name", "")
+    new $P759, "ResizablePMCArray"
+    push $P759, $P758
+    .return ($P759)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("175_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<pir::op>"  :subid("175_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx761_tgt
-    .local int rx761_pos
-    .local int rx761_off
-    .local int rx761_eos
-    .local int rx761_rep
-    .local pmc rx761_cur
-    (rx761_cur, rx761_pos, rx761_tgt) = self."!cursor_start"()
-    rx761_cur."!cursor_debug"("START ", "term:sym<pir::op>")
-    rx761_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx761_cur
-    .local pmc match
-    .lex "$/", match
-    length rx761_eos, rx761_tgt
-    set rx761_off, 0
-    lt rx761_pos, 2, rx761_start
-    sub rx761_off, rx761_pos, 1
-    substr rx761_tgt, rx761_tgt, rx761_off
-  rx761_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan764_done
-    goto rxscan764_scan
-  rxscan764_loop:
-    ($P10) = rx761_cur."from"()
-    inc $P10
-    set rx761_pos, $P10
-    ge rx761_pos, rx761_eos, rxscan764_done
-  rxscan764_scan:
-    set_addr $I10, rxscan764_loop
-    rx761_cur."!mark_push"(0, rx761_pos, $I10)
-  rxscan764_done:
-.annotate "line", 360
+    .local string rx764_tgt
+    .local int rx764_pos
+    .local int rx764_off
+    .local int rx764_eos
+    .local int rx764_rep
+    .local pmc rx764_cur
+    (rx764_cur, rx764_pos, rx764_tgt) = self."!cursor_start"()
+    rx764_cur."!cursor_debug"("START ", "term:sym<pir::op>")
+    rx764_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx764_cur
+    .local pmc match
+    .lex "$/", match
+    length rx764_eos, rx764_tgt
+    set rx764_off, 0
+    lt rx764_pos, 2, rx764_start
+    sub rx764_off, rx764_pos, 1
+    substr rx764_tgt, rx764_tgt, rx764_off
+  rx764_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan767_done
+    goto rxscan767_scan
+  rxscan767_loop:
+    ($P10) = rx764_cur."from"()
+    inc $P10
+    set rx764_pos, $P10
+    ge rx764_pos, rx764_eos, rxscan767_done
+  rxscan767_scan:
+    set_addr $I10, rxscan767_loop
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  rxscan767_done:
+.annotate "line", 364
   # rx literal  "pir::"
-    add $I11, rx761_pos, 5
-    gt $I11, rx761_eos, rx761_fail
-    sub $I11, rx761_pos, rx761_off
-    substr $S10, rx761_tgt, $I11, 5
-    ne $S10, "pir::", rx761_fail
-    add rx761_pos, 5
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "pir::", rx764_fail
+    add rx764_pos, 5
   # rx subcapture "op"
-    set_addr $I10, rxcap_765_fail
-    rx761_cur."!mark_push"(0, rx761_pos, $I10)
+    set_addr $I10, rxcap_768_fail
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx761_pos, rx761_off
-    find_not_cclass $I11, 8192, rx761_tgt, $I10, rx761_eos
+    sub $I10, rx764_pos, rx764_off
+    find_not_cclass $I11, 8192, rx764_tgt, $I10, rx764_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx761_fail
-    add rx761_pos, rx761_off, $I11
-    set_addr $I10, rxcap_765_fail
-    ($I12, $I11) = rx761_cur."!mark_peek"($I10)
-    rx761_cur."!cursor_pos"($I11)
-    ($P10) = rx761_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx761_pos, "")
-    rx761_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx764_fail
+    add rx764_pos, rx764_off, $I11
+    set_addr $I10, rxcap_768_fail
+    ($I12, $I11) = rx764_cur."!mark_peek"($I10)
+    rx764_cur."!cursor_pos"($I11)
+    ($P10) = rx764_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx764_pos, "")
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("op")
-    goto rxcap_765_done
-  rxcap_765_fail:
-    goto rx761_fail
-  rxcap_765_done:
-  # rx rxquantr766 ** 0..1
-    set_addr $I767, rxquantr766_done
-    rx761_cur."!mark_push"(0, rx761_pos, $I767)
-  rxquantr766_loop:
+    goto rxcap_768_done
+  rxcap_768_fail:
+    goto rx764_fail
+  rxcap_768_done:
+  # rx rxquantr769 ** 0..1
+    set_addr $I770, rxquantr769_done
+    rx764_cur."!mark_push"(0, rx764_pos, $I770)
+  rxquantr769_loop:
   # rx subrule "args" subtype=capture negate=
-    rx761_cur."!cursor_pos"(rx761_pos)
-    $P10 = rx761_cur."args"()
-    unless $P10, rx761_fail
-    rx761_cur."!mark_push"(0, -1, 0, $P10)
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."args"()
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx761_pos = $P10."pos"()
-    (rx761_rep) = rx761_cur."!mark_commit"($I767)
-  rxquantr766_done:
-.annotate "line", 359
+    rx764_pos = $P10."pos"()
+    (rx764_rep) = rx764_cur."!mark_commit"($I770)
+  rxquantr769_done:
+.annotate "line", 363
   # rx pass
-    rx761_cur."!cursor_pass"(rx761_pos, "term:sym<pir::op>")
-    rx761_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx761_pos)
-    .return (rx761_cur)
-  rx761_fail:
+    rx764_cur."!cursor_pass"(rx764_pos, "term:sym<pir::op>")
+    rx764_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx764_pos)
+    .return (rx764_cur)
+  rx764_fail:
 .annotate "line", 4
-    (rx761_rep, rx761_pos, $I10, $P10) = rx761_cur."!mark_fail"(0)
-    lt rx761_pos, -1, rx761_done
-    eq rx761_pos, -1, rx761_fail
+    (rx764_rep, rx764_pos, $I10, $P10) = rx764_cur."!mark_fail"(0)
+    lt rx764_pos, -1, rx764_done
+    eq rx764_pos, -1, rx764_fail
     jump $I10
-  rx761_done:
-    rx761_cur."!cursor_fail"()
-    rx761_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
-    .return (rx761_cur)
+  rx764_done:
+    rx764_cur."!cursor_fail"()
+    rx764_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
+    .return (rx764_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1267204702.05125") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1272816833.94956") :method
 .annotate "line", 4
-    new $P763, "ResizablePMCArray"
-    push $P763, "pir::"
-    .return ($P763)
+    new $P766, "ResizablePMCArray"
+    push $P766, "pir::"
+    .return ($P766)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("177_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "args"  :subid("177_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx769_tgt
-    .local int rx769_pos
-    .local int rx769_off
-    .local int rx769_eos
-    .local int rx769_rep
-    .local pmc rx769_cur
-    (rx769_cur, rx769_pos, rx769_tgt) = self."!cursor_start"()
-    rx769_cur."!cursor_debug"("START ", "args")
-    .lex unicode:"$\x{a2}", rx769_cur
-    .local pmc match
-    .lex "$/", match
-    length rx769_eos, rx769_tgt
-    set rx769_off, 0
-    lt rx769_pos, 2, rx769_start
-    sub rx769_off, rx769_pos, 1
-    substr rx769_tgt, rx769_tgt, rx769_off
-  rx769_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan773_done
-    goto rxscan773_scan
-  rxscan773_loop:
-    ($P10) = rx769_cur."from"()
-    inc $P10
-    set rx769_pos, $P10
-    ge rx769_pos, rx769_eos, rxscan773_done
-  rxscan773_scan:
-    set_addr $I10, rxscan773_loop
-    rx769_cur."!mark_push"(0, rx769_pos, $I10)
-  rxscan773_done:
-.annotate "line", 364
+    .local string rx772_tgt
+    .local int rx772_pos
+    .local int rx772_off
+    .local int rx772_eos
+    .local int rx772_rep
+    .local pmc rx772_cur
+    (rx772_cur, rx772_pos, rx772_tgt) = self."!cursor_start"()
+    rx772_cur."!cursor_debug"("START ", "args")
+    .lex unicode:"$\x{a2}", rx772_cur
+    .local pmc match
+    .lex "$/", match
+    length rx772_eos, rx772_tgt
+    set rx772_off, 0
+    lt rx772_pos, 2, rx772_start
+    sub rx772_off, rx772_pos, 1
+    substr rx772_tgt, rx772_tgt, rx772_off
+  rx772_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan776_done
+    goto rxscan776_scan
+  rxscan776_loop:
+    ($P10) = rx772_cur."from"()
+    inc $P10
+    set rx772_pos, $P10
+    ge rx772_pos, rx772_eos, rxscan776_done
+  rxscan776_scan:
+    set_addr $I10, rxscan776_loop
+    rx772_cur."!mark_push"(0, rx772_pos, $I10)
+  rxscan776_done:
+.annotate "line", 368
   # rx literal  "("
-    add $I11, rx769_pos, 1
-    gt $I11, rx769_eos, rx769_fail
-    sub $I11, rx769_pos, rx769_off
-    substr $S10, rx769_tgt, $I11, 1
-    ne $S10, "(", rx769_fail
-    add rx769_pos, 1
+    add $I11, rx772_pos, 1
+    gt $I11, rx772_eos, rx772_fail
+    sub $I11, rx772_pos, rx772_off
+    substr $S10, rx772_tgt, $I11, 1
+    ne $S10, "(", rx772_fail
+    add rx772_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx769_cur."!cursor_pos"(rx769_pos)
-    $P10 = rx769_cur."arglist"()
-    unless $P10, rx769_fail
-    rx769_cur."!mark_push"(0, -1, 0, $P10)
+    rx772_cur."!cursor_pos"(rx772_pos)
+    $P10 = rx772_cur."arglist"()
+    unless $P10, rx772_fail
+    rx772_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx769_pos = $P10."pos"()
+    rx772_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx769_pos, 1
-    gt $I11, rx769_eos, rx769_fail
-    sub $I11, rx769_pos, rx769_off
-    substr $S10, rx769_tgt, $I11, 1
-    ne $S10, ")", rx769_fail
-    add rx769_pos, 1
-  # rx pass
-    rx769_cur."!cursor_pass"(rx769_pos, "args")
-    rx769_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx769_pos)
-    .return (rx769_cur)
-  rx769_fail:
-.annotate "line", 4
-    (rx769_rep, rx769_pos, $I10, $P10) = rx769_cur."!mark_fail"(0)
-    lt rx769_pos, -1, rx769_done
-    eq rx769_pos, -1, rx769_fail
-    jump $I10
-  rx769_done:
-    rx769_cur."!cursor_fail"()
-    rx769_cur."!cursor_debug"("FAIL  ", "args")
-    .return (rx769_cur)
+    add $I11, rx772_pos, 1
+    gt $I11, rx772_eos, rx772_fail
+    sub $I11, rx772_pos, rx772_off
+    substr $S10, rx772_tgt, $I11, 1
+    ne $S10, ")", rx772_fail
+    add rx772_pos, 1
+  # rx pass
+    rx772_cur."!cursor_pass"(rx772_pos, "args")
+    rx772_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx772_pos)
+    .return (rx772_cur)
+  rx772_fail:
+.annotate "line", 4
+    (rx772_rep, rx772_pos, $I10, $P10) = rx772_cur."!mark_fail"(0)
+    lt rx772_pos, -1, rx772_done
+    eq rx772_pos, -1, rx772_fail
+    jump $I10
+  rx772_done:
+    rx772_cur."!cursor_fail"()
+    rx772_cur."!cursor_debug"("FAIL  ", "args")
+    .return (rx772_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("178_1267204702.05125") :method
-.annotate "line", 4
-    $P771 = self."!PREFIX__!subrule"("arglist", "(")
-    new $P772, "ResizablePMCArray"
-    push $P772, $P771
-    .return ($P772)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("179_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx775_tgt
-    .local int rx775_pos
-    .local int rx775_off
-    .local int rx775_eos
-    .local int rx775_rep
-    .local pmc rx775_cur
-    (rx775_cur, rx775_pos, rx775_tgt) = self."!cursor_start"()
-    rx775_cur."!cursor_debug"("START ", "arglist")
-    .lex unicode:"$\x{a2}", rx775_cur
-    .local pmc match
-    .lex "$/", match
-    length rx775_eos, rx775_tgt
-    set rx775_off, 0
-    lt rx775_pos, 2, rx775_start
-    sub rx775_off, rx775_pos, 1
-    substr rx775_tgt, rx775_tgt, rx775_off
-  rx775_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan779_done
-    goto rxscan779_scan
-  rxscan779_loop:
-    ($P10) = rx775_cur."from"()
-    inc $P10
-    set rx775_pos, $P10
-    ge rx775_pos, rx775_eos, rxscan779_done
-  rxscan779_scan:
-    set_addr $I10, rxscan779_loop
-    rx775_cur."!mark_push"(0, rx775_pos, $I10)
-  rxscan779_done:
-.annotate "line", 368
-  # rx subrule "ws" subtype=method negate=
-    rx775_cur."!cursor_pos"(rx775_pos)
-    $P10 = rx775_cur."ws"()
-    unless $P10, rx775_fail
-    rx775_pos = $P10."pos"()
-  alt780_0:
-.annotate "line", 369
-    set_addr $I10, alt780_1
-    rx775_cur."!mark_push"(0, rx775_pos, $I10)
-.annotate "line", 370
+.sub "!PREFIX__args"  :subid("178_1272816833.94956") :method
+.annotate "line", 4
+    $P774 = self."!PREFIX__!subrule"("arglist", "(")
+    new $P775, "ResizablePMCArray"
+    push $P775, $P774
+    .return ($P775)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "arglist"  :subid("179_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 4
+    .local string rx778_tgt
+    .local int rx778_pos
+    .local int rx778_off
+    .local int rx778_eos
+    .local int rx778_rep
+    .local pmc rx778_cur
+    (rx778_cur, rx778_pos, rx778_tgt) = self."!cursor_start"()
+    rx778_cur."!cursor_debug"("START ", "arglist")
+    .lex unicode:"$\x{a2}", rx778_cur
+    .local pmc match
+    .lex "$/", match
+    length rx778_eos, rx778_tgt
+    set rx778_off, 0
+    lt rx778_pos, 2, rx778_start
+    sub rx778_off, rx778_pos, 1
+    substr rx778_tgt, rx778_tgt, rx778_off
+  rx778_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan782_done
+    goto rxscan782_scan
+  rxscan782_loop:
+    ($P10) = rx778_cur."from"()
+    inc $P10
+    set rx778_pos, $P10
+    ge rx778_pos, rx778_eos, rxscan782_done
+  rxscan782_scan:
+    set_addr $I10, rxscan782_loop
+    rx778_cur."!mark_push"(0, rx778_pos, $I10)
+  rxscan782_done:
+.annotate "line", 372
+  # rx subrule "ws" subtype=method negate=
+    rx778_cur."!cursor_pos"(rx778_pos)
+    $P10 = rx778_cur."ws"()
+    unless $P10, rx778_fail
+    rx778_pos = $P10."pos"()
+  alt783_0:
+.annotate "line", 373
+    set_addr $I10, alt783_1
+    rx778_cur."!mark_push"(0, rx778_pos, $I10)
+.annotate "line", 374
   # rx subrule "EXPR" subtype=capture negate=
-    rx775_cur."!cursor_pos"(rx775_pos)
-    $P10 = rx775_cur."EXPR"("f=")
-    unless $P10, rx775_fail
-    rx775_cur."!mark_push"(0, -1, 0, $P10)
+    rx778_cur."!cursor_pos"(rx778_pos)
+    $P10 = rx778_cur."EXPR"("f=")
+    unless $P10, rx778_fail
+    rx778_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx775_pos = $P10."pos"()
-    goto alt780_end
-  alt780_1:
-  alt780_end:
-.annotate "line", 367
+    rx778_pos = $P10."pos"()
+    goto alt783_end
+  alt783_1:
+  alt783_end:
+.annotate "line", 371
   # rx pass
-    rx775_cur."!cursor_pass"(rx775_pos, "arglist")
-    rx775_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx775_pos)
-    .return (rx775_cur)
-  rx775_fail:
+    rx778_cur."!cursor_pass"(rx778_pos, "arglist")
+    rx778_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx778_pos)
+    .return (rx778_cur)
+  rx778_fail:
 .annotate "line", 4
-    (rx775_rep, rx775_pos, $I10, $P10) = rx775_cur."!mark_fail"(0)
-    lt rx775_pos, -1, rx775_done
-    eq rx775_pos, -1, rx775_fail
+    (rx778_rep, rx778_pos, $I10, $P10) = rx778_cur."!mark_fail"(0)
+    lt rx778_pos, -1, rx778_done
+    eq rx778_pos, -1, rx778_fail
     jump $I10
-  rx775_done:
-    rx775_cur."!cursor_fail"()
-    rx775_cur."!cursor_debug"("FAIL  ", "arglist")
-    .return (rx775_cur)
+  rx778_done:
+    rx778_cur."!cursor_fail"()
+    rx778_cur."!cursor_debug"("FAIL  ", "arglist")
+    .return (rx778_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("180_1267204702.05125") :method
+.sub "!PREFIX__arglist"  :subid("180_1272816833.94956") :method
 .annotate "line", 4
-    $P777 = self."!PREFIX__!subrule"("", "")
-    new $P778, "ResizablePMCArray"
-    push $P778, $P777
-    .return ($P778)
+    $P780 = self."!PREFIX__!subrule"("", "")
+    new $P781, "ResizablePMCArray"
+    push $P781, $P780
+    .return ($P781)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("181_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<value>"  :subid("181_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx782_tgt
-    .local int rx782_pos
-    .local int rx782_off
-    .local int rx782_eos
-    .local int rx782_rep
-    .local pmc rx782_cur
-    (rx782_cur, rx782_pos, rx782_tgt) = self."!cursor_start"()
-    rx782_cur."!cursor_debug"("START ", "term:sym<value>")
-    .lex unicode:"$\x{a2}", rx782_cur
+    .local string rx785_tgt
+    .local int rx785_pos
+    .local int rx785_off
+    .local int rx785_eos
+    .local int rx785_rep
+    .local pmc rx785_cur
+    (rx785_cur, rx785_pos, rx785_tgt) = self."!cursor_start"()
+    rx785_cur."!cursor_debug"("START ", "term:sym<value>")
+    .lex unicode:"$\x{a2}", rx785_cur
     .local pmc match
     .lex "$/", match
-    length rx782_eos, rx782_tgt
-    set rx782_off, 0
-    lt rx782_pos, 2, rx782_start
-    sub rx782_off, rx782_pos, 1
-    substr rx782_tgt, rx782_tgt, rx782_off
-  rx782_start:
+    length rx785_eos, rx785_tgt
+    set rx785_off, 0
+    lt rx785_pos, 2, rx785_start
+    sub rx785_off, rx785_pos, 1
+    substr rx785_tgt, rx785_tgt, rx785_off
+  rx785_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan786_done
-    goto rxscan786_scan
-  rxscan786_loop:
-    ($P10) = rx782_cur."from"()
+    ne $I10, -1, rxscan789_done
+    goto rxscan789_scan
+  rxscan789_loop:
+    ($P10) = rx785_cur."from"()
     inc $P10
-    set rx782_pos, $P10
-    ge rx782_pos, rx782_eos, rxscan786_done
-  rxscan786_scan:
-    set_addr $I10, rxscan786_loop
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
-  rxscan786_done:
-.annotate "line", 376
+    set rx785_pos, $P10
+    ge rx785_pos, rx785_eos, rxscan789_done
+  rxscan789_scan:
+    set_addr $I10, rxscan789_loop
+    rx785_cur."!mark_push"(0, rx785_pos, $I10)
+  rxscan789_done:
+.annotate "line", 380
   # rx subrule "value" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."value"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx785_cur."!cursor_pos"(rx785_pos)
+    $P10 = rx785_cur."value"()
+    unless $P10, rx785_fail
+    rx785_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("value")
-    rx782_pos = $P10."pos"()
+    rx785_pos = $P10."pos"()
   # rx pass
-    rx782_cur."!cursor_pass"(rx782_pos, "term:sym<value>")
-    rx782_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx782_pos)
-    .return (rx782_cur)
-  rx782_fail:
+    rx785_cur."!cursor_pass"(rx785_pos, "term:sym<value>")
+    rx785_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx785_pos)
+    .return (rx785_cur)
+  rx785_fail:
 .annotate "line", 4
-    (rx782_rep, rx782_pos, $I10, $P10) = rx782_cur."!mark_fail"(0)
-    lt rx782_pos, -1, rx782_done
-    eq rx782_pos, -1, rx782_fail
+    (rx785_rep, rx785_pos, $I10, $P10) = rx785_cur."!mark_fail"(0)
+    lt rx785_pos, -1, rx785_done
+    eq rx785_pos, -1, rx785_fail
     jump $I10
-  rx782_done:
-    rx782_cur."!cursor_fail"()
-    rx782_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
-    .return (rx782_cur)
+  rx785_done:
+    rx785_cur."!cursor_fail"()
+    rx785_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
+    .return (rx785_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("182_1267204702.05125") :method
+.sub "!PREFIX__term:sym<value>"  :subid("182_1272816833.94956") :method
 .annotate "line", 4
-    $P784 = self."!PREFIX__!subrule"("value", "")
-    new $P785, "ResizablePMCArray"
-    push $P785, $P784
-    .return ($P785)
+    $P787 = self."!PREFIX__!subrule"("value", "")
+    new $P788, "ResizablePMCArray"
+    push $P788, $P787
+    .return ($P788)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("183_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "value"  :subid("183_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx788_tgt
-    .local int rx788_pos
-    .local int rx788_off
-    .local int rx788_eos
-    .local int rx788_rep
-    .local pmc rx788_cur
-    (rx788_cur, rx788_pos, rx788_tgt) = self."!cursor_start"()
-    rx788_cur."!cursor_debug"("START ", "value")
-    .lex unicode:"$\x{a2}", rx788_cur
+    .local string rx791_tgt
+    .local int rx791_pos
+    .local int rx791_off
+    .local int rx791_eos
+    .local int rx791_rep
+    .local pmc rx791_cur
+    (rx791_cur, rx791_pos, rx791_tgt) = self."!cursor_start"()
+    rx791_cur."!cursor_debug"("START ", "value")
+    .lex unicode:"$\x{a2}", rx791_cur
     .local pmc match
     .lex "$/", match
-    length rx788_eos, rx788_tgt
-    set rx788_off, 0
-    lt rx788_pos, 2, rx788_start
-    sub rx788_off, rx788_pos, 1
-    substr rx788_tgt, rx788_tgt, rx788_off
-  rx788_start:
+    length rx791_eos, rx791_tgt
+    set rx791_off, 0
+    lt rx791_pos, 2, rx791_start
+    sub rx791_off, rx791_pos, 1
+    substr rx791_tgt, rx791_tgt, rx791_off
+  rx791_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan793_done
-    goto rxscan793_scan
-  rxscan793_loop:
-    ($P10) = rx788_cur."from"()
+    ne $I10, -1, rxscan796_done
+    goto rxscan796_scan
+  rxscan796_loop:
+    ($P10) = rx791_cur."from"()
     inc $P10
-    set rx788_pos, $P10
-    ge rx788_pos, rx788_eos, rxscan793_done
-  rxscan793_scan:
-    set_addr $I10, rxscan793_loop
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-  rxscan793_done:
-  alt794_0:
-.annotate "line", 378
-    set_addr $I10, alt794_1
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-.annotate "line", 379
+    set rx791_pos, $P10
+    ge rx791_pos, rx791_eos, rxscan796_done
+  rxscan796_scan:
+    set_addr $I10, rxscan796_loop
+    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+  rxscan796_done:
+  alt797_0:
+.annotate "line", 382
+    set_addr $I10, alt797_1
+    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+.annotate "line", 383
   # rx subrule "quote" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."quote"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
+    rx791_cur."!cursor_pos"(rx791_pos)
+    $P10 = rx791_cur."quote"()
+    unless $P10, rx791_fail
+    rx791_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx788_pos = $P10."pos"()
-    goto alt794_end
-  alt794_1:
-.annotate "line", 380
+    rx791_pos = $P10."pos"()
+    goto alt797_end
+  alt797_1:
+.annotate "line", 384
   # rx subrule "number" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."number"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
+    rx791_cur."!cursor_pos"(rx791_pos)
+    $P10 = rx791_cur."number"()
+    unless $P10, rx791_fail
+    rx791_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("number")
-    rx788_pos = $P10."pos"()
-  alt794_end:
-.annotate "line", 378
+    rx791_pos = $P10."pos"()
+  alt797_end:
+.annotate "line", 382
   # rx pass
-    rx788_cur."!cursor_pass"(rx788_pos, "value")
-    rx788_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx788_pos)
-    .return (rx788_cur)
-  rx788_fail:
+    rx791_cur."!cursor_pass"(rx791_pos, "value")
+    rx791_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx791_pos)
+    .return (rx791_cur)
+  rx791_fail:
 .annotate "line", 4
-    (rx788_rep, rx788_pos, $I10, $P10) = rx788_cur."!mark_fail"(0)
-    lt rx788_pos, -1, rx788_done
-    eq rx788_pos, -1, rx788_fail
+    (rx791_rep, rx791_pos, $I10, $P10) = rx791_cur."!mark_fail"(0)
+    lt rx791_pos, -1, rx791_done
+    eq rx791_pos, -1, rx791_fail
     jump $I10
-  rx788_done:
-    rx788_cur."!cursor_fail"()
-    rx788_cur."!cursor_debug"("FAIL  ", "value")
-    .return (rx788_cur)
+  rx791_done:
+    rx791_cur."!cursor_fail"()
+    rx791_cur."!cursor_debug"("FAIL  ", "value")
+    .return (rx791_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("184_1267204702.05125") :method
+.sub "!PREFIX__value"  :subid("184_1272816833.94956") :method
 .annotate "line", 4
-    $P790 = self."!PREFIX__!subrule"("number", "")
-    $P791 = self."!PREFIX__!subrule"("quote", "")
-    new $P792, "ResizablePMCArray"
-    push $P792, $P790
-    push $P792, $P791
-    .return ($P792)
+    $P793 = self."!PREFIX__!subrule"("number", "")
+    $P794 = self."!PREFIX__!subrule"("quote", "")
+    new $P795, "ResizablePMCArray"
+    push $P795, $P793
+    push $P795, $P794
+    .return ($P795)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("185_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "number"  :subid("185_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx796_tgt
-    .local int rx796_pos
-    .local int rx796_off
-    .local int rx796_eos
-    .local int rx796_rep
-    .local pmc rx796_cur
-    (rx796_cur, rx796_pos, rx796_tgt) = self."!cursor_start"()
-    rx796_cur."!cursor_debug"("START ", "number")
-    .lex unicode:"$\x{a2}", rx796_cur
+    .local string rx799_tgt
+    .local int rx799_pos
+    .local int rx799_off
+    .local int rx799_eos
+    .local int rx799_rep
+    .local pmc rx799_cur
+    (rx799_cur, rx799_pos, rx799_tgt) = self."!cursor_start"()
+    rx799_cur."!cursor_debug"("START ", "number")
+    .lex unicode:"$\x{a2}", rx799_cur
     .local pmc match
     .lex "$/", match
-    length rx796_eos, rx796_tgt
-    set rx796_off, 0
-    lt rx796_pos, 2, rx796_start
-    sub rx796_off, rx796_pos, 1
-    substr rx796_tgt, rx796_tgt, rx796_off
-  rx796_start:
+    length rx799_eos, rx799_tgt
+    set rx799_off, 0
+    lt rx799_pos, 2, rx799_start
+    sub rx799_off, rx799_pos, 1
+    substr rx799_tgt, rx799_tgt, rx799_off
+  rx799_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan799_done
-    goto rxscan799_scan
-  rxscan799_loop:
-    ($P10) = rx796_cur."from"()
+    ne $I10, -1, rxscan802_done
+    goto rxscan802_scan
+  rxscan802_loop:
+    ($P10) = rx799_cur."from"()
     inc $P10
-    set rx796_pos, $P10
-    ge rx796_pos, rx796_eos, rxscan799_done
-  rxscan799_scan:
-    set_addr $I10, rxscan799_loop
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  rxscan799_done:
-.annotate "line", 384
+    set rx799_pos, $P10
+    ge rx799_pos, rx799_eos, rxscan802_done
+  rxscan802_scan:
+    set_addr $I10, rxscan802_loop
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
+  rxscan802_done:
+.annotate "line", 388
   # rx subcapture "sign"
-    set_addr $I10, rxcap_802_fail
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  # rx rxquantr800 ** 0..1
-    set_addr $I801, rxquantr800_done
-    rx796_cur."!mark_push"(0, rx796_pos, $I801)
-  rxquantr800_loop:
+    set_addr $I10, rxcap_805_fail
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
+  # rx rxquantr803 ** 0..1
+    set_addr $I804, rxquantr803_done
+    rx799_cur."!mark_push"(0, rx799_pos, $I804)
+  rxquantr803_loop:
   # rx enumcharlist negate=0 
-    ge rx796_pos, rx796_eos, rx796_fail
-    sub $I10, rx796_pos, rx796_off
-    substr $S10, rx796_tgt, $I10, 1
+    ge rx799_pos, rx799_eos, rx799_fail
+    sub $I10, rx799_pos, rx799_off
+    substr $S10, rx799_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rx796_fail
-    inc rx796_pos
-    (rx796_rep) = rx796_cur."!mark_commit"($I801)
-  rxquantr800_done:
-    set_addr $I10, rxcap_802_fail
-    ($I12, $I11) = rx796_cur."!mark_peek"($I10)
-    rx796_cur."!cursor_pos"($I11)
-    ($P10) = rx796_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx796_pos, "")
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx799_fail
+    inc rx799_pos
+    (rx799_rep) = rx799_cur."!mark_commit"($I804)
+  rxquantr803_done:
+    set_addr $I10, rxcap_805_fail
+    ($I12, $I11) = rx799_cur."!mark_peek"($I10)
+    rx799_cur."!cursor_pos"($I11)
+    ($P10) = rx799_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx799_pos, "")
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sign")
-    goto rxcap_802_done
-  rxcap_802_fail:
-    goto rx796_fail
-  rxcap_802_done:
-  alt803_0:
-.annotate "line", 385
-    set_addr $I10, alt803_1
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
+    goto rxcap_805_done
+  rxcap_805_fail:
+    goto rx799_fail
+  rxcap_805_done:
+  alt806_0:
+.annotate "line", 389
+    set_addr $I10, alt806_1
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
   # rx subrule "dec_number" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."dec_number"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    rx799_cur."!cursor_pos"(rx799_pos)
+    $P10 = rx799_cur."dec_number"()
+    unless $P10, rx799_fail
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dec_number")
-    rx796_pos = $P10."pos"()
-    goto alt803_end
-  alt803_1:
+    rx799_pos = $P10."pos"()
+    goto alt806_end
+  alt806_1:
   # rx subrule "integer" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."integer"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    rx799_cur."!cursor_pos"(rx799_pos)
+    $P10 = rx799_cur."integer"()
+    unless $P10, rx799_fail
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("integer")
-    rx796_pos = $P10."pos"()
-  alt803_end:
-.annotate "line", 383
+    rx799_pos = $P10."pos"()
+  alt806_end:
+.annotate "line", 387
   # rx pass
-    rx796_cur."!cursor_pass"(rx796_pos, "number")
-    rx796_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx796_pos)
-    .return (rx796_cur)
-  rx796_fail:
+    rx799_cur."!cursor_pass"(rx799_pos, "number")
+    rx799_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx799_pos)
+    .return (rx799_cur)
+  rx799_fail:
 .annotate "line", 4
-    (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
-    lt rx796_pos, -1, rx796_done
-    eq rx796_pos, -1, rx796_fail
+    (rx799_rep, rx799_pos, $I10, $P10) = rx799_cur."!mark_fail"(0)
+    lt rx799_pos, -1, rx799_done
+    eq rx799_pos, -1, rx799_fail
     jump $I10
-  rx796_done:
-    rx796_cur."!cursor_fail"()
-    rx796_cur."!cursor_debug"("FAIL  ", "number")
-    .return (rx796_cur)
+  rx799_done:
+    rx799_cur."!cursor_fail"()
+    rx799_cur."!cursor_debug"("FAIL  ", "number")
+    .return (rx799_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("186_1267204702.05125") :method
+.sub "!PREFIX__number"  :subid("186_1272816833.94956") :method
 .annotate "line", 4
-    new $P798, "ResizablePMCArray"
-    push $P798, ""
-    .return ($P798)
+    new $P801, "ResizablePMCArray"
+    push $P801, ""
+    .return ($P801)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("187_1267204702.05125") :method
-.annotate "line", 388
-    $P805 = self."!protoregex"("quote")
-    .return ($P805)
+.sub "quote"  :subid("187_1272816833.94956") :method
+.annotate "line", 392
+    $P808 = self."!protoregex"("quote")
+    .return ($P808)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("188_1267204702.05125") :method
-.annotate "line", 388
-    $P807 = self."!PREFIX__!protoregex"("quote")
-    .return ($P807)
+.sub "!PREFIX__quote"  :subid("188_1272816833.94956") :method
+.annotate "line", 392
+    $P810 = self."!PREFIX__!protoregex"("quote")
+    .return ($P810)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("189_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<apos>"  :subid("189_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx809_tgt
-    .local int rx809_pos
-    .local int rx809_off
-    .local int rx809_eos
-    .local int rx809_rep
-    .local pmc rx809_cur
-    (rx809_cur, rx809_pos, rx809_tgt) = self."!cursor_start"()
-    rx809_cur."!cursor_debug"("START ", "quote:sym<apos>")
-    .lex unicode:"$\x{a2}", rx809_cur
-    .local pmc match
-    .lex "$/", match
-    length rx809_eos, rx809_tgt
-    set rx809_off, 0
-    lt rx809_pos, 2, rx809_start
-    sub rx809_off, rx809_pos, 1
-    substr rx809_tgt, rx809_tgt, rx809_off
-  rx809_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan812_done
-    goto rxscan812_scan
-  rxscan812_loop:
-    ($P10) = rx809_cur."from"()
-    inc $P10
-    set rx809_pos, $P10
-    ge rx809_pos, rx809_eos, rxscan812_done
-  rxscan812_scan:
-    set_addr $I10, rxscan812_loop
-    rx809_cur."!mark_push"(0, rx809_pos, $I10)
-  rxscan812_done:
-.annotate "line", 389
+    .local string rx812_tgt
+    .local int rx812_pos
+    .local int rx812_off
+    .local int rx812_eos
+    .local int rx812_rep
+    .local pmc rx812_cur
+    (rx812_cur, rx812_pos, rx812_tgt) = self."!cursor_start"()
+    rx812_cur."!cursor_debug"("START ", "quote:sym<apos>")
+    .lex unicode:"$\x{a2}", rx812_cur
+    .local pmc match
+    .lex "$/", match
+    length rx812_eos, rx812_tgt
+    set rx812_off, 0
+    lt rx812_pos, 2, rx812_start
+    sub rx812_off, rx812_pos, 1
+    substr rx812_tgt, rx812_tgt, rx812_off
+  rx812_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan815_done
+    goto rxscan815_scan
+  rxscan815_loop:
+    ($P10) = rx812_cur."from"()
+    inc $P10
+    set rx812_pos, $P10
+    ge rx812_pos, rx812_eos, rxscan815_done
+  rxscan815_scan:
+    set_addr $I10, rxscan815_loop
+    rx812_cur."!mark_push"(0, rx812_pos, $I10)
+  rxscan815_done:
+.annotate "line", 393
   # rx enumcharlist negate=0 zerowidth
-    ge rx809_pos, rx809_eos, rx809_fail
-    sub $I10, rx809_pos, rx809_off
-    substr $S10, rx809_tgt, $I10, 1
+    ge rx812_pos, rx812_eos, rx812_fail
+    sub $I10, rx812_pos, rx812_off
+    substr $S10, rx812_tgt, $I10, 1
     index $I11, "'", $S10
-    lt $I11, 0, rx809_fail
+    lt $I11, 0, rx812_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx809_cur."!cursor_pos"(rx809_pos)
-    $P10 = rx809_cur."quote_EXPR"(":q")
-    unless $P10, rx809_fail
-    rx809_cur."!mark_push"(0, -1, 0, $P10)
+    rx812_cur."!cursor_pos"(rx812_pos)
+    $P10 = rx812_cur."quote_EXPR"(":q")
+    unless $P10, rx812_fail
+    rx812_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx809_pos = $P10."pos"()
+    rx812_pos = $P10."pos"()
   # rx pass
-    rx809_cur."!cursor_pass"(rx809_pos, "quote:sym<apos>")
-    rx809_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx809_pos)
-    .return (rx809_cur)
-  rx809_fail:
+    rx812_cur."!cursor_pass"(rx812_pos, "quote:sym<apos>")
+    rx812_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx812_pos)
+    .return (rx812_cur)
+  rx812_fail:
 .annotate "line", 4
-    (rx809_rep, rx809_pos, $I10, $P10) = rx809_cur."!mark_fail"(0)
-    lt rx809_pos, -1, rx809_done
-    eq rx809_pos, -1, rx809_fail
+    (rx812_rep, rx812_pos, $I10, $P10) = rx812_cur."!mark_fail"(0)
+    lt rx812_pos, -1, rx812_done
+    eq rx812_pos, -1, rx812_fail
     jump $I10
-  rx809_done:
-    rx809_cur."!cursor_fail"()
-    rx809_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
-    .return (rx809_cur)
+  rx812_done:
+    rx812_cur."!cursor_fail"()
+    rx812_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
+    .return (rx812_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("190_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("190_1272816833.94956") :method
 .annotate "line", 4
-    new $P811, "ResizablePMCArray"
-    push $P811, "'"
-    .return ($P811)
+    new $P814, "ResizablePMCArray"
+    push $P814, "'"
+    .return ($P814)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("191_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<dblq>"  :subid("191_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx814_tgt
-    .local int rx814_pos
-    .local int rx814_off
-    .local int rx814_eos
-    .local int rx814_rep
-    .local pmc rx814_cur
-    (rx814_cur, rx814_pos, rx814_tgt) = self."!cursor_start"()
-    rx814_cur."!cursor_debug"("START ", "quote:sym<dblq>")
-    .lex unicode:"$\x{a2}", rx814_cur
+    .local string rx817_tgt
+    .local int rx817_pos
+    .local int rx817_off
+    .local int rx817_eos
+    .local int rx817_rep
+    .local pmc rx817_cur
+    (rx817_cur, rx817_pos, rx817_tgt) = self."!cursor_start"()
+    rx817_cur."!cursor_debug"("START ", "quote:sym<dblq>")
+    .lex unicode:"$\x{a2}", rx817_cur
     .local pmc match
     .lex "$/", match
-    length rx814_eos, rx814_tgt
-    set rx814_off, 0
-    lt rx814_pos, 2, rx814_start
-    sub rx814_off, rx814_pos, 1
-    substr rx814_tgt, rx814_tgt, rx814_off
-  rx814_start:
+    length rx817_eos, rx817_tgt
+    set rx817_off, 0
+    lt rx817_pos, 2, rx817_start
+    sub rx817_off, rx817_pos, 1
+    substr rx817_tgt, rx817_tgt, rx817_off
+  rx817_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan817_done
-    goto rxscan817_scan
-  rxscan817_loop:
-    ($P10) = rx814_cur."from"()
+    ne $I10, -1, rxscan820_done
+    goto rxscan820_scan
+  rxscan820_loop:
+    ($P10) = rx817_cur."from"()
     inc $P10
-    set rx814_pos, $P10
-    ge rx814_pos, rx814_eos, rxscan817_done
-  rxscan817_scan:
-    set_addr $I10, rxscan817_loop
-    rx814_cur."!mark_push"(0, rx814_pos, $I10)
-  rxscan817_done:
-.annotate "line", 390
+    set rx817_pos, $P10
+    ge rx817_pos, rx817_eos, rxscan820_done
+  rxscan820_scan:
+    set_addr $I10, rxscan820_loop
+    rx817_cur."!mark_push"(0, rx817_pos, $I10)
+  rxscan820_done:
+.annotate "line", 394
   # rx enumcharlist negate=0 zerowidth
-    ge rx814_pos, rx814_eos, rx814_fail
-    sub $I10, rx814_pos, rx814_off
-    substr $S10, rx814_tgt, $I10, 1
+    ge rx817_pos, rx817_eos, rx817_fail
+    sub $I10, rx817_pos, rx817_off
+    substr $S10, rx817_tgt, $I10, 1
     index $I11, "\"", $S10
-    lt $I11, 0, rx814_fail
+    lt $I11, 0, rx817_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx814_cur."!cursor_pos"(rx814_pos)
-    $P10 = rx814_cur."quote_EXPR"(":qq")
-    unless $P10, rx814_fail
-    rx814_cur."!mark_push"(0, -1, 0, $P10)
+    rx817_cur."!cursor_pos"(rx817_pos)
+    $P10 = rx817_cur."quote_EXPR"(":qq")
+    unless $P10, rx817_fail
+    rx817_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx814_pos = $P10."pos"()
+    rx817_pos = $P10."pos"()
   # rx pass
-    rx814_cur."!cursor_pass"(rx814_pos, "quote:sym<dblq>")
-    rx814_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx814_pos)
-    .return (rx814_cur)
-  rx814_fail:
+    rx817_cur."!cursor_pass"(rx817_pos, "quote:sym<dblq>")
+    rx817_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx817_pos)
+    .return (rx817_cur)
+  rx817_fail:
 .annotate "line", 4
-    (rx814_rep, rx814_pos, $I10, $P10) = rx814_cur."!mark_fail"(0)
-    lt rx814_pos, -1, rx814_done
-    eq rx814_pos, -1, rx814_fail
+    (rx817_rep, rx817_pos, $I10, $P10) = rx817_cur."!mark_fail"(0)
+    lt rx817_pos, -1, rx817_done
+    eq rx817_pos, -1, rx817_fail
     jump $I10
-  rx814_done:
-    rx814_cur."!cursor_fail"()
-    rx814_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
-    .return (rx814_cur)
+  rx817_done:
+    rx817_cur."!cursor_fail"()
+    rx817_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
+    .return (rx817_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1272816833.94956") :method
 .annotate "line", 4
-    new $P816, "ResizablePMCArray"
-    push $P816, "\""
-    .return ($P816)
+    new $P819, "ResizablePMCArray"
+    push $P819, "\""
+    .return ($P819)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("193_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<q>"  :subid("193_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx819_tgt
-    .local int rx819_pos
-    .local int rx819_off
-    .local int rx819_eos
-    .local int rx819_rep
-    .local pmc rx819_cur
-    (rx819_cur, rx819_pos, rx819_tgt) = self."!cursor_start"()
-    rx819_cur."!cursor_debug"("START ", "quote:sym<q>")
-    .lex unicode:"$\x{a2}", rx819_cur
+    .local string rx822_tgt
+    .local int rx822_pos
+    .local int rx822_off
+    .local int rx822_eos
+    .local int rx822_rep
+    .local pmc rx822_cur
+    (rx822_cur, rx822_pos, rx822_tgt) = self."!cursor_start"()
+    rx822_cur."!cursor_debug"("START ", "quote:sym<q>")
+    .lex unicode:"$\x{a2}", rx822_cur
     .local pmc match
     .lex "$/", match
-    length rx819_eos, rx819_tgt
-    set rx819_off, 0
-    lt rx819_pos, 2, rx819_start
-    sub rx819_off, rx819_pos, 1
-    substr rx819_tgt, rx819_tgt, rx819_off
-  rx819_start:
+    length rx822_eos, rx822_tgt
+    set rx822_off, 0
+    lt rx822_pos, 2, rx822_start
+    sub rx822_off, rx822_pos, 1
+    substr rx822_tgt, rx822_tgt, rx822_off
+  rx822_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan823_done
-    goto rxscan823_scan
-  rxscan823_loop:
-    ($P10) = rx819_cur."from"()
+    ne $I10, -1, rxscan826_done
+    goto rxscan826_scan
+  rxscan826_loop:
+    ($P10) = rx822_cur."from"()
     inc $P10
-    set rx819_pos, $P10
-    ge rx819_pos, rx819_eos, rxscan823_done
-  rxscan823_scan:
-    set_addr $I10, rxscan823_loop
-    rx819_cur."!mark_push"(0, rx819_pos, $I10)
-  rxscan823_done:
-.annotate "line", 391
+    set rx822_pos, $P10
+    ge rx822_pos, rx822_eos, rxscan826_done
+  rxscan826_scan:
+    set_addr $I10, rxscan826_loop
+    rx822_cur."!mark_push"(0, rx822_pos, $I10)
+  rxscan826_done:
+.annotate "line", 395
   # rx literal  "q"
-    add $I11, rx819_pos, 1
-    gt $I11, rx819_eos, rx819_fail
-    sub $I11, rx819_pos, rx819_off
-    substr $S10, rx819_tgt, $I11, 1
-    ne $S10, "q", rx819_fail
-    add rx819_pos, 1
+    add $I11, rx822_pos, 1
+    gt $I11, rx822_eos, rx822_fail
+    sub $I11, rx822_pos, rx822_off
+    substr $S10, rx822_tgt, $I11, 1
+    ne $S10, "q", rx822_fail
+    add rx822_pos, 1
+  # rxanchor rwb
+    le rx822_pos, 0, rx822_fail
+    sub $I10, rx822_pos, rx822_off
+    is_cclass $I11, 8192, rx822_tgt, $I10
+    if $I11, rx822_fail
+    dec $I10
+    is_cclass $I11, 8192, rx822_tgt, $I10
+    unless $I11, rx822_fail
   # rx enumcharlist negate=1 zerowidth
-    ge rx819_pos, rx819_eos, rx819_fail
-    sub $I10, rx819_pos, rx819_off
-    substr $S10, rx819_tgt, $I10, 1
+    ge rx822_pos, rx822_eos, rx822_fail
+    sub $I10, rx822_pos, rx822_off
+    substr $S10, rx822_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx819_fail
+    ge $I11, 0, rx822_fail
   # rx subrule "ws" subtype=method negate=
-    rx819_cur."!cursor_pos"(rx819_pos)
-    $P10 = rx819_cur."ws"()
-    unless $P10, rx819_fail
-    rx819_pos = $P10."pos"()
+    rx822_cur."!cursor_pos"(rx822_pos)
+    $P10 = rx822_cur."ws"()
+    unless $P10, rx822_fail
+    rx822_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx819_cur."!cursor_pos"(rx819_pos)
-    $P10 = rx819_cur."quote_EXPR"(":q")
-    unless $P10, rx819_fail
-    rx819_cur."!mark_push"(0, -1, 0, $P10)
+    rx822_cur."!cursor_pos"(rx822_pos)
+    $P10 = rx822_cur."quote_EXPR"(":q")
+    unless $P10, rx822_fail
+    rx822_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx819_pos = $P10."pos"()
+    rx822_pos = $P10."pos"()
   # rx pass
-    rx819_cur."!cursor_pass"(rx819_pos, "quote:sym<q>")
-    rx819_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx819_pos)
-    .return (rx819_cur)
-  rx819_fail:
+    rx822_cur."!cursor_pass"(rx822_pos, "quote:sym<q>")
+    rx822_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx822_pos)
+    .return (rx822_cur)
+  rx822_fail:
 .annotate "line", 4
-    (rx819_rep, rx819_pos, $I10, $P10) = rx819_cur."!mark_fail"(0)
-    lt rx819_pos, -1, rx819_done
-    eq rx819_pos, -1, rx819_fail
+    (rx822_rep, rx822_pos, $I10, $P10) = rx822_cur."!mark_fail"(0)
+    lt rx822_pos, -1, rx822_done
+    eq rx822_pos, -1, rx822_fail
     jump $I10
-  rx819_done:
-    rx819_cur."!cursor_fail"()
-    rx819_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
-    .return (rx819_cur)
+  rx822_done:
+    rx822_cur."!cursor_fail"()
+    rx822_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    .return (rx822_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("194_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("194_1272816833.94956") :method
 .annotate "line", 4
-    $P821 = self."!PREFIX__!subrule"("", "q")
-    new $P822, "ResizablePMCArray"
-    push $P822, $P821
-    .return ($P822)
+    $P824 = self."!PREFIX__!subrule"("", "q")
+    new $P825, "ResizablePMCArray"
+    push $P825, $P824
+    .return ($P825)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("195_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<qq>"  :subid("195_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx825_tgt
-    .local int rx825_pos
-    .local int rx825_off
-    .local int rx825_eos
-    .local int rx825_rep
-    .local pmc rx825_cur
-    (rx825_cur, rx825_pos, rx825_tgt) = self."!cursor_start"()
-    rx825_cur."!cursor_debug"("START ", "quote:sym<qq>")
-    .lex unicode:"$\x{a2}", rx825_cur
+    .local string rx828_tgt
+    .local int rx828_pos
+    .local int rx828_off
+    .local int rx828_eos
+    .local int rx828_rep
+    .local pmc rx828_cur
+    (rx828_cur, rx828_pos, rx828_tgt) = self."!cursor_start"()
+    rx828_cur."!cursor_debug"("START ", "quote:sym<qq>")
+    .lex unicode:"$\x{a2}", rx828_cur
     .local pmc match
     .lex "$/", match
-    length rx825_eos, rx825_tgt
-    set rx825_off, 0
-    lt rx825_pos, 2, rx825_start
-    sub rx825_off, rx825_pos, 1
-    substr rx825_tgt, rx825_tgt, rx825_off
-  rx825_start:
+    length rx828_eos, rx828_tgt
+    set rx828_off, 0
+    lt rx828_pos, 2, rx828_start
+    sub rx828_off, rx828_pos, 1
+    substr rx828_tgt, rx828_tgt, rx828_off
+  rx828_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan829_done
-    goto rxscan829_scan
-  rxscan829_loop:
-    ($P10) = rx825_cur."from"()
+    ne $I10, -1, rxscan832_done
+    goto rxscan832_scan
+  rxscan832_loop:
+    ($P10) = rx828_cur."from"()
     inc $P10
-    set rx825_pos, $P10
-    ge rx825_pos, rx825_eos, rxscan829_done
-  rxscan829_scan:
-    set_addr $I10, rxscan829_loop
-    rx825_cur."!mark_push"(0, rx825_pos, $I10)
-  rxscan829_done:
-.annotate "line", 392
+    set rx828_pos, $P10
+    ge rx828_pos, rx828_eos, rxscan832_done
+  rxscan832_scan:
+    set_addr $I10, rxscan832_loop
+    rx828_cur."!mark_push"(0, rx828_pos, $I10)
+  rxscan832_done:
+.annotate "line", 396
   # rx literal  "qq"
-    add $I11, rx825_pos, 2
-    gt $I11, rx825_eos, rx825_fail
-    sub $I11, rx825_pos, rx825_off
-    substr $S10, rx825_tgt, $I11, 2
-    ne $S10, "qq", rx825_fail
-    add rx825_pos, 2
+    add $I11, rx828_pos, 2
+    gt $I11, rx828_eos, rx828_fail
+    sub $I11, rx828_pos, rx828_off
+    substr $S10, rx828_tgt, $I11, 2
+    ne $S10, "qq", rx828_fail
+    add rx828_pos, 2
+  # rxanchor rwb
+    le rx828_pos, 0, rx828_fail
+    sub $I10, rx828_pos, rx828_off
+    is_cclass $I11, 8192, rx828_tgt, $I10
+    if $I11, rx828_fail
+    dec $I10
+    is_cclass $I11, 8192, rx828_tgt, $I10
+    unless $I11, rx828_fail
   # rx enumcharlist negate=1 zerowidth
-    ge rx825_pos, rx825_eos, rx825_fail
-    sub $I10, rx825_pos, rx825_off
-    substr $S10, rx825_tgt, $I10, 1
+    ge rx828_pos, rx828_eos, rx828_fail
+    sub $I10, rx828_pos, rx828_off
+    substr $S10, rx828_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx825_fail
+    ge $I11, 0, rx828_fail
   # rx subrule "ws" subtype=method negate=
-    rx825_cur."!cursor_pos"(rx825_pos)
-    $P10 = rx825_cur."ws"()
-    unless $P10, rx825_fail
-    rx825_pos = $P10."pos"()
+    rx828_cur."!cursor_pos"(rx828_pos)
+    $P10 = rx828_cur."ws"()
+    unless $P10, rx828_fail
+    rx828_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx825_cur."!cursor_pos"(rx825_pos)
-    $P10 = rx825_cur."quote_EXPR"(":qq")
-    unless $P10, rx825_fail
-    rx825_cur."!mark_push"(0, -1, 0, $P10)
+    rx828_cur."!cursor_pos"(rx828_pos)
+    $P10 = rx828_cur."quote_EXPR"(":qq")
+    unless $P10, rx828_fail
+    rx828_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx825_pos = $P10."pos"()
+    rx828_pos = $P10."pos"()
   # rx pass
-    rx825_cur."!cursor_pass"(rx825_pos, "quote:sym<qq>")
-    rx825_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx825_pos)
-    .return (rx825_cur)
-  rx825_fail:
+    rx828_cur."!cursor_pass"(rx828_pos, "quote:sym<qq>")
+    rx828_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx828_pos)
+    .return (rx828_cur)
+  rx828_fail:
 .annotate "line", 4
-    (rx825_rep, rx825_pos, $I10, $P10) = rx825_cur."!mark_fail"(0)
-    lt rx825_pos, -1, rx825_done
-    eq rx825_pos, -1, rx825_fail
+    (rx828_rep, rx828_pos, $I10, $P10) = rx828_cur."!mark_fail"(0)
+    lt rx828_pos, -1, rx828_done
+    eq rx828_pos, -1, rx828_fail
     jump $I10
-  rx825_done:
-    rx825_cur."!cursor_fail"()
-    rx825_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
-    .return (rx825_cur)
+  rx828_done:
+    rx828_cur."!cursor_fail"()
+    rx828_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
+    .return (rx828_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("196_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("196_1272816833.94956") :method
 .annotate "line", 4
-    $P827 = self."!PREFIX__!subrule"("", "qq")
-    new $P828, "ResizablePMCArray"
-    push $P828, $P827
-    .return ($P828)
+    $P830 = self."!PREFIX__!subrule"("", "qq")
+    new $P831, "ResizablePMCArray"
+    push $P831, $P830
+    .return ($P831)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("197_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<Q>"  :subid("197_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx831_tgt
-    .local int rx831_pos
-    .local int rx831_off
-    .local int rx831_eos
-    .local int rx831_rep
-    .local pmc rx831_cur
-    (rx831_cur, rx831_pos, rx831_tgt) = self."!cursor_start"()
-    rx831_cur."!cursor_debug"("START ", "quote:sym<Q>")
-    .lex unicode:"$\x{a2}", rx831_cur
-    .local pmc match
-    .lex "$/", match
-    length rx831_eos, rx831_tgt
-    set rx831_off, 0
-    lt rx831_pos, 2, rx831_start
-    sub rx831_off, rx831_pos, 1
-    substr rx831_tgt, rx831_tgt, rx831_off
-  rx831_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan835_done
-    goto rxscan835_scan
-  rxscan835_loop:
-    ($P10) = rx831_cur."from"()
-    inc $P10
-    set rx831_pos, $P10
-    ge rx831_pos, rx831_eos, rxscan835_done
-  rxscan835_scan:
-    set_addr $I10, rxscan835_loop
-    rx831_cur."!mark_push"(0, rx831_pos, $I10)
-  rxscan835_done:
-.annotate "line", 393
+    .local string rx834_tgt
+    .local int rx834_pos
+    .local int rx834_off
+    .local int rx834_eos
+    .local int rx834_rep
+    .local pmc rx834_cur
+    (rx834_cur, rx834_pos, rx834_tgt) = self."!cursor_start"()
+    rx834_cur."!cursor_debug"("START ", "quote:sym<Q>")
+    .lex unicode:"$\x{a2}", rx834_cur
+    .local pmc match
+    .lex "$/", match
+    length rx834_eos, rx834_tgt
+    set rx834_off, 0
+    lt rx834_pos, 2, rx834_start
+    sub rx834_off, rx834_pos, 1
+    substr rx834_tgt, rx834_tgt, rx834_off
+  rx834_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan838_done
+    goto rxscan838_scan
+  rxscan838_loop:
+    ($P10) = rx834_cur."from"()
+    inc $P10
+    set rx834_pos, $P10
+    ge rx834_pos, rx834_eos, rxscan838_done
+  rxscan838_scan:
+    set_addr $I10, rxscan838_loop
+    rx834_cur."!mark_push"(0, rx834_pos, $I10)
+  rxscan838_done:
+.annotate "line", 397
   # rx literal  "Q"
-    add $I11, rx831_pos, 1
-    gt $I11, rx831_eos, rx831_fail
-    sub $I11, rx831_pos, rx831_off
-    substr $S10, rx831_tgt, $I11, 1
-    ne $S10, "Q", rx831_fail
-    add rx831_pos, 1
+    add $I11, rx834_pos, 1
+    gt $I11, rx834_eos, rx834_fail
+    sub $I11, rx834_pos, rx834_off
+    substr $S10, rx834_tgt, $I11, 1
+    ne $S10, "Q", rx834_fail
+    add rx834_pos, 1
+  # rxanchor rwb
+    le rx834_pos, 0, rx834_fail
+    sub $I10, rx834_pos, rx834_off
+    is_cclass $I11, 8192, rx834_tgt, $I10
+    if $I11, rx834_fail
+    dec $I10
+    is_cclass $I11, 8192, rx834_tgt, $I10
+    unless $I11, rx834_fail
   # rx enumcharlist negate=1 zerowidth
-    ge rx831_pos, rx831_eos, rx831_fail
-    sub $I10, rx831_pos, rx831_off
-    substr $S10, rx831_tgt, $I10, 1
+    ge rx834_pos, rx834_eos, rx834_fail
+    sub $I10, rx834_pos, rx834_off
+    substr $S10, rx834_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx831_fail
+    ge $I11, 0, rx834_fail
   # rx subrule "ws" subtype=method negate=
-    rx831_cur."!cursor_pos"(rx831_pos)
-    $P10 = rx831_cur."ws"()
-    unless $P10, rx831_fail
-    rx831_pos = $P10."pos"()
+    rx834_cur."!cursor_pos"(rx834_pos)
+    $P10 = rx834_cur."ws"()
+    unless $P10, rx834_fail
+    rx834_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx831_cur."!cursor_pos"(rx831_pos)
-    $P10 = rx831_cur."quote_EXPR"()
-    unless $P10, rx831_fail
-    rx831_cur."!mark_push"(0, -1, 0, $P10)
+    rx834_cur."!cursor_pos"(rx834_pos)
+    $P10 = rx834_cur."quote_EXPR"()
+    unless $P10, rx834_fail
+    rx834_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx831_pos = $P10."pos"()
+    rx834_pos = $P10."pos"()
   # rx pass
-    rx831_cur."!cursor_pass"(rx831_pos, "quote:sym<Q>")
-    rx831_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx831_pos)
-    .return (rx831_cur)
-  rx831_fail:
+    rx834_cur."!cursor_pass"(rx834_pos, "quote:sym<Q>")
+    rx834_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx834_pos)
+    .return (rx834_cur)
+  rx834_fail:
 .annotate "line", 4
-    (rx831_rep, rx831_pos, $I10, $P10) = rx831_cur."!mark_fail"(0)
-    lt rx831_pos, -1, rx831_done
-    eq rx831_pos, -1, rx831_fail
+    (rx834_rep, rx834_pos, $I10, $P10) = rx834_cur."!mark_fail"(0)
+    lt rx834_pos, -1, rx834_done
+    eq rx834_pos, -1, rx834_fail
     jump $I10
-  rx831_done:
-    rx831_cur."!cursor_fail"()
-    rx831_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
-    .return (rx831_cur)
+  rx834_done:
+    rx834_cur."!cursor_fail"()
+    rx834_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
+    .return (rx834_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("198_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("198_1272816833.94956") :method
 .annotate "line", 4
-    $P833 = self."!PREFIX__!subrule"("", "Q")
-    new $P834, "ResizablePMCArray"
-    push $P834, $P833
-    .return ($P834)
+    $P836 = self."!PREFIX__!subrule"("", "Q")
+    new $P837, "ResizablePMCArray"
+    push $P837, $P836
+    .return ($P837)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("199_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<Q:PIR>"  :subid("199_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx837_tgt
-    .local int rx837_pos
-    .local int rx837_off
-    .local int rx837_eos
-    .local int rx837_rep
-    .local pmc rx837_cur
-    (rx837_cur, rx837_pos, rx837_tgt) = self."!cursor_start"()
-    rx837_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
-    .lex unicode:"$\x{a2}", rx837_cur
+    .local string rx840_tgt
+    .local int rx840_pos
+    .local int rx840_off
+    .local int rx840_eos
+    .local int rx840_rep
+    .local pmc rx840_cur
+    (rx840_cur, rx840_pos, rx840_tgt) = self."!cursor_start"()
+    rx840_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
+    .lex unicode:"$\x{a2}", rx840_cur
     .local pmc match
     .lex "$/", match
-    length rx837_eos, rx837_tgt
-    set rx837_off, 0
-    lt rx837_pos, 2, rx837_start
-    sub rx837_off, rx837_pos, 1
-    substr rx837_tgt, rx837_tgt, rx837_off
-  rx837_start:
+    length rx840_eos, rx840_tgt
+    set rx840_off, 0
+    lt rx840_pos, 2, rx840_start
+    sub rx840_off, rx840_pos, 1
+    substr rx840_tgt, rx840_tgt, rx840_off
+  rx840_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan841_done
-    goto rxscan841_scan
-  rxscan841_loop:
-    ($P10) = rx837_cur."from"()
+    ne $I10, -1, rxscan844_done
+    goto rxscan844_scan
+  rxscan844_loop:
+    ($P10) = rx840_cur."from"()
     inc $P10
-    set rx837_pos, $P10
-    ge rx837_pos, rx837_eos, rxscan841_done
-  rxscan841_scan:
-    set_addr $I10, rxscan841_loop
-    rx837_cur."!mark_push"(0, rx837_pos, $I10)
-  rxscan841_done:
-.annotate "line", 394
+    set rx840_pos, $P10
+    ge rx840_pos, rx840_eos, rxscan844_done
+  rxscan844_scan:
+    set_addr $I10, rxscan844_loop
+    rx840_cur."!mark_push"(0, rx840_pos, $I10)
+  rxscan844_done:
+.annotate "line", 398
   # rx literal  "Q:PIR"
-    add $I11, rx837_pos, 5
-    gt $I11, rx837_eos, rx837_fail
-    sub $I11, rx837_pos, rx837_off
-    substr $S10, rx837_tgt, $I11, 5
-    ne $S10, "Q:PIR", rx837_fail
-    add rx837_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."ws"()
-    unless $P10, rx837_fail
-    rx837_pos = $P10."pos"()
+    add $I11, rx840_pos, 5
+    gt $I11, rx840_eos, rx840_fail
+    sub $I11, rx840_pos, rx840_off
+    substr $S10, rx840_tgt, $I11, 5
+    ne $S10, "Q:PIR", rx840_fail
+    add rx840_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx840_cur."!cursor_pos"(rx840_pos)
+    $P10 = rx840_cur."ws"()
+    unless $P10, rx840_fail
+    rx840_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."quote_EXPR"()
-    unless $P10, rx837_fail
-    rx837_cur."!mark_push"(0, -1, 0, $P10)
+    rx840_cur."!cursor_pos"(rx840_pos)
+    $P10 = rx840_cur."quote_EXPR"()
+    unless $P10, rx840_fail
+    rx840_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx837_pos = $P10."pos"()
+    rx840_pos = $P10."pos"()
   # rx pass
-    rx837_cur."!cursor_pass"(rx837_pos, "quote:sym<Q:PIR>")
-    rx837_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx837_pos)
-    .return (rx837_cur)
-  rx837_fail:
+    rx840_cur."!cursor_pass"(rx840_pos, "quote:sym<Q:PIR>")
+    rx840_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx840_pos)
+    .return (rx840_cur)
+  rx840_fail:
 .annotate "line", 4
-    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
-    lt rx837_pos, -1, rx837_done
-    eq rx837_pos, -1, rx837_fail
+    (rx840_rep, rx840_pos, $I10, $P10) = rx840_cur."!mark_fail"(0)
+    lt rx840_pos, -1, rx840_done
+    eq rx840_pos, -1, rx840_fail
     jump $I10
-  rx837_done:
-    rx837_cur."!cursor_fail"()
-    rx837_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
-    .return (rx837_cur)
+  rx840_done:
+    rx840_cur."!cursor_fail"()
+    rx840_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    .return (rx840_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1272816833.94956") :method
 .annotate "line", 4
-    $P839 = self."!PREFIX__!subrule"("", "Q:PIR")
-    new $P840, "ResizablePMCArray"
-    push $P840, $P839
-    .return ($P840)
+    $P842 = self."!PREFIX__!subrule"("", "Q:PIR")
+    new $P843, "ResizablePMCArray"
+    push $P843, $P842
+    .return ($P843)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("201_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym</ />"  :subid("201_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx843_tgt
-    .local int rx843_pos
-    .local int rx843_off
-    .local int rx843_eos
-    .local int rx843_rep
-    .local pmc rx843_cur
-    (rx843_cur, rx843_pos, rx843_tgt) = self."!cursor_start"()
-    rx843_cur."!cursor_debug"("START ", "quote:sym</ />")
-    .lex unicode:"$\x{a2}", rx843_cur
+    .local string rx846_tgt
+    .local int rx846_pos
+    .local int rx846_off
+    .local int rx846_eos
+    .local int rx846_rep
+    .local pmc rx846_cur
+    (rx846_cur, rx846_pos, rx846_tgt) = self."!cursor_start"()
+    rx846_cur."!cursor_debug"("START ", "quote:sym</ />")
+    .lex unicode:"$\x{a2}", rx846_cur
     .local pmc match
     .lex "$/", match
-    length rx843_eos, rx843_tgt
-    set rx843_off, 0
-    lt rx843_pos, 2, rx843_start
-    sub rx843_off, rx843_pos, 1
-    substr rx843_tgt, rx843_tgt, rx843_off
-  rx843_start:
+    length rx846_eos, rx846_tgt
+    set rx846_off, 0
+    lt rx846_pos, 2, rx846_start
+    sub rx846_off, rx846_pos, 1
+    substr rx846_tgt, rx846_tgt, rx846_off
+  rx846_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan847_done
-    goto rxscan847_scan
-  rxscan847_loop:
-    ($P10) = rx843_cur."from"()
+    ne $I10, -1, rxscan850_done
+    goto rxscan850_scan
+  rxscan850_loop:
+    ($P10) = rx846_cur."from"()
     inc $P10
-    set rx843_pos, $P10
-    ge rx843_pos, rx843_eos, rxscan847_done
-  rxscan847_scan:
-    set_addr $I10, rxscan847_loop
-    rx843_cur."!mark_push"(0, rx843_pos, $I10)
-  rxscan847_done:
-.annotate "line", 396
+    set rx846_pos, $P10
+    ge rx846_pos, rx846_eos, rxscan850_done
+  rxscan850_scan:
+    set_addr $I10, rxscan850_loop
+    rx846_cur."!mark_push"(0, rx846_pos, $I10)
+  rxscan850_done:
+.annotate "line", 400
   # rx literal  "/"
-    add $I11, rx843_pos, 1
-    gt $I11, rx843_eos, rx843_fail
-    sub $I11, rx843_pos, rx843_off
-    substr $S10, rx843_tgt, $I11, 1
-    ne $S10, "/", rx843_fail
-    add rx843_pos, 1
-.annotate "line", 397
+    add $I11, rx846_pos, 1
+    gt $I11, rx846_eos, rx846_fail
+    sub $I11, rx846_pos, rx846_off
+    substr $S10, rx846_tgt, $I11, 1
+    ne $S10, "/", rx846_fail
+    add rx846_pos, 1
+.annotate "line", 401
   # rx subrule "newpad" subtype=method negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."newpad"()
-    unless $P10, rx843_fail
-    rx843_pos = $P10."pos"()
-.annotate "line", 398
+    rx846_cur."!cursor_pos"(rx846_pos)
+    $P10 = rx846_cur."newpad"()
+    unless $P10, rx846_fail
+    rx846_pos = $P10."pos"()
+.annotate "line", 402
   # rx reduce name="quote:sym</ />" key="open"
-    rx843_cur."!cursor_pos"(rx843_pos)
-    rx843_cur."!reduce"("quote:sym</ />", "open")
-.annotate "line", 399
+    rx846_cur."!cursor_pos"(rx846_pos)
+    rx846_cur."!reduce"("quote:sym</ />", "open")
+.annotate "line", 403
   # rx subrule "LANG" subtype=capture negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx843_fail
-    rx843_cur."!mark_push"(0, -1, 0, $P10)
+    rx846_cur."!cursor_pos"(rx846_pos)
+    $P10 = rx846_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx846_fail
+    rx846_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx843_pos = $P10."pos"()
-.annotate "line", 400
+    rx846_pos = $P10."pos"()
+.annotate "line", 404
   # rx literal  "/"
-    add $I11, rx843_pos, 1
-    gt $I11, rx843_eos, rx843_fail
-    sub $I11, rx843_pos, rx843_off
-    substr $S10, rx843_tgt, $I11, 1
-    ne $S10, "/", rx843_fail
-    add rx843_pos, 1
-.annotate "line", 395
+    add $I11, rx846_pos, 1
+    gt $I11, rx846_eos, rx846_fail
+    sub $I11, rx846_pos, rx846_off
+    substr $S10, rx846_tgt, $I11, 1
+    ne $S10, "/", rx846_fail
+    add rx846_pos, 1
+.annotate "line", 399
   # rx pass
-    rx843_cur."!cursor_pass"(rx843_pos, "quote:sym</ />")
-    rx843_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx843_pos)
-    .return (rx843_cur)
-  rx843_fail:
+    rx846_cur."!cursor_pass"(rx846_pos, "quote:sym</ />")
+    rx846_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx846_pos)
+    .return (rx846_cur)
+  rx846_fail:
 .annotate "line", 4
-    (rx843_rep, rx843_pos, $I10, $P10) = rx843_cur."!mark_fail"(0)
-    lt rx843_pos, -1, rx843_done
-    eq rx843_pos, -1, rx843_fail
+    (rx846_rep, rx846_pos, $I10, $P10) = rx846_cur."!mark_fail"(0)
+    lt rx846_pos, -1, rx846_done
+    eq rx846_pos, -1, rx846_fail
     jump $I10
-  rx843_done:
-    rx843_cur."!cursor_fail"()
-    rx843_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
-    .return (rx843_cur)
+  rx846_done:
+    rx846_cur."!cursor_fail"()
+    rx846_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
+    .return (rx846_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("202_1267204702.05125") :method
+.sub "!PREFIX__quote:sym</ />"  :subid("202_1272816833.94956") :method
 .annotate "line", 4
-    $P845 = self."!PREFIX__!subrule"("", "/")
-    new $P846, "ResizablePMCArray"
-    push $P846, $P845
-    .return ($P846)
+    $P848 = self."!PREFIX__!subrule"("", "/")
+    new $P849, "ResizablePMCArray"
+    push $P849, $P848
+    .return ($P849)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("203_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<$>"  :subid("203_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx849_tgt
-    .local int rx849_pos
-    .local int rx849_off
-    .local int rx849_eos
-    .local int rx849_rep
-    .local pmc rx849_cur
-    (rx849_cur, rx849_pos, rx849_tgt) = self."!cursor_start"()
-    rx849_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
-    .lex unicode:"$\x{a2}", rx849_cur
+    .local string rx852_tgt
+    .local int rx852_pos
+    .local int rx852_off
+    .local int rx852_eos
+    .local int rx852_rep
+    .local pmc rx852_cur
+    (rx852_cur, rx852_pos, rx852_tgt) = self."!cursor_start"()
+    rx852_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
+    .lex unicode:"$\x{a2}", rx852_cur
     .local pmc match
     .lex "$/", match
-    length rx849_eos, rx849_tgt
-    set rx849_off, 0
-    lt rx849_pos, 2, rx849_start
-    sub rx849_off, rx849_pos, 1
-    substr rx849_tgt, rx849_tgt, rx849_off
-  rx849_start:
+    length rx852_eos, rx852_tgt
+    set rx852_off, 0
+    lt rx852_pos, 2, rx852_start
+    sub rx852_off, rx852_pos, 1
+    substr rx852_tgt, rx852_tgt, rx852_off
+  rx852_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan852_done
-    goto rxscan852_scan
-  rxscan852_loop:
-    ($P10) = rx849_cur."from"()
+    ne $I10, -1, rxscan855_done
+    goto rxscan855_scan
+  rxscan855_loop:
+    ($P10) = rx852_cur."from"()
     inc $P10
-    set rx849_pos, $P10
-    ge rx849_pos, rx849_eos, rxscan852_done
-  rxscan852_scan:
-    set_addr $I10, rxscan852_loop
-    rx849_cur."!mark_push"(0, rx849_pos, $I10)
-  rxscan852_done:
-.annotate "line", 403
+    set rx852_pos, $P10
+    ge rx852_pos, rx852_eos, rxscan855_done
+  rxscan855_scan:
+    set_addr $I10, rxscan855_loop
+    rx852_cur."!mark_push"(0, rx852_pos, $I10)
+  rxscan855_done:
+.annotate "line", 407
   # rx enumcharlist negate=0 zerowidth
-    ge rx849_pos, rx849_eos, rx849_fail
-    sub $I10, rx849_pos, rx849_off
-    substr $S10, rx849_tgt, $I10, 1
+    ge rx852_pos, rx852_eos, rx852_fail
+    sub $I10, rx852_pos, rx852_off
+    substr $S10, rx852_tgt, $I10, 1
     index $I11, "$", $S10
-    lt $I11, 0, rx849_fail
+    lt $I11, 0, rx852_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."quotemod_check"("s")
-    unless $P10, rx849_fail
+    rx852_cur."!cursor_pos"(rx852_pos)
+    $P10 = rx852_cur."quotemod_check"("s")
+    unless $P10, rx852_fail
   # rx subrule "variable" subtype=capture negate=
-    rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."variable"()
-    unless $P10, rx849_fail
-    rx849_cur."!mark_push"(0, -1, 0, $P10)
+    rx852_cur."!cursor_pos"(rx852_pos)
+    $P10 = rx852_cur."variable"()
+    unless $P10, rx852_fail
+    rx852_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx849_pos = $P10."pos"()
+    rx852_pos = $P10."pos"()
   # rx pass
-    rx849_cur."!cursor_pass"(rx849_pos, "quote_escape:sym<$>")
-    rx849_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx849_pos)
-    .return (rx849_cur)
-  rx849_fail:
+    rx852_cur."!cursor_pass"(rx852_pos, "quote_escape:sym<$>")
+    rx852_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx852_pos)
+    .return (rx852_cur)
+  rx852_fail:
 .annotate "line", 4
-    (rx849_rep, rx849_pos, $I10, $P10) = rx849_cur."!mark_fail"(0)
-    lt rx849_pos, -1, rx849_done
-    eq rx849_pos, -1, rx849_fail
+    (rx852_rep, rx852_pos, $I10, $P10) = rx852_cur."!mark_fail"(0)
+    lt rx852_pos, -1, rx852_done
+    eq rx852_pos, -1, rx852_fail
     jump $I10
-  rx849_done:
-    rx849_cur."!cursor_fail"()
-    rx849_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
-    .return (rx849_cur)
+  rx852_done:
+    rx852_cur."!cursor_fail"()
+    rx852_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
+    .return (rx852_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1272816833.94956") :method
 .annotate "line", 4
-    new $P851, "ResizablePMCArray"
-    push $P851, "$"
-    .return ($P851)
+    new $P854, "ResizablePMCArray"
+    push $P854, "$"
+    .return ($P854)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("205_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<{ }>"  :subid("205_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx854_tgt
-    .local int rx854_pos
-    .local int rx854_off
-    .local int rx854_eos
-    .local int rx854_rep
-    .local pmc rx854_cur
-    (rx854_cur, rx854_pos, rx854_tgt) = self."!cursor_start"()
-    rx854_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx854_cur
+    .local string rx857_tgt
+    .local int rx857_pos
+    .local int rx857_off
+    .local int rx857_eos
+    .local int rx857_rep
+    .local pmc rx857_cur
+    (rx857_cur, rx857_pos, rx857_tgt) = self."!cursor_start"()
+    rx857_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx857_cur
     .local pmc match
     .lex "$/", match
-    length rx854_eos, rx854_tgt
-    set rx854_off, 0
-    lt rx854_pos, 2, rx854_start
-    sub rx854_off, rx854_pos, 1
-    substr rx854_tgt, rx854_tgt, rx854_off
-  rx854_start:
+    length rx857_eos, rx857_tgt
+    set rx857_off, 0
+    lt rx857_pos, 2, rx857_start
+    sub rx857_off, rx857_pos, 1
+    substr rx857_tgt, rx857_tgt, rx857_off
+  rx857_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan857_done
-    goto rxscan857_scan
-  rxscan857_loop:
-    ($P10) = rx854_cur."from"()
+    ne $I10, -1, rxscan860_done
+    goto rxscan860_scan
+  rxscan860_loop:
+    ($P10) = rx857_cur."from"()
     inc $P10
-    set rx854_pos, $P10
-    ge rx854_pos, rx854_eos, rxscan857_done
-  rxscan857_scan:
-    set_addr $I10, rxscan857_loop
-    rx854_cur."!mark_push"(0, rx854_pos, $I10)
-  rxscan857_done:
-.annotate "line", 404
+    set rx857_pos, $P10
+    ge rx857_pos, rx857_eos, rxscan860_done
+  rxscan860_scan:
+    set_addr $I10, rxscan860_loop
+    rx857_cur."!mark_push"(0, rx857_pos, $I10)
+  rxscan860_done:
+.annotate "line", 408
   # rx enumcharlist negate=0 zerowidth
-    ge rx854_pos, rx854_eos, rx854_fail
-    sub $I10, rx854_pos, rx854_off
-    substr $S10, rx854_tgt, $I10, 1
+    ge rx857_pos, rx857_eos, rx857_fail
+    sub $I10, rx857_pos, rx857_off
+    substr $S10, rx857_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx854_fail
+    lt $I11, 0, rx857_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."quotemod_check"("c")
-    unless $P10, rx854_fail
+    rx857_cur."!cursor_pos"(rx857_pos)
+    $P10 = rx857_cur."quotemod_check"("c")
+    unless $P10, rx857_fail
   # rx subrule "block" subtype=capture negate=
-    rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."block"()
-    unless $P10, rx854_fail
-    rx854_cur."!mark_push"(0, -1, 0, $P10)
+    rx857_cur."!cursor_pos"(rx857_pos)
+    $P10 = rx857_cur."block"()
+    unless $P10, rx857_fail
+    rx857_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx854_pos = $P10."pos"()
+    rx857_pos = $P10."pos"()
   # rx pass
-    rx854_cur."!cursor_pass"(rx854_pos, "quote_escape:sym<{ }>")
-    rx854_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx854_pos)
-    .return (rx854_cur)
-  rx854_fail:
+    rx857_cur."!cursor_pass"(rx857_pos, "quote_escape:sym<{ }>")
+    rx857_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx857_pos)
+    .return (rx857_cur)
+  rx857_fail:
 .annotate "line", 4
-    (rx854_rep, rx854_pos, $I10, $P10) = rx854_cur."!mark_fail"(0)
-    lt rx854_pos, -1, rx854_done
-    eq rx854_pos, -1, rx854_fail
+    (rx857_rep, rx857_pos, $I10, $P10) = rx857_cur."!mark_fail"(0)
+    lt rx857_pos, -1, rx857_done
+    eq rx857_pos, -1, rx857_fail
     jump $I10
-  rx854_done:
-    rx854_cur."!cursor_fail"()
-    rx854_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
-    .return (rx854_cur)
+  rx857_done:
+    rx857_cur."!cursor_fail"()
+    rx857_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
+    .return (rx857_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1272816833.94956") :method
 .annotate "line", 4
-    new $P856, "ResizablePMCArray"
-    push $P856, "{"
-    .return ($P856)
+    new $P859, "ResizablePMCArray"
+    push $P859, "{"
+    .return ($P859)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("207_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<esc>"  :subid("207_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx859_tgt
-    .local int rx859_pos
-    .local int rx859_off
-    .local int rx859_eos
-    .local int rx859_rep
-    .local pmc rx859_cur
-    (rx859_cur, rx859_pos, rx859_tgt) = self."!cursor_start"()
-    rx859_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
-    rx859_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx859_cur
+    .local string rx862_tgt
+    .local int rx862_pos
+    .local int rx862_off
+    .local int rx862_eos
+    .local int rx862_rep
+    .local pmc rx862_cur
+    (rx862_cur, rx862_pos, rx862_tgt) = self."!cursor_start"()
+    rx862_cur."!cursor_debug"("START ", "quote_escape:sym<esc>")
+    .lex unicode:"$\x{a2}", rx862_cur
     .local pmc match
     .lex "$/", match
-    length rx859_eos, rx859_tgt
-    set rx859_off, 0
-    lt rx859_pos, 2, rx859_start
-    sub rx859_off, rx859_pos, 1
-    substr rx859_tgt, rx859_tgt, rx859_off
-  rx859_start:
+    length rx862_eos, rx862_tgt
+    set rx862_off, 0
+    lt rx862_pos, 2, rx862_start
+    sub rx862_off, rx862_pos, 1
+    substr rx862_tgt, rx862_tgt, rx862_off
+  rx862_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan863_done
-    goto rxscan863_scan
-  rxscan863_loop:
-    ($P10) = rx859_cur."from"()
+    ne $I10, -1, rxscan865_done
+    goto rxscan865_scan
+  rxscan865_loop:
+    ($P10) = rx862_cur."from"()
     inc $P10
-    set rx859_pos, $P10
-    ge rx859_pos, rx859_eos, rxscan863_done
-  rxscan863_scan:
-    set_addr $I10, rxscan863_loop
-    rx859_cur."!mark_push"(0, rx859_pos, $I10)
-  rxscan863_done:
-.annotate "line", 406
-  # rx literal  "("
-    add $I11, rx859_pos, 1
-    gt $I11, rx859_eos, rx859_fail
-    sub $I11, rx859_pos, rx859_off
-    substr $S10, rx859_tgt, $I11, 1
-    ne $S10, "(", rx859_fail
-    add rx859_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx859_cur."!cursor_pos"(rx859_pos)
-    $P10 = rx859_cur."ws"()
-    unless $P10, rx859_fail
-    rx859_pos = $P10."pos"()
-  # rx rxquantr864 ** 0..1
-    set_addr $I865, rxquantr864_done
-    rx859_cur."!mark_push"(0, rx859_pos, $I865)
-  rxquantr864_loop:
-  # rx subrule "EXPR" subtype=capture negate=
-    rx859_cur."!cursor_pos"(rx859_pos)
-    $P10 = rx859_cur."EXPR"()
-    unless $P10, rx859_fail
-    rx859_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
-    rx859_pos = $P10."pos"()
-    (rx859_rep) = rx859_cur."!mark_commit"($I865)
-  rxquantr864_done:
-  # rx literal  ")"
-    add $I11, rx859_pos, 1
-    gt $I11, rx859_eos, rx859_fail
-    sub $I11, rx859_pos, rx859_off
-    substr $S10, rx859_tgt, $I11, 1
-    ne $S10, ")", rx859_fail
-    add rx859_pos, 1
+    set rx862_pos, $P10
+    ge rx862_pos, rx862_eos, rxscan865_done
+  rxscan865_scan:
+    set_addr $I10, rxscan865_loop
+    rx862_cur."!mark_push"(0, rx862_pos, $I10)
+  rxscan865_done:
+.annotate "line", 409
+  # rx literal  "\\e"
+    add $I11, rx862_pos, 2
+    gt $I11, rx862_eos, rx862_fail
+    sub $I11, rx862_pos, rx862_off
+    substr $S10, rx862_tgt, $I11, 2
+    ne $S10, "\\e", rx862_fail
+    add rx862_pos, 2
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
+    rx862_cur."!cursor_pos"(rx862_pos)
+    $P10 = rx862_cur."quotemod_check"("b")
+    unless $P10, rx862_fail
   # rx pass
-    rx859_cur."!cursor_pass"(rx859_pos, "circumfix:sym<( )>")
-    rx859_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx859_pos)
-    .return (rx859_cur)
-  rx859_fail:
+    rx862_cur."!cursor_pass"(rx862_pos, "quote_escape:sym<esc>")
+    rx862_cur."!cursor_debug"("PASS  ", "quote_escape:sym<esc>", " at pos=", rx862_pos)
+    .return (rx862_cur)
+  rx862_fail:
 .annotate "line", 4
-    (rx859_rep, rx859_pos, $I10, $P10) = rx859_cur."!mark_fail"(0)
-    lt rx859_pos, -1, rx859_done
-    eq rx859_pos, -1, rx859_fail
+    (rx862_rep, rx862_pos, $I10, $P10) = rx862_cur."!mark_fail"(0)
+    lt rx862_pos, -1, rx862_done
+    eq rx862_pos, -1, rx862_fail
     jump $I10
-  rx859_done:
-    rx859_cur."!cursor_fail"()
-    rx859_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
-    .return (rx859_cur)
+  rx862_done:
+    rx862_cur."!cursor_fail"()
+    rx862_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<esc>")
+    .return (rx862_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<esc>"  :subid("208_1272816833.94956") :method
 .annotate "line", 4
-    $P861 = self."!PREFIX__!subrule"("", "(")
-    new $P862, "ResizablePMCArray"
-    push $P862, $P861
-    .return ($P862)
+    new $P864, "ResizablePMCArray"
+    push $P864, "\\e"
+    .return ($P864)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("209_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<( )>"  :subid("209_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx867_tgt
     .local int rx867_pos
@@ -10343,7 +10390,7 @@
     .local int rx867_rep
     .local pmc rx867_cur
     (rx867_cur, rx867_pos, rx867_tgt) = self."!cursor_start"()
-    rx867_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
+    rx867_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
     rx867_cur."!cursor_caparray"("EXPR")
     .lex unicode:"$\x{a2}", rx867_cur
     .local pmc match
@@ -10366,13 +10413,13 @@
     set_addr $I10, rxscan871_loop
     rx867_cur."!mark_push"(0, rx867_pos, $I10)
   rxscan871_done:
-.annotate "line", 407
-  # rx literal  "["
+.annotate "line", 411
+  # rx literal  "("
     add $I11, rx867_pos, 1
     gt $I11, rx867_eos, rx867_fail
     sub $I11, rx867_pos, rx867_off
     substr $S10, rx867_tgt, $I11, 1
-    ne $S10, "[", rx867_fail
+    ne $S10, "(", rx867_fail
     add rx867_pos, 1
   # rx subrule "ws" subtype=method negate=
     rx867_cur."!cursor_pos"(rx867_pos)
@@ -10392,16 +10439,16 @@
     rx867_pos = $P10."pos"()
     (rx867_rep) = rx867_cur."!mark_commit"($I873)
   rxquantr872_done:
-  # rx literal  "]"
+  # rx literal  ")"
     add $I11, rx867_pos, 1
     gt $I11, rx867_eos, rx867_fail
     sub $I11, rx867_pos, rx867_off
     substr $S10, rx867_tgt, $I11, 1
-    ne $S10, "]", rx867_fail
+    ne $S10, ")", rx867_fail
     add rx867_pos, 1
   # rx pass
-    rx867_cur."!cursor_pass"(rx867_pos, "circumfix:sym<[ ]>")
-    rx867_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx867_pos)
+    rx867_cur."!cursor_pass"(rx867_pos, "circumfix:sym<( )>")
+    rx867_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx867_pos)
     .return (rx867_cur)
   rx867_fail:
 .annotate "line", 4
@@ -10411,16 +10458,16 @@
     jump $I10
   rx867_done:
     rx867_cur."!cursor_fail"()
-    rx867_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
+    rx867_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
     .return (rx867_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("210_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("210_1272816833.94956") :method
 .annotate "line", 4
-    $P869 = self."!PREFIX__!subrule"("", "[")
+    $P869 = self."!PREFIX__!subrule"("", "(")
     new $P870, "ResizablePMCArray"
     push $P870, $P869
     .return ($P870)
@@ -10428,7 +10475,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<ang>"  :subid("211_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<[ ]>"  :subid("211_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx875_tgt
     .local int rx875_pos
@@ -10437,7 +10484,8 @@
     .local int rx875_rep
     .local pmc rx875_cur
     (rx875_cur, rx875_pos, rx875_tgt) = self."!cursor_start"()
-    rx875_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    rx875_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
+    rx875_cur."!cursor_caparray"("EXPR")
     .lex unicode:"$\x{a2}", rx875_cur
     .local pmc match
     .lex "$/", match
@@ -10448,34 +10496,53 @@
     substr rx875_tgt, rx875_tgt, rx875_off
   rx875_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan878_done
-    goto rxscan878_scan
-  rxscan878_loop:
+    ne $I10, -1, rxscan879_done
+    goto rxscan879_scan
+  rxscan879_loop:
     ($P10) = rx875_cur."from"()
     inc $P10
     set rx875_pos, $P10
-    ge rx875_pos, rx875_eos, rxscan878_done
-  rxscan878_scan:
-    set_addr $I10, rxscan878_loop
+    ge rx875_pos, rx875_eos, rxscan879_done
+  rxscan879_scan:
+    set_addr $I10, rxscan879_loop
     rx875_cur."!mark_push"(0, rx875_pos, $I10)
-  rxscan878_done:
-.annotate "line", 408
-  # rx enumcharlist negate=0 zerowidth
-    ge rx875_pos, rx875_eos, rx875_fail
-    sub $I10, rx875_pos, rx875_off
-    substr $S10, rx875_tgt, $I10, 1
-    index $I11, "<", $S10
-    lt $I11, 0, rx875_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
+  rxscan879_done:
+.annotate "line", 412
+  # rx literal  "["
+    add $I11, rx875_pos, 1
+    gt $I11, rx875_eos, rx875_fail
+    sub $I11, rx875_pos, rx875_off
+    substr $S10, rx875_tgt, $I11, 1
+    ne $S10, "[", rx875_fail
+    add rx875_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx875_cur."!cursor_pos"(rx875_pos)
+    $P10 = rx875_cur."ws"()
+    unless $P10, rx875_fail
+    rx875_pos = $P10."pos"()
+  # rx rxquantr880 ** 0..1
+    set_addr $I881, rxquantr880_done
+    rx875_cur."!mark_push"(0, rx875_pos, $I881)
+  rxquantr880_loop:
+  # rx subrule "EXPR" subtype=capture negate=
     rx875_cur."!cursor_pos"(rx875_pos)
-    $P10 = rx875_cur."quote_EXPR"(":q", ":w")
+    $P10 = rx875_cur."EXPR"()
     unless $P10, rx875_fail
     rx875_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
+    $P10."!cursor_names"("EXPR")
     rx875_pos = $P10."pos"()
+    (rx875_rep) = rx875_cur."!mark_commit"($I881)
+  rxquantr880_done:
+  # rx literal  "]"
+    add $I11, rx875_pos, 1
+    gt $I11, rx875_eos, rx875_fail
+    sub $I11, rx875_pos, rx875_off
+    substr $S10, rx875_tgt, $I11, 1
+    ne $S10, "]", rx875_fail
+    add rx875_pos, 1
   # rx pass
-    rx875_cur."!cursor_pass"(rx875_pos, "circumfix:sym<ang>")
-    rx875_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx875_pos)
+    rx875_cur."!cursor_pass"(rx875_pos, "circumfix:sym<[ ]>")
+    rx875_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx875_pos)
     .return (rx875_cur)
   rx875_fail:
 .annotate "line", 4
@@ -10485,269 +10552,243 @@
     jump $I10
   rx875_done:
     rx875_cur."!cursor_fail"()
-    rx875_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    rx875_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
     .return (rx875_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<ang>"  :subid("212_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("212_1272816833.94956") :method
 .annotate "line", 4
-    new $P877, "ResizablePMCArray"
-    push $P877, "<"
-    .return ($P877)
+    $P877 = self."!PREFIX__!subrule"("", "[")
+    new $P878, "ResizablePMCArray"
+    push $P878, $P877
+    .return ($P878)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("213_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx880_tgt
-    .local int rx880_pos
-    .local int rx880_off
-    .local int rx880_eos
-    .local int rx880_rep
-    .local pmc rx880_cur
-    (rx880_cur, rx880_pos, rx880_tgt) = self."!cursor_start"()
-    rx880_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .lex unicode:"$\x{a2}", rx880_cur
-    .local pmc match
-    .lex "$/", match
-    length rx880_eos, rx880_tgt
-    set rx880_off, 0
-    lt rx880_pos, 2, rx880_start
-    sub rx880_off, rx880_pos, 1
-    substr rx880_tgt, rx880_tgt, rx880_off
-  rx880_start:
-    $I10 = self.'from'()
-    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", 409
+.sub "circumfix:sym<ang>"  :subid("213_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 4
+    .local string rx883_tgt
+    .local int rx883_pos
+    .local int rx883_off
+    .local int rx883_eos
+    .local int rx883_rep
+    .local pmc rx883_cur
+    (rx883_cur, rx883_pos, rx883_tgt) = self."!cursor_start"()
+    rx883_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx883_cur
+    .local pmc match
+    .lex "$/", match
+    length rx883_eos, rx883_tgt
+    set rx883_off, 0
+    lt rx883_pos, 2, rx883_start
+    sub rx883_off, rx883_pos, 1
+    substr rx883_tgt, rx883_tgt, rx883_off
+  rx883_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan886_done
+    goto rxscan886_scan
+  rxscan886_loop:
+    ($P10) = rx883_cur."from"()
+    inc $P10
+    set rx883_pos, $P10
+    ge rx883_pos, rx883_eos, rxscan886_done
+  rxscan886_scan:
+    set_addr $I10, rxscan886_loop
+    rx883_cur."!mark_push"(0, rx883_pos, $I10)
+  rxscan886_done:
+.annotate "line", 413
   # rx enumcharlist negate=0 zerowidth
-    ge rx880_pos, rx880_eos, rx880_fail
-    sub $I10, rx880_pos, rx880_off
-    substr $S10, rx880_tgt, $I10, 1
-    index $I11, unicode:"\x{ab}", $S10
-    lt $I11, 0, rx880_fail
+    ge rx883_pos, rx883_eos, rx883_fail
+    sub $I10, rx883_pos, rx883_off
+    substr $S10, rx883_tgt, $I10, 1
+    index $I11, "<", $S10
+    lt $I11, 0, rx883_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx880_cur."!cursor_pos"(rx880_pos)
-    $P10 = rx880_cur."quote_EXPR"(":qq", ":w")
-    unless $P10, rx880_fail
-    rx880_cur."!mark_push"(0, -1, 0, $P10)
+    rx883_cur."!cursor_pos"(rx883_pos)
+    $P10 = rx883_cur."quote_EXPR"(":q", ":w")
+    unless $P10, rx883_fail
+    rx883_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx880_pos = $P10."pos"()
+    rx883_pos = $P10."pos"()
   # rx pass
-    rx880_cur."!cursor_pass"(rx880_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    rx880_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx880_pos)
-    .return (rx880_cur)
-  rx880_fail:
+    rx883_cur."!cursor_pass"(rx883_pos, "circumfix:sym<ang>")
+    rx883_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx883_pos)
+    .return (rx883_cur)
+  rx883_fail:
 .annotate "line", 4
-    (rx880_rep, rx880_pos, $I10, $P10) = rx880_cur."!mark_fail"(0)
-    lt rx880_pos, -1, rx880_done
-    eq rx880_pos, -1, rx880_fail
+    (rx883_rep, rx883_pos, $I10, $P10) = rx883_cur."!mark_fail"(0)
+    lt rx883_pos, -1, rx883_done
+    eq rx883_pos, -1, rx883_fail
     jump $I10
-  rx880_done:
-    rx880_cur."!cursor_fail"()
-    rx880_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .return (rx880_cur)
+  rx883_done:
+    rx883_cur."!cursor_fail"()
+    rx883_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    .return (rx883_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("214_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<ang>"  :subid("214_1272816833.94956") :method
 .annotate "line", 4
-    new $P882, "ResizablePMCArray"
-    push $P882, unicode:"\x{ab}"
-    .return ($P882)
+    new $P885, "ResizablePMCArray"
+    push $P885, "<"
+    .return ($P885)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<{ }>"  :subid("215_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("215_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx885_tgt
-    .local int rx885_pos
-    .local int rx885_off
-    .local int rx885_eos
-    .local int rx885_rep
-    .local pmc rx885_cur
-    (rx885_cur, rx885_pos, rx885_tgt) = self."!cursor_start"()
-    rx885_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx885_cur
+    .local string rx888_tgt
+    .local int rx888_pos
+    .local int rx888_off
+    .local int rx888_eos
+    .local int rx888_rep
+    .local pmc rx888_cur
+    (rx888_cur, rx888_pos, rx888_tgt) = self."!cursor_start"()
+    rx888_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .lex unicode:"$\x{a2}", rx888_cur
     .local pmc match
     .lex "$/", match
-    length rx885_eos, rx885_tgt
-    set rx885_off, 0
-    lt rx885_pos, 2, rx885_start
-    sub rx885_off, rx885_pos, 1
-    substr rx885_tgt, rx885_tgt, rx885_off
-  rx885_start:
+    length rx888_eos, rx888_tgt
+    set rx888_off, 0
+    lt rx888_pos, 2, rx888_start
+    sub rx888_off, rx888_pos, 1
+    substr rx888_tgt, rx888_tgt, rx888_off
+  rx888_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan888_done
-    goto rxscan888_scan
-  rxscan888_loop:
-    ($P10) = rx885_cur."from"()
+    ne $I10, -1, rxscan891_done
+    goto rxscan891_scan
+  rxscan891_loop:
+    ($P10) = rx888_cur."from"()
     inc $P10
-    set rx885_pos, $P10
-    ge rx885_pos, rx885_eos, rxscan888_done
-  rxscan888_scan:
-    set_addr $I10, rxscan888_loop
-    rx885_cur."!mark_push"(0, rx885_pos, $I10)
-  rxscan888_done:
-.annotate "line", 410
+    set rx888_pos, $P10
+    ge rx888_pos, rx888_eos, rxscan891_done
+  rxscan891_scan:
+    set_addr $I10, rxscan891_loop
+    rx888_cur."!mark_push"(0, rx888_pos, $I10)
+  rxscan891_done:
+.annotate "line", 414
   # rx enumcharlist negate=0 zerowidth
-    ge rx885_pos, rx885_eos, rx885_fail
-    sub $I10, rx885_pos, rx885_off
-    substr $S10, rx885_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx885_fail
-  # rx subrule "pblock" subtype=capture negate=
-    rx885_cur."!cursor_pos"(rx885_pos)
-    $P10 = rx885_cur."pblock"()
-    unless $P10, rx885_fail
-    rx885_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("pblock")
-    rx885_pos = $P10."pos"()
+    ge rx888_pos, rx888_eos, rx888_fail
+    sub $I10, rx888_pos, rx888_off
+    substr $S10, rx888_tgt, $I10, 1
+    index $I11, unicode:"\x{ab}", $S10
+    lt $I11, 0, rx888_fail
+  # rx subrule "quote_EXPR" subtype=capture negate=
+    rx888_cur."!cursor_pos"(rx888_pos)
+    $P10 = rx888_cur."quote_EXPR"(":qq", ":w")
+    unless $P10, rx888_fail
+    rx888_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("quote_EXPR")
+    rx888_pos = $P10."pos"()
   # rx pass
-    rx885_cur."!cursor_pass"(rx885_pos, "circumfix:sym<{ }>")
-    rx885_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx885_pos)
-    .return (rx885_cur)
-  rx885_fail:
+    rx888_cur."!cursor_pass"(rx888_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    rx888_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx888_pos)
+    .return (rx888_cur)
+  rx888_fail:
 .annotate "line", 4
-    (rx885_rep, rx885_pos, $I10, $P10) = rx885_cur."!mark_fail"(0)
-    lt rx885_pos, -1, rx885_done
-    eq rx885_pos, -1, rx885_fail
+    (rx888_rep, rx888_pos, $I10, $P10) = rx888_cur."!mark_fail"(0)
+    lt rx888_pos, -1, rx888_done
+    eq rx888_pos, -1, rx888_fail
     jump $I10
-  rx885_done:
-    rx885_cur."!cursor_fail"()
-    rx885_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
-    .return (rx885_cur)
+  rx888_done:
+    rx888_cur."!cursor_fail"()
+    rx888_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .return (rx888_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<{ }>"  :subid("216_1267204702.05125") :method
+.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("216_1272816833.94956") :method
 .annotate "line", 4
-    new $P887, "ResizablePMCArray"
-    push $P887, "{"
-    .return ($P887)
+    new $P890, "ResizablePMCArray"
+    push $P890, unicode:"\x{ab}"
+    .return ($P890)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<sigil>"  :subid("217_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<{ }>"  :subid("217_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
-    .local string rx890_tgt
-    .local int rx890_pos
-    .local int rx890_off
-    .local int rx890_eos
-    .local int rx890_rep
-    .local pmc rx890_cur
-    (rx890_cur, rx890_pos, rx890_tgt) = self."!cursor_start"()
-    rx890_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
-    .lex unicode:"$\x{a2}", rx890_cur
+    .local string rx893_tgt
+    .local int rx893_pos
+    .local int rx893_off
+    .local int rx893_eos
+    .local int rx893_rep
+    .local pmc rx893_cur
+    (rx893_cur, rx893_pos, rx893_tgt) = self."!cursor_start"()
+    rx893_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx893_cur
     .local pmc match
     .lex "$/", match
-    length rx890_eos, rx890_tgt
-    set rx890_off, 0
-    lt rx890_pos, 2, rx890_start
-    sub rx890_off, rx890_pos, 1
-    substr rx890_tgt, rx890_tgt, rx890_off
-  rx890_start:
+    length rx893_eos, rx893_tgt
+    set rx893_off, 0
+    lt rx893_pos, 2, rx893_start
+    sub rx893_off, rx893_pos, 1
+    substr rx893_tgt, rx893_tgt, rx893_off
+  rx893_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan894_done
-    goto rxscan894_scan
-  rxscan894_loop:
-    ($P10) = rx890_cur."from"()
+    ne $I10, -1, rxscan896_done
+    goto rxscan896_scan
+  rxscan896_loop:
+    ($P10) = rx893_cur."from"()
     inc $P10
-    set rx890_pos, $P10
-    ge rx890_pos, rx890_eos, rxscan894_done
-  rxscan894_scan:
-    set_addr $I10, rxscan894_loop
-    rx890_cur."!mark_push"(0, rx890_pos, $I10)
-  rxscan894_done:
-.annotate "line", 411
-  # rx subrule "sigil" subtype=capture negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."sigil"()
-    unless $P10, rx890_fail
-    rx890_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("sigil")
-    rx890_pos = $P10."pos"()
-  # rx literal  "("
-    add $I11, rx890_pos, 1
-    gt $I11, rx890_eos, rx890_fail
-    sub $I11, rx890_pos, rx890_off
-    substr $S10, rx890_tgt, $I11, 1
-    ne $S10, "(", rx890_fail
-    add rx890_pos, 1
-  # rx subrule "semilist" subtype=capture negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."semilist"()
-    unless $P10, rx890_fail
-    rx890_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("semilist")
-    rx890_pos = $P10."pos"()
-  alt895_0:
-    set_addr $I10, alt895_1
-    rx890_cur."!mark_push"(0, rx890_pos, $I10)
-  # rx literal  ")"
-    add $I11, rx890_pos, 1
-    gt $I11, rx890_eos, rx890_fail
-    sub $I11, rx890_pos, rx890_off
-    substr $S10, rx890_tgt, $I11, 1
-    ne $S10, ")", rx890_fail
-    add rx890_pos, 1
-    goto alt895_end
-  alt895_1:
-  # rx subrule "FAILGOAL" subtype=method negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."FAILGOAL"("')'")
-    unless $P10, rx890_fail
-    rx890_pos = $P10."pos"()
-  alt895_end:
+    set rx893_pos, $P10
+    ge rx893_pos, rx893_eos, rxscan896_done
+  rxscan896_scan:
+    set_addr $I10, rxscan896_loop
+    rx893_cur."!mark_push"(0, rx893_pos, $I10)
+  rxscan896_done:
+.annotate "line", 415
+  # rx enumcharlist negate=0 zerowidth
+    ge rx893_pos, rx893_eos, rx893_fail
+    sub $I10, rx893_pos, rx893_off
+    substr $S10, rx893_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx893_fail
+  # rx subrule "pblock" subtype=capture negate=
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."pblock"()
+    unless $P10, rx893_fail
+    rx893_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("pblock")
+    rx893_pos = $P10."pos"()
   # rx pass
-    rx890_cur."!cursor_pass"(rx890_pos, "circumfix:sym<sigil>")
-    rx890_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx890_pos)
-    .return (rx890_cur)
-  rx890_fail:
+    rx893_cur."!cursor_pass"(rx893_pos, "circumfix:sym<{ }>")
+    rx893_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx893_pos)
+    .return (rx893_cur)
+  rx893_fail:
 .annotate "line", 4
-    (rx890_rep, rx890_pos, $I10, $P10) = rx890_cur."!mark_fail"(0)
-    lt rx890_pos, -1, rx890_done
-    eq rx890_pos, -1, rx890_fail
+    (rx893_rep, rx893_pos, $I10, $P10) = rx893_cur."!mark_fail"(0)
+    lt rx893_pos, -1, rx893_done
+    eq rx893_pos, -1, rx893_fail
     jump $I10
-  rx890_done:
-    rx890_cur."!cursor_fail"()
-    rx890_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
-    .return (rx890_cur)
+  rx893_done:
+    rx893_cur."!cursor_fail"()
+    rx893_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
+    .return (rx893_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<sigil>"  :subid("218_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<{ }>"  :subid("218_1272816833.94956") :method
 .annotate "line", 4
-    $P892 = self."!PREFIX__!subrule"("sigil", "")
-    new $P893, "ResizablePMCArray"
-    push $P893, $P892
-    .return ($P893)
+    new $P895, "ResizablePMCArray"
+    push $P895, "{"
+    .return ($P895)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "semilist"  :subid("219_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<sigil>"  :subid("219_1272816833.94956") :method :outer("11_1272816833.94956")
 .annotate "line", 4
     .local string rx898_tgt
     .local int rx898_pos
@@ -10756,7 +10797,7 @@
     .local int rx898_rep
     .local pmc rx898_cur
     (rx898_cur, rx898_pos, rx898_tgt) = self."!cursor_start"()
-    rx898_cur."!cursor_debug"("START ", "semilist")
+    rx898_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
     .lex unicode:"$\x{a2}", rx898_cur
     .local pmc match
     .lex "$/", match
@@ -10767,38 +10808,60 @@
     substr rx898_tgt, rx898_tgt, rx898_off
   rx898_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan901_done
-    goto rxscan901_scan
-  rxscan901_loop:
+    ne $I10, -1, rxscan902_done
+    goto rxscan902_scan
+  rxscan902_loop:
     ($P10) = rx898_cur."from"()
     inc $P10
     set rx898_pos, $P10
-    ge rx898_pos, rx898_eos, rxscan901_done
-  rxscan901_scan:
-    set_addr $I10, rxscan901_loop
+    ge rx898_pos, rx898_eos, rxscan902_done
+  rxscan902_scan:
+    set_addr $I10, rxscan902_loop
     rx898_cur."!mark_push"(0, rx898_pos, $I10)
-  rxscan901_done:
-.annotate "line", 413
-  # rx subrule "ws" subtype=method negate=
+  rxscan902_done:
+.annotate "line", 416
+  # rx subrule "sigil" subtype=capture negate=
     rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."ws"()
+    $P10 = rx898_cur."sigil"()
     unless $P10, rx898_fail
+    rx898_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("sigil")
     rx898_pos = $P10."pos"()
-  # rx subrule "statement" subtype=capture negate=
+  # rx literal  "("
+    add $I11, rx898_pos, 1
+    gt $I11, rx898_eos, rx898_fail
+    sub $I11, rx898_pos, rx898_off
+    substr $S10, rx898_tgt, $I11, 1
+    ne $S10, "(", rx898_fail
+    add rx898_pos, 1
+  # rx subrule "semilist" subtype=capture negate=
     rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."statement"()
+    $P10 = rx898_cur."semilist"()
     unless $P10, rx898_fail
     rx898_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("statement")
+    $P10."!cursor_names"("semilist")
     rx898_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
+  alt903_0:
+    set_addr $I10, alt903_1
+    rx898_cur."!mark_push"(0, rx898_pos, $I10)
+  # rx literal  ")"
+    add $I11, rx898_pos, 1
+    gt $I11, rx898_eos, rx898_fail
+    sub $I11, rx898_pos, rx898_off
+    substr $S10, rx898_tgt, $I11, 1
+    ne $S10, ")", rx898_fail
+    add rx898_pos, 1
+    goto alt903_end
+  alt903_1:
+  # rx subrule "FAILGOAL" subtype=method negate=
     rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."ws"()
+    $P10 = rx898_cur."FAILGOAL"("')'")
     unless $P10, rx898_fail
     rx898_pos = $P10."pos"()
+  alt903_end:
   # rx pass
-    rx898_cur."!cursor_pass"(rx898_pos, "semilist")
-    rx898_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx898_pos)
+    rx898_cur."!cursor_pass"(rx898_pos, "circumfix:sym<sigil>")
+    rx898_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx898_pos)
     .return (rx898_cur)
   rx898_fail:
 .annotate "line", 4
@@ -10808,4578 +10871,4526 @@
     jump $I10
   rx898_done:
     rx898_cur."!cursor_fail"()
-    rx898_cur."!cursor_debug"("FAIL  ", "semilist")
+    rx898_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
     .return (rx898_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__semilist"  :subid("220_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<sigil>"  :subid("220_1272816833.94956") :method
 .annotate "line", 4
-    new $P900, "ResizablePMCArray"
-    push $P900, ""
-    .return ($P900)
+    $P900 = self."!PREFIX__!subrule"("sigil", "")
+    new $P901, "ResizablePMCArray"
+    push $P901, $P900
+    .return ($P901)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixish"  :subid("221_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx905_tgt
-    .local int rx905_pos
-    .local int rx905_off
-    .local int rx905_eos
-    .local int rx905_rep
-    .local pmc rx905_cur
-    (rx905_cur, rx905_pos, rx905_tgt) = self."!cursor_start"()
-    rx905_cur."!cursor_debug"("START ", "infixish")
-    .lex unicode:"$\x{a2}", rx905_cur
-    .local pmc match
-    .lex "$/", match
-    length rx905_eos, rx905_tgt
-    set rx905_off, 0
-    lt rx905_pos, 2, rx905_start
-    sub rx905_off, rx905_pos, 1
-    substr rx905_tgt, rx905_tgt, rx905_off
-  rx905_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan908_done
-    goto rxscan908_scan
-  rxscan908_loop:
-    ($P10) = rx905_cur."from"()
-    inc $P10
-    set rx905_pos, $P10
-    ge rx905_pos, rx905_eos, rxscan908_done
-  rxscan908_scan:
-    set_addr $I10, rxscan908_loop
-    rx905_cur."!mark_push"(0, rx905_pos, $I10)
-  rxscan908_done:
-.annotate "line", 436
-  # rx subrule "infixstopper" subtype=zerowidth negate=1
-    rx905_cur."!cursor_pos"(rx905_pos)
-    $P10 = rx905_cur."infixstopper"()
-    if $P10, rx905_fail
-  # rx subrule "infix" subtype=capture negate=
-    rx905_cur."!cursor_pos"(rx905_pos)
-    $P10 = rx905_cur."infix"()
-    unless $P10, rx905_fail
-    rx905_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("OPER=infix")
-    rx905_pos = $P10."pos"()
+.sub "semilist"  :subid("221_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 4
+    .local string rx906_tgt
+    .local int rx906_pos
+    .local int rx906_off
+    .local int rx906_eos
+    .local int rx906_rep
+    .local pmc rx906_cur
+    (rx906_cur, rx906_pos, rx906_tgt) = self."!cursor_start"()
+    rx906_cur."!cursor_debug"("START ", "semilist")
+    .lex unicode:"$\x{a2}", rx906_cur
+    .local pmc match
+    .lex "$/", match
+    length rx906_eos, rx906_tgt
+    set rx906_off, 0
+    lt rx906_pos, 2, rx906_start
+    sub rx906_off, rx906_pos, 1
+    substr rx906_tgt, rx906_tgt, rx906_off
+  rx906_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan909_done
+    goto rxscan909_scan
+  rxscan909_loop:
+    ($P10) = rx906_cur."from"()
+    inc $P10
+    set rx906_pos, $P10
+    ge rx906_pos, rx906_eos, rxscan909_done
+  rxscan909_scan:
+    set_addr $I10, rxscan909_loop
+    rx906_cur."!mark_push"(0, rx906_pos, $I10)
+  rxscan909_done:
+.annotate "line", 418
+  # rx subrule "ws" subtype=method negate=
+    rx906_cur."!cursor_pos"(rx906_pos)
+    $P10 = rx906_cur."ws"()
+    unless $P10, rx906_fail
+    rx906_pos = $P10."pos"()
+  # rx subrule "statement" subtype=capture negate=
+    rx906_cur."!cursor_pos"(rx906_pos)
+    $P10 = rx906_cur."statement"()
+    unless $P10, rx906_fail
+    rx906_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("statement")
+    rx906_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx906_cur."!cursor_pos"(rx906_pos)
+    $P10 = rx906_cur."ws"()
+    unless $P10, rx906_fail
+    rx906_pos = $P10."pos"()
   # rx pass
-    rx905_cur."!cursor_pass"(rx905_pos, "infixish")
-    rx905_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx905_pos)
-    .return (rx905_cur)
-  rx905_fail:
-.annotate "line", 417
-    (rx905_rep, rx905_pos, $I10, $P10) = rx905_cur."!mark_fail"(0)
-    lt rx905_pos, -1, rx905_done
-    eq rx905_pos, -1, rx905_fail
-    jump $I10
-  rx905_done:
-    rx905_cur."!cursor_fail"()
-    rx905_cur."!cursor_debug"("FAIL  ", "infixish")
-    .return (rx905_cur)
+    rx906_cur."!cursor_pass"(rx906_pos, "semilist")
+    rx906_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx906_pos)
+    .return (rx906_cur)
+  rx906_fail:
+.annotate "line", 4
+    (rx906_rep, rx906_pos, $I10, $P10) = rx906_cur."!mark_fail"(0)
+    lt rx906_pos, -1, rx906_done
+    eq rx906_pos, -1, rx906_fail
+    jump $I10
+  rx906_done:
+    rx906_cur."!cursor_fail"()
+    rx906_cur."!cursor_debug"("FAIL  ", "semilist")
+    .return (rx906_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("222_1267204702.05125") :method
-.annotate "line", 417
-    new $P907, "ResizablePMCArray"
-    push $P907, ""
-    .return ($P907)
+.sub "!PREFIX__semilist"  :subid("222_1272816833.94956") :method
+.annotate "line", 4
+    new $P908, "ResizablePMCArray"
+    push $P908, ""
+    .return ($P908)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixstopper"  :subid("223_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx910_tgt
-    .local int rx910_pos
-    .local int rx910_off
-    .local int rx910_eos
-    .local int rx910_rep
-    .local pmc rx910_cur
-    (rx910_cur, rx910_pos, rx910_tgt) = self."!cursor_start"()
-    rx910_cur."!cursor_debug"("START ", "infixstopper")
-    .lex unicode:"$\x{a2}", rx910_cur
-    .local pmc match
-    .lex "$/", match
-    length rx910_eos, rx910_tgt
-    set rx910_off, 0
-    lt rx910_pos, 2, rx910_start
-    sub rx910_off, rx910_pos, 1
-    substr rx910_tgt, rx910_tgt, rx910_off
-  rx910_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan913_done
-    goto rxscan913_scan
-  rxscan913_loop:
-    ($P10) = rx910_cur."from"()
-    inc $P10
-    set rx910_pos, $P10
-    ge rx910_pos, rx910_eos, rxscan913_done
-  rxscan913_scan:
-    set_addr $I10, rxscan913_loop
-    rx910_cur."!mark_push"(0, rx910_pos, $I10)
-  rxscan913_done:
-.annotate "line", 437
+.sub "infixish"  :subid("223_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx913_tgt
+    .local int rx913_pos
+    .local int rx913_off
+    .local int rx913_eos
+    .local int rx913_rep
+    .local pmc rx913_cur
+    (rx913_cur, rx913_pos, rx913_tgt) = self."!cursor_start"()
+    rx913_cur."!cursor_debug"("START ", "infixish")
+    .lex unicode:"$\x{a2}", rx913_cur
+    .local pmc match
+    .lex "$/", match
+    length rx913_eos, rx913_tgt
+    set rx913_off, 0
+    lt rx913_pos, 2, rx913_start
+    sub rx913_off, rx913_pos, 1
+    substr rx913_tgt, rx913_tgt, rx913_off
+  rx913_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan916_done
+    goto rxscan916_scan
+  rxscan916_loop:
+    ($P10) = rx913_cur."from"()
+    inc $P10
+    set rx913_pos, $P10
+    ge rx913_pos, rx913_eos, rxscan916_done
+  rxscan916_scan:
+    set_addr $I10, rxscan916_loop
+    rx913_cur."!mark_push"(0, rx913_pos, $I10)
+  rxscan916_done:
+.annotate "line", 441
+  # rx subrule "infixstopper" subtype=zerowidth negate=1
+    rx913_cur."!cursor_pos"(rx913_pos)
+    $P10 = rx913_cur."infixstopper"()
+    if $P10, rx913_fail
+  # rx subrule "infix" subtype=capture negate=
+    rx913_cur."!cursor_pos"(rx913_pos)
+    $P10 = rx913_cur."infix"()
+    unless $P10, rx913_fail
+    rx913_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("OPER=infix")
+    rx913_pos = $P10."pos"()
+  # rx pass
+    rx913_cur."!cursor_pass"(rx913_pos, "infixish")
+    rx913_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx913_pos)
+    .return (rx913_cur)
+  rx913_fail:
+.annotate "line", 422
+    (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"()
+    rx913_cur."!cursor_debug"("FAIL  ", "infixish")
+    .return (rx913_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "!PREFIX__infixish"  :subid("224_1272816833.94956") :method
+.annotate "line", 422
+    new $P915, "ResizablePMCArray"
+    push $P915, ""
+    .return ($P915)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "infixstopper"  :subid("225_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx918_tgt
+    .local int rx918_pos
+    .local int rx918_off
+    .local int rx918_eos
+    .local int rx918_rep
+    .local pmc rx918_cur
+    (rx918_cur, rx918_pos, rx918_tgt) = self."!cursor_start"()
+    rx918_cur."!cursor_debug"("START ", "infixstopper")
+    .lex unicode:"$\x{a2}", rx918_cur
+    .local pmc match
+    .lex "$/", match
+    length rx918_eos, rx918_tgt
+    set rx918_off, 0
+    lt rx918_pos, 2, rx918_start
+    sub rx918_off, rx918_pos, 1
+    substr rx918_tgt, rx918_tgt, rx918_off
+  rx918_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan921_done
+    goto rxscan921_scan
+  rxscan921_loop:
+    ($P10) = rx918_cur."from"()
+    inc $P10
+    set rx918_pos, $P10
+    ge rx918_pos, rx918_eos, rxscan921_done
+  rxscan921_scan:
+    set_addr $I10, rxscan921_loop
+    rx918_cur."!mark_push"(0, rx918_pos, $I10)
+  rxscan921_done:
+.annotate "line", 442
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx910_cur."!cursor_pos"(rx910_pos)
-    $P10 = rx910_cur."lambda"()
-    unless $P10, rx910_fail
-  # rx pass
-    rx910_cur."!cursor_pass"(rx910_pos, "infixstopper")
-    rx910_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx910_pos)
-    .return (rx910_cur)
-  rx910_fail:
-.annotate "line", 417
-    (rx910_rep, rx910_pos, $I10, $P10) = rx910_cur."!mark_fail"(0)
-    lt rx910_pos, -1, rx910_done
-    eq rx910_pos, -1, rx910_fail
-    jump $I10
-  rx910_done:
-    rx910_cur."!cursor_fail"()
-    rx910_cur."!cursor_debug"("FAIL  ", "infixstopper")
-    .return (rx910_cur)
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."lambda"()
+    unless $P10, rx918_fail
+  # rx pass
+    rx918_cur."!cursor_pass"(rx918_pos, "infixstopper")
+    rx918_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx918_pos)
+    .return (rx918_cur)
+  rx918_fail:
+.annotate "line", 422
+    (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"()
+    rx918_cur."!cursor_debug"("FAIL  ", "infixstopper")
+    .return (rx918_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixstopper"  :subid("224_1267204702.05125") :method
-.annotate "line", 417
-    new $P912, "ResizablePMCArray"
-    push $P912, ""
-    .return ($P912)
+.sub "!PREFIX__infixstopper"  :subid("226_1272816833.94956") :method
+.annotate "line", 422
+    new $P920, "ResizablePMCArray"
+    push $P920, ""
+    .return ($P920)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<[ ]>"  :subid("225_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx915_tgt
-    .local int rx915_pos
-    .local int rx915_off
-    .local int rx915_eos
-    .local int rx915_rep
-    .local pmc rx915_cur
-    (rx915_cur, rx915_pos, rx915_tgt) = self."!cursor_start"()
-    rx915_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
-    .lex unicode:"$\x{a2}", rx915_cur
-    .local pmc match
-    .lex "$/", match
-    length rx915_eos, rx915_tgt
-    set rx915_off, 0
-    lt rx915_pos, 2, rx915_start
-    sub rx915_off, rx915_pos, 1
-    substr rx915_tgt, rx915_tgt, rx915_off
-  rx915_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan919_done
-    goto rxscan919_scan
-  rxscan919_loop:
-    ($P10) = rx915_cur."from"()
-    inc $P10
-    set rx915_pos, $P10
-    ge rx915_pos, rx915_eos, rxscan919_done
-  rxscan919_scan:
-    set_addr $I10, rxscan919_loop
-    rx915_cur."!mark_push"(0, rx915_pos, $I10)
-  rxscan919_done:
-.annotate "line", 440
+.sub "postcircumfix:sym<[ ]>"  :subid("227_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx923_tgt
+    .local int rx923_pos
+    .local int rx923_off
+    .local int rx923_eos
+    .local int rx923_rep
+    .local pmc rx923_cur
+    (rx923_cur, rx923_pos, rx923_tgt) = self."!cursor_start"()
+    rx923_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
+    .lex unicode:"$\x{a2}", rx923_cur
+    .local pmc match
+    .lex "$/", match
+    length rx923_eos, rx923_tgt
+    set rx923_off, 0
+    lt rx923_pos, 2, rx923_start
+    sub rx923_off, rx923_pos, 1
+    substr rx923_tgt, rx923_tgt, rx923_off
+  rx923_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan927_done
+    goto rxscan927_scan
+  rxscan927_loop:
+    ($P10) = rx923_cur."from"()
+    inc $P10
+    set rx923_pos, $P10
+    ge rx923_pos, rx923_eos, rxscan927_done
+  rxscan927_scan:
+    set_addr $I10, rxscan927_loop
+    rx923_cur."!mark_push"(0, rx923_pos, $I10)
+  rxscan927_done:
+.annotate "line", 445
   # rx literal  "["
-    add $I11, rx915_pos, 1
-    gt $I11, rx915_eos, rx915_fail
-    sub $I11, rx915_pos, rx915_off
-    substr $S10, rx915_tgt, $I11, 1
-    ne $S10, "[", rx915_fail
-    add rx915_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."ws"()
-    unless $P10, rx915_fail
-    rx915_pos = $P10."pos"()
+    add $I11, rx923_pos, 1
+    gt $I11, rx923_eos, rx923_fail
+    sub $I11, rx923_pos, rx923_off
+    substr $S10, rx923_tgt, $I11, 1
+    ne $S10, "[", rx923_fail
+    add rx923_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx923_cur."!cursor_pos"(rx923_pos)
+    $P10 = rx923_cur."ws"()
+    unless $P10, rx923_fail
+    rx923_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."EXPR"()
-    unless $P10, rx915_fail
-    rx915_cur."!mark_push"(0, -1, 0, $P10)
+    rx923_cur."!cursor_pos"(rx923_pos)
+    $P10 = rx923_cur."EXPR"()
+    unless $P10, rx923_fail
+    rx923_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx915_pos = $P10."pos"()
+    rx923_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx915_pos, 1
-    gt $I11, rx915_eos, rx915_fail
-    sub $I11, rx915_pos, rx915_off
-    substr $S10, rx915_tgt, $I11, 1
-    ne $S10, "]", rx915_fail
-    add rx915_pos, 1
-.annotate "line", 441
+    add $I11, rx923_pos, 1
+    gt $I11, rx923_eos, rx923_fail
+    sub $I11, rx923_pos, rx923_off
+    substr $S10, rx923_tgt, $I11, 1
+    ne $S10, "]", rx923_fail
+    add rx923_pos, 1
+.annotate "line", 446
   # rx subrule "O" subtype=capture negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."O"("%methodop")
-    unless $P10, rx915_fail
-    rx915_cur."!mark_push"(0, -1, 0, $P10)
+    rx923_cur."!cursor_pos"(rx923_pos)
+    $P10 = rx923_cur."O"("%methodop")
+    unless $P10, rx923_fail
+    rx923_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx915_pos = $P10."pos"()
-.annotate "line", 439
+    rx923_pos = $P10."pos"()
+.annotate "line", 444
   # rx pass
-    rx915_cur."!cursor_pass"(rx915_pos, "postcircumfix:sym<[ ]>")
-    rx915_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx915_pos)
-    .return (rx915_cur)
-  rx915_fail:
-.annotate "line", 417
-    (rx915_rep, rx915_pos, $I10, $P10) = rx915_cur."!mark_fail"(0)
-    lt rx915_pos, -1, rx915_done
-    eq rx915_pos, -1, rx915_fail
+    rx923_cur."!cursor_pass"(rx923_pos, "postcircumfix:sym<[ ]>")
+    rx923_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx923_pos)
+    .return (rx923_cur)
+  rx923_fail:
+.annotate "line", 422
+    (rx923_rep, rx923_pos, $I10, $P10) = rx923_cur."!mark_fail"(0)
+    lt rx923_pos, -1, rx923_done
+    eq rx923_pos, -1, rx923_fail
     jump $I10
-  rx915_done:
-    rx915_cur."!cursor_fail"()
-    rx915_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
-    .return (rx915_cur)
+  rx923_done:
+    rx923_cur."!cursor_fail"()
+    rx923_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
+    .return (rx923_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("226_1267204702.05125") :method
-.annotate "line", 417
-    $P917 = self."!PREFIX__!subrule"("", "[")
-    new $P918, "ResizablePMCArray"
-    push $P918, $P917
-    .return ($P918)
+.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("228_1272816833.94956") :method
+.annotate "line", 422
+    $P925 = self."!PREFIX__!subrule"("", "[")
+    new $P926, "ResizablePMCArray"
+    push $P926, $P925
+    .return ($P926)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<{ }>"  :subid("227_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx921_tgt
-    .local int rx921_pos
-    .local int rx921_off
-    .local int rx921_eos
-    .local int rx921_rep
-    .local pmc rx921_cur
-    (rx921_cur, rx921_pos, rx921_tgt) = self."!cursor_start"()
-    rx921_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx921_cur
-    .local pmc match
-    .lex "$/", match
-    length rx921_eos, rx921_tgt
-    set rx921_off, 0
-    lt rx921_pos, 2, rx921_start
-    sub rx921_off, rx921_pos, 1
-    substr rx921_tgt, rx921_tgt, rx921_off
-  rx921_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan925_done
-    goto rxscan925_scan
-  rxscan925_loop:
-    ($P10) = rx921_cur."from"()
-    inc $P10
-    set rx921_pos, $P10
-    ge rx921_pos, rx921_eos, rxscan925_done
-  rxscan925_scan:
-    set_addr $I10, rxscan925_loop
-    rx921_cur."!mark_push"(0, rx921_pos, $I10)
-  rxscan925_done:
-.annotate "line", 445
+.sub "postcircumfix:sym<{ }>"  :subid("229_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx929_tgt
+    .local int rx929_pos
+    .local int rx929_off
+    .local int rx929_eos
+    .local int rx929_rep
+    .local pmc rx929_cur
+    (rx929_cur, rx929_pos, rx929_tgt) = self."!cursor_start"()
+    rx929_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx929_cur
+    .local pmc match
+    .lex "$/", match
+    length rx929_eos, rx929_tgt
+    set rx929_off, 0
+    lt rx929_pos, 2, rx929_start
+    sub rx929_off, rx929_pos, 1
+    substr rx929_tgt, rx929_tgt, rx929_off
+  rx929_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan933_done
+    goto rxscan933_scan
+  rxscan933_loop:
+    ($P10) = rx929_cur."from"()
+    inc $P10
+    set rx929_pos, $P10
+    ge rx929_pos, rx929_eos, rxscan933_done
+  rxscan933_scan:
+    set_addr $I10, rxscan933_loop
+    rx929_cur."!mark_push"(0, rx929_pos, $I10)
+  rxscan933_done:
+.annotate "line", 450
   # rx literal  "{"
-    add $I11, rx921_pos, 1
-    gt $I11, rx921_eos, rx921_fail
-    sub $I11, rx921_pos, rx921_off
-    substr $S10, rx921_tgt, $I11, 1
-    ne $S10, "{", rx921_fail
-    add rx921_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."ws"()
-    unless $P10, rx921_fail
-    rx921_pos = $P10."pos"()
+    add $I11, rx929_pos, 1
+    gt $I11, rx929_eos, rx929_fail
+    sub $I11, rx929_pos, rx929_off
+    substr $S10, rx929_tgt, $I11, 1
+    ne $S10, "{", rx929_fail
+    add rx929_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx929_cur."!cursor_pos"(rx929_pos)
+    $P10 = rx929_cur."ws"()
+    unless $P10, rx929_fail
+    rx929_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."EXPR"()
-    unless $P10, rx921_fail
-    rx921_cur."!mark_push"(0, -1, 0, $P10)
+    rx929_cur."!cursor_pos"(rx929_pos)
+    $P10 = rx929_cur."EXPR"()
+    unless $P10, rx929_fail
+    rx929_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx921_pos = $P10."pos"()
+    rx929_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx921_pos, 1
-    gt $I11, rx921_eos, rx921_fail
-    sub $I11, rx921_pos, rx921_off
-    substr $S10, rx921_tgt, $I11, 1
-    ne $S10, "}", rx921_fail
-    add rx921_pos, 1
-.annotate "line", 446
+    add $I11, rx929_pos, 1
+    gt $I11, rx929_eos, rx929_fail
+    sub $I11, rx929_pos, rx929_off
+    substr $S10, rx929_tgt, $I11, 1
+    ne $S10, "}", rx929_fail
+    add rx929_pos, 1
+.annotate "line", 451
   # rx subrule "O" subtype=capture negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."O"("%methodop")
-    unless $P10, rx921_fail
-    rx921_cur."!mark_push"(0, -1, 0, $P10)
+    rx929_cur."!cursor_pos"(rx929_pos)
+    $P10 = rx929_cur."O"("%methodop")
+    unless $P10, rx929_fail
+    rx929_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx921_pos = $P10."pos"()
-.annotate "line", 444
+    rx929_pos = $P10."pos"()
+.annotate "line", 449
   # rx pass
-    rx921_cur."!cursor_pass"(rx921_pos, "postcircumfix:sym<{ }>")
-    rx921_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx921_pos)
-    .return (rx921_cur)
-  rx921_fail:
-.annotate "line", 417
-    (rx921_rep, rx921_pos, $I10, $P10) = rx921_cur."!mark_fail"(0)
-    lt rx921_pos, -1, rx921_done
-    eq rx921_pos, -1, rx921_fail
-    jump $I10
-  rx921_done:
-    rx921_cur."!cursor_fail"()
-    rx921_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
-    .return (rx921_cur)
+    rx929_cur."!cursor_pass"(rx929_pos, "postcircumfix:sym<{ }>")
+    rx929_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx929_pos)
+    .return (rx929_cur)
+  rx929_fail:
+.annotate "line", 422
+    (rx929_rep, rx929_pos, $I10, $P10) = rx929_cur."!mark_fail"(0)
+    lt rx929_pos, -1, rx929_done
+    eq rx929_pos, -1, rx929_fail
+    jump $I10
+  rx929_done:
+    rx929_cur."!cursor_fail"()
+    rx929_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
+    .return (rx929_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("228_1267204702.05125") :method
-.annotate "line", 417
-    $P923 = self."!PREFIX__!subrule"("", "{")
-    new $P924, "ResizablePMCArray"
-    push $P924, $P923
-    .return ($P924)
+.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("230_1272816833.94956") :method
+.annotate "line", 422
+    $P931 = self."!PREFIX__!subrule"("", "{")
+    new $P932, "ResizablePMCArray"
+    push $P932, $P931
+    .return ($P932)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<ang>"  :subid("229_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx927_tgt
-    .local int rx927_pos
-    .local int rx927_off
-    .local int rx927_eos
-    .local int rx927_rep
-    .local pmc rx927_cur
-    (rx927_cur, rx927_pos, rx927_tgt) = self."!cursor_start"()
-    rx927_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
-    .lex unicode:"$\x{a2}", rx927_cur
-    .local pmc match
-    .lex "$/", match
-    length rx927_eos, rx927_tgt
-    set rx927_off, 0
-    lt rx927_pos, 2, rx927_start
-    sub rx927_off, rx927_pos, 1
-    substr rx927_tgt, rx927_tgt, rx927_off
-  rx927_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan930_done
-    goto rxscan930_scan
-  rxscan930_loop:
-    ($P10) = rx927_cur."from"()
-    inc $P10
-    set rx927_pos, $P10
-    ge rx927_pos, rx927_eos, rxscan930_done
-  rxscan930_scan:
-    set_addr $I10, rxscan930_loop
-    rx927_cur."!mark_push"(0, rx927_pos, $I10)
-  rxscan930_done:
-.annotate "line", 450
+.sub "postcircumfix:sym<ang>"  :subid("231_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx935_tgt
+    .local int rx935_pos
+    .local int rx935_off
+    .local int rx935_eos
+    .local int rx935_rep
+    .local pmc rx935_cur
+    (rx935_cur, rx935_pos, rx935_tgt) = self."!cursor_start"()
+    rx935_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx935_cur
+    .local pmc match
+    .lex "$/", match
+    length rx935_eos, rx935_tgt
+    set rx935_off, 0
+    lt rx935_pos, 2, rx935_start
+    sub rx935_off, rx935_pos, 1
+    substr rx935_tgt, rx935_tgt, rx935_off
+  rx935_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan938_done
+    goto rxscan938_scan
+  rxscan938_loop:
+    ($P10) = rx935_cur."from"()
+    inc $P10
+    set rx935_pos, $P10
+    ge rx935_pos, rx935_eos, rxscan938_done
+  rxscan938_scan:
+    set_addr $I10, rxscan938_loop
+    rx935_cur."!mark_push"(0, rx935_pos, $I10)
+  rxscan938_done:
+.annotate "line", 455
   # rx enumcharlist negate=0 zerowidth
-    ge rx927_pos, rx927_eos, rx927_fail
-    sub $I10, rx927_pos, rx927_off
-    substr $S10, rx927_tgt, $I10, 1
+    ge rx935_pos, rx935_eos, rx935_fail
+    sub $I10, rx935_pos, rx935_off
+    substr $S10, rx935_tgt, $I10, 1
     index $I11, "<", $S10
-    lt $I11, 0, rx927_fail
+    lt $I11, 0, rx935_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx927_cur."!cursor_pos"(rx927_pos)
-    $P10 = rx927_cur."quote_EXPR"(":q")
-    unless $P10, rx927_fail
-    rx927_cur."!mark_push"(0, -1, 0, $P10)
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."quote_EXPR"(":q")
+    unless $P10, rx935_fail
+    rx935_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx927_pos = $P10."pos"()
-.annotate "line", 451
+    rx935_pos = $P10."pos"()
+.annotate "line", 456
   # rx subrule "O" subtype=capture negate=
-    rx927_cur."!cursor_pos"(rx927_pos)
-    $P10 = rx927_cur."O"("%methodop")
-    unless $P10, rx927_fail
-    rx927_cur."!mark_push"(0, -1, 0, $P10)
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."O"("%methodop")
+    unless $P10, rx935_fail
+    rx935_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx927_pos = $P10."pos"()
-.annotate "line", 449
+    rx935_pos = $P10."pos"()
+.annotate "line", 454
   # rx pass
-    rx927_cur."!cursor_pass"(rx927_pos, "postcircumfix:sym<ang>")
-    rx927_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx927_pos)
-    .return (rx927_cur)
-  rx927_fail:
-.annotate "line", 417
-    (rx927_rep, rx927_pos, $I10, $P10) = rx927_cur."!mark_fail"(0)
-    lt rx927_pos, -1, rx927_done
-    eq rx927_pos, -1, rx927_fail
-    jump $I10
-  rx927_done:
-    rx927_cur."!cursor_fail"()
-    rx927_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
-    .return (rx927_cur)
+    rx935_cur."!cursor_pass"(rx935_pos, "postcircumfix:sym<ang>")
+    rx935_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx935_pos)
+    .return (rx935_cur)
+  rx935_fail:
+.annotate "line", 422
+    (rx935_rep, rx935_pos, $I10, $P10) = rx935_cur."!mark_fail"(0)
+    lt rx935_pos, -1, rx935_done
+    eq rx935_pos, -1, rx935_fail
+    jump $I10
+  rx935_done:
+    rx935_cur."!cursor_fail"()
+    rx935_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
+    .return (rx935_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("230_1267204702.05125") :method
-.annotate "line", 417
-    new $P929, "ResizablePMCArray"
-    push $P929, "<"
-    .return ($P929)
+.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("232_1272816833.94956") :method
+.annotate "line", 422
+    new $P937, "ResizablePMCArray"
+    push $P937, "<"
+    .return ($P937)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<( )>"  :subid("231_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx932_tgt
-    .local int rx932_pos
-    .local int rx932_off
-    .local int rx932_eos
-    .local int rx932_rep
-    .local pmc rx932_cur
-    (rx932_cur, rx932_pos, rx932_tgt) = self."!cursor_start"()
-    rx932_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
-    .lex unicode:"$\x{a2}", rx932_cur
-    .local pmc match
-    .lex "$/", match
-    length rx932_eos, rx932_tgt
-    set rx932_off, 0
-    lt rx932_pos, 2, rx932_start
-    sub rx932_off, rx932_pos, 1
-    substr rx932_tgt, rx932_tgt, rx932_off
-  rx932_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan936_done
-    goto rxscan936_scan
-  rxscan936_loop:
-    ($P10) = rx932_cur."from"()
-    inc $P10
-    set rx932_pos, $P10
-    ge rx932_pos, rx932_eos, rxscan936_done
-  rxscan936_scan:
-    set_addr $I10, rxscan936_loop
-    rx932_cur."!mark_push"(0, rx932_pos, $I10)
-  rxscan936_done:
-.annotate "line", 455
+.sub "postcircumfix:sym<( )>"  :subid("233_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx940_tgt
+    .local int rx940_pos
+    .local int rx940_off
+    .local int rx940_eos
+    .local int rx940_rep
+    .local pmc rx940_cur
+    (rx940_cur, rx940_pos, rx940_tgt) = self."!cursor_start"()
+    rx940_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
+    .lex unicode:"$\x{a2}", rx940_cur
+    .local pmc match
+    .lex "$/", match
+    length rx940_eos, rx940_tgt
+    set rx940_off, 0
+    lt rx940_pos, 2, rx940_start
+    sub rx940_off, rx940_pos, 1
+    substr rx940_tgt, rx940_tgt, rx940_off
+  rx940_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan944_done
+    goto rxscan944_scan
+  rxscan944_loop:
+    ($P10) = rx940_cur."from"()
+    inc $P10
+    set rx940_pos, $P10
+    ge rx940_pos, rx940_eos, rxscan944_done
+  rxscan944_scan:
+    set_addr $I10, rxscan944_loop
+    rx940_cur."!mark_push"(0, rx940_pos, $I10)
+  rxscan944_done:
+.annotate "line", 460
   # rx literal  "("
-    add $I11, rx932_pos, 1
-    gt $I11, rx932_eos, rx932_fail
-    sub $I11, rx932_pos, rx932_off
-    substr $S10, rx932_tgt, $I11, 1
-    ne $S10, "(", rx932_fail
-    add rx932_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."ws"()
-    unless $P10, rx932_fail
-    rx932_pos = $P10."pos"()
+    add $I11, rx940_pos, 1
+    gt $I11, rx940_eos, rx940_fail
+    sub $I11, rx940_pos, rx940_off
+    substr $S10, rx940_tgt, $I11, 1
+    ne $S10, "(", rx940_fail
+    add rx940_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx940_cur."!cursor_pos"(rx940_pos)
+    $P10 = rx940_cur."ws"()
+    unless $P10, rx940_fail
+    rx940_pos = $P10."pos"()
   # rx subrule "arglist" subtype=capture negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."arglist"()
-    unless $P10, rx932_fail
-    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    rx940_cur."!cursor_pos"(rx940_pos)
+    $P10 = rx940_cur."arglist"()
+    unless $P10, rx940_fail
+    rx940_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx932_pos = $P10."pos"()
+    rx940_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx932_pos, 1
-    gt $I11, rx932_eos, rx932_fail
-    sub $I11, rx932_pos, rx932_off
-    substr $S10, rx932_tgt, $I11, 1
-    ne $S10, ")", rx932_fail
-    add rx932_pos, 1
-.annotate "line", 456
+    add $I11, rx940_pos, 1
+    gt $I11, rx940_eos, rx940_fail
+    sub $I11, rx940_pos, rx940_off
+    substr $S10, rx940_tgt, $I11, 1
+    ne $S10, ")", rx940_fail
+    add rx940_pos, 1
+.annotate "line", 461
   # rx subrule "O" subtype=capture negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."O"("%methodop")
-    unless $P10, rx932_fail
-    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    rx940_cur."!cursor_pos"(rx940_pos)
+    $P10 = rx940_cur."O"("%methodop")
+    unless $P10, rx940_fail
+    rx940_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx932_pos = $P10."pos"()
-.annotate "line", 454
+    rx940_pos = $P10."pos"()
+.annotate "line", 459
   # rx pass
-    rx932_cur."!cursor_pass"(rx932_pos, "postcircumfix:sym<( )>")
-    rx932_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx932_pos)
-    .return (rx932_cur)
-  rx932_fail:
-.annotate "line", 417
-    (rx932_rep, rx932_pos, $I10, $P10) = rx932_cur."!mark_fail"(0)
-    lt rx932_pos, -1, rx932_done
-    eq rx932_pos, -1, rx932_fail
-    jump $I10
-  rx932_done:
-    rx932_cur."!cursor_fail"()
-    rx932_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
-    .return (rx932_cur)
+    rx940_cur."!cursor_pass"(rx940_pos, "postcircumfix:sym<( )>")
+    rx940_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx940_pos)
+    .return (rx940_cur)
+  rx940_fail:
+.annotate "line", 422
+    (rx940_rep, rx940_pos, $I10, $P10) = rx940_cur."!mark_fail"(0)
+    lt rx940_pos, -1, rx940_done
+    eq rx940_pos, -1, rx940_fail
+    jump $I10
+  rx940_done:
+    rx940_cur."!cursor_fail"()
+    rx940_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
+    .return (rx940_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("232_1267204702.05125") :method
-.annotate "line", 417
-    $P934 = self."!PREFIX__!subrule"("", "(")
-    new $P935, "ResizablePMCArray"
-    push $P935, $P934
-    .return ($P935)
+.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("234_1272816833.94956") :method
+.annotate "line", 422
+    $P942 = self."!PREFIX__!subrule"("", "(")
+    new $P943, "ResizablePMCArray"
+    push $P943, $P942
+    .return ($P943)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<.>"  :subid("233_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx938_tgt
-    .local int rx938_pos
-    .local int rx938_off
-    .local int rx938_eos
-    .local int rx938_rep
-    .local pmc rx938_cur
-    (rx938_cur, rx938_pos, rx938_tgt) = self."!cursor_start"()
-    rx938_cur."!cursor_debug"("START ", "postfix:sym<.>")
-    .lex unicode:"$\x{a2}", rx938_cur
-    .local pmc match
-    .lex "$/", match
-    length rx938_eos, rx938_tgt
-    set rx938_off, 0
-    lt rx938_pos, 2, rx938_start
-    sub rx938_off, rx938_pos, 1
-    substr rx938_tgt, rx938_tgt, rx938_off
-  rx938_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan942_done
-    goto rxscan942_scan
-  rxscan942_loop:
-    ($P10) = rx938_cur."from"()
-    inc $P10
-    set rx938_pos, $P10
-    ge rx938_pos, rx938_eos, rxscan942_done
-  rxscan942_scan:
-    set_addr $I10, rxscan942_loop
-    rx938_cur."!mark_push"(0, rx938_pos, $I10)
-  rxscan942_done:
-.annotate "line", 459
+.sub "postfix:sym<.>"  :subid("235_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx946_tgt
+    .local int rx946_pos
+    .local int rx946_off
+    .local int rx946_eos
+    .local int rx946_rep
+    .local pmc rx946_cur
+    (rx946_cur, rx946_pos, rx946_tgt) = self."!cursor_start"()
+    rx946_cur."!cursor_debug"("START ", "postfix:sym<.>")
+    .lex unicode:"$\x{a2}", rx946_cur
+    .local pmc match
+    .lex "$/", match
+    length rx946_eos, rx946_tgt
+    set rx946_off, 0
+    lt rx946_pos, 2, rx946_start
+    sub rx946_off, rx946_pos, 1
+    substr rx946_tgt, rx946_tgt, rx946_off
+  rx946_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan950_done
+    goto rxscan950_scan
+  rxscan950_loop:
+    ($P10) = rx946_cur."from"()
+    inc $P10
+    set rx946_pos, $P10
+    ge rx946_pos, rx946_eos, rxscan950_done
+  rxscan950_scan:
+    set_addr $I10, rxscan950_loop
+    rx946_cur."!mark_push"(0, rx946_pos, $I10)
+  rxscan950_done:
+.annotate "line", 464
   # rx subrule "dotty" subtype=capture negate=
-    rx938_cur."!cursor_pos"(rx938_pos)
-    $P10 = rx938_cur."dotty"()
-    unless $P10, rx938_fail
-    rx938_cur."!mark_push"(0, -1, 0, $P10)
+    rx946_cur."!cursor_pos"(rx946_pos)
+    $P10 = rx946_cur."dotty"()
+    unless $P10, rx946_fail
+    rx946_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dotty")
-    rx938_pos = $P10."pos"()
+    rx946_pos = $P10."pos"()
   # rx subrule "O" subtype=capture negate=
-    rx938_cur."!cursor_pos"(rx938_pos)
-    $P10 = rx938_cur."O"("%methodop")
-    unless $P10, rx938_fail
-    rx938_cur."!mark_push"(0, -1, 0, $P10)
+    rx946_cur."!cursor_pos"(rx946_pos)
+    $P10 = rx946_cur."O"("%methodop")
+    unless $P10, rx946_fail
+    rx946_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx938_pos = $P10."pos"()
+    rx946_pos = $P10."pos"()
   # rx pass
-    rx938_cur."!cursor_pass"(rx938_pos, "postfix:sym<.>")
-    rx938_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx938_pos)
-    .return (rx938_cur)
-  rx938_fail:
-.annotate "line", 417
-    (rx938_rep, rx938_pos, $I10, $P10) = rx938_cur."!mark_fail"(0)
-    lt rx938_pos, -1, rx938_done
-    eq rx938_pos, -1, rx938_fail
-    jump $I10
-  rx938_done:
-    rx938_cur."!cursor_fail"()
-    rx938_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
-    .return (rx938_cur)
+    rx946_cur."!cursor_pass"(rx946_pos, "postfix:sym<.>")
+    rx946_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx946_pos)
+    .return (rx946_cur)
+  rx946_fail:
+.annotate "line", 422
+    (rx946_rep, rx946_pos, $I10, $P10) = rx946_cur."!mark_fail"(0)
+    lt rx946_pos, -1, rx946_done
+    eq rx946_pos, -1, rx946_fail
+    jump $I10
+  rx946_done:
+    rx946_cur."!cursor_fail"()
+    rx946_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
+    .return (rx946_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<.>"  :subid("234_1267204702.05125") :method
-.annotate "line", 417
-    $P940 = self."!PREFIX__!subrule"("dotty", "")
-    new $P941, "ResizablePMCArray"
-    push $P941, $P940
-    .return ($P941)
+.sub "!PREFIX__postfix:sym<.>"  :subid("236_1272816833.94956") :method
+.annotate "line", 422
+    $P948 = self."!PREFIX__!subrule"("dotty", "")
+    new $P949, "ResizablePMCArray"
+    push $P949, $P948
+    .return ($P949)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<++>"  :subid("235_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx944_tgt
-    .local int rx944_pos
-    .local int rx944_off
-    .local int rx944_eos
-    .local int rx944_rep
-    .local pmc rx944_cur
-    (rx944_cur, rx944_pos, rx944_tgt) = self."!cursor_start"()
-    rx944_cur."!cursor_debug"("START ", "prefix:sym<++>")
-    .lex unicode:"$\x{a2}", rx944_cur
-    .local pmc match
-    .lex "$/", match
-    length rx944_eos, rx944_tgt
-    set rx944_off, 0
-    lt rx944_pos, 2, rx944_start
-    sub rx944_off, rx944_pos, 1
-    substr rx944_tgt, rx944_tgt, rx944_off
-  rx944_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan948_done
-    goto rxscan948_scan
-  rxscan948_loop:
-    ($P10) = rx944_cur."from"()
-    inc $P10
-    set rx944_pos, $P10
-    ge rx944_pos, rx944_eos, rxscan948_done
-  rxscan948_scan:
-    set_addr $I10, rxscan948_loop
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
-  rxscan948_done:
-.annotate "line", 461
+.sub "prefix:sym<++>"  :subid("237_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx952_tgt
+    .local int rx952_pos
+    .local int rx952_off
+    .local int rx952_eos
+    .local int rx952_rep
+    .local pmc rx952_cur
+    (rx952_cur, rx952_pos, rx952_tgt) = self."!cursor_start"()
+    rx952_cur."!cursor_debug"("START ", "prefix:sym<++>")
+    .lex unicode:"$\x{a2}", rx952_cur
+    .local pmc match
+    .lex "$/", match
+    length rx952_eos, rx952_tgt
+    set rx952_off, 0
+    lt rx952_pos, 2, rx952_start
+    sub rx952_off, rx952_pos, 1
+    substr rx952_tgt, rx952_tgt, rx952_off
+  rx952_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan956_done
+    goto rxscan956_scan
+  rxscan956_loop:
+    ($P10) = rx952_cur."from"()
+    inc $P10
+    set rx952_pos, $P10
+    ge rx952_pos, rx952_eos, rxscan956_done
+  rxscan956_scan:
+    set_addr $I10, rxscan956_loop
+    rx952_cur."!mark_push"(0, rx952_pos, $I10)
+  rxscan956_done:
+.annotate "line", 466
   # rx subcapture "sym"
-    set_addr $I10, rxcap_949_fail
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
+    set_addr $I10, rxcap_957_fail
+    rx952_cur."!mark_push"(0, rx952_pos, $I10)
   # rx literal  "++"
-    add $I11, rx944_pos, 2
-    gt $I11, rx944_eos, rx944_fail
-    sub $I11, rx944_pos, rx944_off
-    substr $S10, rx944_tgt, $I11, 2
-    ne $S10, "++", rx944_fail
-    add rx944_pos, 2
-    set_addr $I10, rxcap_949_fail
-    ($I12, $I11) = rx944_cur."!mark_peek"($I10)
-    rx944_cur."!cursor_pos"($I11)
-    ($P10) = rx944_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx944_pos, "")
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx952_pos, 2
+    gt $I11, rx952_eos, rx952_fail
+    sub $I11, rx952_pos, rx952_off
+    substr $S10, rx952_tgt, $I11, 2
+    ne $S10, "++", rx952_fail
+    add rx952_pos, 2
+    set_addr $I10, rxcap_957_fail
+    ($I12, $I11) = rx952_cur."!mark_peek"($I10)
+    rx952_cur."!cursor_pos"($I11)
+    ($P10) = rx952_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx952_pos, "")
+    rx952_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_949_done
-  rxcap_949_fail:
-    goto rx944_fail
-  rxcap_949_done:
+    goto rxcap_957_done
+  rxcap_957_fail:
+    goto rx952_fail
+  rxcap_957_done:
   # rx subrule "O" subtype=capture negate=
-    rx944_cur."!cursor_pos"(rx944_pos)
-    $P10 = rx944_cur."O"("%autoincrement, :pirop<inc>")
-    unless $P10, rx944_fail
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
+    rx952_cur."!cursor_pos"(rx952_pos)
+    $P10 = rx952_cur."O"("%autoincrement, :pirop<inc>")
+    unless $P10, rx952_fail
+    rx952_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx944_pos = $P10."pos"()
+    rx952_pos = $P10."pos"()
   # rx pass
-    rx944_cur."!cursor_pass"(rx944_pos, "prefix:sym<++>")
-    rx944_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx944_pos)
-    .return (rx944_cur)
-  rx944_fail:
-.annotate "line", 417
-    (rx944_rep, rx944_pos, $I10, $P10) = rx944_cur."!mark_fail"(0)
-    lt rx944_pos, -1, rx944_done
-    eq rx944_pos, -1, rx944_fail
-    jump $I10
-  rx944_done:
-    rx944_cur."!cursor_fail"()
-    rx944_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
-    .return (rx944_cur)
+    rx952_cur."!cursor_pass"(rx952_pos, "prefix:sym<++>")
+    rx952_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx952_pos)
+    .return (rx952_cur)
+  rx952_fail:
+.annotate "line", 422
+    (rx952_rep, rx952_pos, $I10, $P10) = rx952_cur."!mark_fail"(0)
+    lt rx952_pos, -1, rx952_done
+    eq rx952_pos, -1, rx952_fail
+    jump $I10
+  rx952_done:
+    rx952_cur."!cursor_fail"()
+    rx952_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
+    .return (rx952_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<++>"  :subid("236_1267204702.05125") :method
-.annotate "line", 417
-    $P946 = self."!PREFIX__!subrule"("O", "++")
-    new $P947, "ResizablePMCArray"
-    push $P947, $P946
-    .return ($P947)
+.sub "!PREFIX__prefix:sym<++>"  :subid("238_1272816833.94956") :method
+.annotate "line", 422
+    $P954 = self."!PREFIX__!subrule"("O", "++")
+    new $P955, "ResizablePMCArray"
+    push $P955, $P954
+    .return ($P955)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<-->"  :subid("237_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx951_tgt
-    .local int rx951_pos
-    .local int rx951_off
-    .local int rx951_eos
-    .local int rx951_rep
-    .local pmc rx951_cur
-    (rx951_cur, rx951_pos, rx951_tgt) = self."!cursor_start"()
-    rx951_cur."!cursor_debug"("START ", "prefix:sym<-->")
-    .lex unicode:"$\x{a2}", rx951_cur
-    .local pmc match
-    .lex "$/", match
-    length rx951_eos, rx951_tgt
-    set rx951_off, 0
-    lt rx951_pos, 2, rx951_start
-    sub rx951_off, rx951_pos, 1
-    substr rx951_tgt, rx951_tgt, rx951_off
-  rx951_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan955_done
-    goto rxscan955_scan
-  rxscan955_loop:
-    ($P10) = rx951_cur."from"()
-    inc $P10
-    set rx951_pos, $P10
-    ge rx951_pos, rx951_eos, rxscan955_done
-  rxscan955_scan:
-    set_addr $I10, rxscan955_loop
-    rx951_cur."!mark_push"(0, rx951_pos, $I10)
-  rxscan955_done:
-.annotate "line", 462
+.sub "prefix:sym<-->"  :subid("239_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx959_tgt
+    .local int rx959_pos
+    .local int rx959_off
+    .local int rx959_eos
+    .local int rx959_rep
+    .local pmc rx959_cur
+    (rx959_cur, rx959_pos, rx959_tgt) = self."!cursor_start"()
+    rx959_cur."!cursor_debug"("START ", "prefix:sym<-->")
+    .lex unicode:"$\x{a2}", rx959_cur
+    .local pmc match
+    .lex "$/", match
+    length rx959_eos, rx959_tgt
+    set rx959_off, 0
+    lt rx959_pos, 2, rx959_start
+    sub rx959_off, rx959_pos, 1
+    substr rx959_tgt, rx959_tgt, rx959_off
+  rx959_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan963_done
+    goto rxscan963_scan
+  rxscan963_loop:
+    ($P10) = rx959_cur."from"()
+    inc $P10
+    set rx959_pos, $P10
+    ge rx959_pos, rx959_eos, rxscan963_done
+  rxscan963_scan:
+    set_addr $I10, rxscan963_loop
+    rx959_cur."!mark_push"(0, rx959_pos, $I10)
+  rxscan963_done:
+.annotate "line", 467
   # rx subcapture "sym"
-    set_addr $I10, rxcap_956_fail
-    rx951_cur."!mark_push"(0, rx951_pos, $I10)
+    set_addr $I10, rxcap_964_fail
+    rx959_cur."!mark_push"(0, rx959_pos, $I10)
   # rx literal  "--"
-    add $I11, rx951_pos, 2
-    gt $I11, rx951_eos, rx951_fail
-    sub $I11, rx951_pos, rx951_off
-    substr $S10, rx951_tgt, $I11, 2
-    ne $S10, "--", rx951_fail
-    add rx951_pos, 2
-    set_addr $I10, rxcap_956_fail
-    ($I12, $I11) = rx951_cur."!mark_peek"($I10)
-    rx951_cur."!cursor_pos"($I11)
-    ($P10) = rx951_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx951_pos, "")
-    rx951_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx959_pos, 2
+    gt $I11, rx959_eos, rx959_fail
+    sub $I11, rx959_pos, rx959_off
+    substr $S10, rx959_tgt, $I11, 2
+    ne $S10, "--", rx959_fail
+    add rx959_pos, 2
+    set_addr $I10, rxcap_964_fail
+    ($I12, $I11) = rx959_cur."!mark_peek"($I10)
+    rx959_cur."!cursor_pos"($I11)
+    ($P10) = rx959_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx959_pos, "")
+    rx959_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_956_done
-  rxcap_956_fail:
-    goto rx951_fail
-  rxcap_956_done:
+    goto rxcap_964_done
+  rxcap_964_fail:
+    goto rx959_fail
+  rxcap_964_done:
   # rx subrule "O" subtype=capture negate=
-    rx951_cur."!cursor_pos"(rx951_pos)
-    $P10 = rx951_cur."O"("%autoincrement, :pirop<dec>")
-    unless $P10, rx951_fail
-    rx951_cur."!mark_push"(0, -1, 0, $P10)
+    rx959_cur."!cursor_pos"(rx959_pos)
+    $P10 = rx959_cur."O"("%autoincrement, :pirop<dec>")
+    unless $P10, rx959_fail
+    rx959_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx951_pos = $P10."pos"()
+    rx959_pos = $P10."pos"()
   # rx pass
-    rx951_cur."!cursor_pass"(rx951_pos, "prefix:sym<-->")
-    rx951_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx951_pos)
-    .return (rx951_cur)
-  rx951_fail:
-.annotate "line", 417
-    (rx951_rep, rx951_pos, $I10, $P10) = rx951_cur."!mark_fail"(0)
-    lt rx951_pos, -1, rx951_done
-    eq rx951_pos, -1, rx951_fail
-    jump $I10
-  rx951_done:
-    rx951_cur."!cursor_fail"()
-    rx951_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
-    .return (rx951_cur)
+    rx959_cur."!cursor_pass"(rx959_pos, "prefix:sym<-->")
+    rx959_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx959_pos)
+    .return (rx959_cur)
+  rx959_fail:
+.annotate "line", 422
+    (rx959_rep, rx959_pos, $I10, $P10) = rx959_cur."!mark_fail"(0)
+    lt rx959_pos, -1, rx959_done
+    eq rx959_pos, -1, rx959_fail
+    jump $I10
+  rx959_done:
+    rx959_cur."!cursor_fail"()
+    rx959_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
+    .return (rx959_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<-->"  :subid("238_1267204702.05125") :method
-.annotate "line", 417
-    $P953 = self."!PREFIX__!subrule"("O", "--")
-    new $P954, "ResizablePMCArray"
-    push $P954, $P953
-    .return ($P954)
+.sub "!PREFIX__prefix:sym<-->"  :subid("240_1272816833.94956") :method
+.annotate "line", 422
+    $P961 = self."!PREFIX__!subrule"("O", "--")
+    new $P962, "ResizablePMCArray"
+    push $P962, $P961
+    .return ($P962)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<++>"  :subid("239_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx958_tgt
-    .local int rx958_pos
-    .local int rx958_off
-    .local int rx958_eos
-    .local int rx958_rep
-    .local pmc rx958_cur
-    (rx958_cur, rx958_pos, rx958_tgt) = self."!cursor_start"()
-    rx958_cur."!cursor_debug"("START ", "postfix:sym<++>")
-    .lex unicode:"$\x{a2}", rx958_cur
-    .local pmc match
-    .lex "$/", match
-    length rx958_eos, rx958_tgt
-    set rx958_off, 0
-    lt rx958_pos, 2, rx958_start
-    sub rx958_off, rx958_pos, 1
-    substr rx958_tgt, rx958_tgt, rx958_off
-  rx958_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan962_done
-    goto rxscan962_scan
-  rxscan962_loop:
-    ($P10) = rx958_cur."from"()
-    inc $P10
-    set rx958_pos, $P10
-    ge rx958_pos, rx958_eos, rxscan962_done
-  rxscan962_scan:
-    set_addr $I10, rxscan962_loop
-    rx958_cur."!mark_push"(0, rx958_pos, $I10)
-  rxscan962_done:
-.annotate "line", 465
+.sub "postfix:sym<++>"  :subid("241_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx966_tgt
+    .local int rx966_pos
+    .local int rx966_off
+    .local int rx966_eos
+    .local int rx966_rep
+    .local pmc rx966_cur
+    (rx966_cur, rx966_pos, rx966_tgt) = self."!cursor_start"()
+    rx966_cur."!cursor_debug"("START ", "postfix:sym<++>")
+    .lex unicode:"$\x{a2}", rx966_cur
+    .local pmc match
+    .lex "$/", match
+    length rx966_eos, rx966_tgt
+    set rx966_off, 0
+    lt rx966_pos, 2, rx966_start
+    sub rx966_off, rx966_pos, 1
+    substr rx966_tgt, rx966_tgt, rx966_off
+  rx966_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan970_done
+    goto rxscan970_scan
+  rxscan970_loop:
+    ($P10) = rx966_cur."from"()
+    inc $P10
+    set rx966_pos, $P10
+    ge rx966_pos, rx966_eos, rxscan970_done
+  rxscan970_scan:
+    set_addr $I10, rxscan970_loop
+    rx966_cur."!mark_push"(0, rx966_pos, $I10)
+  rxscan970_done:
+.annotate "line", 470
   # rx subcapture "sym"
-    set_addr $I10, rxcap_963_fail
-    rx958_cur."!mark_push"(0, rx958_pos, $I10)
+    set_addr $I10, rxcap_971_fail
+    rx966_cur."!mark_push"(0, rx966_pos, $I10)
   # rx literal  "++"
-    add $I11, rx958_pos, 2
-    gt $I11, rx958_eos, rx958_fail
-    sub $I11, rx958_pos, rx958_off
-    substr $S10, rx958_tgt, $I11, 2
-    ne $S10, "++", rx958_fail
-    add rx958_pos, 2
-    set_addr $I10, rxcap_963_fail
-    ($I12, $I11) = rx958_cur."!mark_peek"($I10)
-    rx958_cur."!cursor_pos"($I11)
-    ($P10) = rx958_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx958_pos, "")
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx966_pos, 2
+    gt $I11, rx966_eos, rx966_fail
+    sub $I11, rx966_pos, rx966_off
+    substr $S10, rx966_tgt, $I11, 2
+    ne $S10, "++", rx966_fail
+    add rx966_pos, 2
+    set_addr $I10, rxcap_971_fail
+    ($I12, $I11) = rx966_cur."!mark_peek"($I10)
+    rx966_cur."!cursor_pos"($I11)
+    ($P10) = rx966_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx966_pos, "")
+    rx966_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_963_done
-  rxcap_963_fail:
-    goto rx958_fail
-  rxcap_963_done:
+    goto rxcap_971_done
+  rxcap_971_fail:
+    goto rx966_fail
+  rxcap_971_done:
   # rx subrule "O" subtype=capture negate=
-    rx958_cur."!cursor_pos"(rx958_pos)
-    $P10 = rx958_cur."O"("%autoincrement")
-    unless $P10, rx958_fail
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
+    rx966_cur."!cursor_pos"(rx966_pos)
+    $P10 = rx966_cur."O"("%autoincrement")
+    unless $P10, rx966_fail
+    rx966_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx958_pos = $P10."pos"()
+    rx966_pos = $P10."pos"()
   # rx pass
-    rx958_cur."!cursor_pass"(rx958_pos, "postfix:sym<++>")
-    rx958_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx958_pos)
-    .return (rx958_cur)
-  rx958_fail:
-.annotate "line", 417
-    (rx958_rep, rx958_pos, $I10, $P10) = rx958_cur."!mark_fail"(0)
-    lt rx958_pos, -1, rx958_done
-    eq rx958_pos, -1, rx958_fail
-    jump $I10
-  rx958_done:
-    rx958_cur."!cursor_fail"()
-    rx958_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
-    .return (rx958_cur)
+    rx966_cur."!cursor_pass"(rx966_pos, "postfix:sym<++>")
+    rx966_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx966_pos)
+    .return (rx966_cur)
+  rx966_fail:
+.annotate "line", 422
+    (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"()
+    rx966_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
+    .return (rx966_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<++>"  :subid("240_1267204702.05125") :method
-.annotate "line", 417
-    $P960 = self."!PREFIX__!subrule"("O", "++")
-    new $P961, "ResizablePMCArray"
-    push $P961, $P960
-    .return ($P961)
+.sub "!PREFIX__postfix:sym<++>"  :subid("242_1272816833.94956") :method
+.annotate "line", 422
+    $P968 = self."!PREFIX__!subrule"("O", "++")
+    new $P969, "ResizablePMCArray"
+    push $P969, $P968
+    .return ($P969)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<-->"  :subid("241_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx965_tgt
-    .local int rx965_pos
-    .local int rx965_off
-    .local int rx965_eos
-    .local int rx965_rep
-    .local pmc rx965_cur
-    (rx965_cur, rx965_pos, rx965_tgt) = self."!cursor_start"()
-    rx965_cur."!cursor_debug"("START ", "postfix:sym<-->")
-    .lex unicode:"$\x{a2}", rx965_cur
-    .local pmc match
-    .lex "$/", match
-    length rx965_eos, rx965_tgt
-    set rx965_off, 0
-    lt rx965_pos, 2, rx965_start
-    sub rx965_off, rx965_pos, 1
-    substr rx965_tgt, rx965_tgt, rx965_off
-  rx965_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan969_done
-    goto rxscan969_scan
-  rxscan969_loop:
-    ($P10) = rx965_cur."from"()
-    inc $P10
-    set rx965_pos, $P10
-    ge rx965_pos, rx965_eos, rxscan969_done
-  rxscan969_scan:
-    set_addr $I10, rxscan969_loop
-    rx965_cur."!mark_push"(0, rx965_pos, $I10)
-  rxscan969_done:
-.annotate "line", 466
+.sub "postfix:sym<-->"  :subid("243_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx973_tgt
+    .local int rx973_pos
+    .local int rx973_off
+    .local int rx973_eos
+    .local int rx973_rep
+    .local pmc rx973_cur
+    (rx973_cur, rx973_pos, rx973_tgt) = self."!cursor_start"()
+    rx973_cur."!cursor_debug"("START ", "postfix:sym<-->")
+    .lex unicode:"$\x{a2}", rx973_cur
+    .local pmc match
+    .lex "$/", match
+    length rx973_eos, rx973_tgt
+    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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan977_done
+    goto rxscan977_scan
+  rxscan977_loop:
+    ($P10) = rx973_cur."from"()
+    inc $P10
+    set rx973_pos, $P10
+    ge rx973_pos, rx973_eos, rxscan977_done
+  rxscan977_scan:
+    set_addr $I10, rxscan977_loop
+    rx973_cur."!mark_push"(0, rx973_pos, $I10)
+  rxscan977_done:
+.annotate "line", 471
   # rx subcapture "sym"
-    set_addr $I10, rxcap_970_fail
-    rx965_cur."!mark_push"(0, rx965_pos, $I10)
+    set_addr $I10, rxcap_978_fail
+    rx973_cur."!mark_push"(0, rx973_pos, $I10)
   # rx literal  "--"
-    add $I11, rx965_pos, 2
-    gt $I11, rx965_eos, rx965_fail
-    sub $I11, rx965_pos, rx965_off
-    substr $S10, rx965_tgt, $I11, 2
-    ne $S10, "--", rx965_fail
-    add rx965_pos, 2
-    set_addr $I10, rxcap_970_fail
-    ($I12, $I11) = rx965_cur."!mark_peek"($I10)
-    rx965_cur."!cursor_pos"($I11)
-    ($P10) = rx965_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx965_pos, "")
-    rx965_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx973_pos, 2
+    gt $I11, rx973_eos, rx973_fail
+    sub $I11, rx973_pos, rx973_off
+    substr $S10, rx973_tgt, $I11, 2
+    ne $S10, "--", rx973_fail
+    add rx973_pos, 2
+    set_addr $I10, rxcap_978_fail
+    ($I12, $I11) = rx973_cur."!mark_peek"($I10)
+    rx973_cur."!cursor_pos"($I11)
+    ($P10) = rx973_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx973_pos, "")
+    rx973_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_970_done
-  rxcap_970_fail:
-    goto rx965_fail
-  rxcap_970_done:
+    goto rxcap_978_done
+  rxcap_978_fail:
+    goto rx973_fail
+  rxcap_978_done:
   # rx subrule "O" subtype=capture negate=
-    rx965_cur."!cursor_pos"(rx965_pos)
-    $P10 = rx965_cur."O"("%autoincrement")
-    unless $P10, rx965_fail
-    rx965_cur."!mark_push"(0, -1, 0, $P10)
+    rx973_cur."!cursor_pos"(rx973_pos)
+    $P10 = rx973_cur."O"("%autoincrement")
+    unless $P10, rx973_fail
+    rx973_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx965_pos = $P10."pos"()
+    rx973_pos = $P10."pos"()
   # rx pass
-    rx965_cur."!cursor_pass"(rx965_pos, "postfix:sym<-->")
-    rx965_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx965_pos)
-    .return (rx965_cur)
-  rx965_fail:
-.annotate "line", 417
-    (rx965_rep, rx965_pos, $I10, $P10) = rx965_cur."!mark_fail"(0)
-    lt rx965_pos, -1, rx965_done
-    eq rx965_pos, -1, rx965_fail
-    jump $I10
-  rx965_done:
-    rx965_cur."!cursor_fail"()
-    rx965_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
-    .return (rx965_cur)
+    rx973_cur."!cursor_pass"(rx973_pos, "postfix:sym<-->")
+    rx973_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx973_pos)
+    .return (rx973_cur)
+  rx973_fail:
+.annotate "line", 422
+    (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"()
+    rx973_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
+    .return (rx973_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<-->"  :subid("242_1267204702.05125") :method
-.annotate "line", 417
-    $P967 = self."!PREFIX__!subrule"("O", "--")
-    new $P968, "ResizablePMCArray"
-    push $P968, $P967
-    .return ($P968)
+.sub "!PREFIX__postfix:sym<-->"  :subid("244_1272816833.94956") :method
+.annotate "line", 422
+    $P975 = self."!PREFIX__!subrule"("O", "--")
+    new $P976, "ResizablePMCArray"
+    push $P976, $P975
+    .return ($P976)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<**>"  :subid("243_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx972_tgt
-    .local int rx972_pos
-    .local int rx972_off
-    .local int rx972_eos
-    .local int rx972_rep
-    .local pmc rx972_cur
-    (rx972_cur, rx972_pos, rx972_tgt) = self."!cursor_start"()
-    rx972_cur."!cursor_debug"("START ", "infix:sym<**>")
-    .lex unicode:"$\x{a2}", rx972_cur
-    .local pmc match
-    .lex "$/", match
-    length rx972_eos, rx972_tgt
-    set rx972_off, 0
-    lt rx972_pos, 2, rx972_start
-    sub rx972_off, rx972_pos, 1
-    substr rx972_tgt, rx972_tgt, rx972_off
-  rx972_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan976_done
-    goto rxscan976_scan
-  rxscan976_loop:
-    ($P10) = rx972_cur."from"()
-    inc $P10
-    set rx972_pos, $P10
-    ge rx972_pos, rx972_eos, rxscan976_done
-  rxscan976_scan:
-    set_addr $I10, rxscan976_loop
-    rx972_cur."!mark_push"(0, rx972_pos, $I10)
-  rxscan976_done:
-.annotate "line", 468
+.sub "infix:sym<**>"  :subid("245_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx980_tgt
+    .local int rx980_pos
+    .local int rx980_off
+    .local int rx980_eos
+    .local int rx980_rep
+    .local pmc rx980_cur
+    (rx980_cur, rx980_pos, rx980_tgt) = self."!cursor_start"()
+    rx980_cur."!cursor_debug"("START ", "infix:sym<**>")
+    .lex unicode:"$\x{a2}", rx980_cur
+    .local pmc match
+    .lex "$/", match
+    length rx980_eos, rx980_tgt
+    set rx980_off, 0
+    lt rx980_pos, 2, rx980_start
+    sub rx980_off, rx980_pos, 1
+    substr rx980_tgt, rx980_tgt, rx980_off
+  rx980_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan984_done
+    goto rxscan984_scan
+  rxscan984_loop:
+    ($P10) = rx980_cur."from"()
+    inc $P10
+    set rx980_pos, $P10
+    ge rx980_pos, rx980_eos, rxscan984_done
+  rxscan984_scan:
+    set_addr $I10, rxscan984_loop
+    rx980_cur."!mark_push"(0, rx980_pos, $I10)
+  rxscan984_done:
+.annotate "line", 473
   # rx subcapture "sym"
-    set_addr $I10, rxcap_977_fail
-    rx972_cur."!mark_push"(0, rx972_pos, $I10)
+    set_addr $I10, rxcap_985_fail
+    rx980_cur."!mark_push"(0, rx980_pos, $I10)
   # rx literal  "**"
-    add $I11, rx972_pos, 2
-    gt $I11, rx972_eos, rx972_fail
-    sub $I11, rx972_pos, rx972_off
-    substr $S10, rx972_tgt, $I11, 2
-    ne $S10, "**", rx972_fail
-    add rx972_pos, 2
-    set_addr $I10, rxcap_977_fail
-    ($I12, $I11) = rx972_cur."!mark_peek"($I10)
-    rx972_cur."!cursor_pos"($I11)
-    ($P10) = rx972_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx972_pos, "")
-    rx972_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx980_pos, 2
+    gt $I11, rx980_eos, rx980_fail
+    sub $I11, rx980_pos, rx980_off
+    substr $S10, rx980_tgt, $I11, 2
+    ne $S10, "**", rx980_fail
+    add rx980_pos, 2
+    set_addr $I10, rxcap_985_fail
+    ($I12, $I11) = rx980_cur."!mark_peek"($I10)
+    rx980_cur."!cursor_pos"($I11)
+    ($P10) = rx980_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx980_pos, "")
+    rx980_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_977_done
-  rxcap_977_fail:
-    goto rx972_fail
-  rxcap_977_done:
+    goto rxcap_985_done
+  rxcap_985_fail:
+    goto rx980_fail
+  rxcap_985_done:
   # rx subrule "O" subtype=capture negate=
-    rx972_cur."!cursor_pos"(rx972_pos)
-    $P10 = rx972_cur."O"("%exponentiation, :pirop<pow>")
-    unless $P10, rx972_fail
-    rx972_cur."!mark_push"(0, -1, 0, $P10)
+    rx980_cur."!cursor_pos"(rx980_pos)
+    $P10 = rx980_cur."O"("%exponentiation, :pirop<pow>")
+    unless $P10, rx980_fail
+    rx980_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx972_pos = $P10."pos"()
+    rx980_pos = $P10."pos"()
   # rx pass
-    rx972_cur."!cursor_pass"(rx972_pos, "infix:sym<**>")
-    rx972_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx972_pos)
-    .return (rx972_cur)
-  rx972_fail:
-.annotate "line", 417
-    (rx972_rep, rx972_pos, $I10, $P10) = rx972_cur."!mark_fail"(0)
-    lt rx972_pos, -1, rx972_done
-    eq rx972_pos, -1, rx972_fail
-    jump $I10
-  rx972_done:
-    rx972_cur."!cursor_fail"()
-    rx972_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
-    .return (rx972_cur)
+    rx980_cur."!cursor_pass"(rx980_pos, "infix:sym<**>")
+    rx980_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx980_pos)
+    .return (rx980_cur)
+  rx980_fail:
+.annotate "line", 422
+    (rx980_rep, rx980_pos, $I10, $P10) = rx980_cur."!mark_fail"(0)
+    lt rx980_pos, -1, rx980_done
+    eq rx980_pos, -1, rx980_fail
+    jump $I10
+  rx980_done:
+    rx980_cur."!cursor_fail"()
+    rx980_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
+    .return (rx980_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<**>"  :subid("244_1267204702.05125") :method
-.annotate "line", 417
-    $P974 = self."!PREFIX__!subrule"("O", "**")
-    new $P975, "ResizablePMCArray"
-    push $P975, $P974
-    .return ($P975)
+.sub "!PREFIX__infix:sym<**>"  :subid("246_1272816833.94956") :method
+.annotate "line", 422
+    $P982 = self."!PREFIX__!subrule"("O", "**")
+    new $P983, "ResizablePMCArray"
+    push $P983, $P982
+    .return ($P983)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<+>"  :subid("245_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx979_tgt
-    .local int rx979_pos
-    .local int rx979_off
-    .local int rx979_eos
-    .local int rx979_rep
-    .local pmc rx979_cur
-    (rx979_cur, rx979_pos, rx979_tgt) = self."!cursor_start"()
-    rx979_cur."!cursor_debug"("START ", "prefix:sym<+>")
-    .lex unicode:"$\x{a2}", rx979_cur
-    .local pmc match
-    .lex "$/", match
-    length rx979_eos, rx979_tgt
-    set rx979_off, 0
-    lt rx979_pos, 2, rx979_start
-    sub rx979_off, rx979_pos, 1
-    substr rx979_tgt, rx979_tgt, rx979_off
-  rx979_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan983_done
-    goto rxscan983_scan
-  rxscan983_loop:
-    ($P10) = rx979_cur."from"()
-    inc $P10
-    set rx979_pos, $P10
-    ge rx979_pos, rx979_eos, rxscan983_done
-  rxscan983_scan:
-    set_addr $I10, rxscan983_loop
-    rx979_cur."!mark_push"(0, rx979_pos, $I10)
-  rxscan983_done:
-.annotate "line", 470
+.sub "prefix:sym<+>"  :subid("247_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx987_tgt
+    .local int rx987_pos
+    .local int rx987_off
+    .local int rx987_eos
+    .local int rx987_rep
+    .local pmc rx987_cur
+    (rx987_cur, rx987_pos, rx987_tgt) = self."!cursor_start"()
+    rx987_cur."!cursor_debug"("START ", "prefix:sym<+>")
+    .lex unicode:"$\x{a2}", rx987_cur
+    .local pmc match
+    .lex "$/", match
+    length rx987_eos, rx987_tgt
+    set rx987_off, 0
+    lt rx987_pos, 2, rx987_start
+    sub rx987_off, rx987_pos, 1
+    substr rx987_tgt, rx987_tgt, rx987_off
+  rx987_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan991_done
+    goto rxscan991_scan
+  rxscan991_loop:
+    ($P10) = rx987_cur."from"()
+    inc $P10
+    set rx987_pos, $P10
+    ge rx987_pos, rx987_eos, rxscan991_done
+  rxscan991_scan:
+    set_addr $I10, rxscan991_loop
+    rx987_cur."!mark_push"(0, rx987_pos, $I10)
+  rxscan991_done:
+.annotate "line", 475
   # rx subcapture "sym"
-    set_addr $I10, rxcap_984_fail
-    rx979_cur."!mark_push"(0, rx979_pos, $I10)
+    set_addr $I10, rxcap_992_fail
+    rx987_cur."!mark_push"(0, rx987_pos, $I10)
   # rx literal  "+"
-    add $I11, rx979_pos, 1
-    gt $I11, rx979_eos, rx979_fail
-    sub $I11, rx979_pos, rx979_off
-    substr $S10, rx979_tgt, $I11, 1
-    ne $S10, "+", rx979_fail
-    add rx979_pos, 1
-    set_addr $I10, rxcap_984_fail
-    ($I12, $I11) = rx979_cur."!mark_peek"($I10)
-    rx979_cur."!cursor_pos"($I11)
-    ($P10) = rx979_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx979_pos, "")
-    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx987_pos, 1
+    gt $I11, rx987_eos, rx987_fail
+    sub $I11, rx987_pos, rx987_off
+    substr $S10, rx987_tgt, $I11, 1
+    ne $S10, "+", rx987_fail
+    add rx987_pos, 1
+    set_addr $I10, rxcap_992_fail
+    ($I12, $I11) = rx987_cur."!mark_peek"($I10)
+    rx987_cur."!cursor_pos"($I11)
+    ($P10) = rx987_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx987_pos, "")
+    rx987_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_984_done
-  rxcap_984_fail:
-    goto rx979_fail
-  rxcap_984_done:
+    goto rxcap_992_done
+  rxcap_992_fail:
+    goto rx987_fail
+  rxcap_992_done:
   # rx subrule "O" subtype=capture negate=
-    rx979_cur."!cursor_pos"(rx979_pos)
-    $P10 = rx979_cur."O"("%symbolic_unary, :pirop<set N*>")
-    unless $P10, rx979_fail
-    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    rx987_cur."!cursor_pos"(rx987_pos)
+    $P10 = rx987_cur."O"("%symbolic_unary, :pirop<set N*>")
+    unless $P10, rx987_fail
+    rx987_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx979_pos = $P10."pos"()
+    rx987_pos = $P10."pos"()
   # rx pass
-    rx979_cur."!cursor_pass"(rx979_pos, "prefix:sym<+>")
-    rx979_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx979_pos)
-    .return (rx979_cur)
-  rx979_fail:
-.annotate "line", 417
-    (rx979_rep, rx979_pos, $I10, $P10) = rx979_cur."!mark_fail"(0)
-    lt rx979_pos, -1, rx979_done
-    eq rx979_pos, -1, rx979_fail
-    jump $I10
-  rx979_done:
-    rx979_cur."!cursor_fail"()
-    rx979_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
-    .return (rx979_cur)
+    rx987_cur."!cursor_pass"(rx987_pos, "prefix:sym<+>")
+    rx987_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx987_pos)
+    .return (rx987_cur)
+  rx987_fail:
+.annotate "line", 422
+    (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"()
+    rx987_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
+    .return (rx987_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<+>"  :subid("246_1267204702.05125") :method
-.annotate "line", 417
-    $P981 = self."!PREFIX__!subrule"("O", "+")
-    new $P982, "ResizablePMCArray"
-    push $P982, $P981
-    .return ($P982)
+.sub "!PREFIX__prefix:sym<+>"  :subid("248_1272816833.94956") :method
+.annotate "line", 422
+    $P989 = self."!PREFIX__!subrule"("O", "+")
+    new $P990, "ResizablePMCArray"
+    push $P990, $P989
+    .return ($P990)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<~>"  :subid("247_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx986_tgt
-    .local int rx986_pos
-    .local int rx986_off
-    .local int rx986_eos
-    .local int rx986_rep
-    .local pmc rx986_cur
-    (rx986_cur, rx986_pos, rx986_tgt) = self."!cursor_start"()
-    rx986_cur."!cursor_debug"("START ", "prefix:sym<~>")
-    .lex unicode:"$\x{a2}", rx986_cur
-    .local pmc match
-    .lex "$/", match
-    length rx986_eos, rx986_tgt
-    set rx986_off, 0
-    lt rx986_pos, 2, rx986_start
-    sub rx986_off, rx986_pos, 1
-    substr rx986_tgt, rx986_tgt, rx986_off
-  rx986_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan990_done
-    goto rxscan990_scan
-  rxscan990_loop:
-    ($P10) = rx986_cur."from"()
-    inc $P10
-    set rx986_pos, $P10
-    ge rx986_pos, rx986_eos, rxscan990_done
-  rxscan990_scan:
-    set_addr $I10, rxscan990_loop
-    rx986_cur."!mark_push"(0, rx986_pos, $I10)
-  rxscan990_done:
-.annotate "line", 471
+.sub "prefix:sym<~>"  :subid("249_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx994_tgt
+    .local int rx994_pos
+    .local int rx994_off
+    .local int rx994_eos
+    .local int rx994_rep
+    .local pmc rx994_cur
+    (rx994_cur, rx994_pos, rx994_tgt) = self."!cursor_start"()
+    rx994_cur."!cursor_debug"("START ", "prefix:sym<~>")
+    .lex unicode:"$\x{a2}", rx994_cur
+    .local pmc match
+    .lex "$/", match
+    length rx994_eos, rx994_tgt
+    set rx994_off, 0
+    lt rx994_pos, 2, rx994_start
+    sub rx994_off, rx994_pos, 1
+    substr rx994_tgt, rx994_tgt, rx994_off
+  rx994_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan998_done
+    goto rxscan998_scan
+  rxscan998_loop:
+    ($P10) = rx994_cur."from"()
+    inc $P10
+    set rx994_pos, $P10
+    ge rx994_pos, rx994_eos, rxscan998_done
+  rxscan998_scan:
+    set_addr $I10, rxscan998_loop
+    rx994_cur."!mark_push"(0, rx994_pos, $I10)
+  rxscan998_done:
+.annotate "line", 476
   # rx subcapture "sym"
-    set_addr $I10, rxcap_991_fail
-    rx986_cur."!mark_push"(0, rx986_pos, $I10)
+    set_addr $I10, rxcap_999_fail
+    rx994_cur."!mark_push"(0, rx994_pos, $I10)
   # rx literal  "~"
-    add $I11, rx986_pos, 1
-    gt $I11, rx986_eos, rx986_fail
-    sub $I11, rx986_pos, rx986_off
-    substr $S10, rx986_tgt, $I11, 1
-    ne $S10, "~", rx986_fail
-    add rx986_pos, 1
-    set_addr $I10, rxcap_991_fail
-    ($I12, $I11) = rx986_cur."!mark_peek"($I10)
-    rx986_cur."!cursor_pos"($I11)
-    ($P10) = rx986_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx986_pos, "")
-    rx986_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx994_pos, 1
+    gt $I11, rx994_eos, rx994_fail
+    sub $I11, rx994_pos, rx994_off
+    substr $S10, rx994_tgt, $I11, 1
+    ne $S10, "~", rx994_fail
+    add rx994_pos, 1
+    set_addr $I10, rxcap_999_fail
+    ($I12, $I11) = rx994_cur."!mark_peek"($I10)
+    rx994_cur."!cursor_pos"($I11)
+    ($P10) = rx994_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx994_pos, "")
+    rx994_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_991_done
-  rxcap_991_fail:
-    goto rx986_fail
-  rxcap_991_done:
+    goto rxcap_999_done
+  rxcap_999_fail:
+    goto rx994_fail
+  rxcap_999_done:
   # rx subrule "O" subtype=capture negate=
-    rx986_cur."!cursor_pos"(rx986_pos)
-    $P10 = rx986_cur."O"("%symbolic_unary, :pirop<set S*>")
-    unless $P10, rx986_fail
-    rx986_cur."!mark_push"(0, -1, 0, $P10)
+    rx994_cur."!cursor_pos"(rx994_pos)
+    $P10 = rx994_cur."O"("%symbolic_unary, :pirop<set S*>")
+    unless $P10, rx994_fail
+    rx994_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx986_pos = $P10."pos"()
+    rx994_pos = $P10."pos"()
   # rx pass
-    rx986_cur."!cursor_pass"(rx986_pos, "prefix:sym<~>")
-    rx986_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx986_pos)
-    .return (rx986_cur)
-  rx986_fail:
-.annotate "line", 417
-    (rx986_rep, rx986_pos, $I10, $P10) = rx986_cur."!mark_fail"(0)
-    lt rx986_pos, -1, rx986_done
-    eq rx986_pos, -1, rx986_fail
-    jump $I10
-  rx986_done:
-    rx986_cur."!cursor_fail"()
-    rx986_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
-    .return (rx986_cur)
+    rx994_cur."!cursor_pass"(rx994_pos, "prefix:sym<~>")
+    rx994_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx994_pos)
+    .return (rx994_cur)
+  rx994_fail:
+.annotate "line", 422
+    (rx994_rep, rx994_pos, $I10, $P10) = rx994_cur."!mark_fail"(0)
+    lt rx994_pos, -1, rx994_done
+    eq rx994_pos, -1, rx994_fail
+    jump $I10
+  rx994_done:
+    rx994_cur."!cursor_fail"()
+    rx994_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
+    .return (rx994_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<~>"  :subid("248_1267204702.05125") :method
-.annotate "line", 417
-    $P988 = self."!PREFIX__!subrule"("O", "~")
-    new $P989, "ResizablePMCArray"
-    push $P989, $P988
-    .return ($P989)
+.sub "!PREFIX__prefix:sym<~>"  :subid("250_1272816833.94956") :method
+.annotate "line", 422
+    $P996 = self."!PREFIX__!subrule"("O", "~")
+    new $P997, "ResizablePMCArray"
+    push $P997, $P996
+    .return ($P997)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<->"  :subid("249_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx993_tgt
-    .local int rx993_pos
-    .local int rx993_off
-    .local int rx993_eos
-    .local int rx993_rep
-    .local pmc rx993_cur
-    (rx993_cur, rx993_pos, rx993_tgt) = self."!cursor_start"()
-    rx993_cur."!cursor_debug"("START ", "prefix:sym<->")
-    .lex unicode:"$\x{a2}", rx993_cur
-    .local pmc match
-    .lex "$/", match
-    length rx993_eos, rx993_tgt
-    set rx993_off, 0
-    lt rx993_pos, 2, rx993_start
-    sub rx993_off, rx993_pos, 1
-    substr rx993_tgt, rx993_tgt, rx993_off
-  rx993_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan996_done
-    goto rxscan996_scan
-  rxscan996_loop:
-    ($P10) = rx993_cur."from"()
-    inc $P10
-    set rx993_pos, $P10
-    ge rx993_pos, rx993_eos, rxscan996_done
-  rxscan996_scan:
-    set_addr $I10, rxscan996_loop
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
-  rxscan996_done:
-.annotate "line", 472
+.sub "prefix:sym<->"  :subid("251_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1001_tgt
+    .local int rx1001_pos
+    .local int rx1001_off
+    .local int rx1001_eos
+    .local int rx1001_rep
+    .local pmc rx1001_cur
+    (rx1001_cur, rx1001_pos, rx1001_tgt) = self."!cursor_start"()
+    rx1001_cur."!cursor_debug"("START ", "prefix:sym<->")
+    .lex unicode:"$\x{a2}", rx1001_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1001_eos, rx1001_tgt
+    set rx1001_off, 0
+    lt rx1001_pos, 2, rx1001_start
+    sub rx1001_off, rx1001_pos, 1
+    substr rx1001_tgt, rx1001_tgt, rx1001_off
+  rx1001_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1004_done
+    goto rxscan1004_scan
+  rxscan1004_loop:
+    ($P10) = rx1001_cur."from"()
+    inc $P10
+    set rx1001_pos, $P10
+    ge rx1001_pos, rx1001_eos, rxscan1004_done
+  rxscan1004_scan:
+    set_addr $I10, rxscan1004_loop
+    rx1001_cur."!mark_push"(0, rx1001_pos, $I10)
+  rxscan1004_done:
+.annotate "line", 477
   # rx subcapture "sym"
-    set_addr $I10, rxcap_997_fail
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
+    set_addr $I10, rxcap_1005_fail
+    rx1001_cur."!mark_push"(0, rx1001_pos, $I10)
   # rx literal  "-"
-    add $I11, rx993_pos, 1
-    gt $I11, rx993_eos, rx993_fail
-    sub $I11, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I11, 1
-    ne $S10, "-", rx993_fail
-    add rx993_pos, 1
-    set_addr $I10, rxcap_997_fail
-    ($I12, $I11) = rx993_cur."!mark_peek"($I10)
-    rx993_cur."!cursor_pos"($I11)
-    ($P10) = rx993_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx993_pos, "")
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1001_pos, 1
+    gt $I11, rx1001_eos, rx1001_fail
+    sub $I11, rx1001_pos, rx1001_off
+    substr $S10, rx1001_tgt, $I11, 1
+    ne $S10, "-", rx1001_fail
+    add rx1001_pos, 1
+    set_addr $I10, rxcap_1005_fail
+    ($I12, $I11) = rx1001_cur."!mark_peek"($I10)
+    rx1001_cur."!cursor_pos"($I11)
+    ($P10) = rx1001_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1001_pos, "")
+    rx1001_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_997_done
-  rxcap_997_fail:
-    goto rx993_fail
-  rxcap_997_done:
+    goto rxcap_1005_done
+  rxcap_1005_fail:
+    goto rx1001_fail
+  rxcap_1005_done:
   # rx enumcharlist negate=1 zerowidth
-    ge rx993_pos, rx993_eos, rx993_fail
-    sub $I10, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I10, 1
+    ge rx1001_pos, rx1001_eos, rx1001_fail
+    sub $I10, rx1001_pos, rx1001_off
+    substr $S10, rx1001_tgt, $I10, 1
     index $I11, ">", $S10
-    ge $I11, 0, rx993_fail
+    ge $I11, 0, rx1001_fail
   # rx subrule "number" subtype=zerowidth negate=1
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."number"()
-    if $P10, rx993_fail
+    rx1001_cur."!cursor_pos"(rx1001_pos)
+    $P10 = rx1001_cur."number"()
+    if $P10, rx1001_fail
   # rx subrule "O" subtype=capture negate=
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."O"("%symbolic_unary, :pirop<neg>")
-    unless $P10, rx993_fail
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
+    rx1001_cur."!cursor_pos"(rx1001_pos)
+    $P10 = rx1001_cur."O"("%symbolic_unary, :pirop<neg>")
+    unless $P10, rx1001_fail
+    rx1001_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx993_pos = $P10."pos"()
+    rx1001_pos = $P10."pos"()
   # rx pass
-    rx993_cur."!cursor_pass"(rx993_pos, "prefix:sym<->")
-    rx993_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx993_pos)
-    .return (rx993_cur)
-  rx993_fail:
-.annotate "line", 417
-    (rx993_rep, rx993_pos, $I10, $P10) = rx993_cur."!mark_fail"(0)
-    lt rx993_pos, -1, rx993_done
-    eq rx993_pos, -1, rx993_fail
-    jump $I10
-  rx993_done:
-    rx993_cur."!cursor_fail"()
-    rx993_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
-    .return (rx993_cur)
+    rx1001_cur."!cursor_pass"(rx1001_pos, "prefix:sym<->")
+    rx1001_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx1001_pos)
+    .return (rx1001_cur)
+  rx1001_fail:
+.annotate "line", 422
+    (rx1001_rep, rx1001_pos, $I10, $P10) = rx1001_cur."!mark_fail"(0)
+    lt rx1001_pos, -1, rx1001_done
+    eq rx1001_pos, -1, rx1001_fail
+    jump $I10
+  rx1001_done:
+    rx1001_cur."!cursor_fail"()
+    rx1001_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
+    .return (rx1001_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<->"  :subid("250_1267204702.05125") :method
-.annotate "line", 417
-    new $P995, "ResizablePMCArray"
-    push $P995, "-"
-    .return ($P995)
+.sub "!PREFIX__prefix:sym<->"  :subid("252_1272816833.94956") :method
+.annotate "line", 422
+    new $P1003, "ResizablePMCArray"
+    push $P1003, "-"
+    .return ($P1003)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<?>"  :subid("251_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx999_tgt
-    .local int rx999_pos
-    .local int rx999_off
-    .local int rx999_eos
-    .local int rx999_rep
-    .local pmc rx999_cur
-    (rx999_cur, rx999_pos, rx999_tgt) = self."!cursor_start"()
-    rx999_cur."!cursor_debug"("START ", "prefix:sym<?>")
-    .lex unicode:"$\x{a2}", rx999_cur
-    .local pmc match
-    .lex "$/", match
-    length rx999_eos, rx999_tgt
-    set rx999_off, 0
-    lt rx999_pos, 2, rx999_start
-    sub rx999_off, rx999_pos, 1
-    substr rx999_tgt, rx999_tgt, rx999_off
-  rx999_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1003_done
-    goto rxscan1003_scan
-  rxscan1003_loop:
-    ($P10) = rx999_cur."from"()
-    inc $P10
-    set rx999_pos, $P10
-    ge rx999_pos, rx999_eos, rxscan1003_done
-  rxscan1003_scan:
-    set_addr $I10, rxscan1003_loop
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
-  rxscan1003_done:
-.annotate "line", 473
+.sub "prefix:sym<?>"  :subid("253_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1007_tgt
+    .local int rx1007_pos
+    .local int rx1007_off
+    .local int rx1007_eos
+    .local int rx1007_rep
+    .local pmc rx1007_cur
+    (rx1007_cur, rx1007_pos, rx1007_tgt) = self."!cursor_start"()
+    rx1007_cur."!cursor_debug"("START ", "prefix:sym<?>")
+    .lex unicode:"$\x{a2}", rx1007_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1007_eos, rx1007_tgt
+    set rx1007_off, 0
+    lt rx1007_pos, 2, rx1007_start
+    sub rx1007_off, rx1007_pos, 1
+    substr rx1007_tgt, rx1007_tgt, rx1007_off
+  rx1007_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1011_done
+    goto rxscan1011_scan
+  rxscan1011_loop:
+    ($P10) = rx1007_cur."from"()
+    inc $P10
+    set rx1007_pos, $P10
+    ge rx1007_pos, rx1007_eos, rxscan1011_done
+  rxscan1011_scan:
+    set_addr $I10, rxscan1011_loop
+    rx1007_cur."!mark_push"(0, rx1007_pos, $I10)
+  rxscan1011_done:
+.annotate "line", 478
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1004_fail
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
+    set_addr $I10, rxcap_1012_fail
+    rx1007_cur."!mark_push"(0, rx1007_pos, $I10)
   # rx literal  "?"
-    add $I11, rx999_pos, 1
-    gt $I11, rx999_eos, rx999_fail
-    sub $I11, rx999_pos, rx999_off
-    substr $S10, rx999_tgt, $I11, 1
-    ne $S10, "?", rx999_fail
-    add rx999_pos, 1
-    set_addr $I10, rxcap_1004_fail
-    ($I12, $I11) = rx999_cur."!mark_peek"($I10)
-    rx999_cur."!cursor_pos"($I11)
-    ($P10) = rx999_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx999_pos, "")
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1007_pos, 1
+    gt $I11, rx1007_eos, rx1007_fail
+    sub $I11, rx1007_pos, rx1007_off
+    substr $S10, rx1007_tgt, $I11, 1
+    ne $S10, "?", rx1007_fail
+    add rx1007_pos, 1
+    set_addr $I10, rxcap_1012_fail
+    ($I12, $I11) = rx1007_cur."!mark_peek"($I10)
+    rx1007_cur."!cursor_pos"($I11)
+    ($P10) = rx1007_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1007_pos, "")
+    rx1007_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1004_done
-  rxcap_1004_fail:
-    goto rx999_fail
-  rxcap_1004_done:
+    goto rxcap_1012_done
+  rxcap_1012_fail:
+    goto rx1007_fail
+  rxcap_1012_done:
   # rx subrule "O" subtype=capture negate=
-    rx999_cur."!cursor_pos"(rx999_pos)
-    $P10 = rx999_cur."O"("%symbolic_unary, :pirop<istrue>")
-    unless $P10, rx999_fail
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
+    rx1007_cur."!cursor_pos"(rx1007_pos)
+    $P10 = rx1007_cur."O"("%symbolic_unary, :pirop<istrue>")
+    unless $P10, rx1007_fail
+    rx1007_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx999_pos = $P10."pos"()
+    rx1007_pos = $P10."pos"()
   # rx pass
-    rx999_cur."!cursor_pass"(rx999_pos, "prefix:sym<?>")
-    rx999_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx999_pos)
-    .return (rx999_cur)
-  rx999_fail:
-.annotate "line", 417
-    (rx999_rep, rx999_pos, $I10, $P10) = rx999_cur."!mark_fail"(0)
-    lt rx999_pos, -1, rx999_done
-    eq rx999_pos, -1, rx999_fail
-    jump $I10
-  rx999_done:
-    rx999_cur."!cursor_fail"()
-    rx999_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
-    .return (rx999_cur)
+    rx1007_cur."!cursor_pass"(rx1007_pos, "prefix:sym<?>")
+    rx1007_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx1007_pos)
+    .return (rx1007_cur)
+  rx1007_fail:
+.annotate "line", 422
+    (rx1007_rep, rx1007_pos, $I10, $P10) = rx1007_cur."!mark_fail"(0)
+    lt rx1007_pos, -1, rx1007_done
+    eq rx1007_pos, -1, rx1007_fail
+    jump $I10
+  rx1007_done:
+    rx1007_cur."!cursor_fail"()
+    rx1007_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
+    .return (rx1007_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<?>"  :subid("252_1267204702.05125") :method
-.annotate "line", 417
-    $P1001 = self."!PREFIX__!subrule"("O", "?")
-    new $P1002, "ResizablePMCArray"
-    push $P1002, $P1001
-    .return ($P1002)
+.sub "!PREFIX__prefix:sym<?>"  :subid("254_1272816833.94956") :method
+.annotate "line", 422
+    $P1009 = self."!PREFIX__!subrule"("O", "?")
+    new $P1010, "ResizablePMCArray"
+    push $P1010, $P1009
+    .return ($P1010)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<!>"  :subid("253_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1006_tgt
-    .local int rx1006_pos
-    .local int rx1006_off
-    .local int rx1006_eos
-    .local int rx1006_rep
-    .local pmc rx1006_cur
-    (rx1006_cur, rx1006_pos, rx1006_tgt) = self."!cursor_start"()
-    rx1006_cur."!cursor_debug"("START ", "prefix:sym<!>")
-    .lex unicode:"$\x{a2}", rx1006_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1006_eos, rx1006_tgt
-    set rx1006_off, 0
-    lt rx1006_pos, 2, rx1006_start
-    sub rx1006_off, rx1006_pos, 1
-    substr rx1006_tgt, rx1006_tgt, rx1006_off
-  rx1006_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1010_done
-    goto rxscan1010_scan
-  rxscan1010_loop:
-    ($P10) = rx1006_cur."from"()
-    inc $P10
-    set rx1006_pos, $P10
-    ge rx1006_pos, rx1006_eos, rxscan1010_done
-  rxscan1010_scan:
-    set_addr $I10, rxscan1010_loop
-    rx1006_cur."!mark_push"(0, rx1006_pos, $I10)
-  rxscan1010_done:
-.annotate "line", 474
+.sub "prefix:sym<!>"  :subid("255_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1014_tgt
+    .local int rx1014_pos
+    .local int rx1014_off
+    .local int rx1014_eos
+    .local int rx1014_rep
+    .local pmc rx1014_cur
+    (rx1014_cur, rx1014_pos, rx1014_tgt) = self."!cursor_start"()
+    rx1014_cur."!cursor_debug"("START ", "prefix:sym<!>")
+    .lex unicode:"$\x{a2}", rx1014_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1014_eos, rx1014_tgt
+    set rx1014_off, 0
+    lt rx1014_pos, 2, rx1014_start
+    sub rx1014_off, rx1014_pos, 1
+    substr rx1014_tgt, rx1014_tgt, rx1014_off
+  rx1014_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1018_done
+    goto rxscan1018_scan
+  rxscan1018_loop:
+    ($P10) = rx1014_cur."from"()
+    inc $P10
+    set rx1014_pos, $P10
+    ge rx1014_pos, rx1014_eos, rxscan1018_done
+  rxscan1018_scan:
+    set_addr $I10, rxscan1018_loop
+    rx1014_cur."!mark_push"(0, rx1014_pos, $I10)
+  rxscan1018_done:
+.annotate "line", 479
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1011_fail
-    rx1006_cur."!mark_push"(0, rx1006_pos, $I10)
+    set_addr $I10, rxcap_1019_fail
+    rx1014_cur."!mark_push"(0, rx1014_pos, $I10)
   # rx literal  "!"
-    add $I11, rx1006_pos, 1
-    gt $I11, rx1006_eos, rx1006_fail
-    sub $I11, rx1006_pos, rx1006_off
-    substr $S10, rx1006_tgt, $I11, 1
-    ne $S10, "!", rx1006_fail
-    add rx1006_pos, 1
-    set_addr $I10, rxcap_1011_fail
-    ($I12, $I11) = rx1006_cur."!mark_peek"($I10)
-    rx1006_cur."!cursor_pos"($I11)
-    ($P10) = rx1006_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1006_pos, "")
-    rx1006_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1014_pos, 1
+    gt $I11, rx1014_eos, rx1014_fail
+    sub $I11, rx1014_pos, rx1014_off
+    substr $S10, rx1014_tgt, $I11, 1
+    ne $S10, "!", rx1014_fail
+    add rx1014_pos, 1
+    set_addr $I10, rxcap_1019_fail
+    ($I12, $I11) = rx1014_cur."!mark_peek"($I10)
+    rx1014_cur."!cursor_pos"($I11)
+    ($P10) = rx1014_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1014_pos, "")
+    rx1014_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1011_done
-  rxcap_1011_fail:
-    goto rx1006_fail
-  rxcap_1011_done:
+    goto rxcap_1019_done
+  rxcap_1019_fail:
+    goto rx1014_fail
+  rxcap_1019_done:
   # rx subrule "O" subtype=capture negate=
-    rx1006_cur."!cursor_pos"(rx1006_pos)
-    $P10 = rx1006_cur."O"("%symbolic_unary, :pirop<isfalse>")
-    unless $P10, rx1006_fail
-    rx1006_cur."!mark_push"(0, -1, 0, $P10)
+    rx1014_cur."!cursor_pos"(rx1014_pos)
+    $P10 = rx1014_cur."O"("%symbolic_unary, :pirop<isfalse>")
+    unless $P10, rx1014_fail
+    rx1014_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1006_pos = $P10."pos"()
+    rx1014_pos = $P10."pos"()
   # rx pass
-    rx1006_cur."!cursor_pass"(rx1006_pos, "prefix:sym<!>")
-    rx1006_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1006_pos)
-    .return (rx1006_cur)
-  rx1006_fail:
-.annotate "line", 417
-    (rx1006_rep, rx1006_pos, $I10, $P10) = rx1006_cur."!mark_fail"(0)
-    lt rx1006_pos, -1, rx1006_done
-    eq rx1006_pos, -1, rx1006_fail
-    jump $I10
-  rx1006_done:
-    rx1006_cur."!cursor_fail"()
-    rx1006_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
-    .return (rx1006_cur)
+    rx1014_cur."!cursor_pass"(rx1014_pos, "prefix:sym<!>")
+    rx1014_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1014_pos)
+    .return (rx1014_cur)
+  rx1014_fail:
+.annotate "line", 422
+    (rx1014_rep, rx1014_pos, $I10, $P10) = rx1014_cur."!mark_fail"(0)
+    lt rx1014_pos, -1, rx1014_done
+    eq rx1014_pos, -1, rx1014_fail
+    jump $I10
+  rx1014_done:
+    rx1014_cur."!cursor_fail"()
+    rx1014_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
+    .return (rx1014_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<!>"  :subid("254_1267204702.05125") :method
-.annotate "line", 417
-    $P1008 = self."!PREFIX__!subrule"("O", "!")
-    new $P1009, "ResizablePMCArray"
-    push $P1009, $P1008
-    .return ($P1009)
+.sub "!PREFIX__prefix:sym<!>"  :subid("256_1272816833.94956") :method
+.annotate "line", 422
+    $P1016 = self."!PREFIX__!subrule"("O", "!")
+    new $P1017, "ResizablePMCArray"
+    push $P1017, $P1016
+    .return ($P1017)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<|>"  :subid("255_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1013_tgt
-    .local int rx1013_pos
-    .local int rx1013_off
-    .local int rx1013_eos
-    .local int rx1013_rep
-    .local pmc rx1013_cur
-    (rx1013_cur, rx1013_pos, rx1013_tgt) = self."!cursor_start"()
-    rx1013_cur."!cursor_debug"("START ", "prefix:sym<|>")
-    .lex unicode:"$\x{a2}", rx1013_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1013_eos, rx1013_tgt
-    set rx1013_off, 0
-    lt rx1013_pos, 2, rx1013_start
-    sub rx1013_off, rx1013_pos, 1
-    substr rx1013_tgt, rx1013_tgt, rx1013_off
-  rx1013_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1017_done
-    goto rxscan1017_scan
-  rxscan1017_loop:
-    ($P10) = rx1013_cur."from"()
-    inc $P10
-    set rx1013_pos, $P10
-    ge rx1013_pos, rx1013_eos, rxscan1017_done
-  rxscan1017_scan:
-    set_addr $I10, rxscan1017_loop
-    rx1013_cur."!mark_push"(0, rx1013_pos, $I10)
-  rxscan1017_done:
-.annotate "line", 475
+.sub "prefix:sym<|>"  :subid("257_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1021_tgt
+    .local int rx1021_pos
+    .local int rx1021_off
+    .local int rx1021_eos
+    .local int rx1021_rep
+    .local pmc rx1021_cur
+    (rx1021_cur, rx1021_pos, rx1021_tgt) = self."!cursor_start"()
+    rx1021_cur."!cursor_debug"("START ", "prefix:sym<|>")
+    .lex unicode:"$\x{a2}", rx1021_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1021_eos, rx1021_tgt
+    set rx1021_off, 0
+    lt rx1021_pos, 2, rx1021_start
+    sub rx1021_off, rx1021_pos, 1
+    substr rx1021_tgt, rx1021_tgt, rx1021_off
+  rx1021_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1025_done
+    goto rxscan1025_scan
+  rxscan1025_loop:
+    ($P10) = rx1021_cur."from"()
+    inc $P10
+    set rx1021_pos, $P10
+    ge rx1021_pos, rx1021_eos, rxscan1025_done
+  rxscan1025_scan:
+    set_addr $I10, rxscan1025_loop
+    rx1021_cur."!mark_push"(0, rx1021_pos, $I10)
+  rxscan1025_done:
+.annotate "line", 480
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1018_fail
-    rx1013_cur."!mark_push"(0, rx1013_pos, $I10)
+    set_addr $I10, rxcap_1026_fail
+    rx1021_cur."!mark_push"(0, rx1021_pos, $I10)
   # rx literal  "|"
-    add $I11, rx1013_pos, 1
-    gt $I11, rx1013_eos, rx1013_fail
-    sub $I11, rx1013_pos, rx1013_off
-    substr $S10, rx1013_tgt, $I11, 1
-    ne $S10, "|", rx1013_fail
-    add rx1013_pos, 1
-    set_addr $I10, rxcap_1018_fail
-    ($I12, $I11) = rx1013_cur."!mark_peek"($I10)
-    rx1013_cur."!cursor_pos"($I11)
-    ($P10) = rx1013_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1013_pos, "")
-    rx1013_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1021_pos, 1
+    gt $I11, rx1021_eos, rx1021_fail
+    sub $I11, rx1021_pos, rx1021_off
+    substr $S10, rx1021_tgt, $I11, 1
+    ne $S10, "|", rx1021_fail
+    add rx1021_pos, 1
+    set_addr $I10, rxcap_1026_fail
+    ($I12, $I11) = rx1021_cur."!mark_peek"($I10)
+    rx1021_cur."!cursor_pos"($I11)
+    ($P10) = rx1021_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1021_pos, "")
+    rx1021_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1018_done
-  rxcap_1018_fail:
-    goto rx1013_fail
-  rxcap_1018_done:
+    goto rxcap_1026_done
+  rxcap_1026_fail:
+    goto rx1021_fail
+  rxcap_1026_done:
   # rx subrule "O" subtype=capture negate=
-    rx1013_cur."!cursor_pos"(rx1013_pos)
-    $P10 = rx1013_cur."O"("%symbolic_unary")
-    unless $P10, rx1013_fail
-    rx1013_cur."!mark_push"(0, -1, 0, $P10)
+    rx1021_cur."!cursor_pos"(rx1021_pos)
+    $P10 = rx1021_cur."O"("%symbolic_unary")
+    unless $P10, rx1021_fail
+    rx1021_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1013_pos = $P10."pos"()
+    rx1021_pos = $P10."pos"()
   # rx pass
-    rx1013_cur."!cursor_pass"(rx1013_pos, "prefix:sym<|>")
-    rx1013_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1013_pos)
-    .return (rx1013_cur)
-  rx1013_fail:
-.annotate "line", 417
-    (rx1013_rep, rx1013_pos, $I10, $P10) = rx1013_cur."!mark_fail"(0)
-    lt rx1013_pos, -1, rx1013_done
-    eq rx1013_pos, -1, rx1013_fail
-    jump $I10
-  rx1013_done:
-    rx1013_cur."!cursor_fail"()
-    rx1013_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
-    .return (rx1013_cur)
+    rx1021_cur."!cursor_pass"(rx1021_pos, "prefix:sym<|>")
+    rx1021_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1021_pos)
+    .return (rx1021_cur)
+  rx1021_fail:
+.annotate "line", 422
+    (rx1021_rep, rx1021_pos, $I10, $P10) = rx1021_cur."!mark_fail"(0)
+    lt rx1021_pos, -1, rx1021_done
+    eq rx1021_pos, -1, rx1021_fail
+    jump $I10
+  rx1021_done:
+    rx1021_cur."!cursor_fail"()
+    rx1021_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
+    .return (rx1021_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<|>"  :subid("256_1267204702.05125") :method
-.annotate "line", 417
-    $P1015 = self."!PREFIX__!subrule"("O", "|")
-    new $P1016, "ResizablePMCArray"
-    push $P1016, $P1015
-    .return ($P1016)
+.sub "!PREFIX__prefix:sym<|>"  :subid("258_1272816833.94956") :method
+.annotate "line", 422
+    $P1023 = self."!PREFIX__!subrule"("O", "|")
+    new $P1024, "ResizablePMCArray"
+    push $P1024, $P1023
+    .return ($P1024)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<*>"  :subid("257_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1020_tgt
-    .local int rx1020_pos
-    .local int rx1020_off
-    .local int rx1020_eos
-    .local int rx1020_rep
-    .local pmc rx1020_cur
-    (rx1020_cur, rx1020_pos, rx1020_tgt) = self."!cursor_start"()
-    rx1020_cur."!cursor_debug"("START ", "infix:sym<*>")
-    .lex unicode:"$\x{a2}", rx1020_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1020_eos, rx1020_tgt
-    set rx1020_off, 0
-    lt rx1020_pos, 2, rx1020_start
-    sub rx1020_off, rx1020_pos, 1
-    substr rx1020_tgt, rx1020_tgt, rx1020_off
-  rx1020_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1024_done
-    goto rxscan1024_scan
-  rxscan1024_loop:
-    ($P10) = rx1020_cur."from"()
-    inc $P10
-    set rx1020_pos, $P10
-    ge rx1020_pos, rx1020_eos, rxscan1024_done
-  rxscan1024_scan:
-    set_addr $I10, rxscan1024_loop
-    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
-  rxscan1024_done:
-.annotate "line", 477
+.sub "infix:sym<*>"  :subid("259_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1028_tgt
+    .local int rx1028_pos
+    .local int rx1028_off
+    .local int rx1028_eos
+    .local int rx1028_rep
+    .local pmc rx1028_cur
+    (rx1028_cur, rx1028_pos, rx1028_tgt) = self."!cursor_start"()
+    rx1028_cur."!cursor_debug"("START ", "infix:sym<*>")
+    .lex unicode:"$\x{a2}", rx1028_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1028_eos, rx1028_tgt
+    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:
+    $I10 = self.'from'()
+    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", 482
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1025_fail
-    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
+    set_addr $I10, rxcap_1033_fail
+    rx1028_cur."!mark_push"(0, rx1028_pos, $I10)
   # rx literal  "*"
-    add $I11, rx1020_pos, 1
-    gt $I11, rx1020_eos, rx1020_fail
-    sub $I11, rx1020_pos, rx1020_off
-    substr $S10, rx1020_tgt, $I11, 1
-    ne $S10, "*", rx1020_fail
-    add rx1020_pos, 1
-    set_addr $I10, rxcap_1025_fail
-    ($I12, $I11) = rx1020_cur."!mark_peek"($I10)
-    rx1020_cur."!cursor_pos"($I11)
-    ($P10) = rx1020_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1020_pos, "")
-    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1028_pos, 1
+    gt $I11, rx1028_eos, rx1028_fail
+    sub $I11, rx1028_pos, rx1028_off
+    substr $S10, rx1028_tgt, $I11, 1
+    ne $S10, "*", rx1028_fail
+    add rx1028_pos, 1
+    set_addr $I10, rxcap_1033_fail
+    ($I12, $I11) = rx1028_cur."!mark_peek"($I10)
+    rx1028_cur."!cursor_pos"($I11)
+    ($P10) = rx1028_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1028_pos, "")
+    rx1028_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1025_done
-  rxcap_1025_fail:
-    goto rx1020_fail
-  rxcap_1025_done:
+    goto rxcap_1033_done
+  rxcap_1033_fail:
+    goto rx1028_fail
+  rxcap_1033_done:
   # rx subrule "O" subtype=capture negate=
-    rx1020_cur."!cursor_pos"(rx1020_pos)
-    $P10 = rx1020_cur."O"("%multiplicative, :pirop<mul>")
-    unless $P10, rx1020_fail
-    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    rx1028_cur."!cursor_pos"(rx1028_pos)
+    $P10 = rx1028_cur."O"("%multiplicative, :pirop<mul>")
+    unless $P10, rx1028_fail
+    rx1028_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1020_pos = $P10."pos"()
+    rx1028_pos = $P10."pos"()
   # rx pass
-    rx1020_cur."!cursor_pass"(rx1020_pos, "infix:sym<*>")
-    rx1020_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1020_pos)
-    .return (rx1020_cur)
-  rx1020_fail:
-.annotate "line", 417
-    (rx1020_rep, rx1020_pos, $I10, $P10) = rx1020_cur."!mark_fail"(0)
-    lt rx1020_pos, -1, rx1020_done
-    eq rx1020_pos, -1, rx1020_fail
-    jump $I10
-  rx1020_done:
-    rx1020_cur."!cursor_fail"()
-    rx1020_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
-    .return (rx1020_cur)
+    rx1028_cur."!cursor_pass"(rx1028_pos, "infix:sym<*>")
+    rx1028_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1028_pos)
+    .return (rx1028_cur)
+  rx1028_fail:
+.annotate "line", 422
+    (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"()
+    rx1028_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
+    .return (rx1028_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<*>"  :subid("258_1267204702.05125") :method
-.annotate "line", 417
-    $P1022 = self."!PREFIX__!subrule"("O", "*")
-    new $P1023, "ResizablePMCArray"
-    push $P1023, $P1022
-    .return ($P1023)
+.sub "!PREFIX__infix:sym<*>"  :subid("260_1272816833.94956") :method
+.annotate "line", 422
+    $P1030 = self."!PREFIX__!subrule"("O", "*")
+    new $P1031, "ResizablePMCArray"
+    push $P1031, $P1030
+    .return ($P1031)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym</>"  :subid("259_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1027_tgt
-    .local int rx1027_pos
-    .local int rx1027_off
-    .local int rx1027_eos
-    .local int rx1027_rep
-    .local pmc rx1027_cur
-    (rx1027_cur, rx1027_pos, rx1027_tgt) = self."!cursor_start"()
-    rx1027_cur."!cursor_debug"("START ", "infix:sym</>")
-    .lex unicode:"$\x{a2}", rx1027_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1027_eos, rx1027_tgt
-    set rx1027_off, 0
-    lt rx1027_pos, 2, rx1027_start
-    sub rx1027_off, rx1027_pos, 1
-    substr rx1027_tgt, rx1027_tgt, rx1027_off
-  rx1027_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1031_done
-    goto rxscan1031_scan
-  rxscan1031_loop:
-    ($P10) = rx1027_cur."from"()
-    inc $P10
-    set rx1027_pos, $P10
-    ge rx1027_pos, rx1027_eos, rxscan1031_done
-  rxscan1031_scan:
-    set_addr $I10, rxscan1031_loop
-    rx1027_cur."!mark_push"(0, rx1027_pos, $I10)
-  rxscan1031_done:
-.annotate "line", 478
+.sub "infix:sym</>"  :subid("261_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1035_tgt
+    .local int rx1035_pos
+    .local int rx1035_off
+    .local int rx1035_eos
+    .local int rx1035_rep
+    .local pmc rx1035_cur
+    (rx1035_cur, rx1035_pos, rx1035_tgt) = self."!cursor_start"()
+    rx1035_cur."!cursor_debug"("START ", "infix:sym</>")
+    .lex unicode:"$\x{a2}", rx1035_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1035_eos, rx1035_tgt
+    set rx1035_off, 0
+    lt rx1035_pos, 2, rx1035_start
+    sub rx1035_off, rx1035_pos, 1
+    substr rx1035_tgt, rx1035_tgt, rx1035_off
+  rx1035_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1039_done
+    goto rxscan1039_scan
+  rxscan1039_loop:
+    ($P10) = rx1035_cur."from"()
+    inc $P10
+    set rx1035_pos, $P10
+    ge rx1035_pos, rx1035_eos, rxscan1039_done
+  rxscan1039_scan:
+    set_addr $I10, rxscan1039_loop
+    rx1035_cur."!mark_push"(0, rx1035_pos, $I10)
+  rxscan1039_done:
+.annotate "line", 483
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1032_fail
-    rx1027_cur."!mark_push"(0, rx1027_pos, $I10)
+    set_addr $I10, rxcap_1040_fail
+    rx1035_cur."!mark_push"(0, rx1035_pos, $I10)
   # rx literal  "/"
-    add $I11, rx1027_pos, 1
-    gt $I11, rx1027_eos, rx1027_fail
-    sub $I11, rx1027_pos, rx1027_off
-    substr $S10, rx1027_tgt, $I11, 1
-    ne $S10, "/", rx1027_fail
-    add rx1027_pos, 1
-    set_addr $I10, rxcap_1032_fail
-    ($I12, $I11) = rx1027_cur."!mark_peek"($I10)
-    rx1027_cur."!cursor_pos"($I11)
-    ($P10) = rx1027_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1027_pos, "")
-    rx1027_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1035_pos, 1
+    gt $I11, rx1035_eos, rx1035_fail
+    sub $I11, rx1035_pos, rx1035_off
+    substr $S10, rx1035_tgt, $I11, 1
+    ne $S10, "/", rx1035_fail
+    add rx1035_pos, 1
+    set_addr $I10, rxcap_1040_fail
+    ($I12, $I11) = rx1035_cur."!mark_peek"($I10)
+    rx1035_cur."!cursor_pos"($I11)
+    ($P10) = rx1035_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1035_pos, "")
+    rx1035_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1032_done
-  rxcap_1032_fail:
-    goto rx1027_fail
-  rxcap_1032_done:
+    goto rxcap_1040_done
+  rxcap_1040_fail:
+    goto rx1035_fail
+  rxcap_1040_done:
   # rx subrule "O" subtype=capture negate=
-    rx1027_cur."!cursor_pos"(rx1027_pos)
-    $P10 = rx1027_cur."O"("%multiplicative, :pirop<div>")
-    unless $P10, rx1027_fail
-    rx1027_cur."!mark_push"(0, -1, 0, $P10)
+    rx1035_cur."!cursor_pos"(rx1035_pos)
+    $P10 = rx1035_cur."O"("%multiplicative, :pirop<div>")
+    unless $P10, rx1035_fail
+    rx1035_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1027_pos = $P10."pos"()
+    rx1035_pos = $P10."pos"()
   # rx pass
-    rx1027_cur."!cursor_pass"(rx1027_pos, "infix:sym</>")
-    rx1027_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1027_pos)
-    .return (rx1027_cur)
-  rx1027_fail:
-.annotate "line", 417
-    (rx1027_rep, rx1027_pos, $I10, $P10) = rx1027_cur."!mark_fail"(0)
-    lt rx1027_pos, -1, rx1027_done
-    eq rx1027_pos, -1, rx1027_fail
-    jump $I10
-  rx1027_done:
-    rx1027_cur."!cursor_fail"()
-    rx1027_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
-    .return (rx1027_cur)
+    rx1035_cur."!cursor_pass"(rx1035_pos, "infix:sym</>")
+    rx1035_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1035_pos)
+    .return (rx1035_cur)
+  rx1035_fail:
+.annotate "line", 422
+    (rx1035_rep, rx1035_pos, $I10, $P10) = rx1035_cur."!mark_fail"(0)
+    lt rx1035_pos, -1, rx1035_done
+    eq rx1035_pos, -1, rx1035_fail
+    jump $I10
+  rx1035_done:
+    rx1035_cur."!cursor_fail"()
+    rx1035_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
+    .return (rx1035_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym</>"  :subid("260_1267204702.05125") :method
-.annotate "line", 417
-    $P1029 = self."!PREFIX__!subrule"("O", "/")
-    new $P1030, "ResizablePMCArray"
-    push $P1030, $P1029
-    .return ($P1030)
+.sub "!PREFIX__infix:sym</>"  :subid("262_1272816833.94956") :method
+.annotate "line", 422
+    $P1037 = self."!PREFIX__!subrule"("O", "/")
+    new $P1038, "ResizablePMCArray"
+    push $P1038, $P1037
+    .return ($P1038)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<%>"  :subid("261_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1034_tgt
-    .local int rx1034_pos
-    .local int rx1034_off
-    .local int rx1034_eos
-    .local int rx1034_rep
-    .local pmc rx1034_cur
-    (rx1034_cur, rx1034_pos, rx1034_tgt) = self."!cursor_start"()
-    rx1034_cur."!cursor_debug"("START ", "infix:sym<%>")
-    .lex unicode:"$\x{a2}", rx1034_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1034_eos, rx1034_tgt
-    set rx1034_off, 0
-    lt rx1034_pos, 2, rx1034_start
-    sub rx1034_off, rx1034_pos, 1
-    substr rx1034_tgt, rx1034_tgt, rx1034_off
-  rx1034_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1038_done
-    goto rxscan1038_scan
-  rxscan1038_loop:
-    ($P10) = rx1034_cur."from"()
-    inc $P10
-    set rx1034_pos, $P10
-    ge rx1034_pos, rx1034_eos, rxscan1038_done
-  rxscan1038_scan:
-    set_addr $I10, rxscan1038_loop
-    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
-  rxscan1038_done:
-.annotate "line", 479
+.sub "infix:sym<%>"  :subid("263_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1042_tgt
+    .local int rx1042_pos
+    .local int rx1042_off
+    .local int rx1042_eos
+    .local int rx1042_rep
+    .local pmc rx1042_cur
+    (rx1042_cur, rx1042_pos, rx1042_tgt) = self."!cursor_start"()
+    rx1042_cur."!cursor_debug"("START ", "infix:sym<%>")
+    .lex unicode:"$\x{a2}", rx1042_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1042_eos, rx1042_tgt
+    set rx1042_off, 0
+    lt rx1042_pos, 2, rx1042_start
+    sub rx1042_off, rx1042_pos, 1
+    substr rx1042_tgt, rx1042_tgt, rx1042_off
+  rx1042_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1046_done
+    goto rxscan1046_scan
+  rxscan1046_loop:
+    ($P10) = rx1042_cur."from"()
+    inc $P10
+    set rx1042_pos, $P10
+    ge rx1042_pos, rx1042_eos, rxscan1046_done
+  rxscan1046_scan:
+    set_addr $I10, rxscan1046_loop
+    rx1042_cur."!mark_push"(0, rx1042_pos, $I10)
+  rxscan1046_done:
+.annotate "line", 484
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1039_fail
-    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
+    set_addr $I10, rxcap_1047_fail
+    rx1042_cur."!mark_push"(0, rx1042_pos, $I10)
   # rx literal  "%"
-    add $I11, rx1034_pos, 1
-    gt $I11, rx1034_eos, rx1034_fail
-    sub $I11, rx1034_pos, rx1034_off
-    substr $S10, rx1034_tgt, $I11, 1
-    ne $S10, "%", rx1034_fail
-    add rx1034_pos, 1
-    set_addr $I10, rxcap_1039_fail
-    ($I12, $I11) = rx1034_cur."!mark_peek"($I10)
-    rx1034_cur."!cursor_pos"($I11)
-    ($P10) = rx1034_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1034_pos, "")
-    rx1034_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1042_pos, 1
+    gt $I11, rx1042_eos, rx1042_fail
+    sub $I11, rx1042_pos, rx1042_off
+    substr $S10, rx1042_tgt, $I11, 1
+    ne $S10, "%", rx1042_fail
+    add rx1042_pos, 1
+    set_addr $I10, rxcap_1047_fail
+    ($I12, $I11) = rx1042_cur."!mark_peek"($I10)
+    rx1042_cur."!cursor_pos"($I11)
+    ($P10) = rx1042_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1042_pos, "")
+    rx1042_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1039_done
-  rxcap_1039_fail:
-    goto rx1034_fail
-  rxcap_1039_done:
+    goto rxcap_1047_done
+  rxcap_1047_fail:
+    goto rx1042_fail
+  rxcap_1047_done:
   # rx subrule "O" subtype=capture negate=
-    rx1034_cur."!cursor_pos"(rx1034_pos)
-    $P10 = rx1034_cur."O"("%multiplicative, :pirop<mod>")
-    unless $P10, rx1034_fail
-    rx1034_cur."!mark_push"(0, -1, 0, $P10)
+    rx1042_cur."!cursor_pos"(rx1042_pos)
+    $P10 = rx1042_cur."O"("%multiplicative, :pirop<mod>")
+    unless $P10, rx1042_fail
+    rx1042_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1034_pos = $P10."pos"()
+    rx1042_pos = $P10."pos"()
   # rx pass
-    rx1034_cur."!cursor_pass"(rx1034_pos, "infix:sym<%>")
-    rx1034_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1034_pos)
-    .return (rx1034_cur)
-  rx1034_fail:
-.annotate "line", 417
-    (rx1034_rep, rx1034_pos, $I10, $P10) = rx1034_cur."!mark_fail"(0)
-    lt rx1034_pos, -1, rx1034_done
-    eq rx1034_pos, -1, rx1034_fail
-    jump $I10
-  rx1034_done:
-    rx1034_cur."!cursor_fail"()
-    rx1034_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
-    .return (rx1034_cur)
+    rx1042_cur."!cursor_pass"(rx1042_pos, "infix:sym<%>")
+    rx1042_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1042_pos)
+    .return (rx1042_cur)
+  rx1042_fail:
+.annotate "line", 422
+    (rx1042_rep, rx1042_pos, $I10, $P10) = rx1042_cur."!mark_fail"(0)
+    lt rx1042_pos, -1, rx1042_done
+    eq rx1042_pos, -1, rx1042_fail
+    jump $I10
+  rx1042_done:
+    rx1042_cur."!cursor_fail"()
+    rx1042_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
+    .return (rx1042_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<%>"  :subid("262_1267204702.05125") :method
-.annotate "line", 417
-    $P1036 = self."!PREFIX__!subrule"("O", "%")
-    new $P1037, "ResizablePMCArray"
-    push $P1037, $P1036
-    .return ($P1037)
+.sub "!PREFIX__infix:sym<%>"  :subid("264_1272816833.94956") :method
+.annotate "line", 422
+    $P1044 = self."!PREFIX__!subrule"("O", "%")
+    new $P1045, "ResizablePMCArray"
+    push $P1045, $P1044
+    .return ($P1045)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+>"  :subid("263_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1041_tgt
-    .local int rx1041_pos
-    .local int rx1041_off
-    .local int rx1041_eos
-    .local int rx1041_rep
-    .local pmc rx1041_cur
-    (rx1041_cur, rx1041_pos, rx1041_tgt) = self."!cursor_start"()
-    rx1041_cur."!cursor_debug"("START ", "infix:sym<+>")
-    .lex unicode:"$\x{a2}", rx1041_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1041_eos, rx1041_tgt
-    set rx1041_off, 0
-    lt rx1041_pos, 2, rx1041_start
-    sub rx1041_off, rx1041_pos, 1
-    substr rx1041_tgt, rx1041_tgt, rx1041_off
-  rx1041_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1045_done
-    goto rxscan1045_scan
-  rxscan1045_loop:
-    ($P10) = rx1041_cur."from"()
-    inc $P10
-    set rx1041_pos, $P10
-    ge rx1041_pos, rx1041_eos, rxscan1045_done
-  rxscan1045_scan:
-    set_addr $I10, rxscan1045_loop
-    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
-  rxscan1045_done:
-.annotate "line", 481
+.sub "infix:sym<+>"  :subid("265_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1049_tgt
+    .local int rx1049_pos
+    .local int rx1049_off
+    .local int rx1049_eos
+    .local int rx1049_rep
+    .local pmc rx1049_cur
+    (rx1049_cur, rx1049_pos, rx1049_tgt) = self."!cursor_start"()
+    rx1049_cur."!cursor_debug"("START ", "infix:sym<+>")
+    .lex unicode:"$\x{a2}", rx1049_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1049_eos, rx1049_tgt
+    set rx1049_off, 0
+    lt rx1049_pos, 2, rx1049_start
+    sub rx1049_off, rx1049_pos, 1
+    substr rx1049_tgt, rx1049_tgt, rx1049_off
+  rx1049_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1053_done
+    goto rxscan1053_scan
+  rxscan1053_loop:
+    ($P10) = rx1049_cur."from"()
+    inc $P10
+    set rx1049_pos, $P10
+    ge rx1049_pos, rx1049_eos, rxscan1053_done
+  rxscan1053_scan:
+    set_addr $I10, rxscan1053_loop
+    rx1049_cur."!mark_push"(0, rx1049_pos, $I10)
+  rxscan1053_done:
+.annotate "line", 486
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1046_fail
-    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
+    set_addr $I10, rxcap_1054_fail
+    rx1049_cur."!mark_push"(0, rx1049_pos, $I10)
   # rx literal  "+"
-    add $I11, rx1041_pos, 1
-    gt $I11, rx1041_eos, rx1041_fail
-    sub $I11, rx1041_pos, rx1041_off
-    substr $S10, rx1041_tgt, $I11, 1
-    ne $S10, "+", rx1041_fail
-    add rx1041_pos, 1
-    set_addr $I10, rxcap_1046_fail
-    ($I12, $I11) = rx1041_cur."!mark_peek"($I10)
-    rx1041_cur."!cursor_pos"($I11)
-    ($P10) = rx1041_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1041_pos, "")
-    rx1041_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1049_pos, 1
+    gt $I11, rx1049_eos, rx1049_fail
+    sub $I11, rx1049_pos, rx1049_off
+    substr $S10, rx1049_tgt, $I11, 1
+    ne $S10, "+", rx1049_fail
+    add rx1049_pos, 1
+    set_addr $I10, rxcap_1054_fail
+    ($I12, $I11) = rx1049_cur."!mark_peek"($I10)
+    rx1049_cur."!cursor_pos"($I11)
+    ($P10) = rx1049_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1049_pos, "")
+    rx1049_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1046_done
-  rxcap_1046_fail:
-    goto rx1041_fail
-  rxcap_1046_done:
+    goto rxcap_1054_done
+  rxcap_1054_fail:
+    goto rx1049_fail
+  rxcap_1054_done:
   # rx subrule "O" subtype=capture negate=
-    rx1041_cur."!cursor_pos"(rx1041_pos)
-    $P10 = rx1041_cur."O"("%additive, :pirop<add>")
-    unless $P10, rx1041_fail
-    rx1041_cur."!mark_push"(0, -1, 0, $P10)
+    rx1049_cur."!cursor_pos"(rx1049_pos)
+    $P10 = rx1049_cur."O"("%additive, :pirop<add>")
+    unless $P10, rx1049_fail
+    rx1049_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1041_pos = $P10."pos"()
+    rx1049_pos = $P10."pos"()
   # rx pass
-    rx1041_cur."!cursor_pass"(rx1041_pos, "infix:sym<+>")
-    rx1041_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1041_pos)
-    .return (rx1041_cur)
-  rx1041_fail:
-.annotate "line", 417
-    (rx1041_rep, rx1041_pos, $I10, $P10) = rx1041_cur."!mark_fail"(0)
-    lt rx1041_pos, -1, rx1041_done
-    eq rx1041_pos, -1, rx1041_fail
-    jump $I10
-  rx1041_done:
-    rx1041_cur."!cursor_fail"()
-    rx1041_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
-    .return (rx1041_cur)
+    rx1049_cur."!cursor_pass"(rx1049_pos, "infix:sym<+>")
+    rx1049_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1049_pos)
+    .return (rx1049_cur)
+  rx1049_fail:
+.annotate "line", 422
+    (rx1049_rep, rx1049_pos, $I10, $P10) = rx1049_cur."!mark_fail"(0)
+    lt rx1049_pos, -1, rx1049_done
+    eq rx1049_pos, -1, rx1049_fail
+    jump $I10
+  rx1049_done:
+    rx1049_cur."!cursor_fail"()
+    rx1049_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
+    .return (rx1049_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+>"  :subid("264_1267204702.05125") :method
-.annotate "line", 417
-    $P1043 = self."!PREFIX__!subrule"("O", "+")
-    new $P1044, "ResizablePMCArray"
-    push $P1044, $P1043
-    .return ($P1044)
+.sub "!PREFIX__infix:sym<+>"  :subid("266_1272816833.94956") :method
+.annotate "line", 422
+    $P1051 = self."!PREFIX__!subrule"("O", "+")
+    new $P1052, "ResizablePMCArray"
+    push $P1052, $P1051
+    .return ($P1052)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<->"  :subid("265_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1048_tgt
-    .local int rx1048_pos
-    .local int rx1048_off
-    .local int rx1048_eos
-    .local int rx1048_rep
-    .local pmc rx1048_cur
-    (rx1048_cur, rx1048_pos, rx1048_tgt) = self."!cursor_start"()
-    rx1048_cur."!cursor_debug"("START ", "infix:sym<->")
-    .lex unicode:"$\x{a2}", rx1048_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1048_eos, rx1048_tgt
-    set rx1048_off, 0
-    lt rx1048_pos, 2, rx1048_start
-    sub rx1048_off, rx1048_pos, 1
-    substr rx1048_tgt, rx1048_tgt, rx1048_off
-  rx1048_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1052_done
-    goto rxscan1052_scan
-  rxscan1052_loop:
-    ($P10) = rx1048_cur."from"()
-    inc $P10
-    set rx1048_pos, $P10
-    ge rx1048_pos, rx1048_eos, rxscan1052_done
-  rxscan1052_scan:
-    set_addr $I10, rxscan1052_loop
-    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
-  rxscan1052_done:
-.annotate "line", 482
+.sub "infix:sym<->"  :subid("267_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1056_tgt
+    .local int rx1056_pos
+    .local int rx1056_off
+    .local int rx1056_eos
+    .local int rx1056_rep
+    .local pmc rx1056_cur
+    (rx1056_cur, rx1056_pos, rx1056_tgt) = self."!cursor_start"()
+    rx1056_cur."!cursor_debug"("START ", "infix:sym<->")
+    .lex unicode:"$\x{a2}", rx1056_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1056_eos, rx1056_tgt
+    set rx1056_off, 0
+    lt rx1056_pos, 2, rx1056_start
+    sub rx1056_off, rx1056_pos, 1
+    substr rx1056_tgt, rx1056_tgt, rx1056_off
+  rx1056_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1060_done
+    goto rxscan1060_scan
+  rxscan1060_loop:
+    ($P10) = rx1056_cur."from"()
+    inc $P10
+    set rx1056_pos, $P10
+    ge rx1056_pos, rx1056_eos, rxscan1060_done
+  rxscan1060_scan:
+    set_addr $I10, rxscan1060_loop
+    rx1056_cur."!mark_push"(0, rx1056_pos, $I10)
+  rxscan1060_done:
+.annotate "line", 487
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1053_fail
-    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
+    set_addr $I10, rxcap_1061_fail
+    rx1056_cur."!mark_push"(0, rx1056_pos, $I10)
   # rx literal  "-"
-    add $I11, rx1048_pos, 1
-    gt $I11, rx1048_eos, rx1048_fail
-    sub $I11, rx1048_pos, rx1048_off
-    substr $S10, rx1048_tgt, $I11, 1
-    ne $S10, "-", rx1048_fail
-    add rx1048_pos, 1
-    set_addr $I10, rxcap_1053_fail
-    ($I12, $I11) = rx1048_cur."!mark_peek"($I10)
-    rx1048_cur."!cursor_pos"($I11)
-    ($P10) = rx1048_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1048_pos, "")
-    rx1048_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1056_pos, 1
+    gt $I11, rx1056_eos, rx1056_fail
+    sub $I11, rx1056_pos, rx1056_off
+    substr $S10, rx1056_tgt, $I11, 1
+    ne $S10, "-", rx1056_fail
+    add rx1056_pos, 1
+    set_addr $I10, rxcap_1061_fail
+    ($I12, $I11) = rx1056_cur."!mark_peek"($I10)
+    rx1056_cur."!cursor_pos"($I11)
+    ($P10) = rx1056_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1056_pos, "")
+    rx1056_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1053_done
-  rxcap_1053_fail:
-    goto rx1048_fail
-  rxcap_1053_done:
+    goto rxcap_1061_done
+  rxcap_1061_fail:
+    goto rx1056_fail
+  rxcap_1061_done:
   # rx subrule "O" subtype=capture negate=
-    rx1048_cur."!cursor_pos"(rx1048_pos)
-    $P10 = rx1048_cur."O"("%additive, :pirop<sub>")
-    unless $P10, rx1048_fail
-    rx1048_cur."!mark_push"(0, -1, 0, $P10)
+    rx1056_cur."!cursor_pos"(rx1056_pos)
+    $P10 = rx1056_cur."O"("%additive, :pirop<sub>")
+    unless $P10, rx1056_fail
+    rx1056_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1048_pos = $P10."pos"()
+    rx1056_pos = $P10."pos"()
   # rx pass
-    rx1048_cur."!cursor_pass"(rx1048_pos, "infix:sym<->")
-    rx1048_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1048_pos)
-    .return (rx1048_cur)
-  rx1048_fail:
-.annotate "line", 417
-    (rx1048_rep, rx1048_pos, $I10, $P10) = rx1048_cur."!mark_fail"(0)
-    lt rx1048_pos, -1, rx1048_done
-    eq rx1048_pos, -1, rx1048_fail
+    rx1056_cur."!cursor_pass"(rx1056_pos, "infix:sym<->")
+    rx1056_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1056_pos)
+    .return (rx1056_cur)
+  rx1056_fail:
+.annotate "line", 422
+    (rx1056_rep, rx1056_pos, $I10, $P10) = rx1056_cur."!mark_fail"(0)
+    lt rx1056_pos, -1, rx1056_done
+    eq rx1056_pos, -1, rx1056_fail
     jump $I10
-  rx1048_done:
-    rx1048_cur."!cursor_fail"()
-    rx1048_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
-    .return (rx1048_cur)
+  rx1056_done:
+    rx1056_cur."!cursor_fail"()
+    rx1056_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
+    .return (rx1056_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<->"  :subid("266_1267204702.05125") :method
-.annotate "line", 417
-    $P1050 = self."!PREFIX__!subrule"("O", "-")
-    new $P1051, "ResizablePMCArray"
-    push $P1051, $P1050
-    .return ($P1051)
+.sub "!PREFIX__infix:sym<->"  :subid("268_1272816833.94956") :method
+.annotate "line", 422
+    $P1058 = self."!PREFIX__!subrule"("O", "-")
+    new $P1059, "ResizablePMCArray"
+    push $P1059, $P1058
+    .return ($P1059)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~>"  :subid("267_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1055_tgt
-    .local int rx1055_pos
-    .local int rx1055_off
-    .local int rx1055_eos
-    .local int rx1055_rep
-    .local pmc rx1055_cur
-    (rx1055_cur, rx1055_pos, rx1055_tgt) = self."!cursor_start"()
-    rx1055_cur."!cursor_debug"("START ", "infix:sym<~>")
-    .lex unicode:"$\x{a2}", rx1055_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1055_eos, rx1055_tgt
-    set rx1055_off, 0
-    lt rx1055_pos, 2, rx1055_start
-    sub rx1055_off, rx1055_pos, 1
-    substr rx1055_tgt, rx1055_tgt, rx1055_off
-  rx1055_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1059_done
-    goto rxscan1059_scan
-  rxscan1059_loop:
-    ($P10) = rx1055_cur."from"()
-    inc $P10
-    set rx1055_pos, $P10
-    ge rx1055_pos, rx1055_eos, rxscan1059_done
-  rxscan1059_scan:
-    set_addr $I10, rxscan1059_loop
-    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
-  rxscan1059_done:
-.annotate "line", 484
+.sub "infix:sym<~>"  :subid("269_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1063_tgt
+    .local int rx1063_pos
+    .local int rx1063_off
+    .local int rx1063_eos
+    .local int rx1063_rep
+    .local pmc rx1063_cur
+    (rx1063_cur, rx1063_pos, rx1063_tgt) = self."!cursor_start"()
+    rx1063_cur."!cursor_debug"("START ", "infix:sym<~>")
+    .lex unicode:"$\x{a2}", rx1063_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1063_eos, rx1063_tgt
+    set rx1063_off, 0
+    lt rx1063_pos, 2, rx1063_start
+    sub rx1063_off, rx1063_pos, 1
+    substr rx1063_tgt, rx1063_tgt, rx1063_off
+  rx1063_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1067_done
+    goto rxscan1067_scan
+  rxscan1067_loop:
+    ($P10) = rx1063_cur."from"()
+    inc $P10
+    set rx1063_pos, $P10
+    ge rx1063_pos, rx1063_eos, rxscan1067_done
+  rxscan1067_scan:
+    set_addr $I10, rxscan1067_loop
+    rx1063_cur."!mark_push"(0, rx1063_pos, $I10)
+  rxscan1067_done:
+.annotate "line", 489
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1060_fail
-    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
+    set_addr $I10, rxcap_1068_fail
+    rx1063_cur."!mark_push"(0, rx1063_pos, $I10)
   # rx literal  "~"
-    add $I11, rx1055_pos, 1
-    gt $I11, rx1055_eos, rx1055_fail
-    sub $I11, rx1055_pos, rx1055_off
-    substr $S10, rx1055_tgt, $I11, 1
-    ne $S10, "~", rx1055_fail
-    add rx1055_pos, 1
-    set_addr $I10, rxcap_1060_fail
-    ($I12, $I11) = rx1055_cur."!mark_peek"($I10)
-    rx1055_cur."!cursor_pos"($I11)
-    ($P10) = rx1055_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1055_pos, "")
-    rx1055_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1063_pos, 1
+    gt $I11, rx1063_eos, rx1063_fail
+    sub $I11, rx1063_pos, rx1063_off
+    substr $S10, rx1063_tgt, $I11, 1
+    ne $S10, "~", rx1063_fail
+    add rx1063_pos, 1
+    set_addr $I10, rxcap_1068_fail
+    ($I12, $I11) = rx1063_cur."!mark_peek"($I10)
+    rx1063_cur."!cursor_pos"($I11)
+    ($P10) = rx1063_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1063_pos, "")
+    rx1063_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1060_done
-  rxcap_1060_fail:
-    goto rx1055_fail
-  rxcap_1060_done:
+    goto rxcap_1068_done
+  rxcap_1068_fail:
+    goto rx1063_fail
+  rxcap_1068_done:
   # rx subrule "O" subtype=capture negate=
-    rx1055_cur."!cursor_pos"(rx1055_pos)
-    $P10 = rx1055_cur."O"("%concatenation , :pirop<concat>")
-    unless $P10, rx1055_fail
-    rx1055_cur."!mark_push"(0, -1, 0, $P10)
+    rx1063_cur."!cursor_pos"(rx1063_pos)
+    $P10 = rx1063_cur."O"("%concatenation , :pirop<concat>")
+    unless $P10, rx1063_fail
+    rx1063_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1055_pos = $P10."pos"()
+    rx1063_pos = $P10."pos"()
   # rx pass
-    rx1055_cur."!cursor_pass"(rx1055_pos, "infix:sym<~>")
-    rx1055_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1055_pos)
-    .return (rx1055_cur)
-  rx1055_fail:
-.annotate "line", 417
-    (rx1055_rep, rx1055_pos, $I10, $P10) = rx1055_cur."!mark_fail"(0)
-    lt rx1055_pos, -1, rx1055_done
-    eq rx1055_pos, -1, rx1055_fail
-    jump $I10
-  rx1055_done:
-    rx1055_cur."!cursor_fail"()
-    rx1055_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
-    .return (rx1055_cur)
+    rx1063_cur."!cursor_pass"(rx1063_pos, "infix:sym<~>")
+    rx1063_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1063_pos)
+    .return (rx1063_cur)
+  rx1063_fail:
+.annotate "line", 422
+    (rx1063_rep, rx1063_pos, $I10, $P10) = rx1063_cur."!mark_fail"(0)
+    lt rx1063_pos, -1, rx1063_done
+    eq rx1063_pos, -1, rx1063_fail
+    jump $I10
+  rx1063_done:
+    rx1063_cur."!cursor_fail"()
+    rx1063_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
+    .return (rx1063_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~>"  :subid("268_1267204702.05125") :method
-.annotate "line", 417
-    $P1057 = self."!PREFIX__!subrule"("O", "~")
-    new $P1058, "ResizablePMCArray"
-    push $P1058, $P1057
-    .return ($P1058)
+.sub "!PREFIX__infix:sym<~>"  :subid("270_1272816833.94956") :method
+.annotate "line", 422
+    $P1065 = self."!PREFIX__!subrule"("O", "~")
+    new $P1066, "ResizablePMCArray"
+    push $P1066, $P1065
+    .return ($P1066)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<==>"  :subid("269_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1062_tgt
-    .local int rx1062_pos
-    .local int rx1062_off
-    .local int rx1062_eos
-    .local int rx1062_rep
-    .local pmc rx1062_cur
-    (rx1062_cur, rx1062_pos, rx1062_tgt) = self."!cursor_start"()
-    rx1062_cur."!cursor_debug"("START ", "infix:sym<==>")
-    .lex unicode:"$\x{a2}", rx1062_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1062_eos, rx1062_tgt
-    set rx1062_off, 0
-    lt rx1062_pos, 2, rx1062_start
-    sub rx1062_off, rx1062_pos, 1
-    substr rx1062_tgt, rx1062_tgt, rx1062_off
-  rx1062_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1066_done
-    goto rxscan1066_scan
-  rxscan1066_loop:
-    ($P10) = rx1062_cur."from"()
-    inc $P10
-    set rx1062_pos, $P10
-    ge rx1062_pos, rx1062_eos, rxscan1066_done
-  rxscan1066_scan:
-    set_addr $I10, rxscan1066_loop
-    rx1062_cur."!mark_push"(0, rx1062_pos, $I10)
-  rxscan1066_done:
-.annotate "line", 486
+.sub "infix:sym<==>"  :subid("271_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1070_tgt
+    .local int rx1070_pos
+    .local int rx1070_off
+    .local int rx1070_eos
+    .local int rx1070_rep
+    .local pmc rx1070_cur
+    (rx1070_cur, rx1070_pos, rx1070_tgt) = self."!cursor_start"()
+    rx1070_cur."!cursor_debug"("START ", "infix:sym<==>")
+    .lex unicode:"$\x{a2}", rx1070_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1070_eos, rx1070_tgt
+    set rx1070_off, 0
+    lt rx1070_pos, 2, rx1070_start
+    sub rx1070_off, rx1070_pos, 1
+    substr rx1070_tgt, rx1070_tgt, rx1070_off
+  rx1070_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1074_done
+    goto rxscan1074_scan
+  rxscan1074_loop:
+    ($P10) = rx1070_cur."from"()
+    inc $P10
+    set rx1070_pos, $P10
+    ge rx1070_pos, rx1070_eos, rxscan1074_done
+  rxscan1074_scan:
+    set_addr $I10, rxscan1074_loop
+    rx1070_cur."!mark_push"(0, rx1070_pos, $I10)
+  rxscan1074_done:
+.annotate "line", 491
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1067_fail
-    rx1062_cur."!mark_push"(0, rx1062_pos, $I10)
+    set_addr $I10, rxcap_1075_fail
+    rx1070_cur."!mark_push"(0, rx1070_pos, $I10)
   # rx literal  "=="
-    add $I11, rx1062_pos, 2
-    gt $I11, rx1062_eos, rx1062_fail
-    sub $I11, rx1062_pos, rx1062_off
-    substr $S10, rx1062_tgt, $I11, 2
-    ne $S10, "==", rx1062_fail
-    add rx1062_pos, 2
-    set_addr $I10, rxcap_1067_fail
-    ($I12, $I11) = rx1062_cur."!mark_peek"($I10)
-    rx1062_cur."!cursor_pos"($I11)
-    ($P10) = rx1062_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1062_pos, "")
-    rx1062_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1070_pos, 2
+    gt $I11, rx1070_eos, rx1070_fail
+    sub $I11, rx1070_pos, rx1070_off
+    substr $S10, rx1070_tgt, $I11, 2
+    ne $S10, "==", rx1070_fail
+    add rx1070_pos, 2
+    set_addr $I10, rxcap_1075_fail
+    ($I12, $I11) = rx1070_cur."!mark_peek"($I10)
+    rx1070_cur."!cursor_pos"($I11)
+    ($P10) = rx1070_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1070_pos, "")
+    rx1070_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1067_done
-  rxcap_1067_fail:
-    goto rx1062_fail
-  rxcap_1067_done:
+    goto rxcap_1075_done
+  rxcap_1075_fail:
+    goto rx1070_fail
+  rxcap_1075_done:
   # rx subrule "O" subtype=capture negate=
-    rx1062_cur."!cursor_pos"(rx1062_pos)
-    $P10 = rx1062_cur."O"("%relational, :pirop<iseq INn>")
-    unless $P10, rx1062_fail
-    rx1062_cur."!mark_push"(0, -1, 0, $P10)
+    rx1070_cur."!cursor_pos"(rx1070_pos)
+    $P10 = rx1070_cur."O"("%relational, :pirop<iseq INn>")
+    unless $P10, rx1070_fail
+    rx1070_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1062_pos = $P10."pos"()
+    rx1070_pos = $P10."pos"()
   # rx pass
-    rx1062_cur."!cursor_pass"(rx1062_pos, "infix:sym<==>")
-    rx1062_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1062_pos)
-    .return (rx1062_cur)
-  rx1062_fail:
-.annotate "line", 417
-    (rx1062_rep, rx1062_pos, $I10, $P10) = rx1062_cur."!mark_fail"(0)
-    lt rx1062_pos, -1, rx1062_done
-    eq rx1062_pos, -1, rx1062_fail
-    jump $I10
-  rx1062_done:
-    rx1062_cur."!cursor_fail"()
-    rx1062_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
-    .return (rx1062_cur)
+    rx1070_cur."!cursor_pass"(rx1070_pos, "infix:sym<==>")
+    rx1070_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1070_pos)
+    .return (rx1070_cur)
+  rx1070_fail:
+.annotate "line", 422
+    (rx1070_rep, rx1070_pos, $I10, $P10) = rx1070_cur."!mark_fail"(0)
+    lt rx1070_pos, -1, rx1070_done
+    eq rx1070_pos, -1, rx1070_fail
+    jump $I10
+  rx1070_done:
+    rx1070_cur."!cursor_fail"()
+    rx1070_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
+    .return (rx1070_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<==>"  :subid("270_1267204702.05125") :method
-.annotate "line", 417
-    $P1064 = self."!PREFIX__!subrule"("O", "==")
-    new $P1065, "ResizablePMCArray"
-    push $P1065, $P1064
-    .return ($P1065)
+.sub "!PREFIX__infix:sym<==>"  :subid("272_1272816833.94956") :method
+.annotate "line", 422
+    $P1072 = self."!PREFIX__!subrule"("O", "==")
+    new $P1073, "ResizablePMCArray"
+    push $P1073, $P1072
+    .return ($P1073)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<!=>"  :subid("271_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1069_tgt
-    .local int rx1069_pos
-    .local int rx1069_off
-    .local int rx1069_eos
-    .local int rx1069_rep
-    .local pmc rx1069_cur
-    (rx1069_cur, rx1069_pos, rx1069_tgt) = self."!cursor_start"()
-    rx1069_cur."!cursor_debug"("START ", "infix:sym<!=>")
-    .lex unicode:"$\x{a2}", rx1069_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1069_eos, rx1069_tgt
-    set rx1069_off, 0
-    lt rx1069_pos, 2, rx1069_start
-    sub rx1069_off, rx1069_pos, 1
-    substr rx1069_tgt, rx1069_tgt, rx1069_off
-  rx1069_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1073_done
-    goto rxscan1073_scan
-  rxscan1073_loop:
-    ($P10) = rx1069_cur."from"()
-    inc $P10
-    set rx1069_pos, $P10
-    ge rx1069_pos, rx1069_eos, rxscan1073_done
-  rxscan1073_scan:
-    set_addr $I10, rxscan1073_loop
-    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
-  rxscan1073_done:
-.annotate "line", 487
+.sub "infix:sym<!=>"  :subid("273_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1077_tgt
+    .local int rx1077_pos
+    .local int rx1077_off
+    .local int rx1077_eos
+    .local int rx1077_rep
+    .local pmc rx1077_cur
+    (rx1077_cur, rx1077_pos, rx1077_tgt) = self."!cursor_start"()
+    rx1077_cur."!cursor_debug"("START ", "infix:sym<!=>")
+    .lex unicode:"$\x{a2}", rx1077_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1077_eos, rx1077_tgt
+    set rx1077_off, 0
+    lt rx1077_pos, 2, rx1077_start
+    sub rx1077_off, rx1077_pos, 1
+    substr rx1077_tgt, rx1077_tgt, rx1077_off
+  rx1077_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1081_done
+    goto rxscan1081_scan
+  rxscan1081_loop:
+    ($P10) = rx1077_cur."from"()
+    inc $P10
+    set rx1077_pos, $P10
+    ge rx1077_pos, rx1077_eos, rxscan1081_done
+  rxscan1081_scan:
+    set_addr $I10, rxscan1081_loop
+    rx1077_cur."!mark_push"(0, rx1077_pos, $I10)
+  rxscan1081_done:
+.annotate "line", 492
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1074_fail
-    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
+    set_addr $I10, rxcap_1082_fail
+    rx1077_cur."!mark_push"(0, rx1077_pos, $I10)
   # rx literal  "!="
-    add $I11, rx1069_pos, 2
-    gt $I11, rx1069_eos, rx1069_fail
-    sub $I11, rx1069_pos, rx1069_off
-    substr $S10, rx1069_tgt, $I11, 2
-    ne $S10, "!=", rx1069_fail
-    add rx1069_pos, 2
-    set_addr $I10, rxcap_1074_fail
-    ($I12, $I11) = rx1069_cur."!mark_peek"($I10)
-    rx1069_cur."!cursor_pos"($I11)
-    ($P10) = rx1069_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1069_pos, "")
-    rx1069_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1077_pos, 2
+    gt $I11, rx1077_eos, rx1077_fail
+    sub $I11, rx1077_pos, rx1077_off
+    substr $S10, rx1077_tgt, $I11, 2
+    ne $S10, "!=", rx1077_fail
+    add rx1077_pos, 2
+    set_addr $I10, rxcap_1082_fail
+    ($I12, $I11) = rx1077_cur."!mark_peek"($I10)
+    rx1077_cur."!cursor_pos"($I11)
+    ($P10) = rx1077_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1077_pos, "")
+    rx1077_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1074_done
-  rxcap_1074_fail:
-    goto rx1069_fail
-  rxcap_1074_done:
+    goto rxcap_1082_done
+  rxcap_1082_fail:
+    goto rx1077_fail
+  rxcap_1082_done:
   # rx subrule "O" subtype=capture negate=
-    rx1069_cur."!cursor_pos"(rx1069_pos)
-    $P10 = rx1069_cur."O"("%relational, :pirop<isne INn>")
-    unless $P10, rx1069_fail
-    rx1069_cur."!mark_push"(0, -1, 0, $P10)
+    rx1077_cur."!cursor_pos"(rx1077_pos)
+    $P10 = rx1077_cur."O"("%relational, :pirop<isne INn>")
+    unless $P10, rx1077_fail
+    rx1077_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1069_pos = $P10."pos"()
+    rx1077_pos = $P10."pos"()
   # rx pass
-    rx1069_cur."!cursor_pass"(rx1069_pos, "infix:sym<!=>")
-    rx1069_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1069_pos)
-    .return (rx1069_cur)
-  rx1069_fail:
-.annotate "line", 417
-    (rx1069_rep, rx1069_pos, $I10, $P10) = rx1069_cur."!mark_fail"(0)
-    lt rx1069_pos, -1, rx1069_done
-    eq rx1069_pos, -1, rx1069_fail
-    jump $I10
-  rx1069_done:
-    rx1069_cur."!cursor_fail"()
-    rx1069_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
-    .return (rx1069_cur)
+    rx1077_cur."!cursor_pass"(rx1077_pos, "infix:sym<!=>")
+    rx1077_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1077_pos)
+    .return (rx1077_cur)
+  rx1077_fail:
+.annotate "line", 422
+    (rx1077_rep, rx1077_pos, $I10, $P10) = rx1077_cur."!mark_fail"(0)
+    lt rx1077_pos, -1, rx1077_done
+    eq rx1077_pos, -1, rx1077_fail
+    jump $I10
+  rx1077_done:
+    rx1077_cur."!cursor_fail"()
+    rx1077_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
+    .return (rx1077_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<!=>"  :subid("272_1267204702.05125") :method
-.annotate "line", 417
-    $P1071 = self."!PREFIX__!subrule"("O", "!=")
-    new $P1072, "ResizablePMCArray"
-    push $P1072, $P1071
-    .return ($P1072)
+.sub "!PREFIX__infix:sym<!=>"  :subid("274_1272816833.94956") :method
+.annotate "line", 422
+    $P1079 = self."!PREFIX__!subrule"("O", "!=")
+    new $P1080, "ResizablePMCArray"
+    push $P1080, $P1079
+    .return ($P1080)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<=>"  :subid("273_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1076_tgt
-    .local int rx1076_pos
-    .local int rx1076_off
-    .local int rx1076_eos
-    .local int rx1076_rep
-    .local pmc rx1076_cur
-    (rx1076_cur, rx1076_pos, rx1076_tgt) = self."!cursor_start"()
-    rx1076_cur."!cursor_debug"("START ", "infix:sym<<=>")
-    .lex unicode:"$\x{a2}", rx1076_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1076_eos, rx1076_tgt
-    set rx1076_off, 0
-    lt rx1076_pos, 2, rx1076_start
-    sub rx1076_off, rx1076_pos, 1
-    substr rx1076_tgt, rx1076_tgt, rx1076_off
-  rx1076_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1080_done
-    goto rxscan1080_scan
-  rxscan1080_loop:
-    ($P10) = rx1076_cur."from"()
-    inc $P10
-    set rx1076_pos, $P10
-    ge rx1076_pos, rx1076_eos, rxscan1080_done
-  rxscan1080_scan:
-    set_addr $I10, rxscan1080_loop
-    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
-  rxscan1080_done:
-.annotate "line", 488
+.sub "infix:sym<<=>"  :subid("275_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1084_tgt
+    .local int rx1084_pos
+    .local int rx1084_off
+    .local int rx1084_eos
+    .local int rx1084_rep
+    .local pmc rx1084_cur
+    (rx1084_cur, rx1084_pos, rx1084_tgt) = self."!cursor_start"()
+    rx1084_cur."!cursor_debug"("START ", "infix:sym<<=>")
+    .lex unicode:"$\x{a2}", rx1084_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1084_eos, rx1084_tgt
+    set rx1084_off, 0
+    lt rx1084_pos, 2, rx1084_start
+    sub rx1084_off, rx1084_pos, 1
+    substr rx1084_tgt, rx1084_tgt, rx1084_off
+  rx1084_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1088_done
+    goto rxscan1088_scan
+  rxscan1088_loop:
+    ($P10) = rx1084_cur."from"()
+    inc $P10
+    set rx1084_pos, $P10
+    ge rx1084_pos, rx1084_eos, rxscan1088_done
+  rxscan1088_scan:
+    set_addr $I10, rxscan1088_loop
+    rx1084_cur."!mark_push"(0, rx1084_pos, $I10)
+  rxscan1088_done:
+.annotate "line", 493
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1081_fail
-    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
+    set_addr $I10, rxcap_1089_fail
+    rx1084_cur."!mark_push"(0, rx1084_pos, $I10)
   # rx literal  "<="
-    add $I11, rx1076_pos, 2
-    gt $I11, rx1076_eos, rx1076_fail
-    sub $I11, rx1076_pos, rx1076_off
-    substr $S10, rx1076_tgt, $I11, 2
-    ne $S10, "<=", rx1076_fail
-    add rx1076_pos, 2
-    set_addr $I10, rxcap_1081_fail
-    ($I12, $I11) = rx1076_cur."!mark_peek"($I10)
-    rx1076_cur."!cursor_pos"($I11)
-    ($P10) = rx1076_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1076_pos, "")
-    rx1076_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1084_pos, 2
+    gt $I11, rx1084_eos, rx1084_fail
+    sub $I11, rx1084_pos, rx1084_off
+    substr $S10, rx1084_tgt, $I11, 2
+    ne $S10, "<=", rx1084_fail
+    add rx1084_pos, 2
+    set_addr $I10, rxcap_1089_fail
+    ($I12, $I11) = rx1084_cur."!mark_peek"($I10)
+    rx1084_cur."!cursor_pos"($I11)
+    ($P10) = rx1084_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1084_pos, "")
+    rx1084_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1081_done
-  rxcap_1081_fail:
-    goto rx1076_fail
-  rxcap_1081_done:
+    goto rxcap_1089_done
+  rxcap_1089_fail:
+    goto rx1084_fail
+  rxcap_1089_done:
   # rx subrule "O" subtype=capture negate=
-    rx1076_cur."!cursor_pos"(rx1076_pos)
-    $P10 = rx1076_cur."O"("%relational, :pirop<isle INn>")
-    unless $P10, rx1076_fail
-    rx1076_cur."!mark_push"(0, -1, 0, $P10)
+    rx1084_cur."!cursor_pos"(rx1084_pos)
+    $P10 = rx1084_cur."O"("%relational, :pirop<isle INn>")
+    unless $P10, rx1084_fail
+    rx1084_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1076_pos = $P10."pos"()
+    rx1084_pos = $P10."pos"()
   # rx pass
-    rx1076_cur."!cursor_pass"(rx1076_pos, "infix:sym<<=>")
-    rx1076_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1076_pos)
-    .return (rx1076_cur)
-  rx1076_fail:
-.annotate "line", 417
-    (rx1076_rep, rx1076_pos, $I10, $P10) = rx1076_cur."!mark_fail"(0)
-    lt rx1076_pos, -1, rx1076_done
-    eq rx1076_pos, -1, rx1076_fail
-    jump $I10
-  rx1076_done:
-    rx1076_cur."!cursor_fail"()
-    rx1076_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
-    .return (rx1076_cur)
+    rx1084_cur."!cursor_pass"(rx1084_pos, "infix:sym<<=>")
+    rx1084_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1084_pos)
+    .return (rx1084_cur)
+  rx1084_fail:
+.annotate "line", 422
+    (rx1084_rep, rx1084_pos, $I10, $P10) = rx1084_cur."!mark_fail"(0)
+    lt rx1084_pos, -1, rx1084_done
+    eq rx1084_pos, -1, rx1084_fail
+    jump $I10
+  rx1084_done:
+    rx1084_cur."!cursor_fail"()
+    rx1084_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
+    .return (rx1084_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<=>"  :subid("274_1267204702.05125") :method
-.annotate "line", 417
-    $P1078 = self."!PREFIX__!subrule"("O", "<=")
-    new $P1079, "ResizablePMCArray"
-    push $P1079, $P1078
-    .return ($P1079)
+.sub "!PREFIX__infix:sym<<=>"  :subid("276_1272816833.94956") :method
+.annotate "line", 422
+    $P1086 = self."!PREFIX__!subrule"("O", "<=")
+    new $P1087, "ResizablePMCArray"
+    push $P1087, $P1086
+    .return ($P1087)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>=>"  :subid("275_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1083_tgt
-    .local int rx1083_pos
-    .local int rx1083_off
-    .local int rx1083_eos
-    .local int rx1083_rep
-    .local pmc rx1083_cur
-    (rx1083_cur, rx1083_pos, rx1083_tgt) = self."!cursor_start"()
-    rx1083_cur."!cursor_debug"("START ", "infix:sym<>=>")
-    .lex unicode:"$\x{a2}", rx1083_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1083_eos, rx1083_tgt
-    set rx1083_off, 0
-    lt rx1083_pos, 2, rx1083_start
-    sub rx1083_off, rx1083_pos, 1
-    substr rx1083_tgt, rx1083_tgt, rx1083_off
-  rx1083_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1087_done
-    goto rxscan1087_scan
-  rxscan1087_loop:
-    ($P10) = rx1083_cur."from"()
-    inc $P10
-    set rx1083_pos, $P10
-    ge rx1083_pos, rx1083_eos, rxscan1087_done
-  rxscan1087_scan:
-    set_addr $I10, rxscan1087_loop
-    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
-  rxscan1087_done:
-.annotate "line", 489
+.sub "infix:sym<>=>"  :subid("277_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1091_tgt
+    .local int rx1091_pos
+    .local int rx1091_off
+    .local int rx1091_eos
+    .local int rx1091_rep
+    .local pmc rx1091_cur
+    (rx1091_cur, rx1091_pos, rx1091_tgt) = self."!cursor_start"()
+    rx1091_cur."!cursor_debug"("START ", "infix:sym<>=>")
+    .lex unicode:"$\x{a2}", rx1091_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1091_eos, rx1091_tgt
+    set rx1091_off, 0
+    lt rx1091_pos, 2, rx1091_start
+    sub rx1091_off, rx1091_pos, 1
+    substr rx1091_tgt, rx1091_tgt, rx1091_off
+  rx1091_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1095_done
+    goto rxscan1095_scan
+  rxscan1095_loop:
+    ($P10) = rx1091_cur."from"()
+    inc $P10
+    set rx1091_pos, $P10
+    ge rx1091_pos, rx1091_eos, rxscan1095_done
+  rxscan1095_scan:
+    set_addr $I10, rxscan1095_loop
+    rx1091_cur."!mark_push"(0, rx1091_pos, $I10)
+  rxscan1095_done:
+.annotate "line", 494
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1088_fail
-    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
+    set_addr $I10, rxcap_1096_fail
+    rx1091_cur."!mark_push"(0, rx1091_pos, $I10)
   # rx literal  ">="
-    add $I11, rx1083_pos, 2
-    gt $I11, rx1083_eos, rx1083_fail
-    sub $I11, rx1083_pos, rx1083_off
-    substr $S10, rx1083_tgt, $I11, 2
-    ne $S10, ">=", rx1083_fail
-    add rx1083_pos, 2
-    set_addr $I10, rxcap_1088_fail
-    ($I12, $I11) = rx1083_cur."!mark_peek"($I10)
-    rx1083_cur."!cursor_pos"($I11)
-    ($P10) = rx1083_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1083_pos, "")
-    rx1083_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1091_pos, 2
+    gt $I11, rx1091_eos, rx1091_fail
+    sub $I11, rx1091_pos, rx1091_off
+    substr $S10, rx1091_tgt, $I11, 2
+    ne $S10, ">=", rx1091_fail
+    add rx1091_pos, 2
+    set_addr $I10, rxcap_1096_fail
+    ($I12, $I11) = rx1091_cur."!mark_peek"($I10)
+    rx1091_cur."!cursor_pos"($I11)
+    ($P10) = rx1091_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1091_pos, "")
+    rx1091_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1088_done
-  rxcap_1088_fail:
-    goto rx1083_fail
-  rxcap_1088_done:
+    goto rxcap_1096_done
+  rxcap_1096_fail:
+    goto rx1091_fail
+  rxcap_1096_done:
   # rx subrule "O" subtype=capture negate=
-    rx1083_cur."!cursor_pos"(rx1083_pos)
-    $P10 = rx1083_cur."O"("%relational, :pirop<isge INn>")
-    unless $P10, rx1083_fail
-    rx1083_cur."!mark_push"(0, -1, 0, $P10)
+    rx1091_cur."!cursor_pos"(rx1091_pos)
+    $P10 = rx1091_cur."O"("%relational, :pirop<isge INn>")
+    unless $P10, rx1091_fail
+    rx1091_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1083_pos = $P10."pos"()
+    rx1091_pos = $P10."pos"()
   # rx pass
-    rx1083_cur."!cursor_pass"(rx1083_pos, "infix:sym<>=>")
-    rx1083_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1083_pos)
-    .return (rx1083_cur)
-  rx1083_fail:
-.annotate "line", 417
-    (rx1083_rep, rx1083_pos, $I10, $P10) = rx1083_cur."!mark_fail"(0)
-    lt rx1083_pos, -1, rx1083_done
-    eq rx1083_pos, -1, rx1083_fail
-    jump $I10
-  rx1083_done:
-    rx1083_cur."!cursor_fail"()
-    rx1083_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
-    .return (rx1083_cur)
+    rx1091_cur."!cursor_pass"(rx1091_pos, "infix:sym<>=>")
+    rx1091_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1091_pos)
+    .return (rx1091_cur)
+  rx1091_fail:
+.annotate "line", 422
+    (rx1091_rep, rx1091_pos, $I10, $P10) = rx1091_cur."!mark_fail"(0)
+    lt rx1091_pos, -1, rx1091_done
+    eq rx1091_pos, -1, rx1091_fail
+    jump $I10
+  rx1091_done:
+    rx1091_cur."!cursor_fail"()
+    rx1091_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
+    .return (rx1091_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>=>"  :subid("276_1267204702.05125") :method
-.annotate "line", 417
-    $P1085 = self."!PREFIX__!subrule"("O", ">=")
-    new $P1086, "ResizablePMCArray"
-    push $P1086, $P1085
-    .return ($P1086)
+.sub "!PREFIX__infix:sym<>=>"  :subid("278_1272816833.94956") :method
+.annotate "line", 422
+    $P1093 = self."!PREFIX__!subrule"("O", ">=")
+    new $P1094, "ResizablePMCArray"
+    push $P1094, $P1093
+    .return ($P1094)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<>"  :subid("277_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1090_tgt
-    .local int rx1090_pos
-    .local int rx1090_off
-    .local int rx1090_eos
-    .local int rx1090_rep
-    .local pmc rx1090_cur
-    (rx1090_cur, rx1090_pos, rx1090_tgt) = self."!cursor_start"()
-    rx1090_cur."!cursor_debug"("START ", "infix:sym<<>")
-    .lex unicode:"$\x{a2}", rx1090_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1090_eos, rx1090_tgt
-    set rx1090_off, 0
-    lt rx1090_pos, 2, rx1090_start
-    sub rx1090_off, rx1090_pos, 1
-    substr rx1090_tgt, rx1090_tgt, rx1090_off
-  rx1090_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1094_done
-    goto rxscan1094_scan
-  rxscan1094_loop:
-    ($P10) = rx1090_cur."from"()
-    inc $P10
-    set rx1090_pos, $P10
-    ge rx1090_pos, rx1090_eos, rxscan1094_done
-  rxscan1094_scan:
-    set_addr $I10, rxscan1094_loop
-    rx1090_cur."!mark_push"(0, rx1090_pos, $I10)
-  rxscan1094_done:
-.annotate "line", 490
+.sub "infix:sym<<>"  :subid("279_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1098_tgt
+    .local int rx1098_pos
+    .local int rx1098_off
+    .local int rx1098_eos
+    .local int rx1098_rep
+    .local pmc rx1098_cur
+    (rx1098_cur, rx1098_pos, rx1098_tgt) = self."!cursor_start"()
+    rx1098_cur."!cursor_debug"("START ", "infix:sym<<>")
+    .lex unicode:"$\x{a2}", rx1098_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1098_eos, rx1098_tgt
+    set rx1098_off, 0
+    lt rx1098_pos, 2, rx1098_start
+    sub rx1098_off, rx1098_pos, 1
+    substr rx1098_tgt, rx1098_tgt, rx1098_off
+  rx1098_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1102_done
+    goto rxscan1102_scan
+  rxscan1102_loop:
+    ($P10) = rx1098_cur."from"()
+    inc $P10
+    set rx1098_pos, $P10
+    ge rx1098_pos, rx1098_eos, rxscan1102_done
+  rxscan1102_scan:
+    set_addr $I10, rxscan1102_loop
+    rx1098_cur."!mark_push"(0, rx1098_pos, $I10)
+  rxscan1102_done:
+.annotate "line", 495
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1095_fail
-    rx1090_cur."!mark_push"(0, rx1090_pos, $I10)
+    set_addr $I10, rxcap_1103_fail
+    rx1098_cur."!mark_push"(0, rx1098_pos, $I10)
   # rx literal  "<"
-    add $I11, rx1090_pos, 1
-    gt $I11, rx1090_eos, rx1090_fail
-    sub $I11, rx1090_pos, rx1090_off
-    substr $S10, rx1090_tgt, $I11, 1
-    ne $S10, "<", rx1090_fail
-    add rx1090_pos, 1
-    set_addr $I10, rxcap_1095_fail
-    ($I12, $I11) = rx1090_cur."!mark_peek"($I10)
-    rx1090_cur."!cursor_pos"($I11)
-    ($P10) = rx1090_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1090_pos, "")
-    rx1090_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1098_pos, 1
+    gt $I11, rx1098_eos, rx1098_fail
+    sub $I11, rx1098_pos, rx1098_off
+    substr $S10, rx1098_tgt, $I11, 1
+    ne $S10, "<", rx1098_fail
+    add rx1098_pos, 1
+    set_addr $I10, rxcap_1103_fail
+    ($I12, $I11) = rx1098_cur."!mark_peek"($I10)
+    rx1098_cur."!cursor_pos"($I11)
+    ($P10) = rx1098_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1098_pos, "")
+    rx1098_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1095_done
-  rxcap_1095_fail:
-    goto rx1090_fail
-  rxcap_1095_done:
+    goto rxcap_1103_done
+  rxcap_1103_fail:
+    goto rx1098_fail
+  rxcap_1103_done:
   # rx subrule "O" subtype=capture negate=
-    rx1090_cur."!cursor_pos"(rx1090_pos)
-    $P10 = rx1090_cur."O"("%relational, :pirop<islt INn>")
-    unless $P10, rx1090_fail
-    rx1090_cur."!mark_push"(0, -1, 0, $P10)
+    rx1098_cur."!cursor_pos"(rx1098_pos)
+    $P10 = rx1098_cur."O"("%relational, :pirop<islt INn>")
+    unless $P10, rx1098_fail
+    rx1098_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1090_pos = $P10."pos"()
+    rx1098_pos = $P10."pos"()
   # rx pass
-    rx1090_cur."!cursor_pass"(rx1090_pos, "infix:sym<<>")
-    rx1090_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1090_pos)
-    .return (rx1090_cur)
-  rx1090_fail:
-.annotate "line", 417
-    (rx1090_rep, rx1090_pos, $I10, $P10) = rx1090_cur."!mark_fail"(0)
-    lt rx1090_pos, -1, rx1090_done
-    eq rx1090_pos, -1, rx1090_fail
-    jump $I10
-  rx1090_done:
-    rx1090_cur."!cursor_fail"()
-    rx1090_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
-    .return (rx1090_cur)
+    rx1098_cur."!cursor_pass"(rx1098_pos, "infix:sym<<>")
+    rx1098_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1098_pos)
+    .return (rx1098_cur)
+  rx1098_fail:
+.annotate "line", 422
+    (rx1098_rep, rx1098_pos, $I10, $P10) = rx1098_cur."!mark_fail"(0)
+    lt rx1098_pos, -1, rx1098_done
+    eq rx1098_pos, -1, rx1098_fail
+    jump $I10
+  rx1098_done:
+    rx1098_cur."!cursor_fail"()
+    rx1098_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
+    .return (rx1098_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<>"  :subid("278_1267204702.05125") :method
-.annotate "line", 417
-    $P1092 = self."!PREFIX__!subrule"("O", "<")
-    new $P1093, "ResizablePMCArray"
-    push $P1093, $P1092
-    .return ($P1093)
+.sub "!PREFIX__infix:sym<<>"  :subid("280_1272816833.94956") :method
+.annotate "line", 422
+    $P1100 = self."!PREFIX__!subrule"("O", "<")
+    new $P1101, "ResizablePMCArray"
+    push $P1101, $P1100
+    .return ($P1101)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>>"  :subid("279_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1097_tgt
-    .local int rx1097_pos
-    .local int rx1097_off
-    .local int rx1097_eos
-    .local int rx1097_rep
-    .local pmc rx1097_cur
-    (rx1097_cur, rx1097_pos, rx1097_tgt) = self."!cursor_start"()
-    rx1097_cur."!cursor_debug"("START ", "infix:sym<>>")
-    .lex unicode:"$\x{a2}", rx1097_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1097_eos, rx1097_tgt
-    set rx1097_off, 0
-    lt rx1097_pos, 2, rx1097_start
-    sub rx1097_off, rx1097_pos, 1
-    substr rx1097_tgt, rx1097_tgt, rx1097_off
-  rx1097_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1101_done
-    goto rxscan1101_scan
-  rxscan1101_loop:
-    ($P10) = rx1097_cur."from"()
-    inc $P10
-    set rx1097_pos, $P10
-    ge rx1097_pos, rx1097_eos, rxscan1101_done
-  rxscan1101_scan:
-    set_addr $I10, rxscan1101_loop
-    rx1097_cur."!mark_push"(0, rx1097_pos, $I10)
-  rxscan1101_done:
-.annotate "line", 491
+.sub "infix:sym<>>"  :subid("281_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1105_tgt
+    .local int rx1105_pos
+    .local int rx1105_off
+    .local int rx1105_eos
+    .local int rx1105_rep
+    .local pmc rx1105_cur
+    (rx1105_cur, rx1105_pos, rx1105_tgt) = self."!cursor_start"()
+    rx1105_cur."!cursor_debug"("START ", "infix:sym<>>")
+    .lex unicode:"$\x{a2}", rx1105_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1105_eos, rx1105_tgt
+    set rx1105_off, 0
+    lt rx1105_pos, 2, rx1105_start
+    sub rx1105_off, rx1105_pos, 1
+    substr rx1105_tgt, rx1105_tgt, rx1105_off
+  rx1105_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1109_done
+    goto rxscan1109_scan
+  rxscan1109_loop:
+    ($P10) = rx1105_cur."from"()
+    inc $P10
+    set rx1105_pos, $P10
+    ge rx1105_pos, rx1105_eos, rxscan1109_done
+  rxscan1109_scan:
+    set_addr $I10, rxscan1109_loop
+    rx1105_cur."!mark_push"(0, rx1105_pos, $I10)
+  rxscan1109_done:
+.annotate "line", 496
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1102_fail
-    rx1097_cur."!mark_push"(0, rx1097_pos, $I10)
+    set_addr $I10, rxcap_1110_fail
+    rx1105_cur."!mark_push"(0, rx1105_pos, $I10)
   # rx literal  ">"
-    add $I11, rx1097_pos, 1
-    gt $I11, rx1097_eos, rx1097_fail
-    sub $I11, rx1097_pos, rx1097_off
-    substr $S10, rx1097_tgt, $I11, 1
-    ne $S10, ">", rx1097_fail
-    add rx1097_pos, 1
-    set_addr $I10, rxcap_1102_fail
-    ($I12, $I11) = rx1097_cur."!mark_peek"($I10)
-    rx1097_cur."!cursor_pos"($I11)
-    ($P10) = rx1097_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1097_pos, "")
-    rx1097_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1105_pos, 1
+    gt $I11, rx1105_eos, rx1105_fail
+    sub $I11, rx1105_pos, rx1105_off
+    substr $S10, rx1105_tgt, $I11, 1
+    ne $S10, ">", rx1105_fail
+    add rx1105_pos, 1
+    set_addr $I10, rxcap_1110_fail
+    ($I12, $I11) = rx1105_cur."!mark_peek"($I10)
+    rx1105_cur."!cursor_pos"($I11)
+    ($P10) = rx1105_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1105_pos, "")
+    rx1105_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1102_done
-  rxcap_1102_fail:
-    goto rx1097_fail
-  rxcap_1102_done:
+    goto rxcap_1110_done
+  rxcap_1110_fail:
+    goto rx1105_fail
+  rxcap_1110_done:
   # rx subrule "O" subtype=capture negate=
-    rx1097_cur."!cursor_pos"(rx1097_pos)
-    $P10 = rx1097_cur."O"("%relational, :pirop<isgt INn>")
-    unless $P10, rx1097_fail
-    rx1097_cur."!mark_push"(0, -1, 0, $P10)
+    rx1105_cur."!cursor_pos"(rx1105_pos)
+    $P10 = rx1105_cur."O"("%relational, :pirop<isgt INn>")
+    unless $P10, rx1105_fail
+    rx1105_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1097_pos = $P10."pos"()
+    rx1105_pos = $P10."pos"()
   # rx pass
-    rx1097_cur."!cursor_pass"(rx1097_pos, "infix:sym<>>")
-    rx1097_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1097_pos)
-    .return (rx1097_cur)
-  rx1097_fail:
-.annotate "line", 417
-    (rx1097_rep, rx1097_pos, $I10, $P10) = rx1097_cur."!mark_fail"(0)
-    lt rx1097_pos, -1, rx1097_done
-    eq rx1097_pos, -1, rx1097_fail
-    jump $I10
-  rx1097_done:
-    rx1097_cur."!cursor_fail"()
-    rx1097_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
-    .return (rx1097_cur)
+    rx1105_cur."!cursor_pass"(rx1105_pos, "infix:sym<>>")
+    rx1105_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1105_pos)
+    .return (rx1105_cur)
+  rx1105_fail:
+.annotate "line", 422
+    (rx1105_rep, rx1105_pos, $I10, $P10) = rx1105_cur."!mark_fail"(0)
+    lt rx1105_pos, -1, rx1105_done
+    eq rx1105_pos, -1, rx1105_fail
+    jump $I10
+  rx1105_done:
+    rx1105_cur."!cursor_fail"()
+    rx1105_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
+    .return (rx1105_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>>"  :subid("280_1267204702.05125") :method
-.annotate "line", 417
-    $P1099 = self."!PREFIX__!subrule"("O", ">")
-    new $P1100, "ResizablePMCArray"
-    push $P1100, $P1099
-    .return ($P1100)
+.sub "!PREFIX__infix:sym<>>"  :subid("282_1272816833.94956") :method
+.annotate "line", 422
+    $P1107 = self."!PREFIX__!subrule"("O", ">")
+    new $P1108, "ResizablePMCArray"
+    push $P1108, $P1107
+    .return ($P1108)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<eq>"  :subid("281_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1104_tgt
-    .local int rx1104_pos
-    .local int rx1104_off
-    .local int rx1104_eos
-    .local int rx1104_rep
-    .local pmc rx1104_cur
-    (rx1104_cur, rx1104_pos, rx1104_tgt) = self."!cursor_start"()
-    rx1104_cur."!cursor_debug"("START ", "infix:sym<eq>")
-    .lex unicode:"$\x{a2}", rx1104_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1104_eos, rx1104_tgt
-    set rx1104_off, 0
-    lt rx1104_pos, 2, rx1104_start
-    sub rx1104_off, rx1104_pos, 1
-    substr rx1104_tgt, rx1104_tgt, rx1104_off
-  rx1104_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1108_done
-    goto rxscan1108_scan
-  rxscan1108_loop:
-    ($P10) = rx1104_cur."from"()
-    inc $P10
-    set rx1104_pos, $P10
-    ge rx1104_pos, rx1104_eos, rxscan1108_done
-  rxscan1108_scan:
-    set_addr $I10, rxscan1108_loop
-    rx1104_cur."!mark_push"(0, rx1104_pos, $I10)
-  rxscan1108_done:
-.annotate "line", 492
+.sub "infix:sym<eq>"  :subid("283_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1112_tgt
+    .local int rx1112_pos
+    .local int rx1112_off
+    .local int rx1112_eos
+    .local int rx1112_rep
+    .local pmc rx1112_cur
+    (rx1112_cur, rx1112_pos, rx1112_tgt) = self."!cursor_start"()
+    rx1112_cur."!cursor_debug"("START ", "infix:sym<eq>")
+    .lex unicode:"$\x{a2}", rx1112_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1112_eos, rx1112_tgt
+    set rx1112_off, 0
+    lt rx1112_pos, 2, rx1112_start
+    sub rx1112_off, rx1112_pos, 1
+    substr rx1112_tgt, rx1112_tgt, rx1112_off
+  rx1112_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1116_done
+    goto rxscan1116_scan
+  rxscan1116_loop:
+    ($P10) = rx1112_cur."from"()
+    inc $P10
+    set rx1112_pos, $P10
+    ge rx1112_pos, rx1112_eos, rxscan1116_done
+  rxscan1116_scan:
+    set_addr $I10, rxscan1116_loop
+    rx1112_cur."!mark_push"(0, rx1112_pos, $I10)
+  rxscan1116_done:
+.annotate "line", 497
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1109_fail
-    rx1104_cur."!mark_push"(0, rx1104_pos, $I10)
+    set_addr $I10, rxcap_1117_fail
+    rx1112_cur."!mark_push"(0, rx1112_pos, $I10)
   # rx literal  "eq"
-    add $I11, rx1104_pos, 2
-    gt $I11, rx1104_eos, rx1104_fail
-    sub $I11, rx1104_pos, rx1104_off
-    substr $S10, rx1104_tgt, $I11, 2
-    ne $S10, "eq", rx1104_fail
-    add rx1104_pos, 2
-    set_addr $I10, rxcap_1109_fail
-    ($I12, $I11) = rx1104_cur."!mark_peek"($I10)
-    rx1104_cur."!cursor_pos"($I11)
-    ($P10) = rx1104_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1104_pos, "")
-    rx1104_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1112_pos, 2
+    gt $I11, rx1112_eos, rx1112_fail
+    sub $I11, rx1112_pos, rx1112_off
+    substr $S10, rx1112_tgt, $I11, 2
+    ne $S10, "eq", rx1112_fail
+    add rx1112_pos, 2
+    set_addr $I10, rxcap_1117_fail
+    ($I12, $I11) = rx1112_cur."!mark_peek"($I10)
+    rx1112_cur."!cursor_pos"($I11)
+    ($P10) = rx1112_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1112_pos, "")
+    rx1112_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1109_done
-  rxcap_1109_fail:
-    goto rx1104_fail
-  rxcap_1109_done:
+    goto rxcap_1117_done
+  rxcap_1117_fail:
+    goto rx1112_fail
+  rxcap_1117_done:
   # rx subrule "O" subtype=capture negate=
-    rx1104_cur."!cursor_pos"(rx1104_pos)
-    $P10 = rx1104_cur."O"("%relational, :pirop<iseq ISs>")
-    unless $P10, rx1104_fail
-    rx1104_cur."!mark_push"(0, -1, 0, $P10)
+    rx1112_cur."!cursor_pos"(rx1112_pos)
+    $P10 = rx1112_cur."O"("%relational, :pirop<iseq ISs>")
+    unless $P10, rx1112_fail
+    rx1112_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1104_pos = $P10."pos"()
+    rx1112_pos = $P10."pos"()
   # rx pass
-    rx1104_cur."!cursor_pass"(rx1104_pos, "infix:sym<eq>")
-    rx1104_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1104_pos)
-    .return (rx1104_cur)
-  rx1104_fail:
-.annotate "line", 417
-    (rx1104_rep, rx1104_pos, $I10, $P10) = rx1104_cur."!mark_fail"(0)
-    lt rx1104_pos, -1, rx1104_done
-    eq rx1104_pos, -1, rx1104_fail
-    jump $I10
-  rx1104_done:
-    rx1104_cur."!cursor_fail"()
-    rx1104_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
-    .return (rx1104_cur)
+    rx1112_cur."!cursor_pass"(rx1112_pos, "infix:sym<eq>")
+    rx1112_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1112_pos)
+    .return (rx1112_cur)
+  rx1112_fail:
+.annotate "line", 422
+    (rx1112_rep, rx1112_pos, $I10, $P10) = rx1112_cur."!mark_fail"(0)
+    lt rx1112_pos, -1, rx1112_done
+    eq rx1112_pos, -1, rx1112_fail
+    jump $I10
+  rx1112_done:
+    rx1112_cur."!cursor_fail"()
+    rx1112_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
+    .return (rx1112_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<eq>"  :subid("282_1267204702.05125") :method
-.annotate "line", 417
-    $P1106 = self."!PREFIX__!subrule"("O", "eq")
-    new $P1107, "ResizablePMCArray"
-    push $P1107, $P1106
-    .return ($P1107)
+.sub "!PREFIX__infix:sym<eq>"  :subid("284_1272816833.94956") :method
+.annotate "line", 422
+    $P1114 = self."!PREFIX__!subrule"("O", "eq")
+    new $P1115, "ResizablePMCArray"
+    push $P1115, $P1114
+    .return ($P1115)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ne>"  :subid("283_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1111_tgt
-    .local int rx1111_pos
-    .local int rx1111_off
-    .local int rx1111_eos
-    .local int rx1111_rep
-    .local pmc rx1111_cur
-    (rx1111_cur, rx1111_pos, rx1111_tgt) = self."!cursor_start"()
-    rx1111_cur."!cursor_debug"("START ", "infix:sym<ne>")
-    .lex unicode:"$\x{a2}", rx1111_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1111_eos, rx1111_tgt
-    set rx1111_off, 0
-    lt rx1111_pos, 2, rx1111_start
-    sub rx1111_off, rx1111_pos, 1
-    substr rx1111_tgt, rx1111_tgt, rx1111_off
-  rx1111_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1115_done
-    goto rxscan1115_scan
-  rxscan1115_loop:
-    ($P10) = rx1111_cur."from"()
-    inc $P10
-    set rx1111_pos, $P10
-    ge rx1111_pos, rx1111_eos, rxscan1115_done
-  rxscan1115_scan:
-    set_addr $I10, rxscan1115_loop
-    rx1111_cur."!mark_push"(0, rx1111_pos, $I10)
-  rxscan1115_done:
-.annotate "line", 493
+.sub "infix:sym<ne>"  :subid("285_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1119_tgt
+    .local int rx1119_pos
+    .local int rx1119_off
+    .local int rx1119_eos
+    .local int rx1119_rep
+    .local pmc rx1119_cur
+    (rx1119_cur, rx1119_pos, rx1119_tgt) = self."!cursor_start"()
+    rx1119_cur."!cursor_debug"("START ", "infix:sym<ne>")
+    .lex unicode:"$\x{a2}", rx1119_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1119_eos, rx1119_tgt
+    set rx1119_off, 0
+    lt rx1119_pos, 2, rx1119_start
+    sub rx1119_off, rx1119_pos, 1
+    substr rx1119_tgt, rx1119_tgt, rx1119_off
+  rx1119_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1123_done
+    goto rxscan1123_scan
+  rxscan1123_loop:
+    ($P10) = rx1119_cur."from"()
+    inc $P10
+    set rx1119_pos, $P10
+    ge rx1119_pos, rx1119_eos, rxscan1123_done
+  rxscan1123_scan:
+    set_addr $I10, rxscan1123_loop
+    rx1119_cur."!mark_push"(0, rx1119_pos, $I10)
+  rxscan1123_done:
+.annotate "line", 498
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1116_fail
-    rx1111_cur."!mark_push"(0, rx1111_pos, $I10)
+    set_addr $I10, rxcap_1124_fail
+    rx1119_cur."!mark_push"(0, rx1119_pos, $I10)
   # rx literal  "ne"
-    add $I11, rx1111_pos, 2
-    gt $I11, rx1111_eos, rx1111_fail
-    sub $I11, rx1111_pos, rx1111_off
-    substr $S10, rx1111_tgt, $I11, 2
-    ne $S10, "ne", rx1111_fail
-    add rx1111_pos, 2
-    set_addr $I10, rxcap_1116_fail
-    ($I12, $I11) = rx1111_cur."!mark_peek"($I10)
-    rx1111_cur."!cursor_pos"($I11)
-    ($P10) = rx1111_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1111_pos, "")
-    rx1111_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1119_pos, 2
+    gt $I11, rx1119_eos, rx1119_fail
+    sub $I11, rx1119_pos, rx1119_off
+    substr $S10, rx1119_tgt, $I11, 2
+    ne $S10, "ne", rx1119_fail
+    add rx1119_pos, 2
+    set_addr $I10, rxcap_1124_fail
+    ($I12, $I11) = rx1119_cur."!mark_peek"($I10)
+    rx1119_cur."!cursor_pos"($I11)
+    ($P10) = rx1119_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1119_pos, "")
+    rx1119_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1116_done
-  rxcap_1116_fail:
-    goto rx1111_fail
-  rxcap_1116_done:
+    goto rxcap_1124_done
+  rxcap_1124_fail:
+    goto rx1119_fail
+  rxcap_1124_done:
   # rx subrule "O" subtype=capture negate=
-    rx1111_cur."!cursor_pos"(rx1111_pos)
-    $P10 = rx1111_cur."O"("%relational, :pirop<isne ISs>")
-    unless $P10, rx1111_fail
-    rx1111_cur."!mark_push"(0, -1, 0, $P10)
+    rx1119_cur."!cursor_pos"(rx1119_pos)
+    $P10 = rx1119_cur."O"("%relational, :pirop<isne ISs>")
+    unless $P10, rx1119_fail
+    rx1119_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1111_pos = $P10."pos"()
+    rx1119_pos = $P10."pos"()
   # rx pass
-    rx1111_cur."!cursor_pass"(rx1111_pos, "infix:sym<ne>")
-    rx1111_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1111_pos)
-    .return (rx1111_cur)
-  rx1111_fail:
-.annotate "line", 417
-    (rx1111_rep, rx1111_pos, $I10, $P10) = rx1111_cur."!mark_fail"(0)
-    lt rx1111_pos, -1, rx1111_done
-    eq rx1111_pos, -1, rx1111_fail
-    jump $I10
-  rx1111_done:
-    rx1111_cur."!cursor_fail"()
-    rx1111_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
-    .return (rx1111_cur)
+    rx1119_cur."!cursor_pass"(rx1119_pos, "infix:sym<ne>")
+    rx1119_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1119_pos)
+    .return (rx1119_cur)
+  rx1119_fail:
+.annotate "line", 422
+    (rx1119_rep, rx1119_pos, $I10, $P10) = rx1119_cur."!mark_fail"(0)
+    lt rx1119_pos, -1, rx1119_done
+    eq rx1119_pos, -1, rx1119_fail
+    jump $I10
+  rx1119_done:
+    rx1119_cur."!cursor_fail"()
+    rx1119_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
+    .return (rx1119_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ne>"  :subid("284_1267204702.05125") :method
-.annotate "line", 417
-    $P1113 = self."!PREFIX__!subrule"("O", "ne")
-    new $P1114, "ResizablePMCArray"
-    push $P1114, $P1113
-    .return ($P1114)
+.sub "!PREFIX__infix:sym<ne>"  :subid("286_1272816833.94956") :method
+.annotate "line", 422
+    $P1121 = self."!PREFIX__!subrule"("O", "ne")
+    new $P1122, "ResizablePMCArray"
+    push $P1122, $P1121
+    .return ($P1122)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<le>"  :subid("285_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1118_tgt
-    .local int rx1118_pos
-    .local int rx1118_off
-    .local int rx1118_eos
-    .local int rx1118_rep
-    .local pmc rx1118_cur
-    (rx1118_cur, rx1118_pos, rx1118_tgt) = self."!cursor_start"()
-    rx1118_cur."!cursor_debug"("START ", "infix:sym<le>")
-    .lex unicode:"$\x{a2}", rx1118_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1118_eos, rx1118_tgt
-    set rx1118_off, 0
-    lt rx1118_pos, 2, rx1118_start
-    sub rx1118_off, rx1118_pos, 1
-    substr rx1118_tgt, rx1118_tgt, rx1118_off
-  rx1118_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1122_done
-    goto rxscan1122_scan
-  rxscan1122_loop:
-    ($P10) = rx1118_cur."from"()
-    inc $P10
-    set rx1118_pos, $P10
-    ge rx1118_pos, rx1118_eos, rxscan1122_done
-  rxscan1122_scan:
-    set_addr $I10, rxscan1122_loop
-    rx1118_cur."!mark_push"(0, rx1118_pos, $I10)
-  rxscan1122_done:
-.annotate "line", 494
+.sub "infix:sym<le>"  :subid("287_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1126_tgt
+    .local int rx1126_pos
+    .local int rx1126_off
+    .local int rx1126_eos
+    .local int rx1126_rep
+    .local pmc rx1126_cur
+    (rx1126_cur, rx1126_pos, rx1126_tgt) = self."!cursor_start"()
+    rx1126_cur."!cursor_debug"("START ", "infix:sym<le>")
+    .lex unicode:"$\x{a2}", rx1126_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1126_eos, rx1126_tgt
+    set rx1126_off, 0
+    lt rx1126_pos, 2, rx1126_start
+    sub rx1126_off, rx1126_pos, 1
+    substr rx1126_tgt, rx1126_tgt, rx1126_off
+  rx1126_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1130_done
+    goto rxscan1130_scan
+  rxscan1130_loop:
+    ($P10) = rx1126_cur."from"()
+    inc $P10
+    set rx1126_pos, $P10
+    ge rx1126_pos, rx1126_eos, rxscan1130_done
+  rxscan1130_scan:
+    set_addr $I10, rxscan1130_loop
+    rx1126_cur."!mark_push"(0, rx1126_pos, $I10)
+  rxscan1130_done:
+.annotate "line", 499
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1123_fail
-    rx1118_cur."!mark_push"(0, rx1118_pos, $I10)
+    set_addr $I10, rxcap_1131_fail
+    rx1126_cur."!mark_push"(0, rx1126_pos, $I10)
   # rx literal  "le"
-    add $I11, rx1118_pos, 2
-    gt $I11, rx1118_eos, rx1118_fail
-    sub $I11, rx1118_pos, rx1118_off
-    substr $S10, rx1118_tgt, $I11, 2
-    ne $S10, "le", rx1118_fail
-    add rx1118_pos, 2
-    set_addr $I10, rxcap_1123_fail
-    ($I12, $I11) = rx1118_cur."!mark_peek"($I10)
-    rx1118_cur."!cursor_pos"($I11)
-    ($P10) = rx1118_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1118_pos, "")
-    rx1118_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1126_pos, 2
+    gt $I11, rx1126_eos, rx1126_fail
+    sub $I11, rx1126_pos, rx1126_off
+    substr $S10, rx1126_tgt, $I11, 2
+    ne $S10, "le", rx1126_fail
+    add rx1126_pos, 2
+    set_addr $I10, rxcap_1131_fail
+    ($I12, $I11) = rx1126_cur."!mark_peek"($I10)
+    rx1126_cur."!cursor_pos"($I11)
+    ($P10) = rx1126_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1126_pos, "")
+    rx1126_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1123_done
-  rxcap_1123_fail:
-    goto rx1118_fail
-  rxcap_1123_done:
+    goto rxcap_1131_done
+  rxcap_1131_fail:
+    goto rx1126_fail
+  rxcap_1131_done:
   # rx subrule "O" subtype=capture negate=
-    rx1118_cur."!cursor_pos"(rx1118_pos)
-    $P10 = rx1118_cur."O"("%relational, :pirop<isle ISs>")
-    unless $P10, rx1118_fail
-    rx1118_cur."!mark_push"(0, -1, 0, $P10)
+    rx1126_cur."!cursor_pos"(rx1126_pos)
+    $P10 = rx1126_cur."O"("%relational, :pirop<isle ISs>")
+    unless $P10, rx1126_fail
+    rx1126_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1118_pos = $P10."pos"()
+    rx1126_pos = $P10."pos"()
   # rx pass
-    rx1118_cur."!cursor_pass"(rx1118_pos, "infix:sym<le>")
-    rx1118_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1118_pos)
-    .return (rx1118_cur)
-  rx1118_fail:
-.annotate "line", 417
-    (rx1118_rep, rx1118_pos, $I10, $P10) = rx1118_cur."!mark_fail"(0)
-    lt rx1118_pos, -1, rx1118_done
-    eq rx1118_pos, -1, rx1118_fail
-    jump $I10
-  rx1118_done:
-    rx1118_cur."!cursor_fail"()
-    rx1118_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
-    .return (rx1118_cur)
+    rx1126_cur."!cursor_pass"(rx1126_pos, "infix:sym<le>")
+    rx1126_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1126_pos)
+    .return (rx1126_cur)
+  rx1126_fail:
+.annotate "line", 422
+    (rx1126_rep, rx1126_pos, $I10, $P10) = rx1126_cur."!mark_fail"(0)
+    lt rx1126_pos, -1, rx1126_done
+    eq rx1126_pos, -1, rx1126_fail
+    jump $I10
+  rx1126_done:
+    rx1126_cur."!cursor_fail"()
+    rx1126_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
+    .return (rx1126_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<le>"  :subid("286_1267204702.05125") :method
-.annotate "line", 417
-    $P1120 = self."!PREFIX__!subrule"("O", "le")
-    new $P1121, "ResizablePMCArray"
-    push $P1121, $P1120
-    .return ($P1121)
+.sub "!PREFIX__infix:sym<le>"  :subid("288_1272816833.94956") :method
+.annotate "line", 422
+    $P1128 = self."!PREFIX__!subrule"("O", "le")
+    new $P1129, "ResizablePMCArray"
+    push $P1129, $P1128
+    .return ($P1129)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ge>"  :subid("287_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1125_tgt
-    .local int rx1125_pos
-    .local int rx1125_off
-    .local int rx1125_eos
-    .local int rx1125_rep
-    .local pmc rx1125_cur
-    (rx1125_cur, rx1125_pos, rx1125_tgt) = self."!cursor_start"()
-    rx1125_cur."!cursor_debug"("START ", "infix:sym<ge>")
-    .lex unicode:"$\x{a2}", rx1125_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1125_eos, rx1125_tgt
-    set rx1125_off, 0
-    lt rx1125_pos, 2, rx1125_start
-    sub rx1125_off, rx1125_pos, 1
-    substr rx1125_tgt, rx1125_tgt, rx1125_off
-  rx1125_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1129_done
-    goto rxscan1129_scan
-  rxscan1129_loop:
-    ($P10) = rx1125_cur."from"()
-    inc $P10
-    set rx1125_pos, $P10
-    ge rx1125_pos, rx1125_eos, rxscan1129_done
-  rxscan1129_scan:
-    set_addr $I10, rxscan1129_loop
-    rx1125_cur."!mark_push"(0, rx1125_pos, $I10)
-  rxscan1129_done:
-.annotate "line", 495
+.sub "infix:sym<ge>"  :subid("289_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1133_tgt
+    .local int rx1133_pos
+    .local int rx1133_off
+    .local int rx1133_eos
+    .local int rx1133_rep
+    .local pmc rx1133_cur
+    (rx1133_cur, rx1133_pos, rx1133_tgt) = self."!cursor_start"()
+    rx1133_cur."!cursor_debug"("START ", "infix:sym<ge>")
+    .lex unicode:"$\x{a2}", rx1133_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1133_eos, rx1133_tgt
+    set rx1133_off, 0
+    lt rx1133_pos, 2, rx1133_start
+    sub rx1133_off, rx1133_pos, 1
+    substr rx1133_tgt, rx1133_tgt, rx1133_off
+  rx1133_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1137_done
+    goto rxscan1137_scan
+  rxscan1137_loop:
+    ($P10) = rx1133_cur."from"()
+    inc $P10
+    set rx1133_pos, $P10
+    ge rx1133_pos, rx1133_eos, rxscan1137_done
+  rxscan1137_scan:
+    set_addr $I10, rxscan1137_loop
+    rx1133_cur."!mark_push"(0, rx1133_pos, $I10)
+  rxscan1137_done:
+.annotate "line", 500
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1130_fail
-    rx1125_cur."!mark_push"(0, rx1125_pos, $I10)
+    set_addr $I10, rxcap_1138_fail
+    rx1133_cur."!mark_push"(0, rx1133_pos, $I10)
   # rx literal  "ge"
-    add $I11, rx1125_pos, 2
-    gt $I11, rx1125_eos, rx1125_fail
-    sub $I11, rx1125_pos, rx1125_off
-    substr $S10, rx1125_tgt, $I11, 2
-    ne $S10, "ge", rx1125_fail
-    add rx1125_pos, 2
-    set_addr $I10, rxcap_1130_fail
-    ($I12, $I11) = rx1125_cur."!mark_peek"($I10)
-    rx1125_cur."!cursor_pos"($I11)
-    ($P10) = rx1125_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1125_pos, "")
-    rx1125_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1133_pos, 2
+    gt $I11, rx1133_eos, rx1133_fail
+    sub $I11, rx1133_pos, rx1133_off
+    substr $S10, rx1133_tgt, $I11, 2
+    ne $S10, "ge", rx1133_fail
+    add rx1133_pos, 2
+    set_addr $I10, rxcap_1138_fail
+    ($I12, $I11) = rx1133_cur."!mark_peek"($I10)
+    rx1133_cur."!cursor_pos"($I11)
+    ($P10) = rx1133_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1133_pos, "")
+    rx1133_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1130_done
-  rxcap_1130_fail:
-    goto rx1125_fail
-  rxcap_1130_done:
+    goto rxcap_1138_done
+  rxcap_1138_fail:
+    goto rx1133_fail
+  rxcap_1138_done:
   # rx subrule "O" subtype=capture negate=
-    rx1125_cur."!cursor_pos"(rx1125_pos)
-    $P10 = rx1125_cur."O"("%relational, :pirop<isge ISs>")
-    unless $P10, rx1125_fail
-    rx1125_cur."!mark_push"(0, -1, 0, $P10)
+    rx1133_cur."!cursor_pos"(rx1133_pos)
+    $P10 = rx1133_cur."O"("%relational, :pirop<isge ISs>")
+    unless $P10, rx1133_fail
+    rx1133_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1125_pos = $P10."pos"()
+    rx1133_pos = $P10."pos"()
   # rx pass
-    rx1125_cur."!cursor_pass"(rx1125_pos, "infix:sym<ge>")
-    rx1125_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1125_pos)
-    .return (rx1125_cur)
-  rx1125_fail:
-.annotate "line", 417
-    (rx1125_rep, rx1125_pos, $I10, $P10) = rx1125_cur."!mark_fail"(0)
-    lt rx1125_pos, -1, rx1125_done
-    eq rx1125_pos, -1, rx1125_fail
-    jump $I10
-  rx1125_done:
-    rx1125_cur."!cursor_fail"()
-    rx1125_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
-    .return (rx1125_cur)
+    rx1133_cur."!cursor_pass"(rx1133_pos, "infix:sym<ge>")
+    rx1133_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1133_pos)
+    .return (rx1133_cur)
+  rx1133_fail:
+.annotate "line", 422
+    (rx1133_rep, rx1133_pos, $I10, $P10) = rx1133_cur."!mark_fail"(0)
+    lt rx1133_pos, -1, rx1133_done
+    eq rx1133_pos, -1, rx1133_fail
+    jump $I10
+  rx1133_done:
+    rx1133_cur."!cursor_fail"()
+    rx1133_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
+    .return (rx1133_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ge>"  :subid("288_1267204702.05125") :method
-.annotate "line", 417
-    $P1127 = self."!PREFIX__!subrule"("O", "ge")
-    new $P1128, "ResizablePMCArray"
-    push $P1128, $P1127
-    .return ($P1128)
+.sub "!PREFIX__infix:sym<ge>"  :subid("290_1272816833.94956") :method
+.annotate "line", 422
+    $P1135 = self."!PREFIX__!subrule"("O", "ge")
+    new $P1136, "ResizablePMCArray"
+    push $P1136, $P1135
+    .return ($P1136)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<lt>"  :subid("289_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1132_tgt
-    .local int rx1132_pos
-    .local int rx1132_off
-    .local int rx1132_eos
-    .local int rx1132_rep
-    .local pmc rx1132_cur
-    (rx1132_cur, rx1132_pos, rx1132_tgt) = self."!cursor_start"()
-    rx1132_cur."!cursor_debug"("START ", "infix:sym<lt>")
-    .lex unicode:"$\x{a2}", rx1132_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1132_eos, rx1132_tgt
-    set rx1132_off, 0
-    lt rx1132_pos, 2, rx1132_start
-    sub rx1132_off, rx1132_pos, 1
-    substr rx1132_tgt, rx1132_tgt, rx1132_off
-  rx1132_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1136_done
-    goto rxscan1136_scan
-  rxscan1136_loop:
-    ($P10) = rx1132_cur."from"()
-    inc $P10
-    set rx1132_pos, $P10
-    ge rx1132_pos, rx1132_eos, rxscan1136_done
-  rxscan1136_scan:
-    set_addr $I10, rxscan1136_loop
-    rx1132_cur."!mark_push"(0, rx1132_pos, $I10)
-  rxscan1136_done:
-.annotate "line", 496
+.sub "infix:sym<lt>"  :subid("291_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1140_tgt
+    .local int rx1140_pos
+    .local int rx1140_off
+    .local int rx1140_eos
+    .local int rx1140_rep
+    .local pmc rx1140_cur
+    (rx1140_cur, rx1140_pos, rx1140_tgt) = self."!cursor_start"()
+    rx1140_cur."!cursor_debug"("START ", "infix:sym<lt>")
+    .lex unicode:"$\x{a2}", rx1140_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1140_eos, rx1140_tgt
+    set rx1140_off, 0
+    lt rx1140_pos, 2, rx1140_start
+    sub rx1140_off, rx1140_pos, 1
+    substr rx1140_tgt, rx1140_tgt, rx1140_off
+  rx1140_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1144_done
+    goto rxscan1144_scan
+  rxscan1144_loop:
+    ($P10) = rx1140_cur."from"()
+    inc $P10
+    set rx1140_pos, $P10
+    ge rx1140_pos, rx1140_eos, rxscan1144_done
+  rxscan1144_scan:
+    set_addr $I10, rxscan1144_loop
+    rx1140_cur."!mark_push"(0, rx1140_pos, $I10)
+  rxscan1144_done:
+.annotate "line", 501
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1137_fail
-    rx1132_cur."!mark_push"(0, rx1132_pos, $I10)
+    set_addr $I10, rxcap_1145_fail
+    rx1140_cur."!mark_push"(0, rx1140_pos, $I10)
   # rx literal  "lt"
-    add $I11, rx1132_pos, 2
-    gt $I11, rx1132_eos, rx1132_fail
-    sub $I11, rx1132_pos, rx1132_off
-    substr $S10, rx1132_tgt, $I11, 2
-    ne $S10, "lt", rx1132_fail
-    add rx1132_pos, 2
-    set_addr $I10, rxcap_1137_fail
-    ($I12, $I11) = rx1132_cur."!mark_peek"($I10)
-    rx1132_cur."!cursor_pos"($I11)
-    ($P10) = rx1132_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1132_pos, "")
-    rx1132_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1140_pos, 2
+    gt $I11, rx1140_eos, rx1140_fail
+    sub $I11, rx1140_pos, rx1140_off
+    substr $S10, rx1140_tgt, $I11, 2
+    ne $S10, "lt", rx1140_fail
+    add rx1140_pos, 2
+    set_addr $I10, rxcap_1145_fail
+    ($I12, $I11) = rx1140_cur."!mark_peek"($I10)
+    rx1140_cur."!cursor_pos"($I11)
+    ($P10) = rx1140_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1140_pos, "")
+    rx1140_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1137_done
-  rxcap_1137_fail:
-    goto rx1132_fail
-  rxcap_1137_done:
+    goto rxcap_1145_done
+  rxcap_1145_fail:
+    goto rx1140_fail
+  rxcap_1145_done:
   # rx subrule "O" subtype=capture negate=
-    rx1132_cur."!cursor_pos"(rx1132_pos)
-    $P10 = rx1132_cur."O"("%relational, :pirop<islt ISs>")
-    unless $P10, rx1132_fail
-    rx1132_cur."!mark_push"(0, -1, 0, $P10)
+    rx1140_cur."!cursor_pos"(rx1140_pos)
+    $P10 = rx1140_cur."O"("%relational, :pirop<islt ISs>")
+    unless $P10, rx1140_fail
+    rx1140_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1132_pos = $P10."pos"()
+    rx1140_pos = $P10."pos"()
   # rx pass
-    rx1132_cur."!cursor_pass"(rx1132_pos, "infix:sym<lt>")
-    rx1132_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1132_pos)
-    .return (rx1132_cur)
-  rx1132_fail:
-.annotate "line", 417
-    (rx1132_rep, rx1132_pos, $I10, $P10) = rx1132_cur."!mark_fail"(0)
-    lt rx1132_pos, -1, rx1132_done
-    eq rx1132_pos, -1, rx1132_fail
-    jump $I10
-  rx1132_done:
-    rx1132_cur."!cursor_fail"()
-    rx1132_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
-    .return (rx1132_cur)
+    rx1140_cur."!cursor_pass"(rx1140_pos, "infix:sym<lt>")
+    rx1140_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1140_pos)
+    .return (rx1140_cur)
+  rx1140_fail:
+.annotate "line", 422
+    (rx1140_rep, rx1140_pos, $I10, $P10) = rx1140_cur."!mark_fail"(0)
+    lt rx1140_pos, -1, rx1140_done
+    eq rx1140_pos, -1, rx1140_fail
+    jump $I10
+  rx1140_done:
+    rx1140_cur."!cursor_fail"()
+    rx1140_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
+    .return (rx1140_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<lt>"  :subid("290_1267204702.05125") :method
-.annotate "line", 417
-    $P1134 = self."!PREFIX__!subrule"("O", "lt")
-    new $P1135, "ResizablePMCArray"
-    push $P1135, $P1134
-    .return ($P1135)
+.sub "!PREFIX__infix:sym<lt>"  :subid("292_1272816833.94956") :method
+.annotate "line", 422
+    $P1142 = self."!PREFIX__!subrule"("O", "lt")
+    new $P1143, "ResizablePMCArray"
+    push $P1143, $P1142
+    .return ($P1143)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<gt>"  :subid("291_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1139_tgt
-    .local int rx1139_pos
-    .local int rx1139_off
-    .local int rx1139_eos
-    .local int rx1139_rep
-    .local pmc rx1139_cur
-    (rx1139_cur, rx1139_pos, rx1139_tgt) = self."!cursor_start"()
-    rx1139_cur."!cursor_debug"("START ", "infix:sym<gt>")
-    .lex unicode:"$\x{a2}", rx1139_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1139_eos, rx1139_tgt
-    set rx1139_off, 0
-    lt rx1139_pos, 2, rx1139_start
-    sub rx1139_off, rx1139_pos, 1
-    substr rx1139_tgt, rx1139_tgt, rx1139_off
-  rx1139_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1143_done
-    goto rxscan1143_scan
-  rxscan1143_loop:
-    ($P10) = rx1139_cur."from"()
-    inc $P10
-    set rx1139_pos, $P10
-    ge rx1139_pos, rx1139_eos, rxscan1143_done
-  rxscan1143_scan:
-    set_addr $I10, rxscan1143_loop
-    rx1139_cur."!mark_push"(0, rx1139_pos, $I10)
-  rxscan1143_done:
-.annotate "line", 497
+.sub "infix:sym<gt>"  :subid("293_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1147_tgt
+    .local int rx1147_pos
+    .local int rx1147_off
+    .local int rx1147_eos
+    .local int rx1147_rep
+    .local pmc rx1147_cur
+    (rx1147_cur, rx1147_pos, rx1147_tgt) = self."!cursor_start"()
+    rx1147_cur."!cursor_debug"("START ", "infix:sym<gt>")
+    .lex unicode:"$\x{a2}", rx1147_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1147_eos, rx1147_tgt
+    set rx1147_off, 0
+    lt rx1147_pos, 2, rx1147_start
+    sub rx1147_off, rx1147_pos, 1
+    substr rx1147_tgt, rx1147_tgt, rx1147_off
+  rx1147_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1151_done
+    goto rxscan1151_scan
+  rxscan1151_loop:
+    ($P10) = rx1147_cur."from"()
+    inc $P10
+    set rx1147_pos, $P10
+    ge rx1147_pos, rx1147_eos, rxscan1151_done
+  rxscan1151_scan:
+    set_addr $I10, rxscan1151_loop
+    rx1147_cur."!mark_push"(0, rx1147_pos, $I10)
+  rxscan1151_done:
+.annotate "line", 502
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1144_fail
-    rx1139_cur."!mark_push"(0, rx1139_pos, $I10)
+    set_addr $I10, rxcap_1152_fail
+    rx1147_cur."!mark_push"(0, rx1147_pos, $I10)
   # rx literal  "gt"
-    add $I11, rx1139_pos, 2
-    gt $I11, rx1139_eos, rx1139_fail
-    sub $I11, rx1139_pos, rx1139_off
-    substr $S10, rx1139_tgt, $I11, 2
-    ne $S10, "gt", rx1139_fail
-    add rx1139_pos, 2
-    set_addr $I10, rxcap_1144_fail
-    ($I12, $I11) = rx1139_cur."!mark_peek"($I10)
-    rx1139_cur."!cursor_pos"($I11)
-    ($P10) = rx1139_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1139_pos, "")
-    rx1139_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1147_pos, 2
+    gt $I11, rx1147_eos, rx1147_fail
+    sub $I11, rx1147_pos, rx1147_off
+    substr $S10, rx1147_tgt, $I11, 2
+    ne $S10, "gt", rx1147_fail
+    add rx1147_pos, 2
+    set_addr $I10, rxcap_1152_fail
+    ($I12, $I11) = rx1147_cur."!mark_peek"($I10)
+    rx1147_cur."!cursor_pos"($I11)
+    ($P10) = rx1147_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1147_pos, "")
+    rx1147_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1144_done
-  rxcap_1144_fail:
-    goto rx1139_fail
-  rxcap_1144_done:
+    goto rxcap_1152_done
+  rxcap_1152_fail:
+    goto rx1147_fail
+  rxcap_1152_done:
   # rx subrule "O" subtype=capture negate=
-    rx1139_cur."!cursor_pos"(rx1139_pos)
-    $P10 = rx1139_cur."O"("%relational, :pirop<isgt ISs>")
-    unless $P10, rx1139_fail
-    rx1139_cur."!mark_push"(0, -1, 0, $P10)
+    rx1147_cur."!cursor_pos"(rx1147_pos)
+    $P10 = rx1147_cur."O"("%relational, :pirop<isgt ISs>")
+    unless $P10, rx1147_fail
+    rx1147_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1139_pos = $P10."pos"()
+    rx1147_pos = $P10."pos"()
   # rx pass
-    rx1139_cur."!cursor_pass"(rx1139_pos, "infix:sym<gt>")
-    rx1139_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1139_pos)
-    .return (rx1139_cur)
-  rx1139_fail:
-.annotate "line", 417
-    (rx1139_rep, rx1139_pos, $I10, $P10) = rx1139_cur."!mark_fail"(0)
-    lt rx1139_pos, -1, rx1139_done
-    eq rx1139_pos, -1, rx1139_fail
+    rx1147_cur."!cursor_pass"(rx1147_pos, "infix:sym<gt>")
+    rx1147_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1147_pos)
+    .return (rx1147_cur)
+  rx1147_fail:
+.annotate "line", 422
+    (rx1147_rep, rx1147_pos, $I10, $P10) = rx1147_cur."!mark_fail"(0)
+    lt rx1147_pos, -1, rx1147_done
+    eq rx1147_pos, -1, rx1147_fail
     jump $I10
-  rx1139_done:
-    rx1139_cur."!cursor_fail"()
-    rx1139_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
-    .return (rx1139_cur)
+  rx1147_done:
+    rx1147_cur."!cursor_fail"()
+    rx1147_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
+    .return (rx1147_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<gt>"  :subid("292_1267204702.05125") :method
-.annotate "line", 417
-    $P1141 = self."!PREFIX__!subrule"("O", "gt")
-    new $P1142, "ResizablePMCArray"
-    push $P1142, $P1141
-    .return ($P1142)
+.sub "!PREFIX__infix:sym<gt>"  :subid("294_1272816833.94956") :method
+.annotate "line", 422
+    $P1149 = self."!PREFIX__!subrule"("O", "gt")
+    new $P1150, "ResizablePMCArray"
+    push $P1150, $P1149
+    .return ($P1150)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=:=>"  :subid("293_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1146_tgt
-    .local int rx1146_pos
-    .local int rx1146_off
-    .local int rx1146_eos
-    .local int rx1146_rep
-    .local pmc rx1146_cur
-    (rx1146_cur, rx1146_pos, rx1146_tgt) = self."!cursor_start"()
-    rx1146_cur."!cursor_debug"("START ", "infix:sym<=:=>")
-    .lex unicode:"$\x{a2}", rx1146_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1146_eos, rx1146_tgt
-    set rx1146_off, 0
-    lt rx1146_pos, 2, rx1146_start
-    sub rx1146_off, rx1146_pos, 1
-    substr rx1146_tgt, rx1146_tgt, rx1146_off
-  rx1146_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1150_done
-    goto rxscan1150_scan
-  rxscan1150_loop:
-    ($P10) = rx1146_cur."from"()
-    inc $P10
-    set rx1146_pos, $P10
-    ge rx1146_pos, rx1146_eos, rxscan1150_done
-  rxscan1150_scan:
-    set_addr $I10, rxscan1150_loop
-    rx1146_cur."!mark_push"(0, rx1146_pos, $I10)
-  rxscan1150_done:
-.annotate "line", 498
+.sub "infix:sym<=:=>"  :subid("295_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1154_tgt
+    .local int rx1154_pos
+    .local int rx1154_off
+    .local int rx1154_eos
+    .local int rx1154_rep
+    .local pmc rx1154_cur
+    (rx1154_cur, rx1154_pos, rx1154_tgt) = self."!cursor_start"()
+    rx1154_cur."!cursor_debug"("START ", "infix:sym<=:=>")
+    .lex unicode:"$\x{a2}", rx1154_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1154_eos, rx1154_tgt
+    set rx1154_off, 0
+    lt rx1154_pos, 2, rx1154_start
+    sub rx1154_off, rx1154_pos, 1
+    substr rx1154_tgt, rx1154_tgt, rx1154_off
+  rx1154_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1158_done
+    goto rxscan1158_scan
+  rxscan1158_loop:
+    ($P10) = rx1154_cur."from"()
+    inc $P10
+    set rx1154_pos, $P10
+    ge rx1154_pos, rx1154_eos, rxscan1158_done
+  rxscan1158_scan:
+    set_addr $I10, rxscan1158_loop
+    rx1154_cur."!mark_push"(0, rx1154_pos, $I10)
+  rxscan1158_done:
+.annotate "line", 503
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1151_fail
-    rx1146_cur."!mark_push"(0, rx1146_pos, $I10)
+    set_addr $I10, rxcap_1159_fail
+    rx1154_cur."!mark_push"(0, rx1154_pos, $I10)
   # rx literal  "=:="
-    add $I11, rx1146_pos, 3
-    gt $I11, rx1146_eos, rx1146_fail
-    sub $I11, rx1146_pos, rx1146_off
-    substr $S10, rx1146_tgt, $I11, 3
-    ne $S10, "=:=", rx1146_fail
-    add rx1146_pos, 3
-    set_addr $I10, rxcap_1151_fail
-    ($I12, $I11) = rx1146_cur."!mark_peek"($I10)
-    rx1146_cur."!cursor_pos"($I11)
-    ($P10) = rx1146_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1146_pos, "")
-    rx1146_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1154_pos, 3
+    gt $I11, rx1154_eos, rx1154_fail
+    sub $I11, rx1154_pos, rx1154_off
+    substr $S10, rx1154_tgt, $I11, 3
+    ne $S10, "=:=", rx1154_fail
+    add rx1154_pos, 3
+    set_addr $I10, rxcap_1159_fail
+    ($I12, $I11) = rx1154_cur."!mark_peek"($I10)
+    rx1154_cur."!cursor_pos"($I11)
+    ($P10) = rx1154_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1154_pos, "")
+    rx1154_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1151_done
-  rxcap_1151_fail:
-    goto rx1146_fail
-  rxcap_1151_done:
+    goto rxcap_1159_done
+  rxcap_1159_fail:
+    goto rx1154_fail
+  rxcap_1159_done:
   # rx subrule "O" subtype=capture negate=
-    rx1146_cur."!cursor_pos"(rx1146_pos)
-    $P10 = rx1146_cur."O"("%relational, :pirop<issame>")
-    unless $P10, rx1146_fail
-    rx1146_cur."!mark_push"(0, -1, 0, $P10)
+    rx1154_cur."!cursor_pos"(rx1154_pos)
+    $P10 = rx1154_cur."O"("%relational, :pirop<issame>")
+    unless $P10, rx1154_fail
+    rx1154_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1146_pos = $P10."pos"()
+    rx1154_pos = $P10."pos"()
   # rx pass
-    rx1146_cur."!cursor_pass"(rx1146_pos, "infix:sym<=:=>")
-    rx1146_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1146_pos)
-    .return (rx1146_cur)
-  rx1146_fail:
-.annotate "line", 417
-    (rx1146_rep, rx1146_pos, $I10, $P10) = rx1146_cur."!mark_fail"(0)
-    lt rx1146_pos, -1, rx1146_done
-    eq rx1146_pos, -1, rx1146_fail
-    jump $I10
-  rx1146_done:
-    rx1146_cur."!cursor_fail"()
-    rx1146_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
-    .return (rx1146_cur)
+    rx1154_cur."!cursor_pass"(rx1154_pos, "infix:sym<=:=>")
+    rx1154_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1154_pos)
+    .return (rx1154_cur)
+  rx1154_fail:
+.annotate "line", 422
+    (rx1154_rep, rx1154_pos, $I10, $P10) = rx1154_cur."!mark_fail"(0)
+    lt rx1154_pos, -1, rx1154_done
+    eq rx1154_pos, -1, rx1154_fail
+    jump $I10
+  rx1154_done:
+    rx1154_cur."!cursor_fail"()
+    rx1154_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
+    .return (rx1154_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=:=>"  :subid("294_1267204702.05125") :method
-.annotate "line", 417
-    $P1148 = self."!PREFIX__!subrule"("O", "=:=")
-    new $P1149, "ResizablePMCArray"
-    push $P1149, $P1148
-    .return ($P1149)
+.sub "!PREFIX__infix:sym<=:=>"  :subid("296_1272816833.94956") :method
+.annotate "line", 422
+    $P1156 = self."!PREFIX__!subrule"("O", "=:=")
+    new $P1157, "ResizablePMCArray"
+    push $P1157, $P1156
+    .return ($P1157)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~~>"  :subid("295_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1153_tgt
-    .local int rx1153_pos
-    .local int rx1153_off
-    .local int rx1153_eos
-    .local int rx1153_rep
-    .local pmc rx1153_cur
-    (rx1153_cur, rx1153_pos, rx1153_tgt) = self."!cursor_start"()
-    rx1153_cur."!cursor_debug"("START ", "infix:sym<~~>")
-    .lex unicode:"$\x{a2}", rx1153_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1153_eos, rx1153_tgt
-    set rx1153_off, 0
-    lt rx1153_pos, 2, rx1153_start
-    sub rx1153_off, rx1153_pos, 1
-    substr rx1153_tgt, rx1153_tgt, rx1153_off
-  rx1153_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1157_done
-    goto rxscan1157_scan
-  rxscan1157_loop:
-    ($P10) = rx1153_cur."from"()
-    inc $P10
-    set rx1153_pos, $P10
-    ge rx1153_pos, rx1153_eos, rxscan1157_done
-  rxscan1157_scan:
-    set_addr $I10, rxscan1157_loop
-    rx1153_cur."!mark_push"(0, rx1153_pos, $I10)
-  rxscan1157_done:
-.annotate "line", 499
+.sub "infix:sym<~~>"  :subid("297_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1161_tgt
+    .local int rx1161_pos
+    .local int rx1161_off
+    .local int rx1161_eos
+    .local int rx1161_rep
+    .local pmc rx1161_cur
+    (rx1161_cur, rx1161_pos, rx1161_tgt) = self."!cursor_start"()
+    rx1161_cur."!cursor_debug"("START ", "infix:sym<~~>")
+    .lex unicode:"$\x{a2}", rx1161_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1161_eos, rx1161_tgt
+    set rx1161_off, 0
+    lt rx1161_pos, 2, rx1161_start
+    sub rx1161_off, rx1161_pos, 1
+    substr rx1161_tgt, rx1161_tgt, rx1161_off
+  rx1161_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1165_done
+    goto rxscan1165_scan
+  rxscan1165_loop:
+    ($P10) = rx1161_cur."from"()
+    inc $P10
+    set rx1161_pos, $P10
+    ge rx1161_pos, rx1161_eos, rxscan1165_done
+  rxscan1165_scan:
+    set_addr $I10, rxscan1165_loop
+    rx1161_cur."!mark_push"(0, rx1161_pos, $I10)
+  rxscan1165_done:
+.annotate "line", 504
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1158_fail
-    rx1153_cur."!mark_push"(0, rx1153_pos, $I10)
+    set_addr $I10, rxcap_1166_fail
+    rx1161_cur."!mark_push"(0, rx1161_pos, $I10)
   # rx literal  "~~"
-    add $I11, rx1153_pos, 2
-    gt $I11, rx1153_eos, rx1153_fail
-    sub $I11, rx1153_pos, rx1153_off
-    substr $S10, rx1153_tgt, $I11, 2
-    ne $S10, "~~", rx1153_fail
-    add rx1153_pos, 2
-    set_addr $I10, rxcap_1158_fail
-    ($I12, $I11) = rx1153_cur."!mark_peek"($I10)
-    rx1153_cur."!cursor_pos"($I11)
-    ($P10) = rx1153_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1153_pos, "")
-    rx1153_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1161_pos, 2
+    gt $I11, rx1161_eos, rx1161_fail
+    sub $I11, rx1161_pos, rx1161_off
+    substr $S10, rx1161_tgt, $I11, 2
+    ne $S10, "~~", rx1161_fail
+    add rx1161_pos, 2
+    set_addr $I10, rxcap_1166_fail
+    ($I12, $I11) = rx1161_cur."!mark_peek"($I10)
+    rx1161_cur."!cursor_pos"($I11)
+    ($P10) = rx1161_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1161_pos, "")
+    rx1161_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1158_done
-  rxcap_1158_fail:
-    goto rx1153_fail
-  rxcap_1158_done:
+    goto rxcap_1166_done
+  rxcap_1166_fail:
+    goto rx1161_fail
+  rxcap_1166_done:
   # rx subrule "O" subtype=capture negate=
-    rx1153_cur."!cursor_pos"(rx1153_pos)
-    $P10 = rx1153_cur."O"("%relational, :reducecheck<smartmatch>")
-    unless $P10, rx1153_fail
-    rx1153_cur."!mark_push"(0, -1, 0, $P10)
+    rx1161_cur."!cursor_pos"(rx1161_pos)
+    $P10 = rx1161_cur."O"("%relational, :reducecheck<smartmatch>")
+    unless $P10, rx1161_fail
+    rx1161_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1153_pos = $P10."pos"()
+    rx1161_pos = $P10."pos"()
   # rx pass
-    rx1153_cur."!cursor_pass"(rx1153_pos, "infix:sym<~~>")
-    rx1153_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1153_pos)
-    .return (rx1153_cur)
-  rx1153_fail:
-.annotate "line", 417
-    (rx1153_rep, rx1153_pos, $I10, $P10) = rx1153_cur."!mark_fail"(0)
-    lt rx1153_pos, -1, rx1153_done
-    eq rx1153_pos, -1, rx1153_fail
-    jump $I10
-  rx1153_done:
-    rx1153_cur."!cursor_fail"()
-    rx1153_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
-    .return (rx1153_cur)
+    rx1161_cur."!cursor_pass"(rx1161_pos, "infix:sym<~~>")
+    rx1161_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1161_pos)
+    .return (rx1161_cur)
+  rx1161_fail:
+.annotate "line", 422
+    (rx1161_rep, rx1161_pos, $I10, $P10) = rx1161_cur."!mark_fail"(0)
+    lt rx1161_pos, -1, rx1161_done
+    eq rx1161_pos, -1, rx1161_fail
+    jump $I10
+  rx1161_done:
+    rx1161_cur."!cursor_fail"()
+    rx1161_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
+    .return (rx1161_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~~>"  :subid("296_1267204702.05125") :method
-.annotate "line", 417
-    $P1155 = self."!PREFIX__!subrule"("O", "~~")
-    new $P1156, "ResizablePMCArray"
-    push $P1156, $P1155
-    .return ($P1156)
+.sub "!PREFIX__infix:sym<~~>"  :subid("298_1272816833.94956") :method
+.annotate "line", 422
+    $P1163 = self."!PREFIX__!subrule"("O", "~~")
+    new $P1164, "ResizablePMCArray"
+    push $P1164, $P1163
+    .return ($P1164)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<&&>"  :subid("297_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1160_tgt
-    .local int rx1160_pos
-    .local int rx1160_off
-    .local int rx1160_eos
-    .local int rx1160_rep
-    .local pmc rx1160_cur
-    (rx1160_cur, rx1160_pos, rx1160_tgt) = self."!cursor_start"()
-    rx1160_cur."!cursor_debug"("START ", "infix:sym<&&>")
-    .lex unicode:"$\x{a2}", rx1160_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1160_eos, rx1160_tgt
-    set rx1160_off, 0
-    lt rx1160_pos, 2, rx1160_start
-    sub rx1160_off, rx1160_pos, 1
-    substr rx1160_tgt, rx1160_tgt, rx1160_off
-  rx1160_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1164_done
-    goto rxscan1164_scan
-  rxscan1164_loop:
-    ($P10) = rx1160_cur."from"()
-    inc $P10
-    set rx1160_pos, $P10
-    ge rx1160_pos, rx1160_eos, rxscan1164_done
-  rxscan1164_scan:
-    set_addr $I10, rxscan1164_loop
-    rx1160_cur."!mark_push"(0, rx1160_pos, $I10)
-  rxscan1164_done:
-.annotate "line", 501
+.sub "infix:sym<&&>"  :subid("299_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1168_tgt
+    .local int rx1168_pos
+    .local int rx1168_off
+    .local int rx1168_eos
+    .local int rx1168_rep
+    .local pmc rx1168_cur
+    (rx1168_cur, rx1168_pos, rx1168_tgt) = self."!cursor_start"()
+    rx1168_cur."!cursor_debug"("START ", "infix:sym<&&>")
+    .lex unicode:"$\x{a2}", rx1168_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1168_eos, rx1168_tgt
+    set rx1168_off, 0
+    lt rx1168_pos, 2, rx1168_start
+    sub rx1168_off, rx1168_pos, 1
+    substr rx1168_tgt, rx1168_tgt, rx1168_off
+  rx1168_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1172_done
+    goto rxscan1172_scan
+  rxscan1172_loop:
+    ($P10) = rx1168_cur."from"()
+    inc $P10
+    set rx1168_pos, $P10
+    ge rx1168_pos, rx1168_eos, rxscan1172_done
+  rxscan1172_scan:
+    set_addr $I10, rxscan1172_loop
+    rx1168_cur."!mark_push"(0, rx1168_pos, $I10)
+  rxscan1172_done:
+.annotate "line", 506
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1165_fail
-    rx1160_cur."!mark_push"(0, rx1160_pos, $I10)
+    set_addr $I10, rxcap_1173_fail
+    rx1168_cur."!mark_push"(0, rx1168_pos, $I10)
   # rx literal  "&&"
-    add $I11, rx1160_pos, 2
-    gt $I11, rx1160_eos, rx1160_fail
-    sub $I11, rx1160_pos, rx1160_off
-    substr $S10, rx1160_tgt, $I11, 2
-    ne $S10, "&&", rx1160_fail
-    add rx1160_pos, 2
-    set_addr $I10, rxcap_1165_fail
-    ($I12, $I11) = rx1160_cur."!mark_peek"($I10)
-    rx1160_cur."!cursor_pos"($I11)
-    ($P10) = rx1160_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1160_pos, "")
-    rx1160_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1168_pos, 2
+    gt $I11, rx1168_eos, rx1168_fail
+    sub $I11, rx1168_pos, rx1168_off
+    substr $S10, rx1168_tgt, $I11, 2
+    ne $S10, "&&", rx1168_fail
+    add rx1168_pos, 2
+    set_addr $I10, rxcap_1173_fail
+    ($I12, $I11) = rx1168_cur."!mark_peek"($I10)
+    rx1168_cur."!cursor_pos"($I11)
+    ($P10) = rx1168_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1168_pos, "")
+    rx1168_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1165_done
-  rxcap_1165_fail:
-    goto rx1160_fail
-  rxcap_1165_done:
+    goto rxcap_1173_done
+  rxcap_1173_fail:
+    goto rx1168_fail
+  rxcap_1173_done:
   # rx subrule "O" subtype=capture negate=
-    rx1160_cur."!cursor_pos"(rx1160_pos)
-    $P10 = rx1160_cur."O"("%tight_and, :pasttype<if>")
-    unless $P10, rx1160_fail
-    rx1160_cur."!mark_push"(0, -1, 0, $P10)
+    rx1168_cur."!cursor_pos"(rx1168_pos)
+    $P10 = rx1168_cur."O"("%tight_and, :pasttype<if>")
+    unless $P10, rx1168_fail
+    rx1168_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1160_pos = $P10."pos"()
+    rx1168_pos = $P10."pos"()
   # rx pass
-    rx1160_cur."!cursor_pass"(rx1160_pos, "infix:sym<&&>")
-    rx1160_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1160_pos)
-    .return (rx1160_cur)
-  rx1160_fail:
-.annotate "line", 417
-    (rx1160_rep, rx1160_pos, $I10, $P10) = rx1160_cur."!mark_fail"(0)
-    lt rx1160_pos, -1, rx1160_done
-    eq rx1160_pos, -1, rx1160_fail
-    jump $I10
-  rx1160_done:
-    rx1160_cur."!cursor_fail"()
-    rx1160_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
-    .return (rx1160_cur)
+    rx1168_cur."!cursor_pass"(rx1168_pos, "infix:sym<&&>")
+    rx1168_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1168_pos)
+    .return (rx1168_cur)
+  rx1168_fail:
+.annotate "line", 422
+    (rx1168_rep, rx1168_pos, $I10, $P10) = rx1168_cur."!mark_fail"(0)
+    lt rx1168_pos, -1, rx1168_done
+    eq rx1168_pos, -1, rx1168_fail
+    jump $I10
+  rx1168_done:
+    rx1168_cur."!cursor_fail"()
+    rx1168_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
+    .return (rx1168_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<&&>"  :subid("298_1267204702.05125") :method
-.annotate "line", 417
-    $P1162 = self."!PREFIX__!subrule"("O", "&&")
-    new $P1163, "ResizablePMCArray"
-    push $P1163, $P1162
-    .return ($P1163)
+.sub "!PREFIX__infix:sym<&&>"  :subid("300_1272816833.94956") :method
+.annotate "line", 422
+    $P1170 = self."!PREFIX__!subrule"("O", "&&")
+    new $P1171, "ResizablePMCArray"
+    push $P1171, $P1170
+    .return ($P1171)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<||>"  :subid("299_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1167_tgt
-    .local int rx1167_pos
-    .local int rx1167_off
-    .local int rx1167_eos
-    .local int rx1167_rep
-    .local pmc rx1167_cur
-    (rx1167_cur, rx1167_pos, rx1167_tgt) = self."!cursor_start"()
-    rx1167_cur."!cursor_debug"("START ", "infix:sym<||>")
-    .lex unicode:"$\x{a2}", rx1167_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1167_eos, rx1167_tgt
-    set rx1167_off, 0
-    lt rx1167_pos, 2, rx1167_start
-    sub rx1167_off, rx1167_pos, 1
-    substr rx1167_tgt, rx1167_tgt, rx1167_off
-  rx1167_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1171_done
-    goto rxscan1171_scan
-  rxscan1171_loop:
-    ($P10) = rx1167_cur."from"()
-    inc $P10
-    set rx1167_pos, $P10
-    ge rx1167_pos, rx1167_eos, rxscan1171_done
-  rxscan1171_scan:
-    set_addr $I10, rxscan1171_loop
-    rx1167_cur."!mark_push"(0, rx1167_pos, $I10)
-  rxscan1171_done:
-.annotate "line", 503
+.sub "infix:sym<||>"  :subid("301_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1175_tgt
+    .local int rx1175_pos
+    .local int rx1175_off
+    .local int rx1175_eos
+    .local int rx1175_rep
+    .local pmc rx1175_cur
+    (rx1175_cur, rx1175_pos, rx1175_tgt) = self."!cursor_start"()
+    rx1175_cur."!cursor_debug"("START ", "infix:sym<||>")
+    .lex unicode:"$\x{a2}", rx1175_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1175_eos, rx1175_tgt
+    set rx1175_off, 0
+    lt rx1175_pos, 2, rx1175_start
+    sub rx1175_off, rx1175_pos, 1
+    substr rx1175_tgt, rx1175_tgt, rx1175_off
+  rx1175_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1179_done
+    goto rxscan1179_scan
+  rxscan1179_loop:
+    ($P10) = rx1175_cur."from"()
+    inc $P10
+    set rx1175_pos, $P10
+    ge rx1175_pos, rx1175_eos, rxscan1179_done
+  rxscan1179_scan:
+    set_addr $I10, rxscan1179_loop
+    rx1175_cur."!mark_push"(0, rx1175_pos, $I10)
+  rxscan1179_done:
+.annotate "line", 508
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1172_fail
-    rx1167_cur."!mark_push"(0, rx1167_pos, $I10)
+    set_addr $I10, rxcap_1180_fail
+    rx1175_cur."!mark_push"(0, rx1175_pos, $I10)
   # rx literal  "||"
-    add $I11, rx1167_pos, 2
-    gt $I11, rx1167_eos, rx1167_fail
-    sub $I11, rx1167_pos, rx1167_off
-    substr $S10, rx1167_tgt, $I11, 2
-    ne $S10, "||", rx1167_fail
-    add rx1167_pos, 2
-    set_addr $I10, rxcap_1172_fail
-    ($I12, $I11) = rx1167_cur."!mark_peek"($I10)
-    rx1167_cur."!cursor_pos"($I11)
-    ($P10) = rx1167_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1167_pos, "")
-    rx1167_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1175_pos, 2
+    gt $I11, rx1175_eos, rx1175_fail
+    sub $I11, rx1175_pos, rx1175_off
+    substr $S10, rx1175_tgt, $I11, 2
+    ne $S10, "||", rx1175_fail
+    add rx1175_pos, 2
+    set_addr $I10, rxcap_1180_fail
+    ($I12, $I11) = rx1175_cur."!mark_peek"($I10)
+    rx1175_cur."!cursor_pos"($I11)
+    ($P10) = rx1175_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1175_pos, "")
+    rx1175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1172_done
-  rxcap_1172_fail:
-    goto rx1167_fail
-  rxcap_1172_done:
+    goto rxcap_1180_done
+  rxcap_1180_fail:
+    goto rx1175_fail
+  rxcap_1180_done:
   # rx subrule "O" subtype=capture negate=
-    rx1167_cur."!cursor_pos"(rx1167_pos)
-    $P10 = rx1167_cur."O"("%tight_or, :pasttype<unless>")
-    unless $P10, rx1167_fail
-    rx1167_cur."!mark_push"(0, -1, 0, $P10)
+    rx1175_cur."!cursor_pos"(rx1175_pos)
+    $P10 = rx1175_cur."O"("%tight_or, :pasttype<unless>")
+    unless $P10, rx1175_fail
+    rx1175_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1167_pos = $P10."pos"()
+    rx1175_pos = $P10."pos"()
   # rx pass
-    rx1167_cur."!cursor_pass"(rx1167_pos, "infix:sym<||>")
-    rx1167_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1167_pos)
-    .return (rx1167_cur)
-  rx1167_fail:
-.annotate "line", 417
-    (rx1167_rep, rx1167_pos, $I10, $P10) = rx1167_cur."!mark_fail"(0)
-    lt rx1167_pos, -1, rx1167_done
-    eq rx1167_pos, -1, rx1167_fail
-    jump $I10
-  rx1167_done:
-    rx1167_cur."!cursor_fail"()
-    rx1167_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
-    .return (rx1167_cur)
+    rx1175_cur."!cursor_pass"(rx1175_pos, "infix:sym<||>")
+    rx1175_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1175_pos)
+    .return (rx1175_cur)
+  rx1175_fail:
+.annotate "line", 422
+    (rx1175_rep, rx1175_pos, $I10, $P10) = rx1175_cur."!mark_fail"(0)
+    lt rx1175_pos, -1, rx1175_done
+    eq rx1175_pos, -1, rx1175_fail
+    jump $I10
+  rx1175_done:
+    rx1175_cur."!cursor_fail"()
+    rx1175_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
+    .return (rx1175_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<||>"  :subid("300_1267204702.05125") :method
-.annotate "line", 417
-    $P1169 = self."!PREFIX__!subrule"("O", "||")
-    new $P1170, "ResizablePMCArray"
-    push $P1170, $P1169
-    .return ($P1170)
+.sub "!PREFIX__infix:sym<||>"  :subid("302_1272816833.94956") :method
+.annotate "line", 422
+    $P1177 = self."!PREFIX__!subrule"("O", "||")
+    new $P1178, "ResizablePMCArray"
+    push $P1178, $P1177
+    .return ($P1178)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<//>"  :subid("301_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1174_tgt
-    .local int rx1174_pos
-    .local int rx1174_off
-    .local int rx1174_eos
-    .local int rx1174_rep
-    .local pmc rx1174_cur
-    (rx1174_cur, rx1174_pos, rx1174_tgt) = self."!cursor_start"()
-    rx1174_cur."!cursor_debug"("START ", "infix:sym<//>")
-    .lex unicode:"$\x{a2}", rx1174_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1174_eos, rx1174_tgt
-    set rx1174_off, 0
-    lt rx1174_pos, 2, rx1174_start
-    sub rx1174_off, rx1174_pos, 1
-    substr rx1174_tgt, rx1174_tgt, rx1174_off
-  rx1174_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1178_done
-    goto rxscan1178_scan
-  rxscan1178_loop:
-    ($P10) = rx1174_cur."from"()
-    inc $P10
-    set rx1174_pos, $P10
-    ge rx1174_pos, rx1174_eos, rxscan1178_done
-  rxscan1178_scan:
-    set_addr $I10, rxscan1178_loop
-    rx1174_cur."!mark_push"(0, rx1174_pos, $I10)
-  rxscan1178_done:
-.annotate "line", 504
+.sub "infix:sym<//>"  :subid("303_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1182_tgt
+    .local int rx1182_pos
+    .local int rx1182_off
+    .local int rx1182_eos
+    .local int rx1182_rep
+    .local pmc rx1182_cur
+    (rx1182_cur, rx1182_pos, rx1182_tgt) = self."!cursor_start"()
+    rx1182_cur."!cursor_debug"("START ", "infix:sym<//>")
+    .lex unicode:"$\x{a2}", rx1182_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1182_eos, rx1182_tgt
+    set rx1182_off, 0
+    lt rx1182_pos, 2, rx1182_start
+    sub rx1182_off, rx1182_pos, 1
+    substr rx1182_tgt, rx1182_tgt, rx1182_off
+  rx1182_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1186_done
+    goto rxscan1186_scan
+  rxscan1186_loop:
+    ($P10) = rx1182_cur."from"()
+    inc $P10
+    set rx1182_pos, $P10
+    ge rx1182_pos, rx1182_eos, rxscan1186_done
+  rxscan1186_scan:
+    set_addr $I10, rxscan1186_loop
+    rx1182_cur."!mark_push"(0, rx1182_pos, $I10)
+  rxscan1186_done:
+.annotate "line", 509
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1179_fail
-    rx1174_cur."!mark_push"(0, rx1174_pos, $I10)
+    set_addr $I10, rxcap_1187_fail
+    rx1182_cur."!mark_push"(0, rx1182_pos, $I10)
   # rx literal  "//"
-    add $I11, rx1174_pos, 2
-    gt $I11, rx1174_eos, rx1174_fail
-    sub $I11, rx1174_pos, rx1174_off
-    substr $S10, rx1174_tgt, $I11, 2
-    ne $S10, "//", rx1174_fail
-    add rx1174_pos, 2
-    set_addr $I10, rxcap_1179_fail
-    ($I12, $I11) = rx1174_cur."!mark_peek"($I10)
-    rx1174_cur."!cursor_pos"($I11)
-    ($P10) = rx1174_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1174_pos, "")
-    rx1174_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1182_pos, 2
+    gt $I11, rx1182_eos, rx1182_fail
+    sub $I11, rx1182_pos, rx1182_off
+    substr $S10, rx1182_tgt, $I11, 2
+    ne $S10, "//", rx1182_fail
+    add rx1182_pos, 2
+    set_addr $I10, rxcap_1187_fail
+    ($I12, $I11) = rx1182_cur."!mark_peek"($I10)
+    rx1182_cur."!cursor_pos"($I11)
+    ($P10) = rx1182_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1182_pos, "")
+    rx1182_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1179_done
-  rxcap_1179_fail:
-    goto rx1174_fail
-  rxcap_1179_done:
+    goto rxcap_1187_done
+  rxcap_1187_fail:
+    goto rx1182_fail
+  rxcap_1187_done:
   # rx subrule "O" subtype=capture negate=
-    rx1174_cur."!cursor_pos"(rx1174_pos)
-    $P10 = rx1174_cur."O"("%tight_or, :pasttype<def_or>")
-    unless $P10, rx1174_fail
-    rx1174_cur."!mark_push"(0, -1, 0, $P10)
+    rx1182_cur."!cursor_pos"(rx1182_pos)
+    $P10 = rx1182_cur."O"("%tight_or, :pasttype<def_or>")
+    unless $P10, rx1182_fail
+    rx1182_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1174_pos = $P10."pos"()
+    rx1182_pos = $P10."pos"()
   # rx pass
-    rx1174_cur."!cursor_pass"(rx1174_pos, "infix:sym<//>")
-    rx1174_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1174_pos)
-    .return (rx1174_cur)
-  rx1174_fail:
-.annotate "line", 417
-    (rx1174_rep, rx1174_pos, $I10, $P10) = rx1174_cur."!mark_fail"(0)
-    lt rx1174_pos, -1, rx1174_done
-    eq rx1174_pos, -1, rx1174_fail
-    jump $I10
-  rx1174_done:
-    rx1174_cur."!cursor_fail"()
-    rx1174_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
-    .return (rx1174_cur)
+    rx1182_cur."!cursor_pass"(rx1182_pos, "infix:sym<//>")
+    rx1182_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1182_pos)
+    .return (rx1182_cur)
+  rx1182_fail:
+.annotate "line", 422
+    (rx1182_rep, rx1182_pos, $I10, $P10) = rx1182_cur."!mark_fail"(0)
+    lt rx1182_pos, -1, rx1182_done
+    eq rx1182_pos, -1, rx1182_fail
+    jump $I10
+  rx1182_done:
+    rx1182_cur."!cursor_fail"()
+    rx1182_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
+    .return (rx1182_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<//>"  :subid("302_1267204702.05125") :method
-.annotate "line", 417
-    $P1176 = self."!PREFIX__!subrule"("O", "//")
-    new $P1177, "ResizablePMCArray"
-    push $P1177, $P1176
-    .return ($P1177)
+.sub "!PREFIX__infix:sym<//>"  :subid("304_1272816833.94956") :method
+.annotate "line", 422
+    $P1184 = self."!PREFIX__!subrule"("O", "//")
+    new $P1185, "ResizablePMCArray"
+    push $P1185, $P1184
+    .return ($P1185)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<?? !!>"  :subid("303_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1181_tgt
-    .local int rx1181_pos
-    .local int rx1181_off
-    .local int rx1181_eos
-    .local int rx1181_rep
-    .local pmc rx1181_cur
-    (rx1181_cur, rx1181_pos, rx1181_tgt) = self."!cursor_start"()
-    rx1181_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
-    .lex unicode:"$\x{a2}", rx1181_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1181_eos, rx1181_tgt
-    set rx1181_off, 0
-    lt rx1181_pos, 2, rx1181_start
-    sub rx1181_off, rx1181_pos, 1
-    substr rx1181_tgt, rx1181_tgt, rx1181_off
-  rx1181_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1185_done
-    goto rxscan1185_scan
-  rxscan1185_loop:
-    ($P10) = rx1181_cur."from"()
-    inc $P10
-    set rx1181_pos, $P10
-    ge rx1181_pos, rx1181_eos, rxscan1185_done
-  rxscan1185_scan:
-    set_addr $I10, rxscan1185_loop
-    rx1181_cur."!mark_push"(0, rx1181_pos, $I10)
-  rxscan1185_done:
-.annotate "line", 507
+.sub "infix:sym<?? !!>"  :subid("305_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1189_tgt
+    .local int rx1189_pos
+    .local int rx1189_off
+    .local int rx1189_eos
+    .local int rx1189_rep
+    .local pmc rx1189_cur
+    (rx1189_cur, rx1189_pos, rx1189_tgt) = self."!cursor_start"()
+    rx1189_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
+    .lex unicode:"$\x{a2}", rx1189_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1189_eos, rx1189_tgt
+    set rx1189_off, 0
+    lt rx1189_pos, 2, rx1189_start
+    sub rx1189_off, rx1189_pos, 1
+    substr rx1189_tgt, rx1189_tgt, rx1189_off
+  rx1189_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1193_done
+    goto rxscan1193_scan
+  rxscan1193_loop:
+    ($P10) = rx1189_cur."from"()
+    inc $P10
+    set rx1189_pos, $P10
+    ge rx1189_pos, rx1189_eos, rxscan1193_done
+  rxscan1193_scan:
+    set_addr $I10, rxscan1193_loop
+    rx1189_cur."!mark_push"(0, rx1189_pos, $I10)
+  rxscan1193_done:
+.annotate "line", 512
   # rx literal  "??"
-    add $I11, rx1181_pos, 2
-    gt $I11, rx1181_eos, rx1181_fail
-    sub $I11, rx1181_pos, rx1181_off
-    substr $S10, rx1181_tgt, $I11, 2
-    ne $S10, "??", rx1181_fail
-    add rx1181_pos, 2
-.annotate "line", 508
-  # rx subrule "ws" subtype=method negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."ws"()
-    unless $P10, rx1181_fail
-    rx1181_pos = $P10."pos"()
-.annotate "line", 509
+    add $I11, rx1189_pos, 2
+    gt $I11, rx1189_eos, rx1189_fail
+    sub $I11, rx1189_pos, rx1189_off
+    substr $S10, rx1189_tgt, $I11, 2
+    ne $S10, "??", rx1189_fail
+    add rx1189_pos, 2
+.annotate "line", 513
+  # rx subrule "ws" subtype=method negate=
+    rx1189_cur."!cursor_pos"(rx1189_pos)
+    $P10 = rx1189_cur."ws"()
+    unless $P10, rx1189_fail
+    rx1189_pos = $P10."pos"()
+.annotate "line", 514
   # rx subrule "EXPR" subtype=capture negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."EXPR"("i=")
-    unless $P10, rx1181_fail
-    rx1181_cur."!mark_push"(0, -1, 0, $P10)
+    rx1189_cur."!cursor_pos"(rx1189_pos)
+    $P10 = rx1189_cur."EXPR"("i=")
+    unless $P10, rx1189_fail
+    rx1189_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx1181_pos = $P10."pos"()
-.annotate "line", 510
+    rx1189_pos = $P10."pos"()
+.annotate "line", 515
   # rx literal  "!!"
-    add $I11, rx1181_pos, 2
-    gt $I11, rx1181_eos, rx1181_fail
-    sub $I11, rx1181_pos, rx1181_off
-    substr $S10, rx1181_tgt, $I11, 2
-    ne $S10, "!!", rx1181_fail
-    add rx1181_pos, 2
-.annotate "line", 511
+    add $I11, rx1189_pos, 2
+    gt $I11, rx1189_eos, rx1189_fail
+    sub $I11, rx1189_pos, rx1189_off
+    substr $S10, rx1189_tgt, $I11, 2
+    ne $S10, "!!", rx1189_fail
+    add rx1189_pos, 2
+.annotate "line", 516
   # rx subrule "O" subtype=capture negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
-    unless $P10, rx1181_fail
-    rx1181_cur."!mark_push"(0, -1, 0, $P10)
+    rx1189_cur."!cursor_pos"(rx1189_pos)
+    $P10 = rx1189_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
+    unless $P10, rx1189_fail
+    rx1189_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1181_pos = $P10."pos"()
-.annotate "line", 506
+    rx1189_pos = $P10."pos"()
+.annotate "line", 511
   # rx pass
-    rx1181_cur."!cursor_pass"(rx1181_pos, "infix:sym<?? !!>")
-    rx1181_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1181_pos)
-    .return (rx1181_cur)
-  rx1181_fail:
-.annotate "line", 417
-    (rx1181_rep, rx1181_pos, $I10, $P10) = rx1181_cur."!mark_fail"(0)
-    lt rx1181_pos, -1, rx1181_done
-    eq rx1181_pos, -1, rx1181_fail
-    jump $I10
-  rx1181_done:
-    rx1181_cur."!cursor_fail"()
-    rx1181_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
-    .return (rx1181_cur)
+    rx1189_cur."!cursor_pass"(rx1189_pos, "infix:sym<?? !!>")
+    rx1189_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1189_pos)
+    .return (rx1189_cur)
+  rx1189_fail:
+.annotate "line", 422
+    (rx1189_rep, rx1189_pos, $I10, $P10) = rx1189_cur."!mark_fail"(0)
+    lt rx1189_pos, -1, rx1189_done
+    eq rx1189_pos, -1, rx1189_fail
+    jump $I10
+  rx1189_done:
+    rx1189_cur."!cursor_fail"()
+    rx1189_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
+    .return (rx1189_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<?? !!>"  :subid("304_1267204702.05125") :method
-.annotate "line", 417
-    $P1183 = self."!PREFIX__!subrule"("", "??")
-    new $P1184, "ResizablePMCArray"
-    push $P1184, $P1183
-    .return ($P1184)
+.sub "!PREFIX__infix:sym<?? !!>"  :subid("306_1272816833.94956") :method
+.annotate "line", 422
+    $P1191 = self."!PREFIX__!subrule"("", "??")
+    new $P1192, "ResizablePMCArray"
+    push $P1192, $P1191
+    .return ($P1192)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=>"  :subid("305_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1187_tgt
-    .local int rx1187_pos
-    .local int rx1187_off
-    .local int rx1187_eos
-    .local int rx1187_rep
-    .local pmc rx1187_cur
-    (rx1187_cur, rx1187_pos, rx1187_tgt) = self."!cursor_start"()
-    rx1187_cur."!cursor_debug"("START ", "infix:sym<=>")
-    .lex unicode:"$\x{a2}", rx1187_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1187_eos, rx1187_tgt
-    set rx1187_off, 0
-    lt rx1187_pos, 2, rx1187_start
-    sub rx1187_off, rx1187_pos, 1
-    substr rx1187_tgt, rx1187_tgt, rx1187_off
-  rx1187_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1191_done
-    goto rxscan1191_scan
-  rxscan1191_loop:
-    ($P10) = rx1187_cur."from"()
-    inc $P10
-    set rx1187_pos, $P10
-    ge rx1187_pos, rx1187_eos, rxscan1191_done
-  rxscan1191_scan:
-    set_addr $I10, rxscan1191_loop
-    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
-  rxscan1191_done:
-.annotate "line", 515
+.sub "infix:sym<=>"  :subid("307_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1195_tgt
+    .local int rx1195_pos
+    .local int rx1195_off
+    .local int rx1195_eos
+    .local int rx1195_rep
+    .local pmc rx1195_cur
+    (rx1195_cur, rx1195_pos, rx1195_tgt) = self."!cursor_start"()
+    rx1195_cur."!cursor_debug"("START ", "infix:sym<=>")
+    .lex unicode:"$\x{a2}", rx1195_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1195_eos, rx1195_tgt
+    set rx1195_off, 0
+    lt rx1195_pos, 2, rx1195_start
+    sub rx1195_off, rx1195_pos, 1
+    substr rx1195_tgt, rx1195_tgt, rx1195_off
+  rx1195_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1199_done
+    goto rxscan1199_scan
+  rxscan1199_loop:
+    ($P10) = rx1195_cur."from"()
+    inc $P10
+    set rx1195_pos, $P10
+    ge rx1195_pos, rx1195_eos, rxscan1199_done
+  rxscan1199_scan:
+    set_addr $I10, rxscan1199_loop
+    rx1195_cur."!mark_push"(0, rx1195_pos, $I10)
+  rxscan1199_done:
+.annotate "line", 520
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1192_fail
-    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
+    set_addr $I10, rxcap_1200_fail
+    rx1195_cur."!mark_push"(0, rx1195_pos, $I10)
   # rx literal  "="
-    add $I11, rx1187_pos, 1
-    gt $I11, rx1187_eos, rx1187_fail
-    sub $I11, rx1187_pos, rx1187_off
-    substr $S10, rx1187_tgt, $I11, 1
-    ne $S10, "=", rx1187_fail
-    add rx1187_pos, 1
-    set_addr $I10, rxcap_1192_fail
-    ($I12, $I11) = rx1187_cur."!mark_peek"($I10)
-    rx1187_cur."!cursor_pos"($I11)
-    ($P10) = rx1187_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1187_pos, "")
-    rx1187_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1195_pos, 1
+    gt $I11, rx1195_eos, rx1195_fail
+    sub $I11, rx1195_pos, rx1195_off
+    substr $S10, rx1195_tgt, $I11, 1
+    ne $S10, "=", rx1195_fail
+    add rx1195_pos, 1
+    set_addr $I10, rxcap_1200_fail
+    ($I12, $I11) = rx1195_cur."!mark_peek"($I10)
+    rx1195_cur."!cursor_pos"($I11)
+    ($P10) = rx1195_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1195_pos, "")
+    rx1195_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1192_done
-  rxcap_1192_fail:
-    goto rx1187_fail
-  rxcap_1192_done:
+    goto rxcap_1200_done
+  rxcap_1200_fail:
+    goto rx1195_fail
+  rxcap_1200_done:
   # rx subrule "panic" subtype=method negate=
-    rx1187_cur."!cursor_pos"(rx1187_pos)
-    $P10 = rx1187_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
-    unless $P10, rx1187_fail
-    rx1187_pos = $P10."pos"()
-.annotate "line", 514
-  # rx pass
-    rx1187_cur."!cursor_pass"(rx1187_pos, "infix:sym<=>")
-    rx1187_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1187_pos)
-    .return (rx1187_cur)
-  rx1187_fail:
-.annotate "line", 417
-    (rx1187_rep, rx1187_pos, $I10, $P10) = rx1187_cur."!mark_fail"(0)
-    lt rx1187_pos, -1, rx1187_done
-    eq rx1187_pos, -1, rx1187_fail
-    jump $I10
-  rx1187_done:
-    rx1187_cur."!cursor_fail"()
-    rx1187_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
-    .return (rx1187_cur)
+    rx1195_cur."!cursor_pos"(rx1195_pos)
+    $P10 = rx1195_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
+    unless $P10, rx1195_fail
+    rx1195_pos = $P10."pos"()
+.annotate "line", 519
+  # rx pass
+    rx1195_cur."!cursor_pass"(rx1195_pos, "infix:sym<=>")
+    rx1195_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1195_pos)
+    .return (rx1195_cur)
+  rx1195_fail:
+.annotate "line", 422
+    (rx1195_rep, rx1195_pos, $I10, $P10) = rx1195_cur."!mark_fail"(0)
+    lt rx1195_pos, -1, rx1195_done
+    eq rx1195_pos, -1, rx1195_fail
+    jump $I10
+  rx1195_done:
+    rx1195_cur."!cursor_fail"()
+    rx1195_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
+    .return (rx1195_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=>"  :subid("306_1267204702.05125") :method
-.annotate "line", 417
-    $P1189 = self."!PREFIX__!subrule"("", "=")
-    new $P1190, "ResizablePMCArray"
-    push $P1190, $P1189
-    .return ($P1190)
+.sub "!PREFIX__infix:sym<=>"  :subid("308_1272816833.94956") :method
+.annotate "line", 422
+    $P1197 = self."!PREFIX__!subrule"("", "=")
+    new $P1198, "ResizablePMCArray"
+    push $P1198, $P1197
+    .return ($P1198)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<:=>"  :subid("307_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1194_tgt
-    .local int rx1194_pos
-    .local int rx1194_off
-    .local int rx1194_eos
-    .local int rx1194_rep
-    .local pmc rx1194_cur
-    (rx1194_cur, rx1194_pos, rx1194_tgt) = self."!cursor_start"()
-    rx1194_cur."!cursor_debug"("START ", "infix:sym<:=>")
-    .lex unicode:"$\x{a2}", rx1194_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1194_eos, rx1194_tgt
-    set rx1194_off, 0
-    lt rx1194_pos, 2, rx1194_start
-    sub rx1194_off, rx1194_pos, 1
-    substr rx1194_tgt, rx1194_tgt, rx1194_off
-  rx1194_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1198_done
-    goto rxscan1198_scan
-  rxscan1198_loop:
-    ($P10) = rx1194_cur."from"()
-    inc $P10
-    set rx1194_pos, $P10
-    ge rx1194_pos, rx1194_eos, rxscan1198_done
-  rxscan1198_scan:
-    set_addr $I10, rxscan1198_loop
-    rx1194_cur."!mark_push"(0, rx1194_pos, $I10)
-  rxscan1198_done:
-.annotate "line", 517
+.sub "infix:sym<:=>"  :subid("309_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1202_tgt
+    .local int rx1202_pos
+    .local int rx1202_off
+    .local int rx1202_eos
+    .local int rx1202_rep
+    .local pmc rx1202_cur
+    (rx1202_cur, rx1202_pos, rx1202_tgt) = self."!cursor_start"()
+    rx1202_cur."!cursor_debug"("START ", "infix:sym<:=>")
+    .lex unicode:"$\x{a2}", rx1202_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1202_eos, rx1202_tgt
+    set rx1202_off, 0
+    lt rx1202_pos, 2, rx1202_start
+    sub rx1202_off, rx1202_pos, 1
+    substr rx1202_tgt, rx1202_tgt, rx1202_off
+  rx1202_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1206_done
+    goto rxscan1206_scan
+  rxscan1206_loop:
+    ($P10) = rx1202_cur."from"()
+    inc $P10
+    set rx1202_pos, $P10
+    ge rx1202_pos, rx1202_eos, rxscan1206_done
+  rxscan1206_scan:
+    set_addr $I10, rxscan1206_loop
+    rx1202_cur."!mark_push"(0, rx1202_pos, $I10)
+  rxscan1206_done:
+.annotate "line", 522
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1199_fail
-    rx1194_cur."!mark_push"(0, rx1194_pos, $I10)
+    set_addr $I10, rxcap_1207_fail
+    rx1202_cur."!mark_push"(0, rx1202_pos, $I10)
   # rx literal  ":="
-    add $I11, rx1194_pos, 2
-    gt $I11, rx1194_eos, rx1194_fail
-    sub $I11, rx1194_pos, rx1194_off
-    substr $S10, rx1194_tgt, $I11, 2
-    ne $S10, ":=", rx1194_fail
-    add rx1194_pos, 2
-    set_addr $I10, rxcap_1199_fail
-    ($I12, $I11) = rx1194_cur."!mark_peek"($I10)
-    rx1194_cur."!cursor_pos"($I11)
-    ($P10) = rx1194_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1194_pos, "")
-    rx1194_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1202_pos, 2
+    gt $I11, rx1202_eos, rx1202_fail
+    sub $I11, rx1202_pos, rx1202_off
+    substr $S10, rx1202_tgt, $I11, 2
+    ne $S10, ":=", rx1202_fail
+    add rx1202_pos, 2
+    set_addr $I10, rxcap_1207_fail
+    ($I12, $I11) = rx1202_cur."!mark_peek"($I10)
+    rx1202_cur."!cursor_pos"($I11)
+    ($P10) = rx1202_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1202_pos, "")
+    rx1202_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1199_done
-  rxcap_1199_fail:
-    goto rx1194_fail
-  rxcap_1199_done:
+    goto rxcap_1207_done
+  rxcap_1207_fail:
+    goto rx1202_fail
+  rxcap_1207_done:
   # rx subrule "O" subtype=capture negate=
-    rx1194_cur."!cursor_pos"(rx1194_pos)
-    $P10 = rx1194_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1194_fail
-    rx1194_cur."!mark_push"(0, -1, 0, $P10)
+    rx1202_cur."!cursor_pos"(rx1202_pos)
+    $P10 = rx1202_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1202_fail
+    rx1202_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1194_pos = $P10."pos"()
+    rx1202_pos = $P10."pos"()
   # rx pass
-    rx1194_cur."!cursor_pass"(rx1194_pos, "infix:sym<:=>")
-    rx1194_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1194_pos)
-    .return (rx1194_cur)
-  rx1194_fail:
-.annotate "line", 417
-    (rx1194_rep, rx1194_pos, $I10, $P10) = rx1194_cur."!mark_fail"(0)
-    lt rx1194_pos, -1, rx1194_done
-    eq rx1194_pos, -1, rx1194_fail
-    jump $I10
-  rx1194_done:
-    rx1194_cur."!cursor_fail"()
-    rx1194_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
-    .return (rx1194_cur)
+    rx1202_cur."!cursor_pass"(rx1202_pos, "infix:sym<:=>")
+    rx1202_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1202_pos)
+    .return (rx1202_cur)
+  rx1202_fail:
+.annotate "line", 422
+    (rx1202_rep, rx1202_pos, $I10, $P10) = rx1202_cur."!mark_fail"(0)
+    lt rx1202_pos, -1, rx1202_done
+    eq rx1202_pos, -1, rx1202_fail
+    jump $I10
+  rx1202_done:
+    rx1202_cur."!cursor_fail"()
+    rx1202_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
+    .return (rx1202_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<:=>"  :subid("308_1267204702.05125") :method
-.annotate "line", 417
-    $P1196 = self."!PREFIX__!subrule"("O", ":=")
-    new $P1197, "ResizablePMCArray"
-    push $P1197, $P1196
-    .return ($P1197)
+.sub "!PREFIX__infix:sym<:=>"  :subid("310_1272816833.94956") :method
+.annotate "line", 422
+    $P1204 = self."!PREFIX__!subrule"("O", ":=")
+    new $P1205, "ResizablePMCArray"
+    push $P1205, $P1204
+    .return ($P1205)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<::=>"  :subid("309_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1201_tgt
-    .local int rx1201_pos
-    .local int rx1201_off
-    .local int rx1201_eos
-    .local int rx1201_rep
-    .local pmc rx1201_cur
-    (rx1201_cur, rx1201_pos, rx1201_tgt) = self."!cursor_start"()
-    rx1201_cur."!cursor_debug"("START ", "infix:sym<::=>")
-    .lex unicode:"$\x{a2}", rx1201_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1201_eos, rx1201_tgt
-    set rx1201_off, 0
-    lt rx1201_pos, 2, rx1201_start
-    sub rx1201_off, rx1201_pos, 1
-    substr rx1201_tgt, rx1201_tgt, rx1201_off
-  rx1201_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1205_done
-    goto rxscan1205_scan
-  rxscan1205_loop:
-    ($P10) = rx1201_cur."from"()
-    inc $P10
-    set rx1201_pos, $P10
-    ge rx1201_pos, rx1201_eos, rxscan1205_done
-  rxscan1205_scan:
-    set_addr $I10, rxscan1205_loop
-    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
-  rxscan1205_done:
-.annotate "line", 518
+.sub "infix:sym<::=>"  :subid("311_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1209_tgt
+    .local int rx1209_pos
+    .local int rx1209_off
+    .local int rx1209_eos
+    .local int rx1209_rep
+    .local pmc rx1209_cur
+    (rx1209_cur, rx1209_pos, rx1209_tgt) = self."!cursor_start"()
+    rx1209_cur."!cursor_debug"("START ", "infix:sym<::=>")
+    .lex unicode:"$\x{a2}", rx1209_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1209_eos, rx1209_tgt
+    set rx1209_off, 0
+    lt rx1209_pos, 2, rx1209_start
+    sub rx1209_off, rx1209_pos, 1
+    substr rx1209_tgt, rx1209_tgt, rx1209_off
+  rx1209_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1213_done
+    goto rxscan1213_scan
+  rxscan1213_loop:
+    ($P10) = rx1209_cur."from"()
+    inc $P10
+    set rx1209_pos, $P10
+    ge rx1209_pos, rx1209_eos, rxscan1213_done
+  rxscan1213_scan:
+    set_addr $I10, rxscan1213_loop
+    rx1209_cur."!mark_push"(0, rx1209_pos, $I10)
+  rxscan1213_done:
+.annotate "line", 523
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1206_fail
-    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
+    set_addr $I10, rxcap_1214_fail
+    rx1209_cur."!mark_push"(0, rx1209_pos, $I10)
   # rx literal  "::="
-    add $I11, rx1201_pos, 3
-    gt $I11, rx1201_eos, rx1201_fail
-    sub $I11, rx1201_pos, rx1201_off
-    substr $S10, rx1201_tgt, $I11, 3
-    ne $S10, "::=", rx1201_fail
-    add rx1201_pos, 3
-    set_addr $I10, rxcap_1206_fail
-    ($I12, $I11) = rx1201_cur."!mark_peek"($I10)
-    rx1201_cur."!cursor_pos"($I11)
-    ($P10) = rx1201_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1201_pos, "")
-    rx1201_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1209_pos, 3
+    gt $I11, rx1209_eos, rx1209_fail
+    sub $I11, rx1209_pos, rx1209_off
+    substr $S10, rx1209_tgt, $I11, 3
+    ne $S10, "::=", rx1209_fail
+    add rx1209_pos, 3
+    set_addr $I10, rxcap_1214_fail
+    ($I12, $I11) = rx1209_cur."!mark_peek"($I10)
+    rx1209_cur."!cursor_pos"($I11)
+    ($P10) = rx1209_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1209_pos, "")
+    rx1209_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1206_done
-  rxcap_1206_fail:
-    goto rx1201_fail
-  rxcap_1206_done:
+    goto rxcap_1214_done
+  rxcap_1214_fail:
+    goto rx1209_fail
+  rxcap_1214_done:
   # rx subrule "O" subtype=capture negate=
-    rx1201_cur."!cursor_pos"(rx1201_pos)
-    $P10 = rx1201_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1201_fail
-    rx1201_cur."!mark_push"(0, -1, 0, $P10)
+    rx1209_cur."!cursor_pos"(rx1209_pos)
+    $P10 = rx1209_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1209_fail
+    rx1209_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1201_pos = $P10."pos"()
+    rx1209_pos = $P10."pos"()
   # rx pass
-    rx1201_cur."!cursor_pass"(rx1201_pos, "infix:sym<::=>")
-    rx1201_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1201_pos)
-    .return (rx1201_cur)
-  rx1201_fail:
-.annotate "line", 417
-    (rx1201_rep, rx1201_pos, $I10, $P10) = rx1201_cur."!mark_fail"(0)
-    lt rx1201_pos, -1, rx1201_done
-    eq rx1201_pos, -1, rx1201_fail
-    jump $I10
-  rx1201_done:
-    rx1201_cur."!cursor_fail"()
-    rx1201_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
-    .return (rx1201_cur)
+    rx1209_cur."!cursor_pass"(rx1209_pos, "infix:sym<::=>")
+    rx1209_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1209_pos)
+    .return (rx1209_cur)
+  rx1209_fail:
+.annotate "line", 422
+    (rx1209_rep, rx1209_pos, $I10, $P10) = rx1209_cur."!mark_fail"(0)
+    lt rx1209_pos, -1, rx1209_done
+    eq rx1209_pos, -1, rx1209_fail
+    jump $I10
+  rx1209_done:
+    rx1209_cur."!cursor_fail"()
+    rx1209_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
+    .return (rx1209_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<::=>"  :subid("310_1267204702.05125") :method
-.annotate "line", 417
-    $P1203 = self."!PREFIX__!subrule"("O", "::=")
-    new $P1204, "ResizablePMCArray"
-    push $P1204, $P1203
-    .return ($P1204)
+.sub "!PREFIX__infix:sym<::=>"  :subid("312_1272816833.94956") :method
+.annotate "line", 422
+    $P1211 = self."!PREFIX__!subrule"("O", "::=")
+    new $P1212, "ResizablePMCArray"
+    push $P1212, $P1211
+    .return ($P1212)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<,>"  :subid("311_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1208_tgt
-    .local int rx1208_pos
-    .local int rx1208_off
-    .local int rx1208_eos
-    .local int rx1208_rep
-    .local pmc rx1208_cur
-    (rx1208_cur, rx1208_pos, rx1208_tgt) = self."!cursor_start"()
-    rx1208_cur."!cursor_debug"("START ", "infix:sym<,>")
-    .lex unicode:"$\x{a2}", rx1208_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1208_eos, rx1208_tgt
-    set rx1208_off, 0
-    lt rx1208_pos, 2, rx1208_start
-    sub rx1208_off, rx1208_pos, 1
-    substr rx1208_tgt, rx1208_tgt, rx1208_off
-  rx1208_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1212_done
-    goto rxscan1212_scan
-  rxscan1212_loop:
-    ($P10) = rx1208_cur."from"()
-    inc $P10
-    set rx1208_pos, $P10
-    ge rx1208_pos, rx1208_eos, rxscan1212_done
-  rxscan1212_scan:
-    set_addr $I10, rxscan1212_loop
-    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
-  rxscan1212_done:
-.annotate "line", 520
+.sub "infix:sym<,>"  :subid("313_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1216_tgt
+    .local int rx1216_pos
+    .local int rx1216_off
+    .local int rx1216_eos
+    .local int rx1216_rep
+    .local pmc rx1216_cur
+    (rx1216_cur, rx1216_pos, rx1216_tgt) = self."!cursor_start"()
+    rx1216_cur."!cursor_debug"("START ", "infix:sym<,>")
+    .lex unicode:"$\x{a2}", rx1216_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1216_eos, rx1216_tgt
+    set rx1216_off, 0
+    lt rx1216_pos, 2, rx1216_start
+    sub rx1216_off, rx1216_pos, 1
+    substr rx1216_tgt, rx1216_tgt, rx1216_off
+  rx1216_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1220_done
+    goto rxscan1220_scan
+  rxscan1220_loop:
+    ($P10) = rx1216_cur."from"()
+    inc $P10
+    set rx1216_pos, $P10
+    ge rx1216_pos, rx1216_eos, rxscan1220_done
+  rxscan1220_scan:
+    set_addr $I10, rxscan1220_loop
+    rx1216_cur."!mark_push"(0, rx1216_pos, $I10)
+  rxscan1220_done:
+.annotate "line", 525
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1213_fail
-    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
+    set_addr $I10, rxcap_1221_fail
+    rx1216_cur."!mark_push"(0, rx1216_pos, $I10)
   # rx literal  ","
-    add $I11, rx1208_pos, 1
-    gt $I11, rx1208_eos, rx1208_fail
-    sub $I11, rx1208_pos, rx1208_off
-    substr $S10, rx1208_tgt, $I11, 1
-    ne $S10, ",", rx1208_fail
-    add rx1208_pos, 1
-    set_addr $I10, rxcap_1213_fail
-    ($I12, $I11) = rx1208_cur."!mark_peek"($I10)
-    rx1208_cur."!cursor_pos"($I11)
-    ($P10) = rx1208_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1208_pos, "")
-    rx1208_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1216_pos, 1
+    gt $I11, rx1216_eos, rx1216_fail
+    sub $I11, rx1216_pos, rx1216_off
+    substr $S10, rx1216_tgt, $I11, 1
+    ne $S10, ",", rx1216_fail
+    add rx1216_pos, 1
+    set_addr $I10, rxcap_1221_fail
+    ($I12, $I11) = rx1216_cur."!mark_peek"($I10)
+    rx1216_cur."!cursor_pos"($I11)
+    ($P10) = rx1216_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1216_pos, "")
+    rx1216_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1213_done
-  rxcap_1213_fail:
-    goto rx1208_fail
-  rxcap_1213_done:
+    goto rxcap_1221_done
+  rxcap_1221_fail:
+    goto rx1216_fail
+  rxcap_1221_done:
   # rx subrule "O" subtype=capture negate=
-    rx1208_cur."!cursor_pos"(rx1208_pos)
-    $P10 = rx1208_cur."O"("%comma, :pasttype<list>")
-    unless $P10, rx1208_fail
-    rx1208_cur."!mark_push"(0, -1, 0, $P10)
+    rx1216_cur."!cursor_pos"(rx1216_pos)
+    $P10 = rx1216_cur."O"("%comma, :pasttype<list>")
+    unless $P10, rx1216_fail
+    rx1216_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1208_pos = $P10."pos"()
+    rx1216_pos = $P10."pos"()
   # rx pass
-    rx1208_cur."!cursor_pass"(rx1208_pos, "infix:sym<,>")
-    rx1208_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1208_pos)
-    .return (rx1208_cur)
-  rx1208_fail:
-.annotate "line", 417
-    (rx1208_rep, rx1208_pos, $I10, $P10) = rx1208_cur."!mark_fail"(0)
-    lt rx1208_pos, -1, rx1208_done
-    eq rx1208_pos, -1, rx1208_fail
-    jump $I10
-  rx1208_done:
-    rx1208_cur."!cursor_fail"()
-    rx1208_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
-    .return (rx1208_cur)
+    rx1216_cur."!cursor_pass"(rx1216_pos, "infix:sym<,>")
+    rx1216_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1216_pos)
+    .return (rx1216_cur)
+  rx1216_fail:
+.annotate "line", 422
+    (rx1216_rep, rx1216_pos, $I10, $P10) = rx1216_cur."!mark_fail"(0)
+    lt rx1216_pos, -1, rx1216_done
+    eq rx1216_pos, -1, rx1216_fail
+    jump $I10
+  rx1216_done:
+    rx1216_cur."!cursor_fail"()
+    rx1216_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
+    .return (rx1216_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<,>"  :subid("312_1267204702.05125") :method
-.annotate "line", 417
-    $P1210 = self."!PREFIX__!subrule"("O", ",")
-    new $P1211, "ResizablePMCArray"
-    push $P1211, $P1210
-    .return ($P1211)
+.sub "!PREFIX__infix:sym<,>"  :subid("314_1272816833.94956") :method
+.annotate "line", 422
+    $P1218 = self."!PREFIX__!subrule"("O", ",")
+    new $P1219, "ResizablePMCArray"
+    push $P1219, $P1218
+    .return ($P1219)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<return>"  :subid("313_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1215_tgt
-    .local int rx1215_pos
-    .local int rx1215_off
-    .local int rx1215_eos
-    .local int rx1215_rep
-    .local pmc rx1215_cur
-    (rx1215_cur, rx1215_pos, rx1215_tgt) = self."!cursor_start"()
-    rx1215_cur."!cursor_debug"("START ", "prefix:sym<return>")
-    .lex unicode:"$\x{a2}", rx1215_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1215_eos, rx1215_tgt
-    set rx1215_off, 0
-    lt rx1215_pos, 2, rx1215_start
-    sub rx1215_off, rx1215_pos, 1
-    substr rx1215_tgt, rx1215_tgt, rx1215_off
-  rx1215_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1218_done
-    goto rxscan1218_scan
-  rxscan1218_loop:
-    ($P10) = rx1215_cur."from"()
-    inc $P10
-    set rx1215_pos, $P10
-    ge rx1215_pos, rx1215_eos, rxscan1218_done
-  rxscan1218_scan:
-    set_addr $I10, rxscan1218_loop
-    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
-  rxscan1218_done:
-.annotate "line", 522
+.sub "prefix:sym<return>"  :subid("315_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1223_tgt
+    .local int rx1223_pos
+    .local int rx1223_off
+    .local int rx1223_eos
+    .local int rx1223_rep
+    .local pmc rx1223_cur
+    (rx1223_cur, rx1223_pos, rx1223_tgt) = self."!cursor_start"()
+    rx1223_cur."!cursor_debug"("START ", "prefix:sym<return>")
+    .lex unicode:"$\x{a2}", rx1223_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1223_eos, rx1223_tgt
+    set rx1223_off, 0
+    lt rx1223_pos, 2, rx1223_start
+    sub rx1223_off, rx1223_pos, 1
+    substr rx1223_tgt, rx1223_tgt, rx1223_off
+  rx1223_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1226_done
+    goto rxscan1226_scan
+  rxscan1226_loop:
+    ($P10) = rx1223_cur."from"()
+    inc $P10
+    set rx1223_pos, $P10
+    ge rx1223_pos, rx1223_eos, rxscan1226_done
+  rxscan1226_scan:
+    set_addr $I10, rxscan1226_loop
+    rx1223_cur."!mark_push"(0, rx1223_pos, $I10)
+  rxscan1226_done:
+.annotate "line", 527
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1219_fail
-    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
+    set_addr $I10, rxcap_1227_fail
+    rx1223_cur."!mark_push"(0, rx1223_pos, $I10)
   # rx literal  "return"
-    add $I11, rx1215_pos, 6
-    gt $I11, rx1215_eos, rx1215_fail
-    sub $I11, rx1215_pos, rx1215_off
-    substr $S10, rx1215_tgt, $I11, 6
-    ne $S10, "return", rx1215_fail
-    add rx1215_pos, 6
-    set_addr $I10, rxcap_1219_fail
-    ($I12, $I11) = rx1215_cur."!mark_peek"($I10)
-    rx1215_cur."!cursor_pos"($I11)
-    ($P10) = rx1215_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1215_pos, "")
-    rx1215_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1223_pos, 6
+    gt $I11, rx1223_eos, rx1223_fail
+    sub $I11, rx1223_pos, rx1223_off
+    substr $S10, rx1223_tgt, $I11, 6
+    ne $S10, "return", rx1223_fail
+    add rx1223_pos, 6
+    set_addr $I10, rxcap_1227_fail
+    ($I12, $I11) = rx1223_cur."!mark_peek"($I10)
+    rx1223_cur."!cursor_pos"($I11)
+    ($P10) = rx1223_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1223_pos, "")
+    rx1223_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1219_done
-  rxcap_1219_fail:
-    goto rx1215_fail
-  rxcap_1219_done:
+    goto rxcap_1227_done
+  rxcap_1227_fail:
+    goto rx1223_fail
+  rxcap_1227_done:
   # rx charclass s
-    ge rx1215_pos, rx1215_eos, rx1215_fail
-    sub $I10, rx1215_pos, rx1215_off
-    is_cclass $I11, 32, rx1215_tgt, $I10
-    unless $I11, rx1215_fail
-    inc rx1215_pos
+    ge rx1223_pos, rx1223_eos, rx1223_fail
+    sub $I10, rx1223_pos, rx1223_off
+    is_cclass $I11, 32, rx1223_tgt, $I10
+    unless $I11, rx1223_fail
+    inc rx1223_pos
   # rx subrule "O" subtype=capture negate=
-    rx1215_cur."!cursor_pos"(rx1215_pos)
-    $P10 = rx1215_cur."O"("%list_prefix, :pasttype<return>")
-    unless $P10, rx1215_fail
-    rx1215_cur."!mark_push"(0, -1, 0, $P10)
+    rx1223_cur."!cursor_pos"(rx1223_pos)
+    $P10 = rx1223_cur."O"("%list_prefix, :pasttype<return>")
+    unless $P10, rx1223_fail
+    rx1223_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1215_pos = $P10."pos"()
+    rx1223_pos = $P10."pos"()
   # rx pass
-    rx1215_cur."!cursor_pass"(rx1215_pos, "prefix:sym<return>")
-    rx1215_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1215_pos)
-    .return (rx1215_cur)
-  rx1215_fail:
-.annotate "line", 417
-    (rx1215_rep, rx1215_pos, $I10, $P10) = rx1215_cur."!mark_fail"(0)
-    lt rx1215_pos, -1, rx1215_done
-    eq rx1215_pos, -1, rx1215_fail
-    jump $I10
-  rx1215_done:
-    rx1215_cur."!cursor_fail"()
-    rx1215_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
-    .return (rx1215_cur)
+    rx1223_cur."!cursor_pass"(rx1223_pos, "prefix:sym<return>")
+    rx1223_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1223_pos)
+    .return (rx1223_cur)
+  rx1223_fail:
+.annotate "line", 422
+    (rx1223_rep, rx1223_pos, $I10, $P10) = rx1223_cur."!mark_fail"(0)
+    lt rx1223_pos, -1, rx1223_done
+    eq rx1223_pos, -1, rx1223_fail
+    jump $I10
+  rx1223_done:
+    rx1223_cur."!cursor_fail"()
+    rx1223_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
+    .return (rx1223_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<return>"  :subid("314_1267204702.05125") :method
-.annotate "line", 417
-    new $P1217, "ResizablePMCArray"
-    push $P1217, "return"
-    .return ($P1217)
+.sub "!PREFIX__prefix:sym<return>"  :subid("316_1272816833.94956") :method
+.annotate "line", 422
+    new $P1225, "ResizablePMCArray"
+    push $P1225, "return"
+    .return ($P1225)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<make>"  :subid("315_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1221_tgt
-    .local int rx1221_pos
-    .local int rx1221_off
-    .local int rx1221_eos
-    .local int rx1221_rep
-    .local pmc rx1221_cur
-    (rx1221_cur, rx1221_pos, rx1221_tgt) = self."!cursor_start"()
-    rx1221_cur."!cursor_debug"("START ", "prefix:sym<make>")
-    .lex unicode:"$\x{a2}", rx1221_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1221_eos, rx1221_tgt
-    set rx1221_off, 0
-    lt rx1221_pos, 2, rx1221_start
-    sub rx1221_off, rx1221_pos, 1
-    substr rx1221_tgt, rx1221_tgt, rx1221_off
-  rx1221_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1224_done
-    goto rxscan1224_scan
-  rxscan1224_loop:
-    ($P10) = rx1221_cur."from"()
-    inc $P10
-    set rx1221_pos, $P10
-    ge rx1221_pos, rx1221_eos, rxscan1224_done
-  rxscan1224_scan:
-    set_addr $I10, rxscan1224_loop
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
-  rxscan1224_done:
-.annotate "line", 523
+.sub "prefix:sym<make>"  :subid("317_1272816833.94956") :method :outer("11_1272816833.94956")
+.annotate "line", 422
+    .local string rx1229_tgt
+    .local int rx1229_pos
+    .local int rx1229_off
+    .local int rx1229_eos
+    .local int rx1229_rep
+    .local pmc rx1229_cur
+    (rx1229_cur, rx1229_pos, rx1229_tgt) = self."!cursor_start"()
+    rx1229_cur."!cursor_debug"("START ", "prefix:sym<make>")
+    .lex unicode:"$\x{a2}", rx1229_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1229_eos, rx1229_tgt
+    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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1232_done
+    goto rxscan1232_scan
+  rxscan1232_loop:
+    ($P10) = rx1229_cur."from"()
+    inc $P10
+    set rx1229_pos, $P10
+    ge rx1229_pos, rx1229_eos, rxscan1232_done
+  rxscan1232_scan:
+    set_addr $I10, rxscan1232_loop
+    rx1229_cur."!mark_push"(0, rx1229_pos, $I10)
+  rxscan1232_done:
+.annotate "line", 528
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1225_fail
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
+    set_addr $I10, rxcap_1233_fail
+    rx1229_cur."!mark_push"(0, rx1229_pos, $I10)
   # rx literal  "make"
-    add $I11, rx1221_pos, 4
-    gt $I11, rx1221_eos, rx1221_fail
-    sub $I11, rx1221_pos, rx1221_off
-    substr $S10, rx1221_tgt, $I11, 4
-    ne $S10, "make", rx1221_fail
-    add rx1221_pos, 4
-    set_addr $I10, rxcap_1225_fail
-    ($I12, $I11) = rx1221_cur."!mark_peek"($I10)
-    rx1221_cur."!cursor_pos"($I11)
-    ($P10) = rx1221_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1221_pos, "")
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1229_pos, 4
+    gt $I11, rx1229_eos, rx1229_fail
+    sub $I11, rx1229_pos, rx1229_off
+    substr $S10, rx1229_tgt, $I11, 4
+    ne $S10, "make", rx1229_fail
+    add rx1229_pos, 4
+    set_addr $I10, rxcap_1233_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_1225_done
-  rxcap_1225_fail:
-    goto rx1221_fail
-  rxcap_1225_done:
+    goto rxcap_1233_done
+  rxcap_1233_fail:
+    goto rx1229_fail
+  rxcap_1233_done:
   # rx charclass s
-    ge rx1221_pos, rx1221_eos, rx1221_fail
-    sub $I10, rx1221_pos, rx1221_off
-    is_cclass $I11, 32, rx1221_tgt, $I10
-    unless $I11, rx1221_fail
-    inc rx1221_pos
+    ge rx1229_pos, rx1229_eos, rx1229_fail
+    sub $I10, rx1229_pos, rx1229_off
+    is_cclass $I11, 32, rx1229_tgt, $I10
+    unless $I11, rx1229_fail
+    inc rx1229_pos
   # rx subrule "O" subtype=capture negate=
-    rx1221_cur."!cursor_pos"(rx1221_pos)
-    $P10 = rx1221_cur."O"("%list_prefix")
-    unless $P10, rx1221_fail
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    rx1229_cur."!cursor_pos"(rx1229_pos)
+    $P10 = rx1229_cur."O"("%list_prefix")
+    unless $P10, rx1229_fail
+    rx1229_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1221_pos = $P10."pos"()
+    rx1229_pos = $P10."pos"()
   # rx pass
-    rx1221_cur."!cursor_pass"(rx1221_pos, "prefix:sym<make>")
-    rx1221_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1221_pos)
-    .return (rx1221_cur)
-  rx1221_fail:
-.annotate "line", 417
-    (rx1221_rep, rx1221_pos, $I10, $P10) = rx1221_cur."!mark_fail"(0)
-    lt rx1221_pos, -1, rx1221_done
-    eq rx1221_pos, -1, rx1221_fail
+    rx1229_cur."!cursor_pass"(rx1229_pos, "prefix:sym<make>")
+    rx1229_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1229_pos)
+    .return (rx1229_cur)
+  rx1229_fail:
+.annotate "line", 422
+    (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
-  rx1221_done:
-    rx1221_cur."!cursor_fail"()
-    rx1221_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
-    .return (rx1221_cur)
+  rx1229_done:
+    rx1229_cur."!cursor_fail"()
+    rx1229_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
+    .return (rx1229_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<make>"  :subid("316_1267204702.05125") :method
-.annotate "line", 417
-    new $P1223, "ResizablePMCArray"
-    push $P1223, "make"
-    .return ($P1223)
+.sub "!PREFIX__prefix:sym<make>"  :subid("318_1272816833.94956") :method
+.annotate "line", 422
+    new $P1231, "ResizablePMCArray"
+    push $P1231, "make"
+    .return ($P1231)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "smartmatch"  :subid("317_1267204702.05125") :method :outer("11_1267204702.05125")
-    .param pmc param_1229
-.annotate "line", 525
-    new $P1228, 'ExceptionHandler'
-    set_addr $P1228, control_1227
-    $P1228."handle_types"(58)
-    push_eh $P1228
+.sub "smartmatch"  :subid("319_1272816833.94956") :method :outer("11_1272816833.94956")
+    .param pmc param_1237
+.annotate "line", 530
+    new $P1236, 'ExceptionHandler'
+    set_addr $P1236, control_1235
+    $P1236."handle_types"(57)
+    push_eh $P1236
     .lex "self", self
-    .lex "$/", param_1229
-.annotate "line", 527
-    new $P1230, "Undef"
-    .lex "$t", $P1230
-    find_lex $P1231, "$/"
-    unless_null $P1231, vivify_343
-    $P1231 = root_new ['parrot';'ResizablePMCArray']
-  vivify_343:
-    set $P1232, $P1231[0]
-    unless_null $P1232, vivify_344
-    new $P1232, "Undef"
-  vivify_344:
-    store_lex "$t", $P1232
-    find_lex $P1233, "$/"
-    unless_null $P1233, vivify_345
-    $P1233 = root_new ['parrot';'ResizablePMCArray']
+    .lex "$/", param_1237
+.annotate "line", 532
+    new $P1238, "Undef"
+    .lex "$t", $P1238
+    find_lex $P1239, "$/"
+    unless_null $P1239, vivify_345
+    $P1239 = root_new ['parrot';'ResizablePMCArray']
   vivify_345:
-    set $P1234, $P1233[1]
-    unless_null $P1234, vivify_346
-    new $P1234, "Undef"
+    set $P1240, $P1239[0]
+    unless_null $P1240, vivify_346
+    new $P1240, "Undef"
   vivify_346:
-    find_lex $P1235, "$/"
-    unless_null $P1235, vivify_347
-    $P1235 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1235
+    store_lex "$t", $P1240
+    find_lex $P1241, "$/"
+    unless_null $P1241, vivify_347
+    $P1241 = root_new ['parrot';'ResizablePMCArray']
   vivify_347:
-    set $P1235[0], $P1234
-    find_lex $P1236, "$t"
-    find_lex $P1237, "$/"
-    unless_null $P1237, vivify_348
-    $P1237 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1237
+    set $P1242, $P1241[1]
+    unless_null $P1242, vivify_348
+    new $P1242, "Undef"
   vivify_348:
-    set $P1237[1], $P1236
-.annotate "line", 525
-    .return ($P1236)
-  control_1227:
+    find_lex $P1243, "$/"
+    unless_null $P1243, vivify_349
+    $P1243 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1243
+  vivify_349:
+    set $P1243[0], $P1242
+    find_lex $P1244, "$t"
+    find_lex $P1245, "$/"
+    unless_null $P1245, vivify_350
+    $P1245 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1245
+  vivify_350:
+    set $P1245[1], $P1244
+.annotate "line", 530
+    .return ($P1244)
+  control_1235:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1238, exception, "payload"
-    .return ($P1238)
-.end
-
-
-.namespace ["NQP";"Regex"]
-.sub "_block1239"  :subid("318_1267204702.05125") :outer("11_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1273 = "329_1267204702.05125" 
-    capture_lex $P1273
-    .const 'Sub' $P1260 = "326_1267204702.05125" 
-    capture_lex $P1260
-    .const 'Sub' $P1255 = "324_1267204702.05125" 
-    capture_lex $P1255
-    .const 'Sub' $P1250 = "322_1267204702.05125" 
-    capture_lex $P1250
-    .const 'Sub' $P1241 = "319_1267204702.05125" 
-    capture_lex $P1241
-    .const 'Sub' $P1273 = "329_1267204702.05125" 
-    capture_lex $P1273
-    .return ($P1273)
-.end
-
-
-.namespace ["NQP";"Regex"]
-.sub "metachar:sym<:my>"  :subid("319_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1247 = "321_1267204702.05125" 
-    capture_lex $P1247
-    .local string rx1242_tgt
-    .local int rx1242_pos
-    .local int rx1242_off
-    .local int rx1242_eos
-    .local int rx1242_rep
-    .local pmc rx1242_cur
-    (rx1242_cur, rx1242_pos, rx1242_tgt) = self."!cursor_start"()
-    rx1242_cur."!cursor_debug"("START ", "metachar:sym<:my>")
-    .lex unicode:"$\x{a2}", rx1242_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1242_eos, rx1242_tgt
-    set rx1242_off, 0
-    lt rx1242_pos, 2, rx1242_start
-    sub rx1242_off, rx1242_pos, 1
-    substr rx1242_tgt, rx1242_tgt, rx1242_off
-  rx1242_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1245_done
-    goto rxscan1245_scan
-  rxscan1245_loop:
-    ($P10) = rx1242_cur."from"()
-    inc $P10
-    set rx1242_pos, $P10
-    ge rx1242_pos, rx1242_eos, rxscan1245_done
-  rxscan1245_scan:
-    set_addr $I10, rxscan1245_loop
-    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
-  rxscan1245_done:
-.annotate "line", 533
-  # rx literal  ":"
-    add $I11, rx1242_pos, 1
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 1
-    ne $S10, ":", rx1242_fail
-    add rx1242_pos, 1
-  # rx subrule "before" subtype=zerowidth negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    .const 'Sub' $P1247 = "321_1267204702.05125" 
-    capture_lex $P1247
-    $P10 = rx1242_cur."before"($P1247)
-    unless $P10, rx1242_fail
-  # rx subrule "LANG" subtype=capture negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."LANG"("MAIN", "statement")
-    unless $P10, rx1242_fail
-    rx1242_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("statement")
-    rx1242_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."ws"()
-    unless $P10, rx1242_fail
-    rx1242_pos = $P10."pos"()
-  # rx literal  ";"
-    add $I11, rx1242_pos, 1
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 1
-    ne $S10, ";", rx1242_fail
-    add rx1242_pos, 1
-.annotate "line", 532
-  # rx pass
-    rx1242_cur."!cursor_pass"(rx1242_pos, "metachar:sym<:my>")
-    rx1242_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1242_pos)
-    .return (rx1242_cur)
-  rx1242_fail:
-.annotate "line", 531
-    (rx1242_rep, rx1242_pos, $I10, $P10) = rx1242_cur."!mark_fail"(0)
-    lt rx1242_pos, -1, rx1242_done
-    eq rx1242_pos, -1, rx1242_fail
-    jump $I10
-  rx1242_done:
-    rx1242_cur."!cursor_fail"()
-    rx1242_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
-    .return (rx1242_cur)
-    .return ()
+    getattribute $P1246, exception, "payload"
+    .return ($P1246)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<:my>"  :subid("320_1267204702.05125") :method
-.annotate "line", 531
-    new $P1244, "ResizablePMCArray"
-    push $P1244, ":"
-    .return ($P1244)
-.end
-
-
-.namespace ["NQP";"Regex"]
-.sub "_block1246"  :anon :subid("321_1267204702.05125") :method :outer("319_1267204702.05125")
-.annotate "line", 533
-    .local string rx1248_tgt
-    .local int rx1248_pos
-    .local int rx1248_off
-    .local int rx1248_eos
-    .local int rx1248_rep
-    .local pmc rx1248_cur
-    (rx1248_cur, rx1248_pos, rx1248_tgt) = self."!cursor_start"()
-    rx1248_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1248_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1248_eos, rx1248_tgt
-    set rx1248_off, 0
-    lt rx1248_pos, 2, rx1248_start
-    sub rx1248_off, rx1248_pos, 1
-    substr rx1248_tgt, rx1248_tgt, rx1248_off
-  rx1248_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1249_done
-    goto rxscan1249_scan
-  rxscan1249_loop:
-    ($P10) = rx1248_cur."from"()
-    inc $P10
-    set rx1248_pos, $P10
-    ge rx1248_pos, rx1248_eos, rxscan1249_done
-  rxscan1249_scan:
-    set_addr $I10, rxscan1249_loop
-    rx1248_cur."!mark_push"(0, rx1248_pos, $I10)
-  rxscan1249_done:
-  # rx literal  "my"
-    add $I11, rx1248_pos, 2
-    gt $I11, rx1248_eos, rx1248_fail
-    sub $I11, rx1248_pos, rx1248_off
-    substr $S10, rx1248_tgt, $I11, 2
-    ne $S10, "my", rx1248_fail
-    add rx1248_pos, 2
-  # rx pass
-    rx1248_cur."!cursor_pass"(rx1248_pos, "")
-    rx1248_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1248_pos)
-    .return (rx1248_cur)
-  rx1248_fail:
-    (rx1248_rep, rx1248_pos, $I10, $P10) = rx1248_cur."!mark_fail"(0)
-    lt rx1248_pos, -1, rx1248_done
-    eq rx1248_pos, -1, rx1248_fail
-    jump $I10
-  rx1248_done:
-    rx1248_cur."!cursor_fail"()
-    rx1248_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1248_cur)
-    .return ()
+.sub "_block1247"  :subid("320_1272816833.94956") :outer("11_1272816833.94956")
+.annotate "line", 536
+    .const 'Sub' $P1281 = "331_1272816833.94956" 
+    capture_lex $P1281
+    .const 'Sub' $P1268 = "328_1272816833.94956" 
+    capture_lex $P1268
+    .const 'Sub' $P1263 = "326_1272816833.94956" 
+    capture_lex $P1263
+    .const 'Sub' $P1258 = "324_1272816833.94956" 
+    capture_lex $P1258
+    .const 'Sub' $P1249 = "321_1272816833.94956" 
+    capture_lex $P1249
+    .const 'Sub' $P1281 = "331_1272816833.94956" 
+    capture_lex $P1281
+    .return ($P1281)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<{ }>"  :subid("322_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .local string rx1251_tgt
-    .local int rx1251_pos
-    .local int rx1251_off
-    .local int rx1251_eos
-    .local int rx1251_rep
-    .local pmc rx1251_cur
-    (rx1251_cur, rx1251_pos, rx1251_tgt) = self."!cursor_start"()
-    rx1251_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx1251_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1251_eos, rx1251_tgt
-    set rx1251_off, 0
-    lt rx1251_pos, 2, rx1251_start
-    sub rx1251_off, rx1251_pos, 1
-    substr rx1251_tgt, rx1251_tgt, rx1251_off
-  rx1251_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1254_done
-    goto rxscan1254_scan
-  rxscan1254_loop:
-    ($P10) = rx1251_cur."from"()
-    inc $P10
-    set rx1251_pos, $P10
-    ge rx1251_pos, rx1251_eos, rxscan1254_done
-  rxscan1254_scan:
-    set_addr $I10, rxscan1254_loop
-    rx1251_cur."!mark_push"(0, rx1251_pos, $I10)
-  rxscan1254_done:
-.annotate "line", 537
-  # rx enumcharlist negate=0 zerowidth
-    ge rx1251_pos, rx1251_eos, rx1251_fail
-    sub $I10, rx1251_pos, rx1251_off
-    substr $S10, rx1251_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx1251_fail
-  # rx subrule "codeblock" subtype=capture negate=
-    rx1251_cur."!cursor_pos"(rx1251_pos)
-    $P10 = rx1251_cur."codeblock"()
-    unless $P10, rx1251_fail
-    rx1251_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("codeblock")
-    rx1251_pos = $P10."pos"()
+.sub "metachar:sym<:my>"  :subid("321_1272816833.94956") :method :outer("320_1272816833.94956")
 .annotate "line", 536
+    .const 'Sub' $P1255 = "323_1272816833.94956" 
+    capture_lex $P1255
+    .local string rx1250_tgt
+    .local int rx1250_pos
+    .local int rx1250_off
+    .local int rx1250_eos
+    .local int rx1250_rep
+    .local pmc rx1250_cur
+    (rx1250_cur, rx1250_pos, rx1250_tgt) = self."!cursor_start"()
+    rx1250_cur."!cursor_debug"("START ", "metachar:sym<:my>")
+    .lex unicode:"$\x{a2}", rx1250_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1250_eos, rx1250_tgt
+    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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1253_done
+    goto rxscan1253_scan
+  rxscan1253_loop:
+    ($P10) = rx1250_cur."from"()
+    inc $P10
+    set rx1250_pos, $P10
+    ge rx1250_pos, rx1250_eos, rxscan1253_done
+  rxscan1253_scan:
+    set_addr $I10, rxscan1253_loop
+    rx1250_cur."!mark_push"(0, rx1250_pos, $I10)
+  rxscan1253_done:
+.annotate "line", 538
+  # rx literal  ":"
+    add $I11, rx1250_pos, 1
+    gt $I11, rx1250_eos, rx1250_fail
+    sub $I11, rx1250_pos, rx1250_off
+    substr $S10, rx1250_tgt, $I11, 1
+    ne $S10, ":", rx1250_fail
+    add rx1250_pos, 1
+  # rx subrule "before" subtype=zerowidth negate=
+    rx1250_cur."!cursor_pos"(rx1250_pos)
+    .const 'Sub' $P1255 = "323_1272816833.94956" 
+    capture_lex $P1255
+    $P10 = rx1250_cur."before"($P1255)
+    unless $P10, rx1250_fail
+  # rx subrule "LANG" subtype=capture negate=
+    rx1250_cur."!cursor_pos"(rx1250_pos)
+    $P10 = rx1250_cur."LANG"("MAIN", "statement")
+    unless $P10, rx1250_fail
+    rx1250_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("statement")
+    rx1250_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx1250_cur."!cursor_pos"(rx1250_pos)
+    $P10 = rx1250_cur."ws"()
+    unless $P10, rx1250_fail
+    rx1250_pos = $P10."pos"()
+  # rx literal  ";"
+    add $I11, rx1250_pos, 1
+    gt $I11, rx1250_eos, rx1250_fail
+    sub $I11, rx1250_pos, rx1250_off
+    substr $S10, rx1250_tgt, $I11, 1
+    ne $S10, ";", rx1250_fail
+    add rx1250_pos, 1
+.annotate "line", 537
   # rx pass
-    rx1251_cur."!cursor_pass"(rx1251_pos, "metachar:sym<{ }>")
-    rx1251_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1251_pos)
-    .return (rx1251_cur)
-  rx1251_fail:
-.annotate "line", 531
-    (rx1251_rep, rx1251_pos, $I10, $P10) = rx1251_cur."!mark_fail"(0)
-    lt rx1251_pos, -1, rx1251_done
-    eq rx1251_pos, -1, rx1251_fail
-    jump $I10
-  rx1251_done:
-    rx1251_cur."!cursor_fail"()
-    rx1251_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
-    .return (rx1251_cur)
+    rx1250_cur."!cursor_pass"(rx1250_pos, "metachar:sym<:my>")
+    rx1250_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1250_pos)
+    .return (rx1250_cur)
+  rx1250_fail:
+.annotate "line", 536
+    (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"()
+    rx1250_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
+    .return (rx1250_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<{ }>"  :subid("323_1267204702.05125") :method
-.annotate "line", 531
-    new $P1253, "ResizablePMCArray"
-    push $P1253, "{"
-    .return ($P1253)
+.sub "!PREFIX__metachar:sym<:my>"  :subid("322_1272816833.94956") :method
+.annotate "line", 536
+    new $P1252, "ResizablePMCArray"
+    push $P1252, ":"
+    .return ($P1252)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<{ }>"  :subid("324_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
+.sub "_block1254"  :anon :subid("323_1272816833.94956") :method :outer("321_1272816833.94956")
+.annotate "line", 538
     .local string rx1256_tgt
     .local int rx1256_pos
     .local int rx1256_off
@@ -15387,7 +15398,7 @@
     .local int rx1256_rep
     .local pmc rx1256_cur
     (rx1256_cur, rx1256_pos, rx1256_tgt) = self."!cursor_start"()
-    rx1256_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
+    rx1256_cur."!cursor_debug"("START ", "")
     .lex unicode:"$\x{a2}", rx1256_cur
     .local pmc match
     .lex "$/", match
@@ -15398,611 +15409,743 @@
     substr rx1256_tgt, rx1256_tgt, rx1256_off
   rx1256_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1259_done
-    goto rxscan1259_scan
-  rxscan1259_loop:
+    ne $I10, -1, rxscan1257_done
+    goto rxscan1257_scan
+  rxscan1257_loop:
     ($P10) = rx1256_cur."from"()
     inc $P10
     set rx1256_pos, $P10
-    ge rx1256_pos, rx1256_eos, rxscan1259_done
-  rxscan1259_scan:
-    set_addr $I10, rxscan1259_loop
+    ge rx1256_pos, rx1256_eos, rxscan1257_done
+  rxscan1257_scan:
+    set_addr $I10, rxscan1257_loop
     rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
-  rxscan1259_done:
-.annotate "line", 541
-  # rx enumcharlist negate=0 zerowidth
-    ge rx1256_pos, rx1256_eos, rx1256_fail
-    sub $I10, rx1256_pos, rx1256_off
-    substr $S10, rx1256_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx1256_fail
-  # rx subrule "codeblock" subtype=capture negate=
-    rx1256_cur."!cursor_pos"(rx1256_pos)
-    $P10 = rx1256_cur."codeblock"()
-    unless $P10, rx1256_fail
-    rx1256_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("codeblock")
-    rx1256_pos = $P10."pos"()
-.annotate "line", 540
+  rxscan1257_done:
+  # rx literal  "my"
+    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, "my", rx1256_fail
+    add rx1256_pos, 2
   # rx pass
-    rx1256_cur."!cursor_pass"(rx1256_pos, "assertion:sym<{ }>")
-    rx1256_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1256_pos)
+    rx1256_cur."!cursor_pass"(rx1256_pos, "")
+    rx1256_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1256_pos)
     .return (rx1256_cur)
   rx1256_fail:
-.annotate "line", 531
     (rx1256_rep, rx1256_pos, $I10, $P10) = rx1256_cur."!mark_fail"(0)
     lt rx1256_pos, -1, rx1256_done
     eq rx1256_pos, -1, rx1256_fail
     jump $I10
   rx1256_done:
     rx1256_cur."!cursor_fail"()
-    rx1256_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
+    rx1256_cur."!cursor_debug"("FAIL  ", "")
     .return (rx1256_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<{ }>"  :subid("325_1267204702.05125") :method
-.annotate "line", 531
-    new $P1258, "ResizablePMCArray"
-    push $P1258, "{"
-    .return ($P1258)
+.sub "metachar:sym<{ }>"  :subid("324_1272816833.94956") :method :outer("320_1272816833.94956")
+.annotate "line", 536
+    .local string rx1259_tgt
+    .local int rx1259_pos
+    .local int rx1259_off
+    .local int rx1259_eos
+    .local int rx1259_rep
+    .local pmc rx1259_cur
+    (rx1259_cur, rx1259_pos, rx1259_tgt) = self."!cursor_start"()
+    rx1259_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1259_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1259_eos, rx1259_tgt
+    set rx1259_off, 0
+    lt rx1259_pos, 2, rx1259_start
+    sub rx1259_off, rx1259_pos, 1
+    substr rx1259_tgt, rx1259_tgt, rx1259_off
+  rx1259_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1262_done
+    goto rxscan1262_scan
+  rxscan1262_loop:
+    ($P10) = rx1259_cur."from"()
+    inc $P10
+    set rx1259_pos, $P10
+    ge rx1259_pos, rx1259_eos, rxscan1262_done
+  rxscan1262_scan:
+    set_addr $I10, rxscan1262_loop
+    rx1259_cur."!mark_push"(0, rx1259_pos, $I10)
+  rxscan1262_done:
+.annotate "line", 542
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1259_pos, rx1259_eos, rx1259_fail
+    sub $I10, rx1259_pos, rx1259_off
+    substr $S10, rx1259_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx1259_fail
+  # rx subrule "codeblock" subtype=capture negate=
+    rx1259_cur."!cursor_pos"(rx1259_pos)
+    $P10 = rx1259_cur."codeblock"()
+    unless $P10, rx1259_fail
+    rx1259_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("codeblock")
+    rx1259_pos = $P10."pos"()
+.annotate "line", 541
+  # rx pass
+    rx1259_cur."!cursor_pass"(rx1259_pos, "metachar:sym<{ }>")
+    rx1259_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1259_pos)
+    .return (rx1259_cur)
+  rx1259_fail:
+.annotate "line", 536
+    (rx1259_rep, rx1259_pos, $I10, $P10) = rx1259_cur."!mark_fail"(0)
+    lt rx1259_pos, -1, rx1259_done
+    eq rx1259_pos, -1, rx1259_fail
+    jump $I10
+  rx1259_done:
+    rx1259_cur."!cursor_fail"()
+    rx1259_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    .return (rx1259_cur)
+    .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<name>"  :subid("326_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1269 = "328_1267204702.05125" 
-    capture_lex $P1269
-    .local string rx1261_tgt
-    .local int rx1261_pos
-    .local int rx1261_off
-    .local int rx1261_eos
-    .local int rx1261_rep
-    .local pmc rx1261_cur
-    (rx1261_cur, rx1261_pos, rx1261_tgt) = self."!cursor_start"()
-    rx1261_cur."!cursor_debug"("START ", "assertion:sym<name>")
-    rx1261_cur."!cursor_caparray"("assertion", "nibbler", "arglist")
-    .lex unicode:"$\x{a2}", rx1261_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1261_eos, rx1261_tgt
-    set rx1261_off, 0
-    lt rx1261_pos, 2, rx1261_start
-    sub rx1261_off, rx1261_pos, 1
-    substr rx1261_tgt, rx1261_tgt, rx1261_off
-  rx1261_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1264_done
-    goto rxscan1264_scan
-  rxscan1264_loop:
-    ($P10) = rx1261_cur."from"()
-    inc $P10
-    set rx1261_pos, $P10
-    ge rx1261_pos, rx1261_eos, rxscan1264_done
-  rxscan1264_scan:
-    set_addr $I10, rxscan1264_loop
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-  rxscan1264_done:
+.sub "!PREFIX__metachar:sym<{ }>"  :subid("325_1272816833.94956") :method
+.annotate "line", 536
+    new $P1261, "ResizablePMCArray"
+    push $P1261, "{"
+    .return ($P1261)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<{ }>"  :subid("326_1272816833.94956") :method :outer("320_1272816833.94956")
+.annotate "line", 536
+    .local string rx1264_tgt
+    .local int rx1264_pos
+    .local int rx1264_off
+    .local int rx1264_eos
+    .local int rx1264_rep
+    .local pmc rx1264_cur
+    (rx1264_cur, rx1264_pos, rx1264_tgt) = self."!cursor_start"()
+    rx1264_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1264_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1264_eos, rx1264_tgt
+    set rx1264_off, 0
+    lt rx1264_pos, 2, rx1264_start
+    sub rx1264_off, rx1264_pos, 1
+    substr rx1264_tgt, rx1264_tgt, rx1264_off
+  rx1264_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1267_done
+    goto rxscan1267_scan
+  rxscan1267_loop:
+    ($P10) = rx1264_cur."from"()
+    inc $P10
+    set rx1264_pos, $P10
+    ge rx1264_pos, rx1264_eos, rxscan1267_done
+  rxscan1267_scan:
+    set_addr $I10, rxscan1267_loop
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+  rxscan1267_done:
+.annotate "line", 546
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1264_pos, rx1264_eos, rx1264_fail
+    sub $I10, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx1264_fail
+  # rx subrule "codeblock" subtype=capture negate=
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."codeblock"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("codeblock")
+    rx1264_pos = $P10."pos"()
 .annotate "line", 545
+  # rx pass
+    rx1264_cur."!cursor_pass"(rx1264_pos, "assertion:sym<{ }>")
+    rx1264_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1264_pos)
+    .return (rx1264_cur)
+  rx1264_fail:
+.annotate "line", 536
+    (rx1264_rep, rx1264_pos, $I10, $P10) = rx1264_cur."!mark_fail"(0)
+    lt rx1264_pos, -1, rx1264_done
+    eq rx1264_pos, -1, rx1264_fail
+    jump $I10
+  rx1264_done:
+    rx1264_cur."!cursor_fail"()
+    rx1264_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
+    .return (rx1264_cur)
+    .return ()
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "!PREFIX__assertion:sym<{ }>"  :subid("327_1272816833.94956") :method
+.annotate "line", 536
+    new $P1266, "ResizablePMCArray"
+    push $P1266, "{"
+    .return ($P1266)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<name>"  :subid("328_1272816833.94956") :method :outer("320_1272816833.94956")
+.annotate "line", 536
+    .const 'Sub' $P1277 = "330_1272816833.94956" 
+    capture_lex $P1277
+    .local string rx1269_tgt
+    .local int rx1269_pos
+    .local int rx1269_off
+    .local int rx1269_eos
+    .local int rx1269_rep
+    .local pmc rx1269_cur
+    (rx1269_cur, rx1269_pos, rx1269_tgt) = self."!cursor_start"()
+    rx1269_cur."!cursor_debug"("START ", "assertion:sym<name>")
+    rx1269_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    .lex unicode:"$\x{a2}", rx1269_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1269_eos, rx1269_tgt
+    set rx1269_off, 0
+    lt rx1269_pos, 2, rx1269_start
+    sub rx1269_off, rx1269_pos, 1
+    substr rx1269_tgt, rx1269_tgt, rx1269_off
+  rx1269_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1272_done
+    goto rxscan1272_scan
+  rxscan1272_loop:
+    ($P10) = rx1269_cur."from"()
+    inc $P10
+    set rx1269_pos, $P10
+    ge rx1269_pos, rx1269_eos, rxscan1272_done
+  rxscan1272_scan:
+    set_addr $I10, rxscan1272_loop
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
+  rxscan1272_done:
+.annotate "line", 550
   # rx subcapture "longname"
-    set_addr $I10, rxcap_1265_fail
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
+    set_addr $I10, rxcap_1273_fail
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx1261_pos, rx1261_off
-    find_not_cclass $I11, 8192, rx1261_tgt, $I10, rx1261_eos
+    sub $I10, rx1269_pos, rx1269_off
+    find_not_cclass $I11, 8192, rx1269_tgt, $I10, rx1269_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx1261_fail
-    add rx1261_pos, rx1261_off, $I11
-    set_addr $I10, rxcap_1265_fail
-    ($I12, $I11) = rx1261_cur."!mark_peek"($I10)
-    rx1261_cur."!cursor_pos"($I11)
-    ($P10) = rx1261_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1261_pos, "")
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx1269_fail
+    add rx1269_pos, rx1269_off, $I11
+    set_addr $I10, rxcap_1273_fail
+    ($I12, $I11) = rx1269_cur."!mark_peek"($I10)
+    rx1269_cur."!cursor_pos"($I11)
+    ($P10) = rx1269_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1269_pos, "")
+    rx1269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname")
-    goto rxcap_1265_done
-  rxcap_1265_fail:
-    goto rx1261_fail
-  rxcap_1265_done:
+    goto rxcap_1273_done
+  rxcap_1273_fail:
+    goto rx1269_fail
+  rxcap_1273_done:
+.annotate "line", 557
+  # rx rxquantr1274 ** 0..1
+    set_addr $I1280, rxquantr1274_done
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I1280)
+  rxquantr1274_loop:
+  alt1275_0:
+.annotate "line", 551
+    set_addr $I10, alt1275_1
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
 .annotate "line", 552
-  # rx rxquantr1266 ** 0..1
-    set_addr $I1272, rxquantr1266_done
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I1272)
-  rxquantr1266_loop:
-  alt1267_0:
-.annotate "line", 546
-    set_addr $I10, alt1267_1
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 547
   # rx subrule "before" subtype=zerowidth negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    .const 'Sub' $P1269 = "328_1267204702.05125" 
-    capture_lex $P1269
-    $P10 = rx1261_cur."before"($P1269)
-    unless $P10, rx1261_fail
-    goto alt1267_end
-  alt1267_1:
-    set_addr $I10, alt1267_2
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 548
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    .const 'Sub' $P1277 = "330_1272816833.94956" 
+    capture_lex $P1277
+    $P10 = rx1269_cur."before"($P1277)
+    unless $P10, rx1269_fail
+    goto alt1275_end
+  alt1275_1:
+    set_addr $I10, alt1275_2
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
+.annotate "line", 553
   # rx literal  "="
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, "=", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1269_pos, 1
+    gt $I11, rx1269_eos, rx1269_fail
+    sub $I11, rx1269_pos, rx1269_off
+    substr $S10, rx1269_tgt, $I11, 1
+    ne $S10, "=", rx1269_fail
+    add rx1269_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."assertion"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    $P10 = rx1269_cur."assertion"()
+    unless $P10, rx1269_fail
+    rx1269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx1261_pos = $P10."pos"()
-    goto alt1267_end
-  alt1267_2:
-    set_addr $I10, alt1267_3
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 549
+    rx1269_pos = $P10."pos"()
+    goto alt1275_end
+  alt1275_2:
+    set_addr $I10, alt1275_3
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
+.annotate "line", 554
   # rx literal  ":"
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, ":", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1269_pos, 1
+    gt $I11, rx1269_eos, rx1269_fail
+    sub $I11, rx1269_pos, rx1269_off
+    substr $S10, rx1269_tgt, $I11, 1
+    ne $S10, ":", rx1269_fail
+    add rx1269_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."arglist"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    $P10 = rx1269_cur."arglist"()
+    unless $P10, rx1269_fail
+    rx1269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1261_pos = $P10."pos"()
-    goto alt1267_end
-  alt1267_3:
-    set_addr $I10, alt1267_4
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 550
+    rx1269_pos = $P10."pos"()
+    goto alt1275_end
+  alt1275_3:
+    set_addr $I10, alt1275_4
+    rx1269_cur."!mark_push"(0, rx1269_pos, $I10)
+.annotate "line", 555
   # rx literal  "("
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, "(", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1269_pos, 1
+    gt $I11, rx1269_eos, rx1269_fail
+    sub $I11, rx1269_pos, rx1269_off
+    substr $S10, rx1269_tgt, $I11, 1
+    ne $S10, "(", rx1269_fail
+    add rx1269_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."LANG"("MAIN", "arglist")
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    $P10 = rx1269_cur."LANG"("MAIN", "arglist")
+    unless $P10, rx1269_fail
+    rx1269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1261_pos = $P10."pos"()
+    rx1269_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, ")", rx1261_fail
-    add rx1261_pos, 1
-    goto alt1267_end
-  alt1267_4:
-.annotate "line", 551
+    add $I11, rx1269_pos, 1
+    gt $I11, rx1269_eos, rx1269_fail
+    sub $I11, rx1269_pos, rx1269_off
+    substr $S10, rx1269_tgt, $I11, 1
+    ne $S10, ")", rx1269_fail
+    add rx1269_pos, 1
+    goto alt1275_end
+  alt1275_4:
+.annotate "line", 556
   # rx subrule "normspace" subtype=method negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."normspace"()
-    unless $P10, rx1261_fail
-    rx1261_pos = $P10."pos"()
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    $P10 = rx1269_cur."normspace"()
+    unless $P10, rx1269_fail
+    rx1269_pos = $P10."pos"()
   # rx subrule "nibbler" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."nibbler"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1269_cur."!cursor_pos"(rx1269_pos)
+    $P10 = rx1269_cur."nibbler"()
+    unless $P10, rx1269_fail
+    rx1269_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx1261_pos = $P10."pos"()
-  alt1267_end:
-.annotate "line", 552
-    (rx1261_rep) = rx1261_cur."!mark_commit"($I1272)
-  rxquantr1266_done:
-.annotate "line", 544
-  # rx pass
-    rx1261_cur."!cursor_pass"(rx1261_pos, "assertion:sym<name>")
-    rx1261_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1261_pos)
-    .return (rx1261_cur)
-  rx1261_fail:
-.annotate "line", 531
-    (rx1261_rep, rx1261_pos, $I10, $P10) = rx1261_cur."!mark_fail"(0)
-    lt rx1261_pos, -1, rx1261_done
-    eq rx1261_pos, -1, rx1261_fail
-    jump $I10
-  rx1261_done:
-    rx1261_cur."!cursor_fail"()
-    rx1261_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
-    .return (rx1261_cur)
+    rx1269_pos = $P10."pos"()
+  alt1275_end:
+.annotate "line", 557
+    (rx1269_rep) = rx1269_cur."!mark_commit"($I1280)
+  rxquantr1274_done:
+.annotate "line", 549
+  # rx pass
+    rx1269_cur."!cursor_pass"(rx1269_pos, "assertion:sym<name>")
+    rx1269_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1269_pos)
+    .return (rx1269_cur)
+  rx1269_fail:
+.annotate "line", 536
+    (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"()
+    rx1269_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    .return (rx1269_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("327_1267204702.05125") :method
-.annotate "line", 531
-    new $P1263, "ResizablePMCArray"
-    push $P1263, ""
-    .return ($P1263)
+.sub "!PREFIX__assertion:sym<name>"  :subid("329_1272816833.94956") :method
+.annotate "line", 536
+    new $P1271, "ResizablePMCArray"
+    push $P1271, ""
+    .return ($P1271)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1268"  :anon :subid("328_1267204702.05125") :method :outer("326_1267204702.05125")
-.annotate "line", 547
-    .local string rx1270_tgt
-    .local int rx1270_pos
-    .local int rx1270_off
-    .local int rx1270_eos
-    .local int rx1270_rep
-    .local pmc rx1270_cur
-    (rx1270_cur, rx1270_pos, rx1270_tgt) = self."!cursor_start"()
-    rx1270_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1270_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1270_eos, rx1270_tgt
-    set rx1270_off, 0
-    lt rx1270_pos, 2, rx1270_start
-    sub rx1270_off, rx1270_pos, 1
-    substr rx1270_tgt, rx1270_tgt, rx1270_off
-  rx1270_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1271_done
-    goto rxscan1271_scan
-  rxscan1271_loop:
-    ($P10) = rx1270_cur."from"()
-    inc $P10
-    set rx1270_pos, $P10
-    ge rx1270_pos, rx1270_eos, rxscan1271_done
-  rxscan1271_scan:
-    set_addr $I10, rxscan1271_loop
-    rx1270_cur."!mark_push"(0, rx1270_pos, $I10)
-  rxscan1271_done:
+.sub "_block1276"  :anon :subid("330_1272816833.94956") :method :outer("328_1272816833.94956")
+.annotate "line", 552
+    .local string rx1278_tgt
+    .local int rx1278_pos
+    .local int rx1278_off
+    .local int rx1278_eos
+    .local int rx1278_rep
+    .local pmc rx1278_cur
+    (rx1278_cur, rx1278_pos, rx1278_tgt) = self."!cursor_start"()
+    rx1278_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1278_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1278_eos, rx1278_tgt
+    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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1279_done
+    goto rxscan1279_scan
+  rxscan1279_loop:
+    ($P10) = rx1278_cur."from"()
+    inc $P10
+    set rx1278_pos, $P10
+    ge rx1278_pos, rx1278_eos, rxscan1279_done
+  rxscan1279_scan:
+    set_addr $I10, rxscan1279_loop
+    rx1278_cur."!mark_push"(0, rx1278_pos, $I10)
+  rxscan1279_done:
   # rx literal  ">"
-    add $I11, rx1270_pos, 1
-    gt $I11, rx1270_eos, rx1270_fail
-    sub $I11, rx1270_pos, rx1270_off
-    substr $S10, rx1270_tgt, $I11, 1
-    ne $S10, ">", rx1270_fail
-    add rx1270_pos, 1
-  # rx pass
-    rx1270_cur."!cursor_pass"(rx1270_pos, "")
-    rx1270_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1270_pos)
-    .return (rx1270_cur)
-  rx1270_fail:
-    (rx1270_rep, rx1270_pos, $I10, $P10) = rx1270_cur."!mark_fail"(0)
-    lt rx1270_pos, -1, rx1270_done
-    eq rx1270_pos, -1, rx1270_fail
-    jump $I10
-  rx1270_done:
-    rx1270_cur."!cursor_fail"()
-    rx1270_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1270_cur)
+    add $I11, rx1278_pos, 1
+    gt $I11, rx1278_eos, rx1278_fail
+    sub $I11, rx1278_pos, rx1278_off
+    substr $S10, rx1278_tgt, $I11, 1
+    ne $S10, ">", rx1278_fail
+    add rx1278_pos, 1
+  # rx pass
+    rx1278_cur."!cursor_pass"(rx1278_pos, "")
+    rx1278_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1278_pos)
+    .return (rx1278_cur)
+  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"()
+    rx1278_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1278_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "codeblock"  :subid("329_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .local string rx1274_tgt
-    .local int rx1274_pos
-    .local int rx1274_off
-    .local int rx1274_eos
-    .local int rx1274_rep
-    .local pmc rx1274_cur
-    (rx1274_cur, rx1274_pos, rx1274_tgt) = self."!cursor_start"()
-    rx1274_cur."!cursor_debug"("START ", "codeblock")
-    .lex unicode:"$\x{a2}", rx1274_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1274_eos, rx1274_tgt
-    set rx1274_off, 0
-    lt rx1274_pos, 2, rx1274_start
-    sub rx1274_off, rx1274_pos, 1
-    substr rx1274_tgt, rx1274_tgt, rx1274_off
-  rx1274_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1278_done
-    goto rxscan1278_scan
-  rxscan1278_loop:
-    ($P10) = rx1274_cur."from"()
-    inc $P10
-    set rx1274_pos, $P10
-    ge rx1274_pos, rx1274_eos, rxscan1278_done
-  rxscan1278_scan:
-    set_addr $I10, rxscan1278_loop
-    rx1274_cur."!mark_push"(0, rx1274_pos, $I10)
-  rxscan1278_done:
-.annotate "line", 557
+.sub "codeblock"  :subid("331_1272816833.94956") :method :outer("320_1272816833.94956")
+.annotate "line", 536
+    .local string rx1282_tgt
+    .local int rx1282_pos
+    .local int rx1282_off
+    .local int rx1282_eos
+    .local int rx1282_rep
+    .local pmc rx1282_cur
+    (rx1282_cur, rx1282_pos, rx1282_tgt) = self."!cursor_start"()
+    rx1282_cur."!cursor_debug"("START ", "codeblock")
+    .lex unicode:"$\x{a2}", rx1282_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1282_eos, rx1282_tgt
+    set rx1282_off, 0
+    lt rx1282_pos, 2, rx1282_start
+    sub rx1282_off, rx1282_pos, 1
+    substr rx1282_tgt, rx1282_tgt, rx1282_off
+  rx1282_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1286_done
+    goto rxscan1286_scan
+  rxscan1286_loop:
+    ($P10) = rx1282_cur."from"()
+    inc $P10
+    set rx1282_pos, $P10
+    ge rx1282_pos, rx1282_eos, rxscan1286_done
+  rxscan1286_scan:
+    set_addr $I10, rxscan1286_loop
+    rx1282_cur."!mark_push"(0, rx1282_pos, $I10)
+  rxscan1286_done:
+.annotate "line", 562
   # rx subrule "LANG" subtype=capture negate=
-    rx1274_cur."!cursor_pos"(rx1274_pos)
-    $P10 = rx1274_cur."LANG"("MAIN", "pblock")
-    unless $P10, rx1274_fail
-    rx1274_cur."!mark_push"(0, -1, 0, $P10)
+    rx1282_cur."!cursor_pos"(rx1282_pos)
+    $P10 = rx1282_cur."LANG"("MAIN", "pblock")
+    unless $P10, rx1282_fail
+    rx1282_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx1274_pos = $P10."pos"()
-.annotate "line", 556
+    rx1282_pos = $P10."pos"()
+.annotate "line", 561
   # rx pass
-    rx1274_cur."!cursor_pass"(rx1274_pos, "codeblock")
-    rx1274_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1274_pos)
-    .return (rx1274_cur)
-  rx1274_fail:
-.annotate "line", 531
-    (rx1274_rep, rx1274_pos, $I10, $P10) = rx1274_cur."!mark_fail"(0)
-    lt rx1274_pos, -1, rx1274_done
-    eq rx1274_pos, -1, rx1274_fail
-    jump $I10
-  rx1274_done:
-    rx1274_cur."!cursor_fail"()
-    rx1274_cur."!cursor_debug"("FAIL  ", "codeblock")
-    .return (rx1274_cur)
+    rx1282_cur."!cursor_pass"(rx1282_pos, "codeblock")
+    rx1282_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1282_pos)
+    .return (rx1282_cur)
+  rx1282_fail:
+.annotate "line", 536
+    (rx1282_rep, rx1282_pos, $I10, $P10) = rx1282_cur."!mark_fail"(0)
+    lt rx1282_pos, -1, rx1282_done
+    eq rx1282_pos, -1, rx1282_fail
+    jump $I10
+  rx1282_done:
+    rx1282_cur."!cursor_fail"()
+    rx1282_cur."!cursor_debug"("FAIL  ", "codeblock")
+    .return (rx1282_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__codeblock"  :subid("330_1267204702.05125") :method
-.annotate "line", 531
-    $P1276 = self."!PREFIX__!subrule"("block", "")
-    new $P1277, "ResizablePMCArray"
-    push $P1277, $P1276
-    .return ($P1277)
+.sub "!PREFIX__codeblock"  :subid("332_1272816833.94956") :method
+.annotate "line", 536
+    $P1284 = self."!PREFIX__!subrule"("block", "")
+    new $P1285, "ResizablePMCArray"
+    push $P1285, $P1284
+    .return ($P1285)
 .end
 
 ### .include 'gen/nqp-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204714.47172")
+.sub "_block11"  :anon :subid("10_1272816841.80681")
 .annotate "line", 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
 .annotate "line", 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
-    $P2168 = $P14()
+    $P2175 = $P14()
 .annotate "line", 1
-    .return ($P2168)
+    .return ($P2175)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post126") :outer("10_1267204714.47172")
+.sub "" :load :init :subid("post127") :outer("10_1272816841.80681")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204714.47172" 
+    .const 'Sub' $P12 = "10_1272816841.80681" 
     .local pmc block
     set block, $P12
-    $P2169 = get_root_global ["parrot"], "P6metaclass"
-    $P2169."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
+    $P2176 = get_root_global ["parrot"], "P6metaclass"
+    $P2176."new_class"("NQP::Actions", "HLL::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1267204714.47172") :outer("10_1267204714.47172")
+.sub "_block13"  :subid("11_1272816841.80681") :outer("10_1272816841.80681")
 .annotate "line", 3
-    .const 'Sub' $P2164 = "125_1267204714.47172" 
-    capture_lex $P2164
-    get_hll_global $P2100, ["NQP";"RegexActions"], "_block2099" 
-    capture_lex $P2100
-    .const 'Sub' $P2089 = "119_1267204714.47172" 
-    capture_lex $P2089
-    .const 'Sub' $P2077 = "118_1267204714.47172" 
-    capture_lex $P2077
-    .const 'Sub' $P2067 = "117_1267204714.47172" 
-    capture_lex $P2067
-    .const 'Sub' $P2057 = "116_1267204714.47172" 
-    capture_lex $P2057
-    .const 'Sub' $P2047 = "115_1267204714.47172" 
+    .const 'Sub' $P2171 = "126_1272816841.80681" 
+    capture_lex $P2171
+    get_hll_global $P2107, ["NQP";"RegexActions"], "_block2106" 
+    capture_lex $P2107
+    .const 'Sub' $P2096 = "120_1272816841.80681" 
+    capture_lex $P2096
+    .const 'Sub' $P2084 = "119_1272816841.80681" 
+    capture_lex $P2084
+    .const 'Sub' $P2074 = "118_1272816841.80681" 
+    capture_lex $P2074
+    .const 'Sub' $P2064 = "117_1272816841.80681" 
+    capture_lex $P2064
+    .const 'Sub' $P2054 = "116_1272816841.80681" 
+    capture_lex $P2054
+    .const 'Sub' $P2047 = "115_1272816841.80681" 
     capture_lex $P2047
-    .const 'Sub' $P2033 = "114_1267204714.47172" 
+    .const 'Sub' $P2033 = "114_1272816841.80681" 
     capture_lex $P2033
-    .const 'Sub' $P2023 = "113_1267204714.47172" 
+    .const 'Sub' $P2023 = "113_1272816841.80681" 
     capture_lex $P2023
-    .const 'Sub' $P1986 = "112_1267204714.47172" 
+    .const 'Sub' $P1986 = "112_1272816841.80681" 
     capture_lex $P1986
-    .const 'Sub' $P1972 = "111_1267204714.47172" 
+    .const 'Sub' $P1972 = "111_1272816841.80681" 
     capture_lex $P1972
-    .const 'Sub' $P1962 = "110_1267204714.47172" 
+    .const 'Sub' $P1962 = "110_1272816841.80681" 
     capture_lex $P1962
-    .const 'Sub' $P1952 = "109_1267204714.47172" 
+    .const 'Sub' $P1952 = "109_1272816841.80681" 
     capture_lex $P1952
-    .const 'Sub' $P1942 = "108_1267204714.47172" 
+    .const 'Sub' $P1942 = "108_1272816841.80681" 
     capture_lex $P1942
-    .const 'Sub' $P1932 = "107_1267204714.47172" 
+    .const 'Sub' $P1932 = "107_1272816841.80681" 
     capture_lex $P1932
-    .const 'Sub' $P1922 = "106_1267204714.47172" 
+    .const 'Sub' $P1922 = "106_1272816841.80681" 
     capture_lex $P1922
-    .const 'Sub' $P1894 = "105_1267204714.47172" 
+    .const 'Sub' $P1894 = "105_1272816841.80681" 
     capture_lex $P1894
-    .const 'Sub' $P1877 = "104_1267204714.47172" 
+    .const 'Sub' $P1877 = "104_1272816841.80681" 
     capture_lex $P1877
-    .const 'Sub' $P1867 = "103_1267204714.47172" 
+    .const 'Sub' $P1867 = "103_1272816841.80681" 
     capture_lex $P1867
-    .const 'Sub' $P1854 = "102_1267204714.47172" 
+    .const 'Sub' $P1854 = "102_1272816841.80681" 
     capture_lex $P1854
-    .const 'Sub' $P1841 = "101_1267204714.47172" 
+    .const 'Sub' $P1841 = "101_1272816841.80681" 
     capture_lex $P1841
-    .const 'Sub' $P1828 = "100_1267204714.47172" 
+    .const 'Sub' $P1828 = "100_1272816841.80681" 
     capture_lex $P1828
-    .const 'Sub' $P1818 = "99_1267204714.47172" 
+    .const 'Sub' $P1818 = "99_1272816841.80681" 
     capture_lex $P1818
-    .const 'Sub' $P1789 = "98_1267204714.47172" 
+    .const 'Sub' $P1789 = "98_1272816841.80681" 
     capture_lex $P1789
-    .const 'Sub' $P1769 = "97_1267204714.47172" 
+    .const 'Sub' $P1769 = "97_1272816841.80681" 
     capture_lex $P1769
-    .const 'Sub' $P1759 = "96_1267204714.47172" 
+    .const 'Sub' $P1759 = "96_1272816841.80681" 
     capture_lex $P1759
-    .const 'Sub' $P1749 = "95_1267204714.47172" 
+    .const 'Sub' $P1749 = "95_1272816841.80681" 
     capture_lex $P1749
-    .const 'Sub' $P1722 = "94_1267204714.47172" 
+    .const 'Sub' $P1722 = "94_1272816841.80681" 
     capture_lex $P1722
-    .const 'Sub' $P1704 = "93_1267204714.47172" 
+    .const 'Sub' $P1704 = "93_1272816841.80681" 
     capture_lex $P1704
-    .const 'Sub' $P1694 = "92_1267204714.47172" 
+    .const 'Sub' $P1694 = "92_1272816841.80681" 
     capture_lex $P1694
-    .const 'Sub' $P1610 = "89_1267204714.47172" 
+    .const 'Sub' $P1610 = "89_1272816841.80681" 
     capture_lex $P1610
-    .const 'Sub' $P1600 = "88_1267204714.47172" 
+    .const 'Sub' $P1600 = "88_1272816841.80681" 
     capture_lex $P1600
-    .const 'Sub' $P1571 = "87_1267204714.47172" 
+    .const 'Sub' $P1571 = "87_1272816841.80681" 
     capture_lex $P1571
-    .const 'Sub' $P1529 = "86_1267204714.47172" 
+    .const 'Sub' $P1529 = "86_1272816841.80681" 
     capture_lex $P1529
-    .const 'Sub' $P1513 = "85_1267204714.47172" 
+    .const 'Sub' $P1513 = "85_1272816841.80681" 
     capture_lex $P1513
-    .const 'Sub' $P1504 = "84_1267204714.47172" 
+    .const 'Sub' $P1504 = "84_1272816841.80681" 
     capture_lex $P1504
-    .const 'Sub' $P1472 = "83_1267204714.47172" 
+    .const 'Sub' $P1472 = "83_1272816841.80681" 
     capture_lex $P1472
-    .const 'Sub' $P1373 = "80_1267204714.47172" 
+    .const 'Sub' $P1373 = "80_1272816841.80681" 
     capture_lex $P1373
-    .const 'Sub' $P1356 = "79_1267204714.47172" 
+    .const 'Sub' $P1356 = "79_1272816841.80681" 
     capture_lex $P1356
-    .const 'Sub' $P1336 = "78_1267204714.47172" 
+    .const 'Sub' $P1336 = "78_1272816841.80681" 
     capture_lex $P1336
-    .const 'Sub' $P1252 = "77_1267204714.47172" 
+    .const 'Sub' $P1252 = "77_1272816841.80681" 
     capture_lex $P1252
-    .const 'Sub' $P1228 = "75_1267204714.47172" 
+    .const 'Sub' $P1228 = "75_1272816841.80681" 
     capture_lex $P1228
-    .const 'Sub' $P1194 = "73_1267204714.47172" 
+    .const 'Sub' $P1194 = "73_1272816841.80681" 
     capture_lex $P1194
-    .const 'Sub' $P1144 = "71_1267204714.47172" 
+    .const 'Sub' $P1144 = "71_1272816841.80681" 
     capture_lex $P1144
-    .const 'Sub' $P1134 = "70_1267204714.47172" 
+    .const 'Sub' $P1134 = "70_1272816841.80681" 
     capture_lex $P1134
-    .const 'Sub' $P1124 = "69_1267204714.47172" 
+    .const 'Sub' $P1124 = "69_1272816841.80681" 
     capture_lex $P1124
-    .const 'Sub' $P1053 = "67_1267204714.47172" 
+    .const 'Sub' $P1053 = "67_1272816841.80681" 
     capture_lex $P1053
-    .const 'Sub' $P1036 = "66_1267204714.47172" 
+    .const 'Sub' $P1036 = "66_1272816841.80681" 
     capture_lex $P1036
-    .const 'Sub' $P1026 = "65_1267204714.47172" 
+    .const 'Sub' $P1026 = "65_1272816841.80681" 
     capture_lex $P1026
-    .const 'Sub' $P1016 = "64_1267204714.47172" 
+    .const 'Sub' $P1016 = "64_1272816841.80681" 
     capture_lex $P1016
-    .const 'Sub' $P1006 = "63_1267204714.47172" 
+    .const 'Sub' $P1006 = "63_1272816841.80681" 
     capture_lex $P1006
-    .const 'Sub' $P982 = "62_1267204714.47172" 
+    .const 'Sub' $P982 = "62_1272816841.80681" 
     capture_lex $P982
-    .const 'Sub' $P929 = "61_1267204714.47172" 
+    .const 'Sub' $P929 = "61_1272816841.80681" 
     capture_lex $P929
-    .const 'Sub' $P919 = "60_1267204714.47172" 
+    .const 'Sub' $P919 = "60_1272816841.80681" 
     capture_lex $P919
-    .const 'Sub' $P830 = "58_1267204714.47172" 
+    .const 'Sub' $P830 = "58_1272816841.80681" 
     capture_lex $P830
-    .const 'Sub' $P804 = "57_1267204714.47172" 
+    .const 'Sub' $P804 = "57_1272816841.80681" 
     capture_lex $P804
-    .const 'Sub' $P788 = "56_1267204714.47172" 
+    .const 'Sub' $P788 = "56_1272816841.80681" 
     capture_lex $P788
-    .const 'Sub' $P778 = "55_1267204714.47172" 
+    .const 'Sub' $P778 = "55_1272816841.80681" 
     capture_lex $P778
-    .const 'Sub' $P768 = "54_1267204714.47172" 
+    .const 'Sub' $P768 = "54_1272816841.80681" 
     capture_lex $P768
-    .const 'Sub' $P758 = "53_1267204714.47172" 
+    .const 'Sub' $P758 = "53_1272816841.80681" 
     capture_lex $P758
-    .const 'Sub' $P748 = "52_1267204714.47172" 
+    .const 'Sub' $P748 = "52_1272816841.80681" 
     capture_lex $P748
-    .const 'Sub' $P738 = "51_1267204714.47172" 
+    .const 'Sub' $P738 = "51_1272816841.80681" 
     capture_lex $P738
-    .const 'Sub' $P728 = "50_1267204714.47172" 
+    .const 'Sub' $P728 = "50_1272816841.80681" 
     capture_lex $P728
-    .const 'Sub' $P718 = "49_1267204714.47172" 
+    .const 'Sub' $P718 = "49_1272816841.80681" 
     capture_lex $P718
-    .const 'Sub' $P708 = "48_1267204714.47172" 
+    .const 'Sub' $P708 = "48_1272816841.80681" 
     capture_lex $P708
-    .const 'Sub' $P698 = "47_1267204714.47172" 
+    .const 'Sub' $P698 = "47_1272816841.80681" 
     capture_lex $P698
-    .const 'Sub' $P688 = "46_1267204714.47172" 
+    .const 'Sub' $P688 = "46_1272816841.80681" 
     capture_lex $P688
-    .const 'Sub' $P678 = "45_1267204714.47172" 
+    .const 'Sub' $P678 = "45_1272816841.80681" 
     capture_lex $P678
-    .const 'Sub' $P668 = "44_1267204714.47172" 
+    .const 'Sub' $P668 = "44_1272816841.80681" 
     capture_lex $P668
-    .const 'Sub' $P658 = "43_1267204714.47172" 
+    .const 'Sub' $P658 = "43_1272816841.80681" 
     capture_lex $P658
-    .const 'Sub' $P640 = "42_1267204714.47172" 
+    .const 'Sub' $P640 = "42_1272816841.80681" 
     capture_lex $P640
-    .const 'Sub' $P605 = "41_1267204714.47172" 
+    .const 'Sub' $P605 = "41_1272816841.80681" 
     capture_lex $P605
-    .const 'Sub' $P589 = "40_1267204714.47172" 
+    .const 'Sub' $P589 = "40_1272816841.80681" 
     capture_lex $P589
-    .const 'Sub' $P568 = "39_1267204714.47172" 
+    .const 'Sub' $P568 = "39_1272816841.80681" 
     capture_lex $P568
-    .const 'Sub' $P548 = "38_1267204714.47172" 
+    .const 'Sub' $P548 = "38_1272816841.80681" 
     capture_lex $P548
-    .const 'Sub' $P535 = "37_1267204714.47172" 
+    .const 'Sub' $P535 = "37_1272816841.80681" 
     capture_lex $P535
-    .const 'Sub' $P509 = "36_1267204714.47172" 
+    .const 'Sub' $P509 = "36_1272816841.80681" 
     capture_lex $P509
-    .const 'Sub' $P473 = "35_1267204714.47172" 
+    .const 'Sub' $P473 = "35_1272816841.80681" 
     capture_lex $P473
-    .const 'Sub' $P456 = "34_1267204714.47172" 
+    .const 'Sub' $P456 = "34_1272816841.80681" 
     capture_lex $P456
-    .const 'Sub' $P442 = "33_1267204714.47172" 
+    .const 'Sub' $P442 = "33_1272816841.80681" 
     capture_lex $P442
-    .const 'Sub' $P389 = "31_1267204714.47172" 
+    .const 'Sub' $P389 = "31_1272816841.80681" 
     capture_lex $P389
-    .const 'Sub' $P376 = "30_1267204714.47172" 
+    .const 'Sub' $P376 = "30_1272816841.80681" 
     capture_lex $P376
-    .const 'Sub' $P357 = "29_1267204714.47172" 
+    .const 'Sub' $P357 = "29_1272816841.80681" 
     capture_lex $P357
-    .const 'Sub' $P347 = "28_1267204714.47172" 
+    .const 'Sub' $P347 = "28_1272816841.80681" 
     capture_lex $P347
-    .const 'Sub' $P337 = "27_1267204714.47172" 
+    .const 'Sub' $P337 = "27_1272816841.80681" 
     capture_lex $P337
-    .const 'Sub' $P321 = "26_1267204714.47172" 
+    .const 'Sub' $P321 = "26_1272816841.80681" 
     capture_lex $P321
-    .const 'Sub' $P261 = "24_1267204714.47172" 
+    .const 'Sub' $P261 = "24_1272816841.80681" 
     capture_lex $P261
-    .const 'Sub' $P212 = "22_1267204714.47172" 
+    .const 'Sub' $P212 = "22_1272816841.80681" 
     capture_lex $P212
-    .const 'Sub' $P193 = "21_1267204714.47172" 
+    .const 'Sub' $P193 = "21_1272816841.80681" 
     capture_lex $P193
-    .const 'Sub' $P160 = "20_1267204714.47172" 
+    .const 'Sub' $P160 = "20_1272816841.80681" 
     capture_lex $P160
-    .const 'Sub' $P150 = "19_1267204714.47172" 
+    .const 'Sub' $P150 = "19_1272816841.80681" 
     capture_lex $P150
-    .const 'Sub' $P96 = "18_1267204714.47172" 
+    .const 'Sub' $P96 = "18_1272816841.80681" 
     capture_lex $P96
-    .const 'Sub' $P81 = "17_1267204714.47172" 
+    .const 'Sub' $P81 = "17_1272816841.80681" 
     capture_lex $P81
-    .const 'Sub' $P61 = "16_1267204714.47172" 
+    .const 'Sub' $P61 = "16_1272816841.80681" 
     capture_lex $P61
-    .const 'Sub' $P26 = "13_1267204714.47172" 
+    .const 'Sub' $P26 = "13_1272816841.80681" 
     capture_lex $P26
-    .const 'Sub' $P16 = "12_1267204714.47172" 
+    .const 'Sub' $P16 = "12_1272816841.80681" 
     capture_lex $P16
     get_global $P15, "@BLOCK"
-    unless_null $P15, vivify_129
+    unless_null $P15, vivify_130
     $P15 = root_new ['parrot';'ResizablePMCArray']
     set_global "@BLOCK", $P15
-  vivify_129:
+  vivify_130:
 .annotate "line", 9
-    .const 'Sub' $P16 = "12_1267204714.47172" 
+    .const 'Sub' $P16 = "12_1272816841.80681" 
     capture_lex $P16
     .lex "xblock_immediate", $P16
 .annotate "line", 14
-    .const 'Sub' $P26 = "13_1267204714.47172" 
+    .const 'Sub' $P26 = "13_1272816841.80681" 
     capture_lex $P26
     .lex "block_immediate", $P26
 .annotate "line", 24
-    .const 'Sub' $P61 = "16_1267204714.47172" 
+    .const 'Sub' $P61 = "16_1272816841.80681" 
     capture_lex $P61
     .lex "vivitype", $P61
 .annotate "line", 43
-    .const 'Sub' $P81 = "17_1267204714.47172" 
+    .const 'Sub' $P81 = "17_1272816841.80681" 
     capture_lex $P81
     .lex "colonpair_str", $P81
 .annotate "line", 190
-    .const 'Sub' $P96 = "18_1267204714.47172" 
+    .const 'Sub' $P96 = "18_1272816841.80681" 
     capture_lex $P96
     .lex "push_block_handler", $P96
 .annotate "line", 3
@@ -16015,69 +16158,69 @@
     find_lex $P192, "colonpair_str"
 .annotate "line", 183
     find_lex $P588, "push_block_handler"
-.annotate "line", 768
-    get_hll_global $P2100, ["NQP";"RegexActions"], "_block2099" 
-    capture_lex $P2100
-    $P2162 = $P2100()
+.annotate "line", 769
+    get_hll_global $P2107, ["NQP";"RegexActions"], "_block2106" 
+    capture_lex $P2107
+    $P2169 = $P2107()
 .annotate "line", 3
-    .return ($P2162)
+    .return ($P2169)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post127") :outer("11_1267204714.47172")
+.sub "" :load :init :subid("post128") :outer("11_1272816841.80681")
 .annotate "line", 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate "line", 5
-    .const 'Sub' $P2164 = "125_1267204714.47172" 
-    capture_lex $P2164
-    $P2164()
-    $P2167 = get_root_global ["parrot"], "P6metaclass"
-    $P2167."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
+    .const 'Sub' $P2171 = "126_1272816841.80681" 
+    capture_lex $P2171
+    $P2171()
+    $P2174 = get_root_global ["parrot"], "P6metaclass"
+    $P2174."new_class"("NQP::RegexActions", "Regex::P6Regex::Actions" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2163"  :anon :subid("125_1267204714.47172") :outer("11_1267204714.47172")
+.sub "_block2170"  :anon :subid("126_1272816841.80681") :outer("11_1272816841.80681")
 .annotate "line", 6
-    get_global $P2165, "@BLOCK"
-    unless_null $P2165, vivify_128
-    $P2165 = root_new ['parrot';'ResizablePMCArray']
-    set_global "@BLOCK", $P2165
-  vivify_128:
- $P2166 = new ['ResizablePMCArray'] 
-    set_global "@BLOCK", $P2166
+    get_global $P2172, "@BLOCK"
+    unless_null $P2172, vivify_129
+    $P2172 = root_new ['parrot';'ResizablePMCArray']
+    set_global "@BLOCK", $P2172
+  vivify_129:
+ $P2173 = new ['ResizablePMCArray'] 
+    set_global "@BLOCK", $P2173
 .annotate "line", 5
-    .return ($P2166)
+    .return ($P2173)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock_immediate"  :subid("12_1267204714.47172") :outer("11_1267204714.47172")
+.sub "xblock_immediate"  :subid("12_1272816841.80681") :outer("11_1272816841.80681")
     .param pmc param_19
 .annotate "line", 9
     new $P18, 'ExceptionHandler'
     set_addr $P18, control_17
-    $P18."handle_types"(58)
+    $P18."handle_types"(57)
     push_eh $P18
     .lex "$xblock", param_19
 .annotate "line", 10
     find_lex $P20, "$xblock"
-    unless_null $P20, vivify_130
+    unless_null $P20, vivify_131
     $P20 = root_new ['parrot';'ResizablePMCArray']
-  vivify_130:
+  vivify_131:
     set $P21, $P20[1]
-    unless_null $P21, vivify_131
+    unless_null $P21, vivify_132
     new $P21, "Undef"
-  vivify_131:
+  vivify_132:
     $P22 = "block_immediate"($P21)
     find_lex $P23, "$xblock"
-    unless_null $P23, vivify_132
+    unless_null $P23, vivify_133
     $P23 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$xblock", $P23
-  vivify_132:
+  vivify_133:
     set $P23[1], $P22
     find_lex $P24, "$xblock"
 .annotate "line", 9
@@ -16091,14 +16234,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block_immediate"  :subid("13_1267204714.47172") :outer("11_1267204714.47172")
+.sub "block_immediate"  :subid("13_1272816841.80681") :outer("11_1272816841.80681")
     .param pmc param_29
 .annotate "line", 14
-    .const 'Sub' $P39 = "14_1267204714.47172" 
+    .const 'Sub' $P39 = "14_1272816841.80681" 
     capture_lex $P39
     new $P28, 'ExceptionHandler'
     set_addr $P28, control_27
-    $P28."handle_types"(58)
+    $P28."handle_types"(57)
     push_eh $P28
     .lex "$block", param_29
 .annotate "line", 15
@@ -16116,7 +16259,7 @@
     set $P32, $P37
   unless_33_end:
     if $P32, unless_31_end
-    .const 'Sub' $P39 = "14_1267204714.47172" 
+    .const 'Sub' $P39 = "14_1272816841.80681" 
     capture_lex $P39
     $P39()
   unless_31_end:
@@ -16132,9 +16275,9 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block38"  :anon :subid("14_1267204714.47172") :outer("13_1267204714.47172")
+.sub "_block38"  :anon :subid("14_1272816841.80681") :outer("13_1272816841.80681")
 .annotate "line", 16
-    .const 'Sub' $P50 = "15_1267204714.47172" 
+    .const 'Sub' $P50 = "15_1272816841.80681" 
     capture_lex $P50
 .annotate "line", 17
     new $P40, "Undef"
@@ -16147,17 +16290,17 @@
     find_lex $P45, "$block"
     $P46 = $P45."list"()
     defined $I47, $P46
-    unless $I47, for_undef_133
+    unless $I47, for_undef_134
     iter $P44, $P46
     new $P56, 'ExceptionHandler'
     set_addr $P56, loop55_handler
-    $P56."handle_types"(65, 67, 66)
+    $P56."handle_types"(64, 66, 65)
     push_eh $P56
   loop55_test:
     unless $P44, loop55_done
     shift $P48, $P44
   loop55_redo:
-    .const 'Sub' $P50 = "15_1267204714.47172" 
+    .const 'Sub' $P50 = "15_1272816841.80681" 
     capture_lex $P50
     $P50($P48)
   loop55_next:
@@ -16166,11 +16309,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P57, exception, 'type'
-    eq $P57, 65, loop55_next
-    eq $P57, 67, loop55_redo
+    eq $P57, 64, loop55_next
+    eq $P57, 66, loop55_redo
   loop55_done:
     pop_eh 
-  for_undef_133:
+  for_undef_134:
 .annotate "line", 19
     find_lex $P58, "$stmts"
     store_lex "$block", $P58
@@ -16180,7 +16323,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block49"  :anon :subid("15_1267204714.47172") :outer("14_1267204714.47172")
+.sub "_block49"  :anon :subid("15_1272816841.80681") :outer("14_1272816841.80681")
     .param pmc param_51
 .annotate "line", 18
     .lex "$_", param_51
@@ -16192,12 +16335,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "vivitype"  :subid("16_1267204714.47172") :outer("11_1267204714.47172")
+.sub "vivitype"  :subid("16_1272816841.80681") :outer("11_1272816841.80681")
     .param pmc param_64
 .annotate "line", 24
     new $P63, 'ExceptionHandler'
     set_addr $P63, control_62
-    $P63."handle_types"(58)
+    $P63."handle_types"(57)
     push_eh $P63
     .lex "$sigil", param_64
 .annotate "line", 25
@@ -16240,12 +16383,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair_str"  :subid("17_1267204714.47172") :outer("11_1267204714.47172")
+.sub "colonpair_str"  :subid("17_1272816841.80681") :outer("11_1272816841.80681")
     .param pmc param_84
 .annotate "line", 43
     new $P83, 'ExceptionHandler'
     set_addr $P83, control_82
-    $P83."handle_types"(58)
+    $P83."handle_types"(57)
     push_eh $P83
     .lex "$ast", param_84
 .annotate "line", 44
@@ -16278,36 +16421,36 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "push_block_handler"  :subid("18_1267204714.47172") :outer("11_1267204714.47172")
+.sub "push_block_handler"  :subid("18_1272816841.80681") :outer("11_1272816841.80681")
     .param pmc param_99
     .param pmc param_100
 .annotate "line", 190
     new $P98, 'ExceptionHandler'
     set_addr $P98, control_97
-    $P98."handle_types"(58)
+    $P98."handle_types"(57)
     push_eh $P98
     .lex "$/", param_99
     .lex "$block", param_100
 .annotate "line", 191
     get_global $P102, "@BLOCK"
-    unless_null $P102, vivify_134
+    unless_null $P102, vivify_135
     $P102 = root_new ['parrot';'ResizablePMCArray']
-  vivify_134:
+  vivify_135:
     set $P103, $P102[0]
-    unless_null $P103, vivify_135
+    unless_null $P103, vivify_136
     new $P103, "Undef"
-  vivify_135:
+  vivify_136:
     $P104 = $P103."handlers"()
     if $P104, unless_101_end
 .annotate "line", 192
     get_global $P105, "@BLOCK"
-    unless_null $P105, vivify_136
+    unless_null $P105, vivify_137
     $P105 = root_new ['parrot';'ResizablePMCArray']
-  vivify_136:
+  vivify_137:
     set $P106, $P105[0]
-    unless_null $P106, vivify_137
+    unless_null $P106, vivify_138
     new $P106, "Undef"
-  vivify_137:
+  vivify_138:
     new $P107, "ResizablePMCArray"
     $P106."handlers"($P107)
   unless_101_end:
@@ -16348,13 +16491,13 @@
     $P124."blocktype"("declaration")
 .annotate "line", 207
     get_global $P125, "@BLOCK"
-    unless_null $P125, vivify_138
+    unless_null $P125, vivify_139
     $P125 = root_new ['parrot';'ResizablePMCArray']
-  vivify_138:
+  vivify_139:
     set $P126, $P125[0]
-    unless_null $P126, vivify_139
+    unless_null $P126, vivify_140
     new $P126, "Undef"
-  vivify_139:
+  vivify_140:
     $P127 = $P126."handlers"()
 .annotate "line", 208
     get_hll_global $P128, ["PAST"], "Control"
@@ -16395,24 +16538,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "TOP"  :subid("19_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "TOP"  :subid("19_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_153
 .annotate "line", 33
     new $P152, 'ExceptionHandler'
     set_addr $P152, control_151
-    $P152."handle_types"(58)
+    $P152."handle_types"(57)
     push_eh $P152
     .lex "self", self
     .lex "$/", param_153
     find_lex $P154, "$/"
     find_lex $P155, "$/"
-    unless_null $P155, vivify_140
+    unless_null $P155, vivify_141
     $P155 = root_new ['parrot';'Hash']
-  vivify_140:
+  vivify_141:
     set $P156, $P155["comp_unit"]
-    unless_null $P156, vivify_141
+    unless_null $P156, vivify_142
     new $P156, "Undef"
-  vivify_141:
+  vivify_142:
     $P157 = $P156."ast"()
     $P158 = $P154."!make"($P157)
     .return ($P158)
@@ -16425,12 +16568,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "deflongname"  :subid("20_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "deflongname"  :subid("20_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_163
 .annotate "line", 35
     new $P162, 'ExceptionHandler'
     set_addr $P162, control_161
-    $P162."handle_types"(58)
+    $P162."handle_types"(57)
     push_eh $P162
     .lex "self", self
     .lex "$/", param_163
@@ -16438,13 +16581,13 @@
     find_lex $P164, "$/"
 .annotate "line", 37
     find_lex $P167, "$/"
-    unless_null $P167, vivify_142
+    unless_null $P167, vivify_143
     $P167 = root_new ['parrot';'Hash']
-  vivify_142:
+  vivify_143:
     set $P168, $P167["colonpair"]
-    unless_null $P168, vivify_143
+    unless_null $P168, vivify_144
     new $P168, "Undef"
-  vivify_143:
+  vivify_144:
     if $P168, if_166
 .annotate "line", 39
     find_lex $P188, "$/"
@@ -16455,46 +16598,46 @@
     goto if_166_end
   if_166:
     find_lex $P169, "$/"
-    unless_null $P169, vivify_144
+    unless_null $P169, vivify_145
     $P169 = root_new ['parrot';'Hash']
-  vivify_144:
+  vivify_145:
     set $P170, $P169["identifier"]
-    unless_null $P170, vivify_145
+    unless_null $P170, vivify_146
     new $P170, "Undef"
-  vivify_145:
+  vivify_146:
     set $S171, $P170
     new $P172, 'String'
     set $P172, $S171
     concat $P173, $P172, ":"
     find_lex $P174, "$/"
-    unless_null $P174, vivify_146
+    unless_null $P174, vivify_147
     $P174 = root_new ['parrot';'Hash']
-  vivify_146:
+  vivify_147:
     set $P175, $P174["colonpair"]
-    unless_null $P175, vivify_147
+    unless_null $P175, vivify_148
     $P175 = root_new ['parrot';'ResizablePMCArray']
-  vivify_147:
+  vivify_148:
     set $P176, $P175[0]
-    unless_null $P176, vivify_148
+    unless_null $P176, vivify_149
     new $P176, "Undef"
-  vivify_148:
+  vivify_149:
     $P177 = $P176."ast"()
     $S178 = $P177."named"()
     concat $P179, $P173, $S178
     concat $P180, $P179, "<"
 .annotate "line", 38
     find_lex $P181, "$/"
-    unless_null $P181, vivify_149
+    unless_null $P181, vivify_150
     $P181 = root_new ['parrot';'Hash']
-  vivify_149:
+  vivify_150:
     set $P182, $P181["colonpair"]
-    unless_null $P182, vivify_150
+    unless_null $P182, vivify_151
     $P182 = root_new ['parrot';'ResizablePMCArray']
-  vivify_150:
+  vivify_151:
     set $P183, $P182[0]
-    unless_null $P183, vivify_151
+    unless_null $P183, vivify_152
     new $P183, "Undef"
-  vivify_151:
+  vivify_152:
     $P184 = $P183."ast"()
     $S185 = "colonpair_str"($P184)
     concat $P186, $P180, $S185
@@ -16514,12 +16657,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "comp_unit"  :subid("21_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "comp_unit"  :subid("21_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_196
 .annotate "line", 49
     new $P195, 'ExceptionHandler'
     set_addr $P195, control_194
-    $P195."handle_types"(58)
+    $P195."handle_types"(57)
     push_eh $P195
     .lex "self", self
     .lex "$/", param_196
@@ -16531,13 +16674,13 @@
     .lex "$BLOCK", $P198
 .annotate "line", 50
     find_lex $P199, "$/"
-    unless_null $P199, vivify_152
+    unless_null $P199, vivify_153
     $P199 = root_new ['parrot';'Hash']
-  vivify_152:
+  vivify_153:
     set $P200, $P199["statementlist"]
-    unless_null $P200, vivify_153
+    unless_null $P200, vivify_154
     new $P200, "Undef"
-  vivify_153:
+  vivify_154:
     $P201 = $P200."ast"()
     store_lex "$past", $P201
 .annotate "line", 51
@@ -16567,14 +16710,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statementlist"  :subid("22_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statementlist"  :subid("22_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_215
 .annotate "line", 57
-    .const 'Sub' $P229 = "23_1267204714.47172" 
+    .const 'Sub' $P229 = "23_1272816841.80681" 
     capture_lex $P229
     new $P214, 'ExceptionHandler'
     set_addr $P214, control_213
-    $P214."handle_types"(58)
+    $P214."handle_types"(57)
     push_eh $P214
     .lex "self", self
     .lex "$/", param_215
@@ -16587,35 +16730,35 @@
     store_lex "$past", $P219
 .annotate "line", 59
     find_lex $P221, "$/"
-    unless_null $P221, vivify_154
+    unless_null $P221, vivify_155
     $P221 = root_new ['parrot';'Hash']
-  vivify_154:
+  vivify_155:
     set $P222, $P221["statement"]
-    unless_null $P222, vivify_155
+    unless_null $P222, vivify_156
     new $P222, "Undef"
-  vivify_155:
+  vivify_156:
     unless $P222, if_220_end
 .annotate "line", 60
     find_lex $P224, "$/"
-    unless_null $P224, vivify_156
+    unless_null $P224, vivify_157
     $P224 = root_new ['parrot';'Hash']
-  vivify_156:
+  vivify_157:
     set $P225, $P224["statement"]
-    unless_null $P225, vivify_157
+    unless_null $P225, vivify_158
     new $P225, "Undef"
-  vivify_157:
+  vivify_158:
     defined $I226, $P225
-    unless $I226, for_undef_158
+    unless $I226, for_undef_159
     iter $P223, $P225
     new $P255, 'ExceptionHandler'
     set_addr $P255, loop254_handler
-    $P255."handle_types"(65, 67, 66)
+    $P255."handle_types"(64, 66, 65)
     push_eh $P255
   loop254_test:
     unless $P223, loop254_done
     shift $P227, $P223
   loop254_redo:
-    .const 'Sub' $P229 = "23_1267204714.47172" 
+    .const 'Sub' $P229 = "23_1272816841.80681" 
     capture_lex $P229
     $P229($P227)
   loop254_next:
@@ -16624,11 +16767,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P256, exception, 'type'
-    eq $P256, 65, loop254_next
-    eq $P256, 67, loop254_redo
+    eq $P256, 64, loop254_next
+    eq $P256, 66, loop254_redo
   loop254_done:
     pop_eh 
-  for_undef_158:
+  for_undef_159:
   if_220_end:
 .annotate "line", 69
     find_lex $P257, "$/"
@@ -16645,7 +16788,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block228"  :anon :subid("23_1267204714.47172") :outer("22_1267204714.47172")
+.sub "_block228"  :anon :subid("23_1272816841.80681") :outer("22_1272816841.80681")
     .param pmc param_231
 .annotate "line", 61
     new $P230, "Undef"
@@ -16656,23 +16799,23 @@
     store_lex "$ast", $P233
 .annotate "line", 62
     find_lex $P235, "$ast"
-    unless_null $P235, vivify_159
+    unless_null $P235, vivify_160
     $P235 = root_new ['parrot';'Hash']
-  vivify_159:
+  vivify_160:
     set $P236, $P235["sink"]
-    unless_null $P236, vivify_160
+    unless_null $P236, vivify_161
     new $P236, "Undef"
-  vivify_160:
+  vivify_161:
     defined $I237, $P236
     unless $I237, if_234_end
     find_lex $P238, "$ast"
-    unless_null $P238, vivify_161
+    unless_null $P238, vivify_162
     $P238 = root_new ['parrot';'Hash']
-  vivify_161:
+  vivify_162:
     set $P239, $P238["sink"]
-    unless_null $P239, vivify_162
+    unless_null $P239, vivify_163
     new $P239, "Undef"
-  vivify_162:
+  vivify_163:
     store_lex "$ast", $P239
   if_234_end:
 .annotate "line", 63
@@ -16705,23 +16848,23 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement"  :subid("24_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement"  :subid("24_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_264
     .param pmc param_265 :optional
     .param int has_param_265 :opt_flag
 .annotate "line", 72
-    .const 'Sub' $P273 = "25_1267204714.47172" 
+    .const 'Sub' $P273 = "25_1272816841.80681" 
     capture_lex $P273
     new $P263, 'ExceptionHandler'
     set_addr $P263, control_262
-    $P263."handle_types"(58)
+    $P263."handle_types"(57)
     push_eh $P263
     .lex "self", self
     .lex "$/", param_264
-    if has_param_265, optparam_163
+    if has_param_265, optparam_164
     new $P266, "Undef"
     set param_265, $P266
-  optparam_163:
+  optparam_164:
     .lex "$key", param_265
 .annotate "line", 73
     new $P267, "Undef"
@@ -16730,23 +16873,23 @@
     find_lex $P268, "$past"
 .annotate "line", 74
     find_lex $P270, "$/"
-    unless_null $P270, vivify_164
+    unless_null $P270, vivify_165
     $P270 = root_new ['parrot';'Hash']
-  vivify_164:
+  vivify_165:
     set $P271, $P270["EXPR"]
-    unless_null $P271, vivify_165
+    unless_null $P271, vivify_166
     new $P271, "Undef"
-  vivify_165:
+  vivify_166:
     if $P271, if_269
 .annotate "line", 85
     find_lex $P311, "$/"
-    unless_null $P311, vivify_166
+    unless_null $P311, vivify_167
     $P311 = root_new ['parrot';'Hash']
-  vivify_166:
+  vivify_167:
     set $P312, $P311["statement_control"]
-    unless_null $P312, vivify_167
+    unless_null $P312, vivify_168
     new $P312, "Undef"
-  vivify_167:
+  vivify_168:
     if $P312, if_310
 .annotate "line", 86
     new $P316, "Integer"
@@ -16756,20 +16899,20 @@
   if_310:
 .annotate "line", 85
     find_lex $P313, "$/"
-    unless_null $P313, vivify_168
+    unless_null $P313, vivify_169
     $P313 = root_new ['parrot';'Hash']
-  vivify_168:
+  vivify_169:
     set $P314, $P313["statement_control"]
-    unless_null $P314, vivify_169
+    unless_null $P314, vivify_170
     new $P314, "Undef"
-  vivify_169:
+  vivify_170:
     $P315 = $P314."ast"()
     store_lex "$past", $P315
   if_310_end:
     goto if_269_end
   if_269:
 .annotate "line", 74
-    .const 'Sub' $P273 = "25_1267204714.47172" 
+    .const 'Sub' $P273 = "25_1272816841.80681" 
     capture_lex $P273
     $P273()
   if_269_end:
@@ -16788,7 +16931,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block272"  :anon :subid("25_1267204714.47172") :outer("24_1267204714.47172")
+.sub "_block272"  :anon :subid("25_1272816841.80681") :outer("24_1272816841.80681")
 .annotate "line", 75
     new $P274, "Undef"
     .lex "$mc", $P274
@@ -16797,41 +16940,41 @@
     .lex "$ml", $P275
 .annotate "line", 75
     find_lex $P276, "$/"
-    unless_null $P276, vivify_170
+    unless_null $P276, vivify_171
     $P276 = root_new ['parrot';'Hash']
-  vivify_170:
+  vivify_171:
     set $P277, $P276["statement_mod_cond"]
-    unless_null $P277, vivify_171
+    unless_null $P277, vivify_172
     $P277 = root_new ['parrot';'ResizablePMCArray']
-  vivify_171:
+  vivify_172:
     set $P278, $P277[0]
-    unless_null $P278, vivify_172
+    unless_null $P278, vivify_173
     new $P278, "Undef"
-  vivify_172:
+  vivify_173:
     store_lex "$mc", $P278
 .annotate "line", 76
     find_lex $P279, "$/"
-    unless_null $P279, vivify_173
+    unless_null $P279, vivify_174
     $P279 = root_new ['parrot';'Hash']
-  vivify_173:
+  vivify_174:
     set $P280, $P279["statement_mod_loop"]
-    unless_null $P280, vivify_174
+    unless_null $P280, vivify_175
     $P280 = root_new ['parrot';'ResizablePMCArray']
-  vivify_174:
+  vivify_175:
     set $P281, $P280[0]
-    unless_null $P281, vivify_175
+    unless_null $P281, vivify_176
     new $P281, "Undef"
-  vivify_175:
+  vivify_176:
     store_lex "$ml", $P281
 .annotate "line", 77
     find_lex $P282, "$/"
-    unless_null $P282, vivify_176
+    unless_null $P282, vivify_177
     $P282 = root_new ['parrot';'Hash']
-  vivify_176:
+  vivify_177:
     set $P283, $P282["EXPR"]
-    unless_null $P283, vivify_177
+    unless_null $P283, vivify_178
     new $P283, "Undef"
-  vivify_177:
+  vivify_178:
     $P284 = $P283."ast"()
     store_lex "$past", $P284
 .annotate "line", 78
@@ -16840,23 +16983,23 @@
 .annotate "line", 79
     get_hll_global $P287, ["PAST"], "Op"
     find_lex $P288, "$mc"
-    unless_null $P288, vivify_178
+    unless_null $P288, vivify_179
     $P288 = root_new ['parrot';'Hash']
-  vivify_178:
+  vivify_179:
     set $P289, $P288["cond"]
-    unless_null $P289, vivify_179
+    unless_null $P289, vivify_180
     new $P289, "Undef"
-  vivify_179:
+  vivify_180:
     $P290 = $P289."ast"()
     find_lex $P291, "$past"
     find_lex $P292, "$mc"
-    unless_null $P292, vivify_180
+    unless_null $P292, vivify_181
     $P292 = root_new ['parrot';'Hash']
-  vivify_180:
+  vivify_181:
     set $P293, $P292["sym"]
-    unless_null $P293, vivify_181
+    unless_null $P293, vivify_182
     new $P293, "Undef"
-  vivify_181:
+  vivify_182:
     set $S294, $P293
     find_lex $P295, "$/"
     $P296 = $P287."new"($P290, $P291, $S294 :named("pasttype"), $P295 :named("node"))
@@ -16871,23 +17014,23 @@
 .annotate "line", 82
     get_hll_global $P300, ["PAST"], "Op"
     find_lex $P301, "$ml"
-    unless_null $P301, vivify_182
+    unless_null $P301, vivify_183
     $P301 = root_new ['parrot';'Hash']
-  vivify_182:
+  vivify_183:
     set $P302, $P301["cond"]
-    unless_null $P302, vivify_183
+    unless_null $P302, vivify_184
     new $P302, "Undef"
-  vivify_183:
+  vivify_184:
     $P303 = $P302."ast"()
     find_lex $P304, "$past"
     find_lex $P305, "$ml"
-    unless_null $P305, vivify_184
+    unless_null $P305, vivify_185
     $P305 = root_new ['parrot';'Hash']
-  vivify_184:
+  vivify_185:
     set $P306, $P305["sym"]
-    unless_null $P306, vivify_185
+    unless_null $P306, vivify_186
     new $P306, "Undef"
-  vivify_185:
+  vivify_186:
     set $S307, $P306
     find_lex $P308, "$/"
     $P309 = $P300."new"($P303, $P304, $S307 :named("pasttype"), $P308 :named("node"))
@@ -16901,12 +17044,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock"  :subid("26_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "xblock"  :subid("26_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_324
 .annotate "line", 90
     new $P323, 'ExceptionHandler'
     set_addr $P323, control_322
-    $P323."handle_types"(58)
+    $P323."handle_types"(57)
     push_eh $P323
     .lex "self", self
     .lex "$/", param_324
@@ -16914,22 +17057,22 @@
     find_lex $P325, "$/"
     get_hll_global $P326, ["PAST"], "Op"
     find_lex $P327, "$/"
-    unless_null $P327, vivify_186
+    unless_null $P327, vivify_187
     $P327 = root_new ['parrot';'Hash']
-  vivify_186:
+  vivify_187:
     set $P328, $P327["EXPR"]
-    unless_null $P328, vivify_187
+    unless_null $P328, vivify_188
     new $P328, "Undef"
-  vivify_187:
+  vivify_188:
     $P329 = $P328."ast"()
     find_lex $P330, "$/"
-    unless_null $P330, vivify_188
+    unless_null $P330, vivify_189
     $P330 = root_new ['parrot';'Hash']
-  vivify_188:
+  vivify_189:
     set $P331, $P330["pblock"]
-    unless_null $P331, vivify_189
+    unless_null $P331, vivify_190
     new $P331, "Undef"
-  vivify_189:
+  vivify_190:
     $P332 = $P331."ast"()
     find_lex $P333, "$/"
     $P334 = $P326."new"($P329, $P332, "if" :named("pasttype"), $P333 :named("node"))
@@ -16945,25 +17088,25 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "pblock"  :subid("27_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "pblock"  :subid("27_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_340
 .annotate "line", 94
     new $P339, 'ExceptionHandler'
     set_addr $P339, control_338
-    $P339."handle_types"(58)
+    $P339."handle_types"(57)
     push_eh $P339
     .lex "self", self
     .lex "$/", param_340
 .annotate "line", 95
     find_lex $P341, "$/"
     find_lex $P342, "$/"
-    unless_null $P342, vivify_190
+    unless_null $P342, vivify_191
     $P342 = root_new ['parrot';'Hash']
-  vivify_190:
+  vivify_191:
     set $P343, $P342["blockoid"]
-    unless_null $P343, vivify_191
+    unless_null $P343, vivify_192
     new $P343, "Undef"
-  vivify_191:
+  vivify_192:
     $P344 = $P343."ast"()
     $P345 = $P341."!make"($P344)
 .annotate "line", 94
@@ -16977,25 +17120,25 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block"  :subid("28_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "block"  :subid("28_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_350
 .annotate "line", 98
     new $P349, 'ExceptionHandler'
     set_addr $P349, control_348
-    $P349."handle_types"(58)
+    $P349."handle_types"(57)
     push_eh $P349
     .lex "self", self
     .lex "$/", param_350
 .annotate "line", 99
     find_lex $P351, "$/"
     find_lex $P352, "$/"
-    unless_null $P352, vivify_192
+    unless_null $P352, vivify_193
     $P352 = root_new ['parrot';'Hash']
-  vivify_192:
+  vivify_193:
     set $P353, $P352["blockoid"]
-    unless_null $P353, vivify_193
+    unless_null $P353, vivify_194
     new $P353, "Undef"
-  vivify_193:
+  vivify_194:
     $P354 = $P353."ast"()
     $P355 = $P351."!make"($P354)
 .annotate "line", 98
@@ -17009,12 +17152,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "blockoid"  :subid("29_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "blockoid"  :subid("29_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_360
 .annotate "line", 102
     new $P359, 'ExceptionHandler'
     set_addr $P359, control_358
-    $P359."handle_types"(58)
+    $P359."handle_types"(57)
     push_eh $P359
     .lex "self", self
     .lex "$/", param_360
@@ -17026,13 +17169,13 @@
     .lex "$BLOCK", $P362
 .annotate "line", 103
     find_lex $P363, "$/"
-    unless_null $P363, vivify_194
+    unless_null $P363, vivify_195
     $P363 = root_new ['parrot';'Hash']
-  vivify_194:
+  vivify_195:
     set $P364, $P363["statementlist"]
-    unless_null $P364, vivify_195
+    unless_null $P364, vivify_196
     new $P364, "Undef"
-  vivify_195:
+  vivify_196:
     $P365 = $P364."ast"()
     store_lex "$past", $P365
 .annotate "line", 104
@@ -17062,21 +17205,21 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "newpad"  :subid("30_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "newpad"  :subid("30_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_379
 .annotate "line", 110
     new $P378, 'ExceptionHandler'
     set_addr $P378, control_377
-    $P378."handle_types"(58)
+    $P378."handle_types"(57)
     push_eh $P378
     .lex "self", self
     .lex "$/", param_379
 .annotate "line", 111
     get_global $P380, "@BLOCK"
-    unless_null $P380, vivify_196
+    unless_null $P380, vivify_197
     $P380 = root_new ['parrot';'ResizablePMCArray']
     set_global "@BLOCK", $P380
-  vivify_196:
+  vivify_197:
 .annotate "line", 110
     get_global $P381, "@BLOCK"
 .annotate "line", 112
@@ -17097,14 +17240,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<if>"  :subid("31_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<if>"  :subid("31_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_392
 .annotate "line", 117
-    .const 'Sub' $P420 = "32_1267204714.47172" 
+    .const 'Sub' $P420 = "32_1272816841.80681" 
     capture_lex $P420
     new $P391, 'ExceptionHandler'
     set_addr $P391, control_390
-    $P391."handle_types"(58)
+    $P391."handle_types"(57)
     push_eh $P391
     .lex "self", self
     .lex "$/", param_392
@@ -17116,13 +17259,13 @@
     .lex "$past", $P394
 .annotate "line", 118
     find_lex $P395, "$/"
-    unless_null $P395, vivify_197
+    unless_null $P395, vivify_198
     $P395 = root_new ['parrot';'Hash']
-  vivify_197:
+  vivify_198:
     set $P396, $P395["xblock"]
-    unless_null $P396, vivify_198
+    unless_null $P396, vivify_199
     new $P396, "Undef"
-  vivify_198:
+  vivify_199:
     set $N397, $P396
     new $P398, 'Float'
     set $P398, $N397
@@ -17132,44 +17275,44 @@
     find_lex $P400, "$count"
     set $I401, $P400
     find_lex $P402, "$/"
-    unless_null $P402, vivify_199
+    unless_null $P402, vivify_200
     $P402 = root_new ['parrot';'Hash']
-  vivify_199:
+  vivify_200:
     set $P403, $P402["xblock"]
-    unless_null $P403, vivify_200
+    unless_null $P403, vivify_201
     $P403 = root_new ['parrot';'ResizablePMCArray']
-  vivify_200:
+  vivify_201:
     set $P404, $P403[$I401]
-    unless_null $P404, vivify_201
+    unless_null $P404, vivify_202
     new $P404, "Undef"
-  vivify_201:
+  vivify_202:
     $P405 = $P404."ast"()
     $P406 = "xblock_immediate"($P405)
     store_lex "$past", $P406
 .annotate "line", 120
     find_lex $P408, "$/"
-    unless_null $P408, vivify_202
+    unless_null $P408, vivify_203
     $P408 = root_new ['parrot';'Hash']
-  vivify_202:
+  vivify_203:
     set $P409, $P408["else"]
-    unless_null $P409, vivify_203
+    unless_null $P409, vivify_204
     new $P409, "Undef"
-  vivify_203:
+  vivify_204:
     unless $P409, if_407_end
 .annotate "line", 121
     find_lex $P410, "$past"
     find_lex $P411, "$/"
-    unless_null $P411, vivify_204
+    unless_null $P411, vivify_205
     $P411 = root_new ['parrot';'Hash']
-  vivify_204:
+  vivify_205:
     set $P412, $P411["else"]
-    unless_null $P412, vivify_205
+    unless_null $P412, vivify_206
     $P412 = root_new ['parrot';'ResizablePMCArray']
-  vivify_205:
+  vivify_206:
     set $P413, $P412[0]
-    unless_null $P413, vivify_206
+    unless_null $P413, vivify_207
     new $P413, "Undef"
-  vivify_206:
+  vivify_207:
     $P414 = $P413."ast"()
     $P415 = "block_immediate"($P414)
     $P410."push"($P415)
@@ -17177,7 +17320,7 @@
 .annotate "line", 124
     new $P436, 'ExceptionHandler'
     set_addr $P436, loop435_handler
-    $P436."handle_types"(65, 67, 66)
+    $P436."handle_types"(64, 66, 65)
     push_eh $P436
   loop435_test:
     find_lex $P416, "$count"
@@ -17185,7 +17328,7 @@
     isgt $I418, $N417, 0.0
     unless $I418, loop435_done
   loop435_redo:
-    .const 'Sub' $P420 = "32_1267204714.47172" 
+    .const 'Sub' $P420 = "32_1272816841.80681" 
     capture_lex $P420
     $P420()
   loop435_next:
@@ -17194,8 +17337,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P437, exception, 'type'
-    eq $P437, 65, loop435_next
-    eq $P437, 67, loop435_redo
+    eq $P437, 64, loop435_next
+    eq $P437, 66, loop435_redo
   loop435_done:
     pop_eh 
 .annotate "line", 130
@@ -17213,7 +17356,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block419"  :anon :subid("32_1267204714.47172") :outer("31_1267204714.47172")
+.sub "_block419"  :anon :subid("32_1272816841.80681") :outer("31_1272816841.80681")
 .annotate "line", 126
     new $P421, "Undef"
     .lex "$else", $P421
@@ -17228,17 +17371,17 @@
     find_lex $P425, "$count"
     set $I426, $P425
     find_lex $P427, "$/"
-    unless_null $P427, vivify_207
+    unless_null $P427, vivify_208
     $P427 = root_new ['parrot';'Hash']
-  vivify_207:
+  vivify_208:
     set $P428, $P427["xblock"]
-    unless_null $P428, vivify_208
+    unless_null $P428, vivify_209
     $P428 = root_new ['parrot';'ResizablePMCArray']
-  vivify_208:
+  vivify_209:
     set $P429, $P428[$I426]
-    unless_null $P429, vivify_209
+    unless_null $P429, vivify_210
     new $P429, "Undef"
-  vivify_209:
+  vivify_210:
     $P430 = $P429."ast"()
     $P431 = "xblock_immediate"($P430)
     store_lex "$past", $P431
@@ -17252,12 +17395,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<unless>"  :subid("33_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<unless>"  :subid("33_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_445
 .annotate "line", 133
     new $P444, 'ExceptionHandler'
     set_addr $P444, control_443
-    $P444."handle_types"(58)
+    $P444."handle_types"(57)
     push_eh $P444
     .lex "self", self
     .lex "$/", param_445
@@ -17265,13 +17408,13 @@
     new $P446, "Undef"
     .lex "$past", $P446
     find_lex $P447, "$/"
-    unless_null $P447, vivify_210
+    unless_null $P447, vivify_211
     $P447 = root_new ['parrot';'Hash']
-  vivify_210:
+  vivify_211:
     set $P448, $P447["xblock"]
-    unless_null $P448, vivify_211
+    unless_null $P448, vivify_212
     new $P448, "Undef"
-  vivify_211:
+  vivify_212:
     $P449 = $P448."ast"()
     $P450 = "xblock_immediate"($P449)
     store_lex "$past", $P450
@@ -17293,12 +17436,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<while>"  :subid("34_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<while>"  :subid("34_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_459
 .annotate "line", 139
     new $P458, 'ExceptionHandler'
     set_addr $P458, control_457
-    $P458."handle_types"(58)
+    $P458."handle_types"(57)
     push_eh $P458
     .lex "self", self
     .lex "$/", param_459
@@ -17306,26 +17449,26 @@
     new $P460, "Undef"
     .lex "$past", $P460
     find_lex $P461, "$/"
-    unless_null $P461, vivify_212
+    unless_null $P461, vivify_213
     $P461 = root_new ['parrot';'Hash']
-  vivify_212:
+  vivify_213:
     set $P462, $P461["xblock"]
-    unless_null $P462, vivify_213
+    unless_null $P462, vivify_214
     new $P462, "Undef"
-  vivify_213:
+  vivify_214:
     $P463 = $P462."ast"()
     $P464 = "xblock_immediate"($P463)
     store_lex "$past", $P464
 .annotate "line", 141
     find_lex $P465, "$past"
     find_lex $P466, "$/"
-    unless_null $P466, vivify_214
+    unless_null $P466, vivify_215
     $P466 = root_new ['parrot';'Hash']
-  vivify_214:
+  vivify_215:
     set $P467, $P466["sym"]
-    unless_null $P467, vivify_215
+    unless_null $P467, vivify_216
     new $P467, "Undef"
-  vivify_215:
+  vivify_216:
     set $S468, $P467
     $P465."pasttype"($S468)
 .annotate "line", 142
@@ -17343,12 +17486,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<repeat>"  :subid("35_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<repeat>"  :subid("35_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_476
 .annotate "line", 145
     new $P475, 'ExceptionHandler'
     set_addr $P475, control_474
-    $P475."handle_types"(58)
+    $P475."handle_types"(57)
     push_eh $P475
     .lex "self", self
     .lex "$/", param_476
@@ -17362,46 +17505,46 @@
     new $P479, "String"
     assign $P479, "repeat_"
     find_lex $P480, "$/"
-    unless_null $P480, vivify_216
+    unless_null $P480, vivify_217
     $P480 = root_new ['parrot';'Hash']
-  vivify_216:
+  vivify_217:
     set $P481, $P480["wu"]
-    unless_null $P481, vivify_217
+    unless_null $P481, vivify_218
     new $P481, "Undef"
-  vivify_217:
+  vivify_218:
     set $S482, $P481
     concat $P483, $P479, $S482
     store_lex "$pasttype", $P483
     find_lex $P484, "$past"
 .annotate "line", 148
     find_lex $P486, "$/"
-    unless_null $P486, vivify_218
+    unless_null $P486, vivify_219
     $P486 = root_new ['parrot';'Hash']
-  vivify_218:
+  vivify_219:
     set $P487, $P486["xblock"]
-    unless_null $P487, vivify_219
+    unless_null $P487, vivify_220
     new $P487, "Undef"
-  vivify_219:
+  vivify_220:
     if $P487, if_485
 .annotate "line", 153
     get_hll_global $P494, ["PAST"], "Op"
     find_lex $P495, "$/"
-    unless_null $P495, vivify_220
+    unless_null $P495, vivify_221
     $P495 = root_new ['parrot';'Hash']
-  vivify_220:
+  vivify_221:
     set $P496, $P495["EXPR"]
-    unless_null $P496, vivify_221
+    unless_null $P496, vivify_222
     new $P496, "Undef"
-  vivify_221:
+  vivify_222:
     $P497 = $P496."ast"()
     find_lex $P498, "$/"
-    unless_null $P498, vivify_222
+    unless_null $P498, vivify_223
     $P498 = root_new ['parrot';'Hash']
-  vivify_222:
+  vivify_223:
     set $P499, $P498["pblock"]
-    unless_null $P499, vivify_223
+    unless_null $P499, vivify_224
     new $P499, "Undef"
-  vivify_223:
+  vivify_224:
     $P500 = $P499."ast"()
     $P501 = "block_immediate"($P500)
     find_lex $P502, "$pasttype"
@@ -17413,13 +17556,13 @@
   if_485:
 .annotate "line", 149
     find_lex $P488, "$/"
-    unless_null $P488, vivify_224
+    unless_null $P488, vivify_225
     $P488 = root_new ['parrot';'Hash']
-  vivify_224:
+  vivify_225:
     set $P489, $P488["xblock"]
-    unless_null $P489, vivify_225
+    unless_null $P489, vivify_226
     new $P489, "Undef"
-  vivify_225:
+  vivify_226:
     $P490 = $P489."ast"()
     $P491 = "xblock_immediate"($P490)
     store_lex "$past", $P491
@@ -17443,12 +17586,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<for>"  :subid("36_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<for>"  :subid("36_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_512
 .annotate "line", 159
     new $P511, 'ExceptionHandler'
     set_addr $P511, control_510
-    $P511."handle_types"(58)
+    $P511."handle_types"(57)
     push_eh $P511
     .lex "self", self
     .lex "$/", param_512
@@ -17460,13 +17603,13 @@
     .lex "$block", $P514
 .annotate "line", 160
     find_lex $P515, "$/"
-    unless_null $P515, vivify_226
+    unless_null $P515, vivify_227
     $P515 = root_new ['parrot';'Hash']
-  vivify_226:
+  vivify_227:
     set $P516, $P515["xblock"]
-    unless_null $P516, vivify_227
+    unless_null $P516, vivify_228
     new $P516, "Undef"
-  vivify_227:
+  vivify_228:
     $P517 = $P516."ast"()
     store_lex "$past", $P517
 .annotate "line", 161
@@ -17474,13 +17617,13 @@
     $P518."pasttype"("for")
 .annotate "line", 162
     find_lex $P519, "$past"
-    unless_null $P519, vivify_228
+    unless_null $P519, vivify_229
     $P519 = root_new ['parrot';'ResizablePMCArray']
-  vivify_228:
+  vivify_229:
     set $P520, $P519[1]
-    unless_null $P520, vivify_229
+    unless_null $P520, vivify_230
     new $P520, "Undef"
-  vivify_229:
+  vivify_230:
     store_lex "$block", $P520
 .annotate "line", 163
     find_lex $P522, "$block"
@@ -17488,13 +17631,13 @@
     if $P523, unless_521_end
 .annotate "line", 164
     find_lex $P524, "$block"
-    unless_null $P524, vivify_230
+    unless_null $P524, vivify_231
     $P524 = root_new ['parrot';'ResizablePMCArray']
-  vivify_230:
+  vivify_231:
     set $P525, $P524[0]
-    unless_null $P525, vivify_231
+    unless_null $P525, vivify_232
     new $P525, "Undef"
-  vivify_231:
+  vivify_232:
     get_hll_global $P526, ["PAST"], "Var"
     $P527 = $P526."new"("$_" :named("name"), "parameter" :named("scope"))
     $P525."push"($P527)
@@ -17523,12 +17666,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<return>"  :subid("37_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<return>"  :subid("37_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_538
 .annotate "line", 172
     new $P537, 'ExceptionHandler'
     set_addr $P537, control_536
-    $P537."handle_types"(58)
+    $P537."handle_types"(57)
     push_eh $P537
     .lex "self", self
     .lex "$/", param_538
@@ -17536,13 +17679,13 @@
     find_lex $P539, "$/"
     get_hll_global $P540, ["PAST"], "Op"
     find_lex $P541, "$/"
-    unless_null $P541, vivify_232
+    unless_null $P541, vivify_233
     $P541 = root_new ['parrot';'Hash']
-  vivify_232:
+  vivify_233:
     set $P542, $P541["EXPR"]
-    unless_null $P542, vivify_233
+    unless_null $P542, vivify_234
     new $P542, "Undef"
-  vivify_233:
+  vivify_234:
     $P543 = $P542."ast"()
     find_lex $P544, "$/"
     $P545 = $P540."new"($P543, "return" :named("pasttype"), $P544 :named("node"))
@@ -17558,12 +17701,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CATCH>"  :subid("38_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<CATCH>"  :subid("38_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_551
 .annotate "line", 176
     new $P550, 'ExceptionHandler'
     set_addr $P550, control_549
-    $P550."handle_types"(58)
+    $P550."handle_types"(57)
     push_eh $P550
     .lex "self", self
     .lex "$/", param_551
@@ -17571,13 +17714,13 @@
     new $P552, "Undef"
     .lex "$block", $P552
     find_lex $P553, "$/"
-    unless_null $P553, vivify_234
+    unless_null $P553, vivify_235
     $P553 = root_new ['parrot';'Hash']
-  vivify_234:
+  vivify_235:
     set $P554, $P553["block"]
-    unless_null $P554, vivify_235
+    unless_null $P554, vivify_236
     new $P554, "Undef"
-  vivify_235:
+  vivify_236:
     $P555 = $P554."ast"()
     store_lex "$block", $P555
 .annotate "line", 178
@@ -17586,18 +17729,18 @@
     "push_block_handler"($P556, $P557)
 .annotate "line", 179
     get_global $P558, "@BLOCK"
-    unless_null $P558, vivify_236
+    unless_null $P558, vivify_237
     $P558 = root_new ['parrot';'ResizablePMCArray']
-  vivify_236:
+  vivify_237:
     set $P559, $P558[0]
-    unless_null $P559, vivify_237
+    unless_null $P559, vivify_238
     new $P559, "Undef"
-  vivify_237:
+  vivify_238:
     $P560 = $P559."handlers"()
     set $P561, $P560[0]
-    unless_null $P561, vivify_238
+    unless_null $P561, vivify_239
     new $P561, "Undef"
-  vivify_238:
+  vivify_239:
     $P561."handle_types_except"("CONTROL")
 .annotate "line", 180
     find_lex $P562, "$/"
@@ -17616,12 +17759,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CONTROL>"  :subid("39_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<CONTROL>"  :subid("39_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_571
 .annotate "line", 183
     new $P570, 'ExceptionHandler'
     set_addr $P570, control_569
-    $P570."handle_types"(58)
+    $P570."handle_types"(57)
     push_eh $P570
     .lex "self", self
     .lex "$/", param_571
@@ -17629,13 +17772,13 @@
     new $P572, "Undef"
     .lex "$block", $P572
     find_lex $P573, "$/"
-    unless_null $P573, vivify_239
+    unless_null $P573, vivify_240
     $P573 = root_new ['parrot';'Hash']
-  vivify_239:
+  vivify_240:
     set $P574, $P573["block"]
-    unless_null $P574, vivify_240
+    unless_null $P574, vivify_241
     new $P574, "Undef"
-  vivify_240:
+  vivify_241:
     $P575 = $P574."ast"()
     store_lex "$block", $P575
 .annotate "line", 185
@@ -17644,18 +17787,18 @@
     "push_block_handler"($P576, $P577)
 .annotate "line", 186
     get_global $P578, "@BLOCK"
-    unless_null $P578, vivify_241
+    unless_null $P578, vivify_242
     $P578 = root_new ['parrot';'ResizablePMCArray']
-  vivify_241:
+  vivify_242:
     set $P579, $P578[0]
-    unless_null $P579, vivify_242
+    unless_null $P579, vivify_243
     new $P579, "Undef"
-  vivify_242:
+  vivify_243:
     $P580 = $P579."handlers"()
     set $P581, $P580[0]
-    unless_null $P581, vivify_243
+    unless_null $P581, vivify_244
     new $P581, "Undef"
-  vivify_243:
+  vivify_244:
     $P581."handle_types"("CONTROL")
 .annotate "line", 187
     find_lex $P582, "$/"
@@ -17674,33 +17817,33 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<INIT>"  :subid("40_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_prefix:sym<INIT>"  :subid("40_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_592
 .annotate "line", 227
     new $P591, 'ExceptionHandler'
     set_addr $P591, control_590
-    $P591."handle_types"(58)
+    $P591."handle_types"(57)
     push_eh $P591
     .lex "self", self
     .lex "$/", param_592
 .annotate "line", 228
     get_global $P593, "@BLOCK"
-    unless_null $P593, vivify_244
+    unless_null $P593, vivify_245
     $P593 = root_new ['parrot';'ResizablePMCArray']
-  vivify_244:
+  vivify_245:
     set $P594, $P593[0]
-    unless_null $P594, vivify_245
+    unless_null $P594, vivify_246
     new $P594, "Undef"
-  vivify_245:
+  vivify_246:
     $P595 = $P594."loadinit"()
     find_lex $P596, "$/"
-    unless_null $P596, vivify_246
+    unless_null $P596, vivify_247
     $P596 = root_new ['parrot';'Hash']
-  vivify_246:
+  vivify_247:
     set $P597, $P596["blorst"]
-    unless_null $P597, vivify_247
+    unless_null $P597, vivify_248
     new $P597, "Undef"
-  vivify_247:
+  vivify_248:
     $P598 = $P597."ast"()
     $P595."push"($P598)
 .annotate "line", 229
@@ -17720,12 +17863,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<try>"  :subid("41_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_prefix:sym<try>"  :subid("41_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_608
 .annotate "line", 232
     new $P607, 'ExceptionHandler'
     set_addr $P607, control_606
-    $P607."handle_types"(58)
+    $P607."handle_types"(57)
     push_eh $P607
     .lex "self", self
     .lex "$/", param_608
@@ -17733,13 +17876,13 @@
     new $P609, "Undef"
     .lex "$past", $P609
     find_lex $P610, "$/"
-    unless_null $P610, vivify_248
+    unless_null $P610, vivify_249
     $P610 = root_new ['parrot';'Hash']
-  vivify_248:
+  vivify_249:
     set $P611, $P610["blorst"]
-    unless_null $P611, vivify_249
+    unless_null $P611, vivify_250
     new $P611, "Undef"
-  vivify_249:
+  vivify_250:
     $P612 = $P611."ast"()
     store_lex "$past", $P612
 .annotate "line", 234
@@ -17797,12 +17940,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "blorst"  :subid("42_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "blorst"  :subid("42_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_643
 .annotate "line", 255
     new $P642, 'ExceptionHandler'
     set_addr $P642, control_641
-    $P642."handle_types"(58)
+    $P642."handle_types"(57)
     push_eh $P642
     .lex "self", self
     .lex "$/", param_643
@@ -17810,36 +17953,36 @@
     find_lex $P644, "$/"
 .annotate "line", 257
     find_lex $P647, "$/"
-    unless_null $P647, vivify_250
+    unless_null $P647, vivify_251
     $P647 = root_new ['parrot';'Hash']
-  vivify_250:
+  vivify_251:
     set $P648, $P647["block"]
-    unless_null $P648, vivify_251
+    unless_null $P648, vivify_252
     new $P648, "Undef"
-  vivify_251:
+  vivify_252:
     if $P648, if_646
 .annotate "line", 258
     find_lex $P653, "$/"
-    unless_null $P653, vivify_252
+    unless_null $P653, vivify_253
     $P653 = root_new ['parrot';'Hash']
-  vivify_252:
+  vivify_253:
     set $P654, $P653["statement"]
-    unless_null $P654, vivify_253
+    unless_null $P654, vivify_254
     new $P654, "Undef"
-  vivify_253:
+  vivify_254:
     $P655 = $P654."ast"()
     set $P645, $P655
 .annotate "line", 257
     goto if_646_end
   if_646:
     find_lex $P649, "$/"
-    unless_null $P649, vivify_254
+    unless_null $P649, vivify_255
     $P649 = root_new ['parrot';'Hash']
-  vivify_254:
+  vivify_255:
     set $P650, $P649["block"]
-    unless_null $P650, vivify_255
+    unless_null $P650, vivify_256
     new $P650, "Undef"
-  vivify_255:
+  vivify_256:
     $P651 = $P650."ast"()
     $P652 = "block_immediate"($P651)
     set $P645, $P652
@@ -17856,24 +17999,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<if>"  :subid("43_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_cond:sym<if>"  :subid("43_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_661
 .annotate "line", 263
     new $P660, 'ExceptionHandler'
     set_addr $P660, control_659
-    $P660."handle_types"(58)
+    $P660."handle_types"(57)
     push_eh $P660
     .lex "self", self
     .lex "$/", param_661
     find_lex $P662, "$/"
     find_lex $P663, "$/"
-    unless_null $P663, vivify_256
+    unless_null $P663, vivify_257
     $P663 = root_new ['parrot';'Hash']
-  vivify_256:
+  vivify_257:
     set $P664, $P663["cond"]
-    unless_null $P664, vivify_257
+    unless_null $P664, vivify_258
     new $P664, "Undef"
-  vivify_257:
+  vivify_258:
     $P665 = $P664."ast"()
     $P666 = $P662."!make"($P665)
     .return ($P666)
@@ -17886,24 +18029,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<unless>"  :subid("44_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_cond:sym<unless>"  :subid("44_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_671
 .annotate "line", 264
     new $P670, 'ExceptionHandler'
     set_addr $P670, control_669
-    $P670."handle_types"(58)
+    $P670."handle_types"(57)
     push_eh $P670
     .lex "self", self
     .lex "$/", param_671
     find_lex $P672, "$/"
     find_lex $P673, "$/"
-    unless_null $P673, vivify_258
+    unless_null $P673, vivify_259
     $P673 = root_new ['parrot';'Hash']
-  vivify_258:
+  vivify_259:
     set $P674, $P673["cond"]
-    unless_null $P674, vivify_259
+    unless_null $P674, vivify_260
     new $P674, "Undef"
-  vivify_259:
+  vivify_260:
     $P675 = $P674."ast"()
     $P676 = $P672."!make"($P675)
     .return ($P676)
@@ -17916,24 +18059,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<while>"  :subid("45_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_loop:sym<while>"  :subid("45_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_681
 .annotate "line", 266
     new $P680, 'ExceptionHandler'
     set_addr $P680, control_679
-    $P680."handle_types"(58)
+    $P680."handle_types"(57)
     push_eh $P680
     .lex "self", self
     .lex "$/", param_681
     find_lex $P682, "$/"
     find_lex $P683, "$/"
-    unless_null $P683, vivify_260
+    unless_null $P683, vivify_261
     $P683 = root_new ['parrot';'Hash']
-  vivify_260:
+  vivify_261:
     set $P684, $P683["cond"]
-    unless_null $P684, vivify_261
+    unless_null $P684, vivify_262
     new $P684, "Undef"
-  vivify_261:
+  vivify_262:
     $P685 = $P684."ast"()
     $P686 = $P682."!make"($P685)
     .return ($P686)
@@ -17946,24 +18089,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<until>"  :subid("46_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_loop:sym<until>"  :subid("46_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_691
 .annotate "line", 267
     new $P690, 'ExceptionHandler'
     set_addr $P690, control_689
-    $P690."handle_types"(58)
+    $P690."handle_types"(57)
     push_eh $P690
     .lex "self", self
     .lex "$/", param_691
     find_lex $P692, "$/"
     find_lex $P693, "$/"
-    unless_null $P693, vivify_262
+    unless_null $P693, vivify_263
     $P693 = root_new ['parrot';'Hash']
-  vivify_262:
+  vivify_263:
     set $P694, $P693["cond"]
-    unless_null $P694, vivify_263
+    unless_null $P694, vivify_264
     new $P694, "Undef"
-  vivify_263:
+  vivify_264:
     $P695 = $P694."ast"()
     $P696 = $P692."!make"($P695)
     .return ($P696)
@@ -17976,24 +18119,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<fatarrow>"  :subid("47_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<fatarrow>"  :subid("47_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_701
 .annotate "line", 271
     new $P700, 'ExceptionHandler'
     set_addr $P700, control_699
-    $P700."handle_types"(58)
+    $P700."handle_types"(57)
     push_eh $P700
     .lex "self", self
     .lex "$/", param_701
     find_lex $P702, "$/"
     find_lex $P703, "$/"
-    unless_null $P703, vivify_264
+    unless_null $P703, vivify_265
     $P703 = root_new ['parrot';'Hash']
-  vivify_264:
+  vivify_265:
     set $P704, $P703["fatarrow"]
-    unless_null $P704, vivify_265
+    unless_null $P704, vivify_266
     new $P704, "Undef"
-  vivify_265:
+  vivify_266:
     $P705 = $P704."ast"()
     $P706 = $P702."!make"($P705)
     .return ($P706)
@@ -18006,24 +18149,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<colonpair>"  :subid("48_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<colonpair>"  :subid("48_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_711
 .annotate "line", 272
     new $P710, 'ExceptionHandler'
     set_addr $P710, control_709
-    $P710."handle_types"(58)
+    $P710."handle_types"(57)
     push_eh $P710
     .lex "self", self
     .lex "$/", param_711
     find_lex $P712, "$/"
     find_lex $P713, "$/"
-    unless_null $P713, vivify_266
+    unless_null $P713, vivify_267
     $P713 = root_new ['parrot';'Hash']
-  vivify_266:
+  vivify_267:
     set $P714, $P713["colonpair"]
-    unless_null $P714, vivify_267
+    unless_null $P714, vivify_268
     new $P714, "Undef"
-  vivify_267:
+  vivify_268:
     $P715 = $P714."ast"()
     $P716 = $P712."!make"($P715)
     .return ($P716)
@@ -18036,24 +18179,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<variable>"  :subid("49_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<variable>"  :subid("49_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_721
 .annotate "line", 273
     new $P720, 'ExceptionHandler'
     set_addr $P720, control_719
-    $P720."handle_types"(58)
+    $P720."handle_types"(57)
     push_eh $P720
     .lex "self", self
     .lex "$/", param_721
     find_lex $P722, "$/"
     find_lex $P723, "$/"
-    unless_null $P723, vivify_268
+    unless_null $P723, vivify_269
     $P723 = root_new ['parrot';'Hash']
-  vivify_268:
+  vivify_269:
     set $P724, $P723["variable"]
-    unless_null $P724, vivify_269
+    unless_null $P724, vivify_270
     new $P724, "Undef"
-  vivify_269:
+  vivify_270:
     $P725 = $P724."ast"()
     $P726 = $P722."!make"($P725)
     .return ($P726)
@@ -18066,24 +18209,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<package_declarator>"  :subid("50_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<package_declarator>"  :subid("50_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_731
 .annotate "line", 274
     new $P730, 'ExceptionHandler'
     set_addr $P730, control_729
-    $P730."handle_types"(58)
+    $P730."handle_types"(57)
     push_eh $P730
     .lex "self", self
     .lex "$/", param_731
     find_lex $P732, "$/"
     find_lex $P733, "$/"
-    unless_null $P733, vivify_270
+    unless_null $P733, vivify_271
     $P733 = root_new ['parrot';'Hash']
-  vivify_270:
+  vivify_271:
     set $P734, $P733["package_declarator"]
-    unless_null $P734, vivify_271
+    unless_null $P734, vivify_272
     new $P734, "Undef"
-  vivify_271:
+  vivify_272:
     $P735 = $P734."ast"()
     $P736 = $P732."!make"($P735)
     .return ($P736)
@@ -18096,24 +18239,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<scope_declarator>"  :subid("51_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<scope_declarator>"  :subid("51_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_741
 .annotate "line", 275
     new $P740, 'ExceptionHandler'
     set_addr $P740, control_739
-    $P740."handle_types"(58)
+    $P740."handle_types"(57)
     push_eh $P740
     .lex "self", self
     .lex "$/", param_741
     find_lex $P742, "$/"
     find_lex $P743, "$/"
-    unless_null $P743, vivify_272
+    unless_null $P743, vivify_273
     $P743 = root_new ['parrot';'Hash']
-  vivify_272:
+  vivify_273:
     set $P744, $P743["scope_declarator"]
-    unless_null $P744, vivify_273
+    unless_null $P744, vivify_274
     new $P744, "Undef"
-  vivify_273:
+  vivify_274:
     $P745 = $P744."ast"()
     $P746 = $P742."!make"($P745)
     .return ($P746)
@@ -18126,24 +18269,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<routine_declarator>"  :subid("52_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<routine_declarator>"  :subid("52_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_751
 .annotate "line", 276
     new $P750, 'ExceptionHandler'
     set_addr $P750, control_749
-    $P750."handle_types"(58)
+    $P750."handle_types"(57)
     push_eh $P750
     .lex "self", self
     .lex "$/", param_751
     find_lex $P752, "$/"
     find_lex $P753, "$/"
-    unless_null $P753, vivify_274
+    unless_null $P753, vivify_275
     $P753 = root_new ['parrot';'Hash']
-  vivify_274:
+  vivify_275:
     set $P754, $P753["routine_declarator"]
-    unless_null $P754, vivify_275
+    unless_null $P754, vivify_276
     new $P754, "Undef"
-  vivify_275:
+  vivify_276:
     $P755 = $P754."ast"()
     $P756 = $P752."!make"($P755)
     .return ($P756)
@@ -18156,24 +18299,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<regex_declarator>"  :subid("53_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<regex_declarator>"  :subid("53_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_761
 .annotate "line", 277
     new $P760, 'ExceptionHandler'
     set_addr $P760, control_759
-    $P760."handle_types"(58)
+    $P760."handle_types"(57)
     push_eh $P760
     .lex "self", self
     .lex "$/", param_761
     find_lex $P762, "$/"
     find_lex $P763, "$/"
-    unless_null $P763, vivify_276
+    unless_null $P763, vivify_277
     $P763 = root_new ['parrot';'Hash']
-  vivify_276:
+  vivify_277:
     set $P764, $P763["regex_declarator"]
-    unless_null $P764, vivify_277
+    unless_null $P764, vivify_278
     new $P764, "Undef"
-  vivify_277:
+  vivify_278:
     $P765 = $P764."ast"()
     $P766 = $P762."!make"($P765)
     .return ($P766)
@@ -18186,24 +18329,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<statement_prefix>"  :subid("54_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<statement_prefix>"  :subid("54_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_771
 .annotate "line", 278
     new $P770, 'ExceptionHandler'
     set_addr $P770, control_769
-    $P770."handle_types"(58)
+    $P770."handle_types"(57)
     push_eh $P770
     .lex "self", self
     .lex "$/", param_771
     find_lex $P772, "$/"
     find_lex $P773, "$/"
-    unless_null $P773, vivify_278
+    unless_null $P773, vivify_279
     $P773 = root_new ['parrot';'Hash']
-  vivify_278:
+  vivify_279:
     set $P774, $P773["statement_prefix"]
-    unless_null $P774, vivify_279
+    unless_null $P774, vivify_280
     new $P774, "Undef"
-  vivify_279:
+  vivify_280:
     $P775 = $P774."ast"()
     $P776 = $P772."!make"($P775)
     .return ($P776)
@@ -18216,24 +18359,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<lambda>"  :subid("55_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<lambda>"  :subid("55_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_781
 .annotate "line", 279
     new $P780, 'ExceptionHandler'
     set_addr $P780, control_779
-    $P780."handle_types"(58)
+    $P780."handle_types"(57)
     push_eh $P780
     .lex "self", self
     .lex "$/", param_781
     find_lex $P782, "$/"
     find_lex $P783, "$/"
-    unless_null $P783, vivify_280
+    unless_null $P783, vivify_281
     $P783 = root_new ['parrot';'Hash']
-  vivify_280:
+  vivify_281:
     set $P784, $P783["pblock"]
-    unless_null $P784, vivify_281
+    unless_null $P784, vivify_282
     new $P784, "Undef"
-  vivify_281:
+  vivify_282:
     $P785 = $P784."ast"()
     $P786 = $P782."!make"($P785)
     .return ($P786)
@@ -18246,12 +18389,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "fatarrow"  :subid("56_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "fatarrow"  :subid("56_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_791
 .annotate "line", 281
     new $P790, 'ExceptionHandler'
     set_addr $P790, control_789
-    $P790."handle_types"(58)
+    $P790."handle_types"(57)
     push_eh $P790
     .lex "self", self
     .lex "$/", param_791
@@ -18259,25 +18402,25 @@
     new $P792, "Undef"
     .lex "$past", $P792
     find_lex $P793, "$/"
-    unless_null $P793, vivify_282
+    unless_null $P793, vivify_283
     $P793 = root_new ['parrot';'Hash']
-  vivify_282:
+  vivify_283:
     set $P794, $P793["val"]
-    unless_null $P794, vivify_283
+    unless_null $P794, vivify_284
     new $P794, "Undef"
-  vivify_283:
+  vivify_284:
     $P795 = $P794."ast"()
     store_lex "$past", $P795
 .annotate "line", 283
     find_lex $P796, "$past"
     find_lex $P797, "$/"
-    unless_null $P797, vivify_284
+    unless_null $P797, vivify_285
     $P797 = root_new ['parrot';'Hash']
-  vivify_284:
+  vivify_285:
     set $P798, $P797["key"]
-    unless_null $P798, vivify_285
+    unless_null $P798, vivify_286
     new $P798, "Undef"
-  vivify_285:
+  vivify_286:
     $P799 = $P798."Str"()
     $P796."named"($P799)
 .annotate "line", 284
@@ -18295,12 +18438,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair"  :subid("57_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "colonpair"  :subid("57_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_807
 .annotate "line", 287
     new $P806, 'ExceptionHandler'
     set_addr $P806, control_805
-    $P806."handle_types"(58)
+    $P806."handle_types"(57)
     push_eh $P806
     .lex "self", self
     .lex "$/", param_807
@@ -18309,24 +18452,24 @@
     .lex "$past", $P808
 .annotate "line", 289
     find_lex $P811, "$/"
-    unless_null $P811, vivify_286
+    unless_null $P811, vivify_287
     $P811 = root_new ['parrot';'Hash']
-  vivify_286:
+  vivify_287:
     set $P812, $P811["circumfix"]
-    unless_null $P812, vivify_287
+    unless_null $P812, vivify_288
     new $P812, "Undef"
-  vivify_287:
+  vivify_288:
     if $P812, if_810
 .annotate "line", 290
     get_hll_global $P817, ["PAST"], "Val"
     find_lex $P818, "$/"
-    unless_null $P818, vivify_288
+    unless_null $P818, vivify_289
     $P818 = root_new ['parrot';'Hash']
-  vivify_288:
+  vivify_289:
     set $P819, $P818["not"]
-    unless_null $P819, vivify_289
+    unless_null $P819, vivify_290
     new $P819, "Undef"
-  vivify_289:
+  vivify_290:
     isfalse $I820, $P819
     $P821 = $P817."new"($I820 :named("value"))
     set $P809, $P821
@@ -18334,17 +18477,17 @@
     goto if_810_end
   if_810:
     find_lex $P813, "$/"
-    unless_null $P813, vivify_290
+    unless_null $P813, vivify_291
     $P813 = root_new ['parrot';'Hash']
-  vivify_290:
+  vivify_291:
     set $P814, $P813["circumfix"]
-    unless_null $P814, vivify_291
+    unless_null $P814, vivify_292
     $P814 = root_new ['parrot';'ResizablePMCArray']
-  vivify_291:
+  vivify_292:
     set $P815, $P814[0]
-    unless_null $P815, vivify_292
+    unless_null $P815, vivify_293
     new $P815, "Undef"
-  vivify_292:
+  vivify_293:
     $P816 = $P815."ast"()
     set $P809, $P816
   if_810_end:
@@ -18352,13 +18495,13 @@
 .annotate "line", 291
     find_lex $P822, "$past"
     find_lex $P823, "$/"
-    unless_null $P823, vivify_293
+    unless_null $P823, vivify_294
     $P823 = root_new ['parrot';'Hash']
-  vivify_293:
+  vivify_294:
     set $P824, $P823["identifier"]
-    unless_null $P824, vivify_294
+    unless_null $P824, vivify_295
     new $P824, "Undef"
-  vivify_294:
+  vivify_295:
     set $S825, $P824
     $P822."named"($S825)
 .annotate "line", 292
@@ -18376,14 +18519,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable"  :subid("58_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "variable"  :subid("58_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_833
 .annotate "line", 295
-    .const 'Sub' $P846 = "59_1267204714.47172" 
+    .const 'Sub' $P846 = "59_1272816841.80681" 
     capture_lex $P846
     new $P832, 'ExceptionHandler'
     set_addr $P832, control_831
-    $P832."handle_types"(58)
+    $P832."handle_types"(57)
     push_eh $P832
     .lex "self", self
     .lex "$/", param_833
@@ -18394,29 +18537,29 @@
     find_lex $P835, "$past"
 .annotate "line", 297
     find_lex $P837, "$/"
-    unless_null $P837, vivify_295
+    unless_null $P837, vivify_296
     $P837 = root_new ['parrot';'Hash']
-  vivify_295:
+  vivify_296:
     set $P838, $P837["postcircumfix"]
-    unless_null $P838, vivify_296
+    unless_null $P838, vivify_297
     new $P838, "Undef"
-  vivify_296:
+  vivify_297:
     if $P838, if_836
 .annotate "line", 301
-    .const 'Sub' $P846 = "59_1267204714.47172" 
+    .const 'Sub' $P846 = "59_1272816841.80681" 
     capture_lex $P846
     $P846()
     goto if_836_end
   if_836:
 .annotate "line", 298
     find_lex $P839, "$/"
-    unless_null $P839, vivify_313
+    unless_null $P839, vivify_314
     $P839 = root_new ['parrot';'Hash']
-  vivify_313:
+  vivify_314:
     set $P840, $P839["postcircumfix"]
-    unless_null $P840, vivify_314
+    unless_null $P840, vivify_315
     new $P840, "Undef"
-  vivify_314:
+  vivify_315:
     $P841 = $P840."ast"()
     store_lex "$past", $P841
 .annotate "line", 299
@@ -18440,7 +18583,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block845"  :anon :subid("59_1267204714.47172") :outer("58_1267204714.47172")
+.sub "_block845"  :anon :subid("59_1272816841.80681") :outer("58_1272816841.80681")
 .annotate "line", 302
     $P847 = root_new ['parrot';'ResizablePMCArray']
     .lex "@name", $P847
@@ -18461,13 +18604,13 @@
     unless $P858, if_857_end
 .annotate "line", 305
     find_lex $P860, "@name"
-    unless_null $P860, vivify_297
+    unless_null $P860, vivify_298
     $P860 = root_new ['parrot';'ResizablePMCArray']
-  vivify_297:
+  vivify_298:
     set $P861, $P860[0]
-    unless_null $P861, vivify_298
+    unless_null $P861, vivify_299
     new $P861, "Undef"
-  vivify_298:
+  vivify_299:
     set $S862, $P861
     iseq $I863, $S862, "GLOBAL"
     unless $I863, if_859_end
@@ -18484,13 +18627,13 @@
 .annotate "line", 308
     find_lex $P868, "$past"
     find_lex $P869, "$/"
-    unless_null $P869, vivify_299
+    unless_null $P869, vivify_300
     $P869 = root_new ['parrot';'Hash']
-  vivify_299:
+  vivify_300:
     set $P870, $P869["sigil"]
-    unless_null $P870, vivify_300
+    unless_null $P870, vivify_301
     new $P870, "Undef"
-  vivify_300:
+  vivify_301:
     $P871 = "vivitype"($P870)
     $P868."viviself"($P871)
 .annotate "line", 309
@@ -18499,33 +18642,33 @@
   if_857_end:
 .annotate "line", 311
     find_lex $P875, "$/"
-    unless_null $P875, vivify_301
+    unless_null $P875, vivify_302
     $P875 = root_new ['parrot';'Hash']
-  vivify_301:
+  vivify_302:
     set $P876, $P875["twigil"]
-    unless_null $P876, vivify_302
+    unless_null $P876, vivify_303
     $P876 = root_new ['parrot';'ResizablePMCArray']
-  vivify_302:
+  vivify_303:
     set $P877, $P876[0]
-    unless_null $P877, vivify_303
+    unless_null $P877, vivify_304
     new $P877, "Undef"
-  vivify_303:
+  vivify_304:
     set $S878, $P877
     iseq $I879, $S878, "*"
     if $I879, if_874
 .annotate "line", 324
     find_lex $P901, "$/"
-    unless_null $P901, vivify_304
+    unless_null $P901, vivify_305
     $P901 = root_new ['parrot';'Hash']
-  vivify_304:
+  vivify_305:
     set $P902, $P901["twigil"]
-    unless_null $P902, vivify_305
+    unless_null $P902, vivify_306
     $P902 = root_new ['parrot';'ResizablePMCArray']
-  vivify_305:
+  vivify_306:
     set $P903, $P902[0]
-    unless_null $P903, vivify_306
+    unless_null $P903, vivify_307
     new $P903, "Undef"
-  vivify_306:
+  vivify_307:
     set $S904, $P903
     iseq $I905, $S904, "!"
     if $I905, if_900
@@ -18544,13 +18687,13 @@
 .annotate "line", 327
     find_lex $P910, "$past"
     find_lex $P911, "$/"
-    unless_null $P911, vivify_307
+    unless_null $P911, vivify_308
     $P911 = root_new ['parrot';'Hash']
-  vivify_307:
+  vivify_308:
     set $P912, $P911["sigil"]
-    unless_null $P912, vivify_308
+    unless_null $P912, vivify_309
     new $P912, "Undef"
-  vivify_308:
+  vivify_309:
     $P913 = "vivitype"($P912)
     $P914 = $P910."viviself"($P913)
 .annotate "line", 324
@@ -18569,24 +18712,24 @@
     get_hll_global $P882, ["PAST"], "Var"
 .annotate "line", 316
     find_lex $P883, "$/"
-    unless_null $P883, vivify_309
+    unless_null $P883, vivify_310
     $P883 = root_new ['parrot';'Hash']
-  vivify_309:
+  vivify_310:
     set $P884, $P883["sigil"]
-    unless_null $P884, vivify_310
+    unless_null $P884, vivify_311
     new $P884, "Undef"
-  vivify_310:
+  vivify_311:
     set $S885, $P884
     new $P886, 'String'
     set $P886, $S885
     find_lex $P887, "$/"
-    unless_null $P887, vivify_311
+    unless_null $P887, vivify_312
     $P887 = root_new ['parrot';'Hash']
-  vivify_311:
+  vivify_312:
     set $P888, $P887["desigilname"]
-    unless_null $P888, vivify_312
+    unless_null $P888, vivify_313
     new $P888, "Undef"
-  vivify_312:
+  vivify_313:
     concat $P889, $P886, $P888
 .annotate "line", 318
     get_hll_global $P890, ["PAST"], "Op"
@@ -18609,24 +18752,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<module>"  :subid("60_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_declarator:sym<module>"  :subid("60_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_922
 .annotate "line", 333
     new $P921, 'ExceptionHandler'
     set_addr $P921, control_920
-    $P921."handle_types"(58)
+    $P921."handle_types"(57)
     push_eh $P921
     .lex "self", self
     .lex "$/", param_922
     find_lex $P923, "$/"
     find_lex $P924, "$/"
-    unless_null $P924, vivify_315
+    unless_null $P924, vivify_316
     $P924 = root_new ['parrot';'Hash']
-  vivify_315:
+  vivify_316:
     set $P925, $P924["package_def"]
-    unless_null $P925, vivify_316
+    unless_null $P925, vivify_317
     new $P925, "Undef"
-  vivify_316:
+  vivify_317:
     $P926 = $P925."ast"()
     $P927 = $P923."!make"($P926)
     .return ($P927)
@@ -18639,12 +18782,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<class>"  :subid("61_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_declarator:sym<class>"  :subid("61_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_932
 .annotate "line", 334
     new $P931, 'ExceptionHandler'
     set_addr $P931, control_930
-    $P931."handle_types"(58)
+    $P931."handle_types"(57)
     push_eh $P931
     .lex "self", self
     .lex "$/", param_932
@@ -18659,13 +18802,13 @@
     .lex "$parent", $P935
 .annotate "line", 335
     find_lex $P936, "$/"
-    unless_null $P936, vivify_317
+    unless_null $P936, vivify_318
     $P936 = root_new ['parrot';'Hash']
-  vivify_317:
+  vivify_318:
     set $P937, $P936["package_def"]
-    unless_null $P937, vivify_318
+    unless_null $P937, vivify_319
     new $P937, "Undef"
-  vivify_318:
+  vivify_319:
     $P938 = $P937."ast"()
     store_lex "$past", $P938
 .annotate "line", 337
@@ -18675,38 +18818,38 @@
     $P941 = $P940."new"("    %r = get_root_global [\"parrot\"], \"P6metaclass\"" :named("inline"))
 .annotate "line", 341
     find_lex $P942, "$/"
-    unless_null $P942, vivify_319
+    unless_null $P942, vivify_320
     $P942 = root_new ['parrot';'Hash']
-  vivify_319:
+  vivify_320:
     set $P943, $P942["package_def"]
-    unless_null $P943, vivify_320
+    unless_null $P943, vivify_321
     $P943 = root_new ['parrot';'Hash']
-  vivify_320:
+  vivify_321:
     set $P944, $P943["name"]
-    unless_null $P944, vivify_321
+    unless_null $P944, vivify_322
     new $P944, "Undef"
-  vivify_321:
+  vivify_322:
     set $S945, $P944
     $P946 = $P939."new"($P941, $S945, "new_class" :named("name"), "callmethod" :named("pasttype"))
 .annotate "line", 337
     store_lex "$classinit", $P946
 .annotate "line", 345
     find_lex $P949, "$/"
-    unless_null $P949, vivify_322
+    unless_null $P949, vivify_323
     $P949 = root_new ['parrot';'Hash']
-  vivify_322:
+  vivify_323:
     set $P950, $P949["package_def"]
-    unless_null $P950, vivify_323
+    unless_null $P950, vivify_324
     $P950 = root_new ['parrot';'Hash']
-  vivify_323:
+  vivify_324:
     set $P951, $P950["parent"]
-    unless_null $P951, vivify_324
+    unless_null $P951, vivify_325
     $P951 = root_new ['parrot';'ResizablePMCArray']
-  vivify_324:
+  vivify_325:
     set $P952, $P951[0]
-    unless_null $P952, vivify_325
+    unless_null $P952, vivify_326
     new $P952, "Undef"
-  vivify_325:
+  vivify_326:
     set $S953, $P952
     unless $S953, unless_948
     new $P947, 'String'
@@ -18715,13 +18858,13 @@
   unless_948:
 .annotate "line", 346
     find_lex $P956, "$/"
-    unless_null $P956, vivify_326
+    unless_null $P956, vivify_327
     $P956 = root_new ['parrot';'Hash']
-  vivify_326:
+  vivify_327:
     set $P957, $P956["sym"]
-    unless_null $P957, vivify_327
+    unless_null $P957, vivify_328
     new $P957, "Undef"
-  vivify_327:
+  vivify_328:
     set $S958, $P957
     iseq $I959, $S958, "grammar"
     if $I959, if_955
@@ -18749,35 +18892,35 @@
   if_962_end:
 .annotate "line", 350
     find_lex $P969, "$past"
-    unless_null $P969, vivify_328
+    unless_null $P969, vivify_329
     $P969 = root_new ['parrot';'Hash']
-  vivify_328:
+  vivify_329:
     set $P970, $P969["attributes"]
-    unless_null $P970, vivify_329
+    unless_null $P970, vivify_330
     new $P970, "Undef"
-  vivify_329:
+  vivify_330:
     unless $P970, if_968_end
 .annotate "line", 351
     find_lex $P971, "$classinit"
     find_lex $P972, "$past"
-    unless_null $P972, vivify_330
+    unless_null $P972, vivify_331
     $P972 = root_new ['parrot';'Hash']
-  vivify_330:
+  vivify_331:
     set $P973, $P972["attributes"]
-    unless_null $P973, vivify_331
+    unless_null $P973, vivify_332
     new $P973, "Undef"
-  vivify_331:
+  vivify_332:
     $P971."push"($P973)
   if_968_end:
 .annotate "line", 353
     get_global $P974, "@BLOCK"
-    unless_null $P974, vivify_332
+    unless_null $P974, vivify_333
     $P974 = root_new ['parrot';'ResizablePMCArray']
-  vivify_332:
+  vivify_333:
     set $P975, $P974[0]
-    unless_null $P975, vivify_333
+    unless_null $P975, vivify_334
     new $P975, "Undef"
-  vivify_333:
+  vivify_334:
     $P976 = $P975."loadinit"()
     find_lex $P977, "$classinit"
     $P976."push"($P977)
@@ -18796,12 +18939,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_def"  :subid("62_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_def"  :subid("62_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_985
 .annotate "line", 357
     new $P984, 'ExceptionHandler'
     set_addr $P984, control_983
-    $P984."handle_types"(58)
+    $P984."handle_types"(57)
     push_eh $P984
     .lex "self", self
     .lex "$/", param_985
@@ -18809,34 +18952,34 @@
     new $P986, "Undef"
     .lex "$past", $P986
     find_lex $P989, "$/"
-    unless_null $P989, vivify_334
+    unless_null $P989, vivify_335
     $P989 = root_new ['parrot';'Hash']
-  vivify_334:
+  vivify_335:
     set $P990, $P989["block"]
-    unless_null $P990, vivify_335
+    unless_null $P990, vivify_336
     new $P990, "Undef"
-  vivify_335:
+  vivify_336:
     if $P990, if_988
     find_lex $P994, "$/"
-    unless_null $P994, vivify_336
+    unless_null $P994, vivify_337
     $P994 = root_new ['parrot';'Hash']
-  vivify_336:
+  vivify_337:
     set $P995, $P994["comp_unit"]
-    unless_null $P995, vivify_337
+    unless_null $P995, vivify_338
     new $P995, "Undef"
-  vivify_337:
+  vivify_338:
     $P996 = $P995."ast"()
     set $P987, $P996
     goto if_988_end
   if_988:
     find_lex $P991, "$/"
-    unless_null $P991, vivify_338
+    unless_null $P991, vivify_339
     $P991 = root_new ['parrot';'Hash']
-  vivify_338:
+  vivify_339:
     set $P992, $P991["block"]
-    unless_null $P992, vivify_339
+    unless_null $P992, vivify_340
     new $P992, "Undef"
-  vivify_339:
+  vivify_340:
     $P993 = $P992."ast"()
     set $P987, $P993
   if_988_end:
@@ -18844,17 +18987,17 @@
 .annotate "line", 359
     find_lex $P997, "$past"
     find_lex $P998, "$/"
-    unless_null $P998, vivify_340
+    unless_null $P998, vivify_341
     $P998 = root_new ['parrot';'Hash']
-  vivify_340:
+  vivify_341:
     set $P999, $P998["name"]
-    unless_null $P999, vivify_341
+    unless_null $P999, vivify_342
     $P999 = root_new ['parrot';'Hash']
-  vivify_341:
+  vivify_342:
     set $P1000, $P999["identifier"]
-    unless_null $P1000, vivify_342
+    unless_null $P1000, vivify_343
     new $P1000, "Undef"
-  vivify_342:
+  vivify_343:
     $P997."namespace"($P1000)
 .annotate "line", 360
     find_lex $P1001, "$past"
@@ -18874,24 +19017,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<my>"  :subid("63_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<my>"  :subid("63_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1009
 .annotate "line", 364
     new $P1008, 'ExceptionHandler'
     set_addr $P1008, control_1007
-    $P1008."handle_types"(58)
+    $P1008."handle_types"(57)
     push_eh $P1008
     .lex "self", self
     .lex "$/", param_1009
     find_lex $P1010, "$/"
     find_lex $P1011, "$/"
-    unless_null $P1011, vivify_343
+    unless_null $P1011, vivify_344
     $P1011 = root_new ['parrot';'Hash']
-  vivify_343:
+  vivify_344:
     set $P1012, $P1011["scoped"]
-    unless_null $P1012, vivify_344
+    unless_null $P1012, vivify_345
     new $P1012, "Undef"
-  vivify_344:
+  vivify_345:
     $P1013 = $P1012."ast"()
     $P1014 = $P1010."!make"($P1013)
     .return ($P1014)
@@ -18904,24 +19047,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<our>"  :subid("64_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<our>"  :subid("64_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1019
 .annotate "line", 365
     new $P1018, 'ExceptionHandler'
     set_addr $P1018, control_1017
-    $P1018."handle_types"(58)
+    $P1018."handle_types"(57)
     push_eh $P1018
     .lex "self", self
     .lex "$/", param_1019
     find_lex $P1020, "$/"
     find_lex $P1021, "$/"
-    unless_null $P1021, vivify_345
+    unless_null $P1021, vivify_346
     $P1021 = root_new ['parrot';'Hash']
-  vivify_345:
+  vivify_346:
     set $P1022, $P1021["scoped"]
-    unless_null $P1022, vivify_346
+    unless_null $P1022, vivify_347
     new $P1022, "Undef"
-  vivify_346:
+  vivify_347:
     $P1023 = $P1022."ast"()
     $P1024 = $P1020."!make"($P1023)
     .return ($P1024)
@@ -18934,24 +19077,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<has>"  :subid("65_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<has>"  :subid("65_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1029
 .annotate "line", 366
     new $P1028, 'ExceptionHandler'
     set_addr $P1028, control_1027
-    $P1028."handle_types"(58)
+    $P1028."handle_types"(57)
     push_eh $P1028
     .lex "self", self
     .lex "$/", param_1029
     find_lex $P1030, "$/"
     find_lex $P1031, "$/"
-    unless_null $P1031, vivify_347
+    unless_null $P1031, vivify_348
     $P1031 = root_new ['parrot';'Hash']
-  vivify_347:
+  vivify_348:
     set $P1032, $P1031["scoped"]
-    unless_null $P1032, vivify_348
+    unless_null $P1032, vivify_349
     new $P1032, "Undef"
-  vivify_348:
+  vivify_349:
     $P1033 = $P1032."ast"()
     $P1034 = $P1030."!make"($P1033)
     .return ($P1034)
@@ -18964,12 +19107,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scoped"  :subid("66_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scoped"  :subid("66_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1039
 .annotate "line", 368
     new $P1038, 'ExceptionHandler'
     set_addr $P1038, control_1037
-    $P1038."handle_types"(58)
+    $P1038."handle_types"(57)
     push_eh $P1038
     .lex "self", self
     .lex "$/", param_1039
@@ -18977,36 +19120,36 @@
     find_lex $P1040, "$/"
 .annotate "line", 370
     find_lex $P1043, "$/"
-    unless_null $P1043, vivify_349
+    unless_null $P1043, vivify_350
     $P1043 = root_new ['parrot';'Hash']
-  vivify_349:
+  vivify_350:
     set $P1044, $P1043["routine_declarator"]
-    unless_null $P1044, vivify_350
+    unless_null $P1044, vivify_351
     new $P1044, "Undef"
-  vivify_350:
+  vivify_351:
     if $P1044, if_1042
 .annotate "line", 371
     find_lex $P1048, "$/"
-    unless_null $P1048, vivify_351
+    unless_null $P1048, vivify_352
     $P1048 = root_new ['parrot';'Hash']
-  vivify_351:
+  vivify_352:
     set $P1049, $P1048["variable_declarator"]
-    unless_null $P1049, vivify_352
+    unless_null $P1049, vivify_353
     new $P1049, "Undef"
-  vivify_352:
+  vivify_353:
     $P1050 = $P1049."ast"()
     set $P1041, $P1050
 .annotate "line", 370
     goto if_1042_end
   if_1042:
     find_lex $P1045, "$/"
-    unless_null $P1045, vivify_353
+    unless_null $P1045, vivify_354
     $P1045 = root_new ['parrot';'Hash']
-  vivify_353:
+  vivify_354:
     set $P1046, $P1045["routine_declarator"]
-    unless_null $P1046, vivify_354
+    unless_null $P1046, vivify_355
     new $P1046, "Undef"
-  vivify_354:
+  vivify_355:
     $P1047 = $P1046."ast"()
     set $P1041, $P1047
   if_1042_end:
@@ -19022,14 +19165,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable_declarator"  :subid("67_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "variable_declarator"  :subid("67_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1056
 .annotate "line", 374
-    .const 'Sub' $P1096 = "68_1267204714.47172" 
+    .const 'Sub' $P1096 = "68_1272816841.80681" 
     capture_lex $P1096
     new $P1055, 'ExceptionHandler'
     set_addr $P1055, control_1054
-    $P1055."handle_types"(58)
+    $P1055."handle_types"(57)
     push_eh $P1055
     .lex "self", self
     .lex "$/", param_1056
@@ -19047,28 +19190,28 @@
     .lex "$BLOCK", $P1060
 .annotate "line", 375
     find_lex $P1061, "$/"
-    unless_null $P1061, vivify_355
+    unless_null $P1061, vivify_356
     $P1061 = root_new ['parrot';'Hash']
-  vivify_355:
+  vivify_356:
     set $P1062, $P1061["variable"]
-    unless_null $P1062, vivify_356
+    unless_null $P1062, vivify_357
     new $P1062, "Undef"
-  vivify_356:
+  vivify_357:
     $P1063 = $P1062."ast"()
     store_lex "$past", $P1063
 .annotate "line", 376
     find_lex $P1064, "$/"
-    unless_null $P1064, vivify_357
+    unless_null $P1064, vivify_358
     $P1064 = root_new ['parrot';'Hash']
-  vivify_357:
+  vivify_358:
     set $P1065, $P1064["variable"]
-    unless_null $P1065, vivify_358
+    unless_null $P1065, vivify_359
     $P1065 = root_new ['parrot';'Hash']
-  vivify_358:
+  vivify_359:
     set $P1066, $P1065["sigil"]
-    unless_null $P1066, vivify_359
+    unless_null $P1066, vivify_360
     new $P1066, "Undef"
-  vivify_359:
+  vivify_360:
     store_lex "$sigil", $P1066
 .annotate "line", 377
     find_lex $P1067, "$past"
@@ -19076,13 +19219,13 @@
     store_lex "$name", $P1068
 .annotate "line", 378
     get_global $P1069, "@BLOCK"
-    unless_null $P1069, vivify_360
+    unless_null $P1069, vivify_361
     $P1069 = root_new ['parrot';'ResizablePMCArray']
-  vivify_360:
+  vivify_361:
     set $P1070, $P1069[0]
-    unless_null $P1070, vivify_361
+    unless_null $P1070, vivify_362
     new $P1070, "Undef"
-  vivify_361:
+  vivify_362:
     store_lex "$BLOCK", $P1070
 .annotate "line", 379
     find_lex $P1072, "$BLOCK"
@@ -19097,17 +19240,17 @@
   if_1071_end:
 .annotate "line", 382
     find_dynamic_lex $P1079, "$*SCOPE"
-    unless_null $P1079, vivify_362
-    get_hll_global $P1079, "$SCOPE"
     unless_null $P1079, vivify_363
+    get_hll_global $P1079, "$SCOPE"
+    unless_null $P1079, vivify_364
     die "Contextual $*SCOPE not found"
+  vivify_364:
   vivify_363:
-  vivify_362:
     set $S1080, $P1079
     iseq $I1081, $S1080, "has"
     if $I1081, if_1078
 .annotate "line", 391
-    .const 'Sub' $P1096 = "68_1267204714.47172" 
+    .const 'Sub' $P1096 = "68_1272816841.80681" 
     capture_lex $P1096
     $P1096()
     goto if_1078_end
@@ -19118,33 +19261,33 @@
     $P1082."symbol"($P1083, "attribute" :named("scope"))
 .annotate "line", 384
     find_lex $P1085, "$BLOCK"
-    unless_null $P1085, vivify_368
+    unless_null $P1085, vivify_369
     $P1085 = root_new ['parrot';'Hash']
-  vivify_368:
+  vivify_369:
     set $P1086, $P1085["attributes"]
-    unless_null $P1086, vivify_369
+    unless_null $P1086, vivify_370
     new $P1086, "Undef"
-  vivify_369:
+  vivify_370:
     if $P1086, unless_1084_end
 .annotate "line", 386
     get_hll_global $P1087, ["PAST"], "Op"
     $P1088 = $P1087."new"("list" :named("pasttype"), "attr" :named("named"))
     find_lex $P1089, "$BLOCK"
-    unless_null $P1089, vivify_370
+    unless_null $P1089, vivify_371
     $P1089 = root_new ['parrot';'Hash']
     store_lex "$BLOCK", $P1089
-  vivify_370:
+  vivify_371:
     set $P1089["attributes"], $P1088
   unless_1084_end:
 .annotate "line", 388
     find_lex $P1090, "$BLOCK"
-    unless_null $P1090, vivify_371
+    unless_null $P1090, vivify_372
     $P1090 = root_new ['parrot';'Hash']
-  vivify_371:
+  vivify_372:
     set $P1091, $P1090["attributes"]
-    unless_null $P1091, vivify_372
+    unless_null $P1091, vivify_373
     new $P1091, "Undef"
-  vivify_372:
+  vivify_373:
     find_lex $P1092, "$name"
     $P1091."push"($P1092)
 .annotate "line", 389
@@ -19167,7 +19310,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1095"  :anon :subid("68_1267204714.47172") :outer("67_1267204714.47172")
+.sub "_block1095"  :anon :subid("68_1272816841.80681") :outer("67_1272816841.80681")
 .annotate "line", 392
     new $P1097, "Undef"
     .lex "$scope", $P1097
@@ -19176,12 +19319,12 @@
     .lex "$decl", $P1098
 .annotate "line", 392
     find_dynamic_lex $P1101, "$*SCOPE"
-    unless_null $P1101, vivify_364
-    get_hll_global $P1101, "$SCOPE"
     unless_null $P1101, vivify_365
+    get_hll_global $P1101, "$SCOPE"
+    unless_null $P1101, vivify_366
     die "Contextual $*SCOPE not found"
+  vivify_366:
   vivify_365:
-  vivify_364:
     set $S1102, $P1101
     iseq $I1103, $S1102, "our"
     if $I1103, if_1100
@@ -19213,13 +19356,13 @@
     $P1113."symbol"($P1114, $P1115 :named("scope"))
 .annotate "line", 397
     find_lex $P1116, "$BLOCK"
-    unless_null $P1116, vivify_366
+    unless_null $P1116, vivify_367
     $P1116 = root_new ['parrot';'ResizablePMCArray']
-  vivify_366:
+  vivify_367:
     set $P1117, $P1116[0]
-    unless_null $P1117, vivify_367
+    unless_null $P1117, vivify_368
     new $P1117, "Undef"
-  vivify_367:
+  vivify_368:
     find_lex $P1118, "$decl"
     $P1119 = $P1117."push"($P1118)
 .annotate "line", 391
@@ -19228,24 +19371,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<sub>"  :subid("69_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_declarator:sym<sub>"  :subid("69_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1127
 .annotate "line", 402
     new $P1126, 'ExceptionHandler'
     set_addr $P1126, control_1125
-    $P1126."handle_types"(58)
+    $P1126."handle_types"(57)
     push_eh $P1126
     .lex "self", self
     .lex "$/", param_1127
     find_lex $P1128, "$/"
     find_lex $P1129, "$/"
-    unless_null $P1129, vivify_373
+    unless_null $P1129, vivify_374
     $P1129 = root_new ['parrot';'Hash']
-  vivify_373:
+  vivify_374:
     set $P1130, $P1129["routine_def"]
-    unless_null $P1130, vivify_374
+    unless_null $P1130, vivify_375
     new $P1130, "Undef"
-  vivify_374:
+  vivify_375:
     $P1131 = $P1130."ast"()
     $P1132 = $P1128."!make"($P1131)
     .return ($P1132)
@@ -19258,24 +19401,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<method>"  :subid("70_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_declarator:sym<method>"  :subid("70_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1137
 .annotate "line", 403
     new $P1136, 'ExceptionHandler'
     set_addr $P1136, control_1135
-    $P1136."handle_types"(58)
+    $P1136."handle_types"(57)
     push_eh $P1136
     .lex "self", self
     .lex "$/", param_1137
     find_lex $P1138, "$/"
     find_lex $P1139, "$/"
-    unless_null $P1139, vivify_375
+    unless_null $P1139, vivify_376
     $P1139 = root_new ['parrot';'Hash']
-  vivify_375:
+  vivify_376:
     set $P1140, $P1139["method_def"]
-    unless_null $P1140, vivify_376
+    unless_null $P1140, vivify_377
     new $P1140, "Undef"
-  vivify_376:
+  vivify_377:
     $P1141 = $P1140."ast"()
     $P1142 = $P1138."!make"($P1141)
     .return ($P1142)
@@ -19288,14 +19431,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_def"  :subid("71_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_def"  :subid("71_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1147
 .annotate "line", 405
-    .const 'Sub' $P1158 = "72_1267204714.47172" 
+    .const 'Sub' $P1158 = "72_1272816841.80681" 
     capture_lex $P1158
     new $P1146, 'ExceptionHandler'
     set_addr $P1146, control_1145
-    $P1146."handle_types"(58)
+    $P1146."handle_types"(57)
     push_eh $P1146
     .lex "self", self
     .lex "$/", param_1147
@@ -19303,13 +19446,13 @@
     new $P1148, "Undef"
     .lex "$past", $P1148
     find_lex $P1149, "$/"
-    unless_null $P1149, vivify_377
+    unless_null $P1149, vivify_378
     $P1149 = root_new ['parrot';'Hash']
-  vivify_377:
+  vivify_378:
     set $P1150, $P1149["blockoid"]
-    unless_null $P1150, vivify_378
+    unless_null $P1150, vivify_379
     new $P1150, "Undef"
-  vivify_378:
+  vivify_379:
     $P1151 = $P1150."ast"()
     store_lex "$past", $P1151
 .annotate "line", 407
@@ -19320,15 +19463,15 @@
     $P1153."control"("return_pir")
 .annotate "line", 409
     find_lex $P1155, "$/"
-    unless_null $P1155, vivify_379
+    unless_null $P1155, vivify_380
     $P1155 = root_new ['parrot';'Hash']
-  vivify_379:
+  vivify_380:
     set $P1156, $P1155["deflongname"]
-    unless_null $P1156, vivify_380
+    unless_null $P1156, vivify_381
     new $P1156, "Undef"
-  vivify_380:
+  vivify_381:
     unless $P1156, if_1154_end
-    .const 'Sub' $P1158 = "72_1267204714.47172" 
+    .const 'Sub' $P1158 = "72_1272816841.80681" 
     capture_lex $P1158
     $P1158()
   if_1154_end:
@@ -19347,37 +19490,37 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1157"  :anon :subid("72_1267204714.47172") :outer("71_1267204714.47172")
+.sub "_block1157"  :anon :subid("72_1272816841.80681") :outer("71_1272816841.80681")
 .annotate "line", 410
     new $P1159, "Undef"
     .lex "$name", $P1159
     find_lex $P1160, "$/"
-    unless_null $P1160, vivify_381
+    unless_null $P1160, vivify_382
     $P1160 = root_new ['parrot';'Hash']
-  vivify_381:
+  vivify_382:
     set $P1161, $P1160["sigil"]
-    unless_null $P1161, vivify_382
+    unless_null $P1161, vivify_383
     $P1161 = root_new ['parrot';'ResizablePMCArray']
-  vivify_382:
+  vivify_383:
     set $P1162, $P1161[0]
-    unless_null $P1162, vivify_383
+    unless_null $P1162, vivify_384
     new $P1162, "Undef"
-  vivify_383:
+  vivify_384:
     set $S1163, $P1162
     new $P1164, 'String'
     set $P1164, $S1163
     find_lex $P1165, "$/"
-    unless_null $P1165, vivify_384
+    unless_null $P1165, vivify_385
     $P1165 = root_new ['parrot';'Hash']
-  vivify_384:
+  vivify_385:
     set $P1166, $P1165["deflongname"]
-    unless_null $P1166, vivify_385
+    unless_null $P1166, vivify_386
     $P1166 = root_new ['parrot';'ResizablePMCArray']
-  vivify_385:
+  vivify_386:
     set $P1167, $P1166[0]
-    unless_null $P1167, vivify_386
+    unless_null $P1167, vivify_387
     new $P1167, "Undef"
-  vivify_386:
+  vivify_387:
     $S1168 = $P1167."ast"()
     concat $P1169, $P1164, $S1168
     store_lex "$name", $P1169
@@ -19387,12 +19530,12 @@
     $P1170."name"($P1171)
 .annotate "line", 412
     find_dynamic_lex $P1174, "$*SCOPE"
-    unless_null $P1174, vivify_387
-    get_hll_global $P1174, "$SCOPE"
     unless_null $P1174, vivify_388
+    get_hll_global $P1174, "$SCOPE"
+    unless_null $P1174, vivify_389
     die "Contextual $*SCOPE not found"
+  vivify_389:
   vivify_388:
-  vivify_387:
     set $S1175, $P1174
     isne $I1176, $S1175, "our"
     if $I1176, if_1173
@@ -19402,17 +19545,17 @@
   if_1173:
 .annotate "line", 413
     get_global $P1177, "@BLOCK"
-    unless_null $P1177, vivify_389
+    unless_null $P1177, vivify_390
     $P1177 = root_new ['parrot';'ResizablePMCArray']
-  vivify_389:
+  vivify_390:
     set $P1178, $P1177[0]
-    unless_null $P1178, vivify_390
+    unless_null $P1178, vivify_391
     $P1178 = root_new ['parrot';'ResizablePMCArray']
-  vivify_390:
+  vivify_391:
     set $P1179, $P1178[0]
-    unless_null $P1179, vivify_391
+    unless_null $P1179, vivify_392
     new $P1179, "Undef"
-  vivify_391:
+  vivify_392:
     get_hll_global $P1180, ["PAST"], "Var"
     find_lex $P1181, "$name"
     find_lex $P1182, "$past"
@@ -19420,13 +19563,13 @@
     $P1179."push"($P1183)
 .annotate "line", 415
     get_global $P1184, "@BLOCK"
-    unless_null $P1184, vivify_392
+    unless_null $P1184, vivify_393
     $P1184 = root_new ['parrot';'ResizablePMCArray']
-  vivify_392:
+  vivify_393:
     set $P1185, $P1184[0]
-    unless_null $P1185, vivify_393
+    unless_null $P1185, vivify_394
     new $P1185, "Undef"
-  vivify_393:
+  vivify_394:
     find_lex $P1186, "$name"
     $P1185."symbol"($P1186, "lexical" :named("scope"))
 .annotate "line", 416
@@ -19443,14 +19586,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "method_def"  :subid("73_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "method_def"  :subid("73_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1197
 .annotate "line", 423
-    .const 'Sub' $P1213 = "74_1267204714.47172" 
+    .const 'Sub' $P1213 = "74_1272816841.80681" 
     capture_lex $P1213
     new $P1196, 'ExceptionHandler'
     set_addr $P1196, control_1195
-    $P1196."handle_types"(58)
+    $P1196."handle_types"(57)
     push_eh $P1196
     .lex "self", self
     .lex "$/", param_1197
@@ -19458,13 +19601,13 @@
     new $P1198, "Undef"
     .lex "$past", $P1198
     find_lex $P1199, "$/"
-    unless_null $P1199, vivify_394
+    unless_null $P1199, vivify_395
     $P1199 = root_new ['parrot';'Hash']
-  vivify_394:
+  vivify_395:
     set $P1200, $P1199["blockoid"]
-    unless_null $P1200, vivify_395
+    unless_null $P1200, vivify_396
     new $P1200, "Undef"
-  vivify_395:
+  vivify_396:
     $P1201 = $P1200."ast"()
     store_lex "$past", $P1201
 .annotate "line", 425
@@ -19475,13 +19618,13 @@
     $P1203."control"("return_pir")
 .annotate "line", 427
     find_lex $P1204, "$past"
-    unless_null $P1204, vivify_396
+    unless_null $P1204, vivify_397
     $P1204 = root_new ['parrot';'ResizablePMCArray']
-  vivify_396:
+  vivify_397:
     set $P1205, $P1204[0]
-    unless_null $P1205, vivify_397
+    unless_null $P1205, vivify_398
     new $P1205, "Undef"
-  vivify_397:
+  vivify_398:
     get_hll_global $P1206, ["PAST"], "Op"
     $P1207 = $P1206."new"("    .lex \"self\", self" :named("inline"))
     $P1205."unshift"($P1207)
@@ -19490,15 +19633,15 @@
     $P1208."symbol"("self", "lexical" :named("scope"))
 .annotate "line", 429
     find_lex $P1210, "$/"
-    unless_null $P1210, vivify_398
+    unless_null $P1210, vivify_399
     $P1210 = root_new ['parrot';'Hash']
-  vivify_398:
+  vivify_399:
     set $P1211, $P1210["deflongname"]
-    unless_null $P1211, vivify_399
+    unless_null $P1211, vivify_400
     new $P1211, "Undef"
-  vivify_399:
+  vivify_400:
     unless $P1211, if_1209_end
-    .const 'Sub' $P1213 = "74_1267204714.47172" 
+    .const 'Sub' $P1213 = "74_1272816841.80681" 
     capture_lex $P1213
     $P1213()
   if_1209_end:
@@ -19517,22 +19660,22 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1212"  :anon :subid("74_1267204714.47172") :outer("73_1267204714.47172")
+.sub "_block1212"  :anon :subid("74_1272816841.80681") :outer("73_1272816841.80681")
 .annotate "line", 430
     new $P1214, "Undef"
     .lex "$name", $P1214
     find_lex $P1215, "$/"
-    unless_null $P1215, vivify_400
+    unless_null $P1215, vivify_401
     $P1215 = root_new ['parrot';'Hash']
-  vivify_400:
+  vivify_401:
     set $P1216, $P1215["deflongname"]
-    unless_null $P1216, vivify_401
+    unless_null $P1216, vivify_402
     $P1216 = root_new ['parrot';'ResizablePMCArray']
-  vivify_401:
+  vivify_402:
     set $P1217, $P1216[0]
-    unless_null $P1217, vivify_402
+    unless_null $P1217, vivify_403
     new $P1217, "Undef"
-  vivify_402:
+  vivify_403:
     $P1218 = $P1217."ast"()
     set $S1219, $P1218
     new $P1220, 'String'
@@ -19548,14 +19691,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "signature"  :subid("75_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "signature"  :subid("75_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1231
 .annotate "line", 437
-    .const 'Sub' $P1242 = "76_1267204714.47172" 
+    .const 'Sub' $P1242 = "76_1272816841.80681" 
     capture_lex $P1242
     new $P1230, 'ExceptionHandler'
     set_addr $P1230, control_1229
-    $P1230."handle_types"(58)
+    $P1230."handle_types"(57)
     push_eh $P1230
     .lex "self", self
     .lex "$/", param_1231
@@ -19563,39 +19706,39 @@
     new $P1232, "Undef"
     .lex "$BLOCKINIT", $P1232
     get_global $P1233, "@BLOCK"
-    unless_null $P1233, vivify_403
+    unless_null $P1233, vivify_404
     $P1233 = root_new ['parrot';'ResizablePMCArray']
-  vivify_403:
+  vivify_404:
     set $P1234, $P1233[0]
-    unless_null $P1234, vivify_404
+    unless_null $P1234, vivify_405
     $P1234 = root_new ['parrot';'ResizablePMCArray']
-  vivify_404:
+  vivify_405:
     set $P1235, $P1234[0]
-    unless_null $P1235, vivify_405
+    unless_null $P1235, vivify_406
     new $P1235, "Undef"
-  vivify_405:
+  vivify_406:
     store_lex "$BLOCKINIT", $P1235
 .annotate "line", 439
     find_lex $P1237, "$/"
-    unless_null $P1237, vivify_406
+    unless_null $P1237, vivify_407
     $P1237 = root_new ['parrot';'Hash']
-  vivify_406:
+  vivify_407:
     set $P1238, $P1237["parameter"]
-    unless_null $P1238, vivify_407
+    unless_null $P1238, vivify_408
     new $P1238, "Undef"
-  vivify_407:
+  vivify_408:
     defined $I1239, $P1238
-    unless $I1239, for_undef_408
+    unless $I1239, for_undef_409
     iter $P1236, $P1238
     new $P1249, 'ExceptionHandler'
     set_addr $P1249, loop1248_handler
-    $P1249."handle_types"(65, 67, 66)
+    $P1249."handle_types"(64, 66, 65)
     push_eh $P1249
   loop1248_test:
     unless $P1236, loop1248_done
     shift $P1240, $P1236
   loop1248_redo:
-    .const 'Sub' $P1242 = "76_1267204714.47172" 
+    .const 'Sub' $P1242 = "76_1272816841.80681" 
     capture_lex $P1242
     $P1242($P1240)
   loop1248_next:
@@ -19604,11 +19747,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P1250, exception, 'type'
-    eq $P1250, 65, loop1248_next
-    eq $P1250, 67, loop1248_redo
+    eq $P1250, 64, loop1248_next
+    eq $P1250, 66, loop1248_redo
   loop1248_done:
     pop_eh 
-  for_undef_408:
+  for_undef_409:
 .annotate "line", 437
     .return ($P1236)
   control_1229:
@@ -19620,7 +19763,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1241"  :anon :subid("76_1267204714.47172") :outer("75_1267204714.47172")
+.sub "_block1241"  :anon :subid("76_1272816841.80681") :outer("75_1272816841.80681")
     .param pmc param_1243
 .annotate "line", 439
     .lex "$_", param_1243
@@ -19633,12 +19776,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "parameter"  :subid("77_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "parameter"  :subid("77_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1255
 .annotate "line", 442
     new $P1254, 'ExceptionHandler'
     set_addr $P1254, control_1253
-    $P1254."handle_types"(58)
+    $P1254."handle_types"(57)
     push_eh $P1254
     .lex "self", self
     .lex "$/", param_1255
@@ -19650,34 +19793,34 @@
     .lex "$past", $P1257
 .annotate "line", 443
     find_lex $P1258, "$/"
-    unless_null $P1258, vivify_409
+    unless_null $P1258, vivify_410
     $P1258 = root_new ['parrot';'Hash']
-  vivify_409:
+  vivify_410:
     set $P1259, $P1258["quant"]
-    unless_null $P1259, vivify_410
+    unless_null $P1259, vivify_411
     new $P1259, "Undef"
-  vivify_410:
+  vivify_411:
     store_lex "$quant", $P1259
     find_lex $P1260, "$past"
 .annotate "line", 445
     find_lex $P1262, "$/"
-    unless_null $P1262, vivify_411
+    unless_null $P1262, vivify_412
     $P1262 = root_new ['parrot';'Hash']
-  vivify_411:
+  vivify_412:
     set $P1263, $P1262["named_param"]
-    unless_null $P1263, vivify_412
+    unless_null $P1263, vivify_413
     new $P1263, "Undef"
-  vivify_412:
+  vivify_413:
     if $P1263, if_1261
 .annotate "line", 452
     find_lex $P1277, "$/"
-    unless_null $P1277, vivify_413
+    unless_null $P1277, vivify_414
     $P1277 = root_new ['parrot';'Hash']
-  vivify_413:
+  vivify_414:
     set $P1278, $P1277["param_var"]
-    unless_null $P1278, vivify_414
+    unless_null $P1278, vivify_415
     new $P1278, "Undef"
-  vivify_414:
+  vivify_415:
     $P1279 = $P1278."ast"()
     store_lex "$past", $P1279
 .annotate "line", 453
@@ -19693,17 +19836,17 @@
 .annotate "line", 458
     find_lex $P1295, "$past"
     find_lex $P1296, "$/"
-    unless_null $P1296, vivify_415
+    unless_null $P1296, vivify_416
     $P1296 = root_new ['parrot';'Hash']
-  vivify_415:
+  vivify_416:
     set $P1297, $P1296["param_var"]
-    unless_null $P1297, vivify_416
+    unless_null $P1297, vivify_417
     $P1297 = root_new ['parrot';'Hash']
-  vivify_416:
+  vivify_417:
     set $P1298, $P1297["sigil"]
-    unless_null $P1298, vivify_417
+    unless_null $P1298, vivify_418
     new $P1298, "Undef"
-  vivify_417:
+  vivify_418:
     $P1299 = "vivitype"($P1298)
     $P1295."viviself"($P1299)
   if_1291_end:
@@ -19716,17 +19859,17 @@
 .annotate "line", 455
     find_lex $P1285, "$past"
     find_lex $P1286, "$/"
-    unless_null $P1286, vivify_418
+    unless_null $P1286, vivify_419
     $P1286 = root_new ['parrot';'Hash']
-  vivify_418:
+  vivify_419:
     set $P1287, $P1286["param_var"]
-    unless_null $P1287, vivify_419
+    unless_null $P1287, vivify_420
     $P1287 = root_new ['parrot';'Hash']
-  vivify_419:
+  vivify_420:
     set $P1288, $P1287["sigil"]
-    unless_null $P1288, vivify_420
+    unless_null $P1288, vivify_421
     new $P1288, "Undef"
-  vivify_420:
+  vivify_421:
     set $S1289, $P1288
     iseq $I1290, $S1289, "%"
     $P1285."named"($I1290)
@@ -19736,13 +19879,13 @@
   if_1261:
 .annotate "line", 446
     find_lex $P1264, "$/"
-    unless_null $P1264, vivify_421
+    unless_null $P1264, vivify_422
     $P1264 = root_new ['parrot';'Hash']
-  vivify_421:
+  vivify_422:
     set $P1265, $P1264["named_param"]
-    unless_null $P1265, vivify_422
+    unless_null $P1265, vivify_423
     new $P1265, "Undef"
-  vivify_422:
+  vivify_423:
     $P1266 = $P1265."ast"()
     store_lex "$past", $P1266
 .annotate "line", 447
@@ -19753,34 +19896,34 @@
 .annotate "line", 448
     find_lex $P1271, "$past"
     find_lex $P1272, "$/"
-    unless_null $P1272, vivify_423
+    unless_null $P1272, vivify_424
     $P1272 = root_new ['parrot';'Hash']
-  vivify_423:
+  vivify_424:
     set $P1273, $P1272["named_param"]
-    unless_null $P1273, vivify_424
+    unless_null $P1273, vivify_425
     $P1273 = root_new ['parrot';'Hash']
-  vivify_424:
+  vivify_425:
     set $P1274, $P1273["param_var"]
-    unless_null $P1274, vivify_425
+    unless_null $P1274, vivify_426
     $P1274 = root_new ['parrot';'Hash']
-  vivify_425:
+  vivify_426:
     set $P1275, $P1274["sigil"]
-    unless_null $P1275, vivify_426
+    unless_null $P1275, vivify_427
     new $P1275, "Undef"
-  vivify_426:
+  vivify_427:
     $P1276 = "vivitype"($P1275)
     $P1271."viviself"($P1276)
   if_1267_end:
   if_1261_end:
 .annotate "line", 461
     find_lex $P1301, "$/"
-    unless_null $P1301, vivify_427
+    unless_null $P1301, vivify_428
     $P1301 = root_new ['parrot';'Hash']
-  vivify_427:
+  vivify_428:
     set $P1302, $P1301["default_value"]
-    unless_null $P1302, vivify_428
+    unless_null $P1302, vivify_429
     new $P1302, "Undef"
-  vivify_428:
+  vivify_429:
     unless $P1302, if_1300_end
 .annotate "line", 462
     find_lex $P1304, "$quant"
@@ -19805,21 +19948,21 @@
 .annotate "line", 468
     find_lex $P1315, "$past"
     find_lex $P1316, "$/"
-    unless_null $P1316, vivify_429
+    unless_null $P1316, vivify_430
     $P1316 = root_new ['parrot';'Hash']
-  vivify_429:
+  vivify_430:
     set $P1317, $P1316["default_value"]
-    unless_null $P1317, vivify_430
+    unless_null $P1317, vivify_431
     $P1317 = root_new ['parrot';'ResizablePMCArray']
-  vivify_430:
+  vivify_431:
     set $P1318, $P1317[0]
-    unless_null $P1318, vivify_431
+    unless_null $P1318, vivify_432
     $P1318 = root_new ['parrot';'Hash']
-  vivify_431:
+  vivify_432:
     set $P1319, $P1318["EXPR"]
-    unless_null $P1319, vivify_432
+    unless_null $P1319, vivify_433
     new $P1319, "Undef"
-  vivify_432:
+  vivify_433:
     $P1320 = $P1319."ast"()
     $P1315."viviself"($P1320)
   if_1300_end:
@@ -19828,21 +19971,21 @@
     $P1323 = $P1322."viviself"()
     if $P1323, unless_1321_end
     get_global $P1324, "@BLOCK"
-    unless_null $P1324, vivify_433
+    unless_null $P1324, vivify_434
     $P1324 = root_new ['parrot';'ResizablePMCArray']
-  vivify_433:
+  vivify_434:
     set $P1325, $P1324[0]
-    unless_null $P1325, vivify_434
+    unless_null $P1325, vivify_435
     new $P1325, "Undef"
-  vivify_434:
+  vivify_435:
     get_global $P1326, "@BLOCK"
-    unless_null $P1326, vivify_435
+    unless_null $P1326, vivify_436
     $P1326 = root_new ['parrot';'ResizablePMCArray']
-  vivify_435:
+  vivify_436:
     set $P1327, $P1326[0]
-    unless_null $P1327, vivify_436
+    unless_null $P1327, vivify_437
     new $P1327, "Undef"
-  vivify_436:
+  vivify_437:
     $P1328 = $P1327."arity"()
     set $N1329, $P1328
     new $P1330, 'Float'
@@ -19865,12 +20008,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "param_var"  :subid("78_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "param_var"  :subid("78_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1339
 .annotate "line", 474
     new $P1338, 'ExceptionHandler'
     set_addr $P1338, control_1337
-    $P1338."handle_types"(58)
+    $P1338."handle_types"(57)
     push_eh $P1338
     .lex "self", self
     .lex "$/", param_1339
@@ -19894,13 +20037,13 @@
     store_lex "$past", $P1348
 .annotate "line", 478
     get_global $P1349, "@BLOCK"
-    unless_null $P1349, vivify_437
+    unless_null $P1349, vivify_438
     $P1349 = root_new ['parrot';'ResizablePMCArray']
-  vivify_437:
+  vivify_438:
     set $P1350, $P1349[0]
-    unless_null $P1350, vivify_438
+    unless_null $P1350, vivify_439
     new $P1350, "Undef"
-  vivify_438:
+  vivify_439:
     find_lex $P1351, "$name"
     $P1350."symbol"($P1351, "lexical" :named("scope"))
 .annotate "line", 479
@@ -19918,12 +20061,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "named_param"  :subid("79_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "named_param"  :subid("79_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1359
 .annotate "line", 482
     new $P1358, 'ExceptionHandler'
     set_addr $P1358, control_1357
-    $P1358."handle_types"(58)
+    $P1358."handle_types"(57)
     push_eh $P1358
     .lex "self", self
     .lex "$/", param_1359
@@ -19931,29 +20074,29 @@
     new $P1360, "Undef"
     .lex "$past", $P1360
     find_lex $P1361, "$/"
-    unless_null $P1361, vivify_439
+    unless_null $P1361, vivify_440
     $P1361 = root_new ['parrot';'Hash']
-  vivify_439:
+  vivify_440:
     set $P1362, $P1361["param_var"]
-    unless_null $P1362, vivify_440
+    unless_null $P1362, vivify_441
     new $P1362, "Undef"
-  vivify_440:
+  vivify_441:
     $P1363 = $P1362."ast"()
     store_lex "$past", $P1363
 .annotate "line", 484
     find_lex $P1364, "$past"
     find_lex $P1365, "$/"
-    unless_null $P1365, vivify_441
+    unless_null $P1365, vivify_442
     $P1365 = root_new ['parrot';'Hash']
-  vivify_441:
+  vivify_442:
     set $P1366, $P1365["param_var"]
-    unless_null $P1366, vivify_442
+    unless_null $P1366, vivify_443
     $P1366 = root_new ['parrot';'Hash']
-  vivify_442:
+  vivify_443:
     set $P1367, $P1366["name"]
-    unless_null $P1367, vivify_443
+    unless_null $P1367, vivify_444
     new $P1367, "Undef"
-  vivify_443:
+  vivify_444:
     set $S1368, $P1367
     $P1364."named"($S1368)
 .annotate "line", 485
@@ -19971,25 +20114,25 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "regex_declarator"  :subid("80_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "regex_declarator"  :subid("80_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1376
     .param pmc param_1377 :optional
     .param int has_param_1377 :opt_flag
 .annotate "line", 488
-    .const 'Sub' $P1447 = "82_1267204714.47172" 
+    .const 'Sub' $P1447 = "82_1272816841.80681" 
     capture_lex $P1447
-    .const 'Sub' $P1419 = "81_1267204714.47172" 
+    .const 'Sub' $P1419 = "81_1272816841.80681" 
     capture_lex $P1419
     new $P1375, 'ExceptionHandler'
     set_addr $P1375, control_1374
-    $P1375."handle_types"(58)
+    $P1375."handle_types"(57)
     push_eh $P1375
     .lex "self", self
     .lex "$/", param_1376
-    if has_param_1377, optparam_444
+    if has_param_1377, optparam_445
     new $P1378, "Undef"
     set param_1377, $P1378
-  optparam_444:
+  optparam_445:
     .lex "$key", param_1377
 .annotate "line", 489
     $P1379 = root_new ['parrot';'ResizablePMCArray']
@@ -20007,13 +20150,13 @@
     store_lex "@MODIFIERS", $P1382
 .annotate "line", 492
     find_lex $P1383, "$/"
-    unless_null $P1383, vivify_445
+    unless_null $P1383, vivify_446
     $P1383 = root_new ['parrot';'Hash']
-  vivify_445:
+  vivify_446:
     set $P1384, $P1383["deflongname"]
-    unless_null $P1384, vivify_446
+    unless_null $P1384, vivify_447
     new $P1384, "Undef"
-  vivify_446:
+  vivify_447:
     $P1385 = $P1384."ast"()
     set $S1386, $P1385
     new $P1387, 'String'
@@ -20022,13 +20165,13 @@
     find_lex $P1388, "$past"
 .annotate "line", 494
     find_lex $P1390, "$/"
-    unless_null $P1390, vivify_447
+    unless_null $P1390, vivify_448
     $P1390 = root_new ['parrot';'Hash']
-  vivify_447:
+  vivify_448:
     set $P1391, $P1390["proto"]
-    unless_null $P1391, vivify_448
+    unless_null $P1391, vivify_449
     new $P1391, "Undef"
-  vivify_448:
+  vivify_449:
     if $P1391, if_1389
 .annotate "line", 521
     find_lex $P1415, "$key"
@@ -20036,13 +20179,13 @@
     iseq $I1417, $S1416, "open"
     if $I1417, if_1414
 .annotate "line", 534
-    .const 'Sub' $P1447 = "82_1267204714.47172" 
+    .const 'Sub' $P1447 = "82_1272816841.80681" 
     capture_lex $P1447
     $P1447()
     goto if_1414_end
   if_1414:
 .annotate "line", 521
-    .const 'Sub' $P1419 = "81_1267204714.47172" 
+    .const 'Sub' $P1419 = "81_1272816841.80681" 
     capture_lex $P1419
     $P1419()
   if_1414_end:
@@ -20099,20 +20242,20 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1446"  :anon :subid("82_1267204714.47172") :outer("80_1267204714.47172")
+.sub "_block1446"  :anon :subid("82_1272816841.80681") :outer("80_1272816841.80681")
 .annotate "line", 535
     new $P1448, "Undef"
     .lex "$regex", $P1448
 .annotate "line", 536
     get_hll_global $P1449, ["Regex";"P6Regex";"Actions"], "buildsub"
     find_lex $P1450, "$/"
-    unless_null $P1450, vivify_449
+    unless_null $P1450, vivify_450
     $P1450 = root_new ['parrot';'Hash']
-  vivify_449:
+  vivify_450:
     set $P1451, $P1450["p6regex"]
-    unless_null $P1451, vivify_450
+    unless_null $P1451, vivify_451
     new $P1451, "Undef"
-  vivify_450:
+  vivify_451:
     $P1452 = $P1451."ast"()
     get_global $P1453, "@BLOCK"
     $P1454 = $P1453."shift"()
@@ -20136,10 +20279,10 @@
 .annotate "line", 545
     find_lex $P1464, "$regex"
     find_lex $P1465, "$past"
-    unless_null $P1465, vivify_451
+    unless_null $P1465, vivify_452
     $P1465 = root_new ['parrot';'Hash']
     store_lex "$past", $P1465
-  vivify_451:
+  vivify_452:
     set $P1465["sink"], $P1464
 .annotate "line", 546
     find_lex $P1466, "@MODIFIERS"
@@ -20150,7 +20293,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1418"  :anon :subid("81_1267204714.47172") :outer("80_1267204714.47172")
+.sub "_block1418"  :anon :subid("81_1272816841.80681") :outer("80_1272816841.80681")
 .annotate "line", 522
     $P1420 = root_new ['parrot';'Hash']
     .lex "%h", $P1420
@@ -20158,52 +20301,52 @@
     find_lex $P1421, "%h"
 .annotate "line", 523
     find_lex $P1423, "$/"
-    unless_null $P1423, vivify_452
+    unless_null $P1423, vivify_453
     $P1423 = root_new ['parrot';'Hash']
-  vivify_452:
+  vivify_453:
     set $P1424, $P1423["sym"]
-    unless_null $P1424, vivify_453
+    unless_null $P1424, vivify_454
     new $P1424, "Undef"
-  vivify_453:
+  vivify_454:
     set $S1425, $P1424
     iseq $I1426, $S1425, "token"
     unless $I1426, if_1422_end
     new $P1427, "Integer"
     assign $P1427, 1
     find_lex $P1428, "%h"
-    unless_null $P1428, vivify_454
+    unless_null $P1428, vivify_455
     $P1428 = root_new ['parrot';'Hash']
     store_lex "%h", $P1428
-  vivify_454:
+  vivify_455:
     set $P1428["r"], $P1427
   if_1422_end:
 .annotate "line", 524
     find_lex $P1430, "$/"
-    unless_null $P1430, vivify_455
+    unless_null $P1430, vivify_456
     $P1430 = root_new ['parrot';'Hash']
-  vivify_455:
+  vivify_456:
     set $P1431, $P1430["sym"]
-    unless_null $P1431, vivify_456
+    unless_null $P1431, vivify_457
     new $P1431, "Undef"
-  vivify_456:
+  vivify_457:
     set $S1432, $P1431
     iseq $I1433, $S1432, "rule"
     unless $I1433, if_1429_end
     new $P1434, "Integer"
     assign $P1434, 1
     find_lex $P1435, "%h"
-    unless_null $P1435, vivify_457
+    unless_null $P1435, vivify_458
     $P1435 = root_new ['parrot';'Hash']
     store_lex "%h", $P1435
-  vivify_457:
+  vivify_458:
     set $P1435["r"], $P1434
     new $P1436, "Integer"
     assign $P1436, 1
     find_lex $P1437, "%h"
-    unless_null $P1437, vivify_458
+    unless_null $P1437, vivify_459
     $P1437 = root_new ['parrot';'Hash']
     store_lex "%h", $P1437
-  vivify_458:
+  vivify_459:
     set $P1437["s"], $P1436
   if_1429_end:
 .annotate "line", 525
@@ -20217,27 +20360,27 @@
         
 .annotate "line", 530
     get_global $P1440, "@BLOCK"
-    unless_null $P1440, vivify_459
+    unless_null $P1440, vivify_460
     $P1440 = root_new ['parrot';'ResizablePMCArray']
-  vivify_459:
+  vivify_460:
     set $P1441, $P1440[0]
-    unless_null $P1441, vivify_460
+    unless_null $P1441, vivify_461
     new $P1441, "Undef"
-  vivify_460:
+  vivify_461:
     $P1441."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
 .annotate "line", 531
     get_global $P1442, "@BLOCK"
-    unless_null $P1442, vivify_461
+    unless_null $P1442, vivify_462
     $P1442 = root_new ['parrot';'ResizablePMCArray']
-  vivify_461:
+  vivify_462:
     set $P1443, $P1442[0]
-    unless_null $P1443, vivify_462
+    unless_null $P1443, vivify_463
     new $P1443, "Undef"
-  vivify_462:
+  vivify_463:
     $P1443."symbol"("$/", "lexical" :named("scope"))
 .annotate "line", 532
     new $P1444, "Exception"
-    set $P1444['type'], 58
+    set $P1444['type'], 57
     new $P1445, "Integer"
     assign $P1445, 0
     setattribute $P1444, 'payload', $P1445
@@ -20248,12 +20391,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "dotty"  :subid("83_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "dotty"  :subid("83_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1475
 .annotate "line", 552
     new $P1474, 'ExceptionHandler'
     set_addr $P1474, control_1473
-    $P1474."handle_types"(58)
+    $P1474."handle_types"(57)
     push_eh $P1474
     .lex "self", self
     .lex "$/", param_1475
@@ -20261,13 +20404,13 @@
     new $P1476, "Undef"
     .lex "$past", $P1476
     find_lex $P1479, "$/"
-    unless_null $P1479, vivify_463
+    unless_null $P1479, vivify_464
     $P1479 = root_new ['parrot';'Hash']
-  vivify_463:
+  vivify_464:
     set $P1480, $P1479["args"]
-    unless_null $P1480, vivify_464
+    unless_null $P1480, vivify_465
     new $P1480, "Undef"
-  vivify_464:
+  vivify_465:
     if $P1480, if_1478
     get_hll_global $P1485, ["PAST"], "Op"
     find_lex $P1486, "$/"
@@ -20276,17 +20419,17 @@
     goto if_1478_end
   if_1478:
     find_lex $P1481, "$/"
-    unless_null $P1481, vivify_465
+    unless_null $P1481, vivify_466
     $P1481 = root_new ['parrot';'Hash']
-  vivify_465:
+  vivify_466:
     set $P1482, $P1481["args"]
-    unless_null $P1482, vivify_466
+    unless_null $P1482, vivify_467
     $P1482 = root_new ['parrot';'ResizablePMCArray']
-  vivify_466:
+  vivify_467:
     set $P1483, $P1482[0]
-    unless_null $P1483, vivify_467
+    unless_null $P1483, vivify_468
     new $P1483, "Undef"
-  vivify_467:
+  vivify_468:
     $P1484 = $P1483."ast"()
     set $P1477, $P1484
   if_1478_end:
@@ -20294,35 +20437,35 @@
 .annotate "line", 554
     find_lex $P1488, "$past"
     find_lex $P1491, "$/"
-    unless_null $P1491, vivify_468
+    unless_null $P1491, vivify_469
     $P1491 = root_new ['parrot';'Hash']
-  vivify_468:
+  vivify_469:
     set $P1492, $P1491["quote"]
-    unless_null $P1492, vivify_469
+    unless_null $P1492, vivify_470
     new $P1492, "Undef"
-  vivify_469:
+  vivify_470:
     if $P1492, if_1490
     find_lex $P1496, "$/"
-    unless_null $P1496, vivify_470
+    unless_null $P1496, vivify_471
     $P1496 = root_new ['parrot';'Hash']
-  vivify_470:
+  vivify_471:
     set $P1497, $P1496["longname"]
-    unless_null $P1497, vivify_471
+    unless_null $P1497, vivify_472
     new $P1497, "Undef"
-  vivify_471:
+  vivify_472:
     set $S1498, $P1497
     new $P1489, 'String'
     set $P1489, $S1498
     goto if_1490_end
   if_1490:
     find_lex $P1493, "$/"
-    unless_null $P1493, vivify_472
+    unless_null $P1493, vivify_473
     $P1493 = root_new ['parrot';'Hash']
-  vivify_472:
+  vivify_473:
     set $P1494, $P1493["quote"]
-    unless_null $P1494, vivify_473
+    unless_null $P1494, vivify_474
     new $P1494, "Undef"
-  vivify_473:
+  vivify_474:
     $P1495 = $P1494."ast"()
     set $P1489, $P1495
   if_1490_end:
@@ -20345,12 +20488,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<self>"  :subid("84_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<self>"  :subid("84_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1507
 .annotate "line", 561
     new $P1506, 'ExceptionHandler'
     set_addr $P1506, control_1505
-    $P1506."handle_types"(58)
+    $P1506."handle_types"(57)
     push_eh $P1506
     .lex "self", self
     .lex "$/", param_1507
@@ -20370,12 +20513,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<identifier>"  :subid("85_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<identifier>"  :subid("85_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1516
 .annotate "line", 565
     new $P1515, 'ExceptionHandler'
     set_addr $P1515, control_1514
-    $P1515."handle_types"(58)
+    $P1515."handle_types"(57)
     push_eh $P1515
     .lex "self", self
     .lex "$/", param_1516
@@ -20383,25 +20526,25 @@
     new $P1517, "Undef"
     .lex "$past", $P1517
     find_lex $P1518, "$/"
-    unless_null $P1518, vivify_474
+    unless_null $P1518, vivify_475
     $P1518 = root_new ['parrot';'Hash']
-  vivify_474:
+  vivify_475:
     set $P1519, $P1518["args"]
-    unless_null $P1519, vivify_475
+    unless_null $P1519, vivify_476
     new $P1519, "Undef"
-  vivify_475:
+  vivify_476:
     $P1520 = $P1519."ast"()
     store_lex "$past", $P1520
 .annotate "line", 567
     find_lex $P1521, "$past"
     find_lex $P1522, "$/"
-    unless_null $P1522, vivify_476
+    unless_null $P1522, vivify_477
     $P1522 = root_new ['parrot';'Hash']
-  vivify_476:
+  vivify_477:
     set $P1523, $P1522["identifier"]
-    unless_null $P1523, vivify_477
+    unless_null $P1523, vivify_478
     new $P1523, "Undef"
-  vivify_477:
+  vivify_478:
     set $S1524, $P1523
     $P1521."name"($S1524)
 .annotate "line", 568
@@ -20419,12 +20562,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<name>"  :subid("86_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<name>"  :subid("86_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1532
 .annotate "line", 571
     new $P1531, 'ExceptionHandler'
     set_addr $P1531, control_1530
-    $P1531."handle_types"(58)
+    $P1531."handle_types"(57)
     push_eh $P1531
     .lex "self", self
     .lex "$/", param_1532
@@ -20442,17 +20585,17 @@
     .lex "$past", $P1536
 .annotate "line", 572
     find_lex $P1537, "$/"
-    unless_null $P1537, vivify_478
+    unless_null $P1537, vivify_479
     $P1537 = root_new ['parrot';'Hash']
-  vivify_478:
+  vivify_479:
     set $P1538, $P1537["name"]
-    unless_null $P1538, vivify_479
+    unless_null $P1538, vivify_480
     $P1538 = root_new ['parrot';'Hash']
-  vivify_479:
+  vivify_480:
     set $P1539, $P1538["identifier"]
-    unless_null $P1539, vivify_480
+    unless_null $P1539, vivify_481
     new $P1539, "Undef"
-  vivify_480:
+  vivify_481:
     clone $P1540, $P1539
     store_lex "@ns", $P1540
 .annotate "line", 573
@@ -20466,13 +20609,13 @@
     goto if_1545_end
   if_1545:
     find_lex $P1547, "@ns"
-    unless_null $P1547, vivify_481
+    unless_null $P1547, vivify_482
     $P1547 = root_new ['parrot';'ResizablePMCArray']
-  vivify_481:
+  vivify_482:
     set $P1548, $P1547[0]
-    unless_null $P1548, vivify_482
+    unless_null $P1548, vivify_483
     new $P1548, "Undef"
-  vivify_482:
+  vivify_483:
     set $S1549, $P1548
     iseq $I1550, $S1549, "GLOBAL"
     new $P1544, 'Integer'
@@ -20494,27 +20637,27 @@
     store_lex "$past", $P1557
 .annotate "line", 578
     find_lex $P1559, "$/"
-    unless_null $P1559, vivify_483
+    unless_null $P1559, vivify_484
     $P1559 = root_new ['parrot';'Hash']
-  vivify_483:
+  vivify_484:
     set $P1560, $P1559["args"]
-    unless_null $P1560, vivify_484
+    unless_null $P1560, vivify_485
     new $P1560, "Undef"
-  vivify_484:
+  vivify_485:
     unless $P1560, if_1558_end
 .annotate "line", 579
     find_lex $P1561, "$/"
-    unless_null $P1561, vivify_485
+    unless_null $P1561, vivify_486
     $P1561 = root_new ['parrot';'Hash']
-  vivify_485:
+  vivify_486:
     set $P1562, $P1561["args"]
-    unless_null $P1562, vivify_486
+    unless_null $P1562, vivify_487
     $P1562 = root_new ['parrot';'ResizablePMCArray']
-  vivify_486:
+  vivify_487:
     set $P1563, $P1562[0]
-    unless_null $P1563, vivify_487
+    unless_null $P1563, vivify_488
     new $P1563, "Undef"
-  vivify_487:
+  vivify_488:
     $P1564 = $P1563."ast"()
     store_lex "$past", $P1564
 .annotate "line", 580
@@ -20537,12 +20680,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<pir::op>"  :subid("87_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<pir::op>"  :subid("87_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1574
 .annotate "line", 585
     new $P1573, 'ExceptionHandler'
     set_addr $P1573, control_1572
-    $P1573."handle_types"(58)
+    $P1573."handle_types"(57)
     push_eh $P1573
     .lex "self", self
     .lex "$/", param_1574
@@ -20554,13 +20697,13 @@
     .lex "$pirop", $P1576
 .annotate "line", 586
     find_lex $P1579, "$/"
-    unless_null $P1579, vivify_488
+    unless_null $P1579, vivify_489
     $P1579 = root_new ['parrot';'Hash']
-  vivify_488:
+  vivify_489:
     set $P1580, $P1579["args"]
-    unless_null $P1580, vivify_489
+    unless_null $P1580, vivify_490
     new $P1580, "Undef"
-  vivify_489:
+  vivify_490:
     if $P1580, if_1578
     get_hll_global $P1585, ["PAST"], "Op"
     find_lex $P1586, "$/"
@@ -20569,30 +20712,30 @@
     goto if_1578_end
   if_1578:
     find_lex $P1581, "$/"
-    unless_null $P1581, vivify_490
+    unless_null $P1581, vivify_491
     $P1581 = root_new ['parrot';'Hash']
-  vivify_490:
+  vivify_491:
     set $P1582, $P1581["args"]
-    unless_null $P1582, vivify_491
+    unless_null $P1582, vivify_492
     $P1582 = root_new ['parrot';'ResizablePMCArray']
-  vivify_491:
+  vivify_492:
     set $P1583, $P1582[0]
-    unless_null $P1583, vivify_492
+    unless_null $P1583, vivify_493
     new $P1583, "Undef"
-  vivify_492:
+  vivify_493:
     $P1584 = $P1583."ast"()
     set $P1577, $P1584
   if_1578_end:
     store_lex "$past", $P1577
 .annotate "line", 587
     find_lex $P1588, "$/"
-    unless_null $P1588, vivify_493
+    unless_null $P1588, vivify_494
     $P1588 = root_new ['parrot';'Hash']
-  vivify_493:
+  vivify_494:
     set $P1589, $P1588["op"]
-    unless_null $P1589, vivify_494
+    unless_null $P1589, vivify_495
     new $P1589, "Undef"
-  vivify_494:
+  vivify_495:
     set $S1590, $P1589
     new $P1591, 'String'
     set $P1591, $S1590
@@ -20628,24 +20771,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "args"  :subid("88_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "args"  :subid("88_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1603
 .annotate "line", 600
     new $P1602, 'ExceptionHandler'
     set_addr $P1602, control_1601
-    $P1602."handle_types"(58)
+    $P1602."handle_types"(57)
     push_eh $P1602
     .lex "self", self
     .lex "$/", param_1603
     find_lex $P1604, "$/"
     find_lex $P1605, "$/"
-    unless_null $P1605, vivify_495
+    unless_null $P1605, vivify_496
     $P1605 = root_new ['parrot';'Hash']
-  vivify_495:
+  vivify_496:
     set $P1606, $P1605["arglist"]
-    unless_null $P1606, vivify_496
+    unless_null $P1606, vivify_497
     new $P1606, "Undef"
-  vivify_496:
+  vivify_497:
     $P1607 = $P1606."ast"()
     $P1608 = $P1604."!make"($P1607)
     .return ($P1608)
@@ -20658,14 +20801,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "arglist"  :subid("89_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "arglist"  :subid("89_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1613
 .annotate "line", 602
-    .const 'Sub' $P1624 = "90_1267204714.47172" 
+    .const 'Sub' $P1624 = "90_1272816841.80681" 
     capture_lex $P1624
     new $P1612, 'ExceptionHandler'
     set_addr $P1612, control_1611
-    $P1612."handle_types"(58)
+    $P1612."handle_types"(57)
     push_eh $P1612
     .lex "self", self
     .lex "$/", param_1613
@@ -20685,15 +20828,15 @@
     store_lex "$past", $P1619
 .annotate "line", 604
     find_lex $P1621, "$/"
-    unless_null $P1621, vivify_497
+    unless_null $P1621, vivify_498
     $P1621 = root_new ['parrot';'Hash']
-  vivify_497:
+  vivify_498:
     set $P1622, $P1621["EXPR"]
-    unless_null $P1622, vivify_498
+    unless_null $P1622, vivify_499
     new $P1622, "Undef"
-  vivify_498:
+  vivify_499:
     unless $P1622, if_1620_end
-    .const 'Sub' $P1624 = "90_1267204714.47172" 
+    .const 'Sub' $P1624 = "90_1272816841.80681" 
     capture_lex $P1624
     $P1624()
   if_1620_end:
@@ -20711,7 +20854,7 @@
 .annotate "line", 613
     new $P1688, 'ExceptionHandler'
     set_addr $P1688, loop1687_handler
-    $P1688."handle_types"(65, 67, 66)
+    $P1688."handle_types"(64, 66, 65)
     push_eh $P1688
   loop1687_test:
     find_lex $P1661, "$i"
@@ -20725,13 +20868,13 @@
     find_lex $P1667, "$i"
     set $I1668, $P1667
     find_lex $P1669, "$past"
-    unless_null $P1669, vivify_502
+    unless_null $P1669, vivify_503
     $P1669 = root_new ['parrot';'ResizablePMCArray']
-  vivify_502:
+  vivify_503:
     set $P1670, $P1669[$I1668]
-    unless_null $P1670, vivify_503
+    unless_null $P1670, vivify_504
     new $P1670, "Undef"
-  vivify_503:
+  vivify_504:
     $S1671 = $P1670."name"()
     iseq $I1672, $S1671, "&prefix:<|>"
     unless $I1672, if_1666_end
@@ -20739,36 +20882,36 @@
     find_lex $P1673, "$i"
     set $I1674, $P1673
     find_lex $P1675, "$past"
-    unless_null $P1675, vivify_504
+    unless_null $P1675, vivify_505
     $P1675 = root_new ['parrot';'ResizablePMCArray']
-  vivify_504:
+  vivify_505:
     set $P1676, $P1675[$I1674]
-    unless_null $P1676, vivify_505
+    unless_null $P1676, vivify_506
     $P1676 = root_new ['parrot';'ResizablePMCArray']
-  vivify_505:
+  vivify_506:
     set $P1677, $P1676[0]
-    unless_null $P1677, vivify_506
+    unless_null $P1677, vivify_507
     new $P1677, "Undef"
-  vivify_506:
+  vivify_507:
     find_lex $P1678, "$i"
     set $I1679, $P1678
     find_lex $P1680, "$past"
-    unless_null $P1680, vivify_507
+    unless_null $P1680, vivify_508
     $P1680 = root_new ['parrot';'ResizablePMCArray']
     store_lex "$past", $P1680
-  vivify_507:
+  vivify_508:
     set $P1680[$I1679], $P1677
 .annotate "line", 616
     find_lex $P1681, "$i"
     set $I1682, $P1681
     find_lex $P1683, "$past"
-    unless_null $P1683, vivify_508
+    unless_null $P1683, vivify_509
     $P1683 = root_new ['parrot';'ResizablePMCArray']
-  vivify_508:
+  vivify_509:
     set $P1684, $P1683[$I1682]
-    unless_null $P1684, vivify_509
+    unless_null $P1684, vivify_510
     new $P1684, "Undef"
-  vivify_509:
+  vivify_510:
     $P1684."flat"(1)
   if_1666_end:
 .annotate "line", 614
@@ -20782,8 +20925,8 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P1689, exception, 'type'
-    eq $P1689, 65, loop1687_next
-    eq $P1689, 67, loop1687_redo
+    eq $P1689, 64, loop1687_next
+    eq $P1689, 66, loop1687_redo
   loop1687_done:
     pop_eh 
 .annotate "line", 620
@@ -20801,21 +20944,21 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1623"  :anon :subid("90_1267204714.47172") :outer("89_1267204714.47172")
+.sub "_block1623"  :anon :subid("90_1272816841.80681") :outer("89_1272816841.80681")
 .annotate "line", 604
-    .const 'Sub' $P1645 = "91_1267204714.47172" 
+    .const 'Sub' $P1645 = "91_1272816841.80681" 
     capture_lex $P1645
 .annotate "line", 605
     new $P1625, "Undef"
     .lex "$expr", $P1625
     find_lex $P1626, "$/"
-    unless_null $P1626, vivify_499
+    unless_null $P1626, vivify_500
     $P1626 = root_new ['parrot';'Hash']
-  vivify_499:
+  vivify_500:
     set $P1627, $P1626["EXPR"]
-    unless_null $P1627, vivify_500
+    unless_null $P1627, vivify_501
     new $P1627, "Undef"
-  vivify_500:
+  vivify_501:
     $P1628 = $P1627."ast"()
     store_lex "$expr", $P1628
 .annotate "line", 606
@@ -20846,17 +20989,17 @@
     find_lex $P1640, "$expr"
     $P1641 = $P1640."list"()
     defined $I1642, $P1641
-    unless $I1642, for_undef_501
+    unless $I1642, for_undef_502
     iter $P1639, $P1641
     new $P1651, 'ExceptionHandler'
     set_addr $P1651, loop1650_handler
-    $P1651."handle_types"(65, 67, 66)
+    $P1651."handle_types"(64, 66, 65)
     push_eh $P1651
   loop1650_test:
     unless $P1639, loop1650_done
     shift $P1643, $P1639
   loop1650_redo:
-    .const 'Sub' $P1645 = "91_1267204714.47172" 
+    .const 'Sub' $P1645 = "91_1272816841.80681" 
     capture_lex $P1645
     $P1645($P1643)
   loop1650_next:
@@ -20865,11 +21008,11 @@
     .local pmc exception 
     .get_results (exception) 
     getattribute $P1652, exception, 'type'
-    eq $P1652, 65, loop1650_next
-    eq $P1652, 67, loop1650_redo
+    eq $P1652, 64, loop1650_next
+    eq $P1652, 66, loop1650_redo
   loop1650_done:
     pop_eh 
-  for_undef_501:
+  for_undef_502:
 .annotate "line", 606
     set $P1629, $P1639
   if_1630_end:
@@ -20879,7 +21022,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1644"  :anon :subid("91_1267204714.47172") :outer("90_1267204714.47172")
+.sub "_block1644"  :anon :subid("91_1272816841.80681") :outer("90_1272816841.80681")
     .param pmc param_1646
 .annotate "line", 607
     .lex "$_", param_1646
@@ -20891,24 +21034,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<value>"  :subid("92_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<value>"  :subid("92_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1697
 .annotate "line", 624
     new $P1696, 'ExceptionHandler'
     set_addr $P1696, control_1695
-    $P1696."handle_types"(58)
+    $P1696."handle_types"(57)
     push_eh $P1696
     .lex "self", self
     .lex "$/", param_1697
     find_lex $P1698, "$/"
     find_lex $P1699, "$/"
-    unless_null $P1699, vivify_510
+    unless_null $P1699, vivify_511
     $P1699 = root_new ['parrot';'Hash']
-  vivify_510:
+  vivify_511:
     set $P1700, $P1699["value"]
-    unless_null $P1700, vivify_511
+    unless_null $P1700, vivify_512
     new $P1700, "Undef"
-  vivify_511:
+  vivify_512:
     $P1701 = $P1700."ast"()
     $P1702 = $P1698."!make"($P1701)
     .return ($P1702)
@@ -20921,12 +21064,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<( )>"  :subid("93_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<( )>"  :subid("93_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1707
 .annotate "line", 626
     new $P1706, 'ExceptionHandler'
     set_addr $P1706, control_1705
-    $P1706."handle_types"(58)
+    $P1706."handle_types"(57)
     push_eh $P1706
     .lex "self", self
     .lex "$/", param_1707
@@ -20934,13 +21077,13 @@
     find_lex $P1708, "$/"
 .annotate "line", 628
     find_lex $P1711, "$/"
-    unless_null $P1711, vivify_512
+    unless_null $P1711, vivify_513
     $P1711 = root_new ['parrot';'Hash']
-  vivify_512:
+  vivify_513:
     set $P1712, $P1711["EXPR"]
-    unless_null $P1712, vivify_513
+    unless_null $P1712, vivify_514
     new $P1712, "Undef"
-  vivify_513:
+  vivify_514:
     if $P1712, if_1710
 .annotate "line", 629
     get_hll_global $P1717, ["PAST"], "Op"
@@ -20951,17 +21094,17 @@
     goto if_1710_end
   if_1710:
     find_lex $P1713, "$/"
-    unless_null $P1713, vivify_514
+    unless_null $P1713, vivify_515
     $P1713 = root_new ['parrot';'Hash']
-  vivify_514:
+  vivify_515:
     set $P1714, $P1713["EXPR"]
-    unless_null $P1714, vivify_515
+    unless_null $P1714, vivify_516
     $P1714 = root_new ['parrot';'ResizablePMCArray']
-  vivify_515:
+  vivify_516:
     set $P1715, $P1714[0]
-    unless_null $P1715, vivify_516
+    unless_null $P1715, vivify_517
     new $P1715, "Undef"
-  vivify_516:
+  vivify_517:
     $P1716 = $P1715."ast"()
     set $P1709, $P1716
   if_1710_end:
@@ -20977,12 +21120,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<[ ]>"  :subid("94_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<[ ]>"  :subid("94_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1725
 .annotate "line", 632
     new $P1724, 'ExceptionHandler'
     set_addr $P1724, control_1723
-    $P1724."handle_types"(58)
+    $P1724."handle_types"(57)
     push_eh $P1724
     .lex "self", self
     .lex "$/", param_1725
@@ -20993,13 +21136,13 @@
     find_lex $P1727, "$past"
 .annotate "line", 634
     find_lex $P1729, "$/"
-    unless_null $P1729, vivify_517
+    unless_null $P1729, vivify_518
     $P1729 = root_new ['parrot';'Hash']
-  vivify_517:
+  vivify_518:
     set $P1730, $P1729["EXPR"]
-    unless_null $P1730, vivify_518
+    unless_null $P1730, vivify_519
     new $P1730, "Undef"
-  vivify_518:
+  vivify_519:
     if $P1730, if_1728
 .annotate "line", 641
     get_hll_global $P1742, ["PAST"], "Op"
@@ -21010,17 +21153,17 @@
   if_1728:
 .annotate "line", 635
     find_lex $P1731, "$/"
-    unless_null $P1731, vivify_519
+    unless_null $P1731, vivify_520
     $P1731 = root_new ['parrot';'Hash']
-  vivify_519:
+  vivify_520:
     set $P1732, $P1731["EXPR"]
-    unless_null $P1732, vivify_520
+    unless_null $P1732, vivify_521
     $P1732 = root_new ['parrot';'ResizablePMCArray']
-  vivify_520:
+  vivify_521:
     set $P1733, $P1732[0]
-    unless_null $P1733, vivify_521
+    unless_null $P1733, vivify_522
     new $P1733, "Undef"
-  vivify_521:
+  vivify_522:
     $P1734 = $P1733."ast"()
     store_lex "$past", $P1734
 .annotate "line", 636
@@ -21053,24 +21196,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<ang>"  :subid("95_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<ang>"  :subid("95_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1752
 .annotate "line", 647
     new $P1751, 'ExceptionHandler'
     set_addr $P1751, control_1750
-    $P1751."handle_types"(58)
+    $P1751."handle_types"(57)
     push_eh $P1751
     .lex "self", self
     .lex "$/", param_1752
     find_lex $P1753, "$/"
     find_lex $P1754, "$/"
-    unless_null $P1754, vivify_522
+    unless_null $P1754, vivify_523
     $P1754 = root_new ['parrot';'Hash']
-  vivify_522:
+  vivify_523:
     set $P1755, $P1754["quote_EXPR"]
-    unless_null $P1755, vivify_523
+    unless_null $P1755, vivify_524
     new $P1755, "Undef"
-  vivify_523:
+  vivify_524:
     $P1756 = $P1755."ast"()
     $P1757 = $P1753."!make"($P1756)
     .return ($P1757)
@@ -21083,24 +21226,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("96_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("96_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1762
 .annotate "line", 648
     new $P1761, 'ExceptionHandler'
     set_addr $P1761, control_1760
-    $P1761."handle_types"(58)
+    $P1761."handle_types"(57)
     push_eh $P1761
     .lex "self", self
     .lex "$/", param_1762
     find_lex $P1763, "$/"
     find_lex $P1764, "$/"
-    unless_null $P1764, vivify_524
+    unless_null $P1764, vivify_525
     $P1764 = root_new ['parrot';'Hash']
-  vivify_524:
+  vivify_525:
     set $P1765, $P1764["quote_EXPR"]
-    unless_null $P1765, vivify_525
+    unless_null $P1765, vivify_526
     new $P1765, "Undef"
-  vivify_525:
+  vivify_526:
     $P1766 = $P1765."ast"()
     $P1767 = $P1763."!make"($P1766)
     .return ($P1767)
@@ -21113,37 +21256,37 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<{ }>"  :subid("97_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<{ }>"  :subid("97_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1772
 .annotate "line", 650
     new $P1771, 'ExceptionHandler'
     set_addr $P1771, control_1770
-    $P1771."handle_types"(58)
+    $P1771."handle_types"(57)
     push_eh $P1771
     .lex "self", self
     .lex "$/", param_1772
 .annotate "line", 651
     find_lex $P1773, "$/"
     find_lex $P1776, "$/"
-    unless_null $P1776, vivify_526
+    unless_null $P1776, vivify_527
     $P1776 = root_new ['parrot';'Hash']
-  vivify_526:
+  vivify_527:
     set $P1777, $P1776["pblock"]
-    unless_null $P1777, vivify_527
+    unless_null $P1777, vivify_528
     $P1777 = root_new ['parrot';'Hash']
-  vivify_527:
+  vivify_528:
     set $P1778, $P1777["blockoid"]
-    unless_null $P1778, vivify_528
+    unless_null $P1778, vivify_529
     $P1778 = root_new ['parrot';'Hash']
-  vivify_528:
+  vivify_529:
     set $P1779, $P1778["statementlist"]
-    unless_null $P1779, vivify_529
+    unless_null $P1779, vivify_530
     $P1779 = root_new ['parrot';'Hash']
-  vivify_529:
+  vivify_530:
     set $P1780, $P1779["statement"]
-    unless_null $P1780, vivify_530
+    unless_null $P1780, vivify_531
     new $P1780, "Undef"
-  vivify_530:
+  vivify_531:
     set $N1781, $P1780
     isgt $I1782, $N1781, 0.0
     if $I1782, if_1775
@@ -21155,13 +21298,13 @@
   if_1775:
 .annotate "line", 652
     find_lex $P1783, "$/"
-    unless_null $P1783, vivify_531
+    unless_null $P1783, vivify_532
     $P1783 = root_new ['parrot';'Hash']
-  vivify_531:
+  vivify_532:
     set $P1784, $P1783["pblock"]
-    unless_null $P1784, vivify_532
+    unless_null $P1784, vivify_533
     new $P1784, "Undef"
-  vivify_532:
+  vivify_533:
     $P1785 = $P1784."ast"()
     set $P1774, $P1785
   if_1775_end:
@@ -21177,12 +21320,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<sigil>"  :subid("98_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<sigil>"  :subid("98_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1792
 .annotate "line", 656
     new $P1791, 'ExceptionHandler'
     set_addr $P1791, control_1790
-    $P1791."handle_types"(58)
+    $P1791."handle_types"(57)
     push_eh $P1791
     .lex "self", self
     .lex "$/", param_1792
@@ -21190,25 +21333,25 @@
     new $P1793, "Undef"
     .lex "$name", $P1793
     find_lex $P1796, "$/"
-    unless_null $P1796, vivify_533
+    unless_null $P1796, vivify_534
     $P1796 = root_new ['parrot';'Hash']
-  vivify_533:
+  vivify_534:
     set $P1797, $P1796["sigil"]
-    unless_null $P1797, vivify_534
+    unless_null $P1797, vivify_535
     new $P1797, "Undef"
-  vivify_534:
+  vivify_535:
     set $S1798, $P1797
     iseq $I1799, $S1798, "@"
     if $I1799, if_1795
 .annotate "line", 658
     find_lex $P1803, "$/"
-    unless_null $P1803, vivify_535
+    unless_null $P1803, vivify_536
     $P1803 = root_new ['parrot';'Hash']
-  vivify_535:
+  vivify_536:
     set $P1804, $P1803["sigil"]
-    unless_null $P1804, vivify_536
+    unless_null $P1804, vivify_537
     new $P1804, "Undef"
-  vivify_536:
+  vivify_537:
     set $S1805, $P1804
     iseq $I1806, $S1805, "%"
     if $I1806, if_1802
@@ -21235,13 +21378,13 @@
     get_hll_global $P1810, ["PAST"], "Op"
     find_lex $P1811, "$name"
     find_lex $P1812, "$/"
-    unless_null $P1812, vivify_537
+    unless_null $P1812, vivify_538
     $P1812 = root_new ['parrot';'Hash']
-  vivify_537:
+  vivify_538:
     set $P1813, $P1812["semilist"]
-    unless_null $P1813, vivify_538
+    unless_null $P1813, vivify_539
     new $P1813, "Undef"
-  vivify_538:
+  vivify_539:
     $P1814 = $P1813."ast"()
     $P1815 = $P1810."new"($P1814, "callmethod" :named("pasttype"), $P1811 :named("name"))
     $P1816 = $P1809."!make"($P1815)
@@ -21256,24 +21399,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "semilist"  :subid("99_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "semilist"  :subid("99_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1821
 .annotate "line", 663
     new $P1820, 'ExceptionHandler'
     set_addr $P1820, control_1819
-    $P1820."handle_types"(58)
+    $P1820."handle_types"(57)
     push_eh $P1820
     .lex "self", self
     .lex "$/", param_1821
     find_lex $P1822, "$/"
     find_lex $P1823, "$/"
-    unless_null $P1823, vivify_539
+    unless_null $P1823, vivify_540
     $P1823 = root_new ['parrot';'Hash']
-  vivify_539:
+  vivify_540:
     set $P1824, $P1823["statement"]
-    unless_null $P1824, vivify_540
+    unless_null $P1824, vivify_541
     new $P1824, "Undef"
-  vivify_540:
+  vivify_541:
     $P1825 = $P1824."ast"()
     $P1826 = $P1822."!make"($P1825)
     .return ($P1826)
@@ -21286,12 +21429,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<[ ]>"  :subid("100_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<[ ]>"  :subid("100_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1831
 .annotate "line", 665
     new $P1830, 'ExceptionHandler'
     set_addr $P1830, control_1829
-    $P1830."handle_types"(58)
+    $P1830."handle_types"(57)
     push_eh $P1830
     .lex "self", self
     .lex "$/", param_1831
@@ -21299,13 +21442,13 @@
     find_lex $P1832, "$/"
     get_hll_global $P1833, ["PAST"], "Var"
     find_lex $P1834, "$/"
-    unless_null $P1834, vivify_541
+    unless_null $P1834, vivify_542
     $P1834 = root_new ['parrot';'Hash']
-  vivify_541:
+  vivify_542:
     set $P1835, $P1834["EXPR"]
-    unless_null $P1835, vivify_542
+    unless_null $P1835, vivify_543
     new $P1835, "Undef"
-  vivify_542:
+  vivify_543:
     $P1836 = $P1835."ast"()
 .annotate "line", 668
     $P1837 = "vivitype"("@")
@@ -21323,12 +21466,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<{ }>"  :subid("101_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<{ }>"  :subid("101_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1844
 .annotate "line", 671
     new $P1843, 'ExceptionHandler'
     set_addr $P1843, control_1842
-    $P1843."handle_types"(58)
+    $P1843."handle_types"(57)
     push_eh $P1843
     .lex "self", self
     .lex "$/", param_1844
@@ -21336,13 +21479,13 @@
     find_lex $P1845, "$/"
     get_hll_global $P1846, ["PAST"], "Var"
     find_lex $P1847, "$/"
-    unless_null $P1847, vivify_543
+    unless_null $P1847, vivify_544
     $P1847 = root_new ['parrot';'Hash']
-  vivify_543:
+  vivify_544:
     set $P1848, $P1847["EXPR"]
-    unless_null $P1848, vivify_544
+    unless_null $P1848, vivify_545
     new $P1848, "Undef"
-  vivify_544:
+  vivify_545:
     $P1849 = $P1848."ast"()
 .annotate "line", 674
     $P1850 = "vivitype"("%")
@@ -21360,12 +21503,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<ang>"  :subid("102_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<ang>"  :subid("102_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1857
 .annotate "line", 677
     new $P1856, 'ExceptionHandler'
     set_addr $P1856, control_1855
-    $P1856."handle_types"(58)
+    $P1856."handle_types"(57)
     push_eh $P1856
     .lex "self", self
     .lex "$/", param_1857
@@ -21373,13 +21516,13 @@
     find_lex $P1858, "$/"
     get_hll_global $P1859, ["PAST"], "Var"
     find_lex $P1860, "$/"
-    unless_null $P1860, vivify_545
+    unless_null $P1860, vivify_546
     $P1860 = root_new ['parrot';'Hash']
-  vivify_545:
+  vivify_546:
     set $P1861, $P1860["quote_EXPR"]
-    unless_null $P1861, vivify_546
+    unless_null $P1861, vivify_547
     new $P1861, "Undef"
-  vivify_546:
+  vivify_547:
     $P1862 = $P1861."ast"()
 .annotate "line", 680
     $P1863 = "vivitype"("%")
@@ -21397,25 +21540,25 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<( )>"  :subid("103_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<( )>"  :subid("103_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1870
 .annotate "line", 683
     new $P1869, 'ExceptionHandler'
     set_addr $P1869, control_1868
-    $P1869."handle_types"(58)
+    $P1869."handle_types"(57)
     push_eh $P1869
     .lex "self", self
     .lex "$/", param_1870
 .annotate "line", 684
     find_lex $P1871, "$/"
     find_lex $P1872, "$/"
-    unless_null $P1872, vivify_547
+    unless_null $P1872, vivify_548
     $P1872 = root_new ['parrot';'Hash']
-  vivify_547:
+  vivify_548:
     set $P1873, $P1872["arglist"]
-    unless_null $P1873, vivify_548
+    unless_null $P1873, vivify_549
     new $P1873, "Undef"
-  vivify_548:
+  vivify_549:
     $P1874 = $P1873."ast"()
     $P1875 = $P1871."!make"($P1874)
 .annotate "line", 683
@@ -21429,46 +21572,46 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "value"  :subid("104_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "value"  :subid("104_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1880
 .annotate "line", 687
     new $P1879, 'ExceptionHandler'
     set_addr $P1879, control_1878
-    $P1879."handle_types"(58)
+    $P1879."handle_types"(57)
     push_eh $P1879
     .lex "self", self
     .lex "$/", param_1880
 .annotate "line", 688
     find_lex $P1881, "$/"
     find_lex $P1884, "$/"
-    unless_null $P1884, vivify_549
+    unless_null $P1884, vivify_550
     $P1884 = root_new ['parrot';'Hash']
-  vivify_549:
+  vivify_550:
     set $P1885, $P1884["quote"]
-    unless_null $P1885, vivify_550
+    unless_null $P1885, vivify_551
     new $P1885, "Undef"
-  vivify_550:
+  vivify_551:
     if $P1885, if_1883
     find_lex $P1889, "$/"
-    unless_null $P1889, vivify_551
+    unless_null $P1889, vivify_552
     $P1889 = root_new ['parrot';'Hash']
-  vivify_551:
+  vivify_552:
     set $P1890, $P1889["number"]
-    unless_null $P1890, vivify_552
+    unless_null $P1890, vivify_553
     new $P1890, "Undef"
-  vivify_552:
+  vivify_553:
     $P1891 = $P1890."ast"()
     set $P1882, $P1891
     goto if_1883_end
   if_1883:
     find_lex $P1886, "$/"
-    unless_null $P1886, vivify_553
+    unless_null $P1886, vivify_554
     $P1886 = root_new ['parrot';'Hash']
-  vivify_553:
+  vivify_554:
     set $P1887, $P1886["quote"]
-    unless_null $P1887, vivify_554
+    unless_null $P1887, vivify_555
     new $P1887, "Undef"
-  vivify_554:
+  vivify_555:
     $P1888 = $P1887."ast"()
     set $P1882, $P1888
   if_1883_end:
@@ -21484,12 +21627,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "number"  :subid("105_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "number"  :subid("105_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1897
 .annotate "line", 691
     new $P1896, 'ExceptionHandler'
     set_addr $P1896, control_1895
-    $P1896."handle_types"(58)
+    $P1896."handle_types"(57)
     push_eh $P1896
     .lex "self", self
     .lex "$/", param_1897
@@ -21497,47 +21640,47 @@
     new $P1898, "Undef"
     .lex "$value", $P1898
     find_lex $P1901, "$/"
-    unless_null $P1901, vivify_555
+    unless_null $P1901, vivify_556
     $P1901 = root_new ['parrot';'Hash']
-  vivify_555:
+  vivify_556:
     set $P1902, $P1901["dec_number"]
-    unless_null $P1902, vivify_556
+    unless_null $P1902, vivify_557
     new $P1902, "Undef"
-  vivify_556:
+  vivify_557:
     if $P1902, if_1900
     find_lex $P1906, "$/"
-    unless_null $P1906, vivify_557
+    unless_null $P1906, vivify_558
     $P1906 = root_new ['parrot';'Hash']
-  vivify_557:
+  vivify_558:
     set $P1907, $P1906["integer"]
-    unless_null $P1907, vivify_558
+    unless_null $P1907, vivify_559
     new $P1907, "Undef"
-  vivify_558:
+  vivify_559:
     $P1908 = $P1907."ast"()
     set $P1899, $P1908
     goto if_1900_end
   if_1900:
     find_lex $P1903, "$/"
-    unless_null $P1903, vivify_559
+    unless_null $P1903, vivify_560
     $P1903 = root_new ['parrot';'Hash']
-  vivify_559:
+  vivify_560:
     set $P1904, $P1903["dec_number"]
-    unless_null $P1904, vivify_560
+    unless_null $P1904, vivify_561
     new $P1904, "Undef"
-  vivify_560:
+  vivify_561:
     $P1905 = $P1904."ast"()
     set $P1899, $P1905
   if_1900_end:
     store_lex "$value", $P1899
 .annotate "line", 693
     find_lex $P1910, "$/"
-    unless_null $P1910, vivify_561
+    unless_null $P1910, vivify_562
     $P1910 = root_new ['parrot';'Hash']
-  vivify_561:
+  vivify_562:
     set $P1911, $P1910["sign"]
-    unless_null $P1911, vivify_562
+    unless_null $P1911, vivify_563
     new $P1911, "Undef"
-  vivify_562:
+  vivify_563:
     set $S1912, $P1911
     iseq $I1913, $S1912, "-"
     unless $I1913, if_1909_end
@@ -21562,24 +21705,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<apos>"  :subid("106_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<apos>"  :subid("106_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1925
 .annotate "line", 697
     new $P1924, 'ExceptionHandler'
     set_addr $P1924, control_1923
-    $P1924."handle_types"(58)
+    $P1924."handle_types"(57)
     push_eh $P1924
     .lex "self", self
     .lex "$/", param_1925
     find_lex $P1926, "$/"
     find_lex $P1927, "$/"
-    unless_null $P1927, vivify_563
+    unless_null $P1927, vivify_564
     $P1927 = root_new ['parrot';'Hash']
-  vivify_563:
+  vivify_564:
     set $P1928, $P1927["quote_EXPR"]
-    unless_null $P1928, vivify_564
+    unless_null $P1928, vivify_565
     new $P1928, "Undef"
-  vivify_564:
+  vivify_565:
     $P1929 = $P1928."ast"()
     $P1930 = $P1926."!make"($P1929)
     .return ($P1930)
@@ -21592,24 +21735,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<dblq>"  :subid("107_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<dblq>"  :subid("107_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1935
 .annotate "line", 698
     new $P1934, 'ExceptionHandler'
     set_addr $P1934, control_1933
-    $P1934."handle_types"(58)
+    $P1934."handle_types"(57)
     push_eh $P1934
     .lex "self", self
     .lex "$/", param_1935
     find_lex $P1936, "$/"
     find_lex $P1937, "$/"
-    unless_null $P1937, vivify_565
+    unless_null $P1937, vivify_566
     $P1937 = root_new ['parrot';'Hash']
-  vivify_565:
+  vivify_566:
     set $P1938, $P1937["quote_EXPR"]
-    unless_null $P1938, vivify_566
+    unless_null $P1938, vivify_567
     new $P1938, "Undef"
-  vivify_566:
+  vivify_567:
     $P1939 = $P1938."ast"()
     $P1940 = $P1936."!make"($P1939)
     .return ($P1940)
@@ -21622,24 +21765,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<qq>"  :subid("108_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<qq>"  :subid("108_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1945
 .annotate "line", 699
     new $P1944, 'ExceptionHandler'
     set_addr $P1944, control_1943
-    $P1944."handle_types"(58)
+    $P1944."handle_types"(57)
     push_eh $P1944
     .lex "self", self
     .lex "$/", param_1945
     find_lex $P1946, "$/"
     find_lex $P1947, "$/"
-    unless_null $P1947, vivify_567
+    unless_null $P1947, vivify_568
     $P1947 = root_new ['parrot';'Hash']
-  vivify_567:
+  vivify_568:
     set $P1948, $P1947["quote_EXPR"]
-    unless_null $P1948, vivify_568
+    unless_null $P1948, vivify_569
     new $P1948, "Undef"
-  vivify_568:
+  vivify_569:
     $P1949 = $P1948."ast"()
     $P1950 = $P1946."!make"($P1949)
     .return ($P1950)
@@ -21652,24 +21795,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<q>"  :subid("109_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<q>"  :subid("109_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1955
 .annotate "line", 700
     new $P1954, 'ExceptionHandler'
     set_addr $P1954, control_1953
-    $P1954."handle_types"(58)
+    $P1954."handle_types"(57)
     push_eh $P1954
     .lex "self", self
     .lex "$/", param_1955
     find_lex $P1956, "$/"
     find_lex $P1957, "$/"
-    unless_null $P1957, vivify_569
+    unless_null $P1957, vivify_570
     $P1957 = root_new ['parrot';'Hash']
-  vivify_569:
+  vivify_570:
     set $P1958, $P1957["quote_EXPR"]
-    unless_null $P1958, vivify_570
+    unless_null $P1958, vivify_571
     new $P1958, "Undef"
-  vivify_570:
+  vivify_571:
     $P1959 = $P1958."ast"()
     $P1960 = $P1956."!make"($P1959)
     .return ($P1960)
@@ -21682,24 +21825,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q>"  :subid("110_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<Q>"  :subid("110_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1965
 .annotate "line", 701
     new $P1964, 'ExceptionHandler'
     set_addr $P1964, control_1963
-    $P1964."handle_types"(58)
+    $P1964."handle_types"(57)
     push_eh $P1964
     .lex "self", self
     .lex "$/", param_1965
     find_lex $P1966, "$/"
     find_lex $P1967, "$/"
-    unless_null $P1967, vivify_571
+    unless_null $P1967, vivify_572
     $P1967 = root_new ['parrot';'Hash']
-  vivify_571:
+  vivify_572:
     set $P1968, $P1967["quote_EXPR"]
-    unless_null $P1968, vivify_572
+    unless_null $P1968, vivify_573
     new $P1968, "Undef"
-  vivify_572:
+  vivify_573:
     $P1969 = $P1968."ast"()
     $P1970 = $P1966."!make"($P1969)
     .return ($P1970)
@@ -21712,12 +21855,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q:PIR>"  :subid("111_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<Q:PIR>"  :subid("111_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1975
 .annotate "line", 702
     new $P1974, 'ExceptionHandler'
     set_addr $P1974, control_1973
-    $P1974."handle_types"(58)
+    $P1974."handle_types"(57)
     push_eh $P1974
     .lex "self", self
     .lex "$/", param_1975
@@ -21725,13 +21868,13 @@
     find_lex $P1976, "$/"
     get_hll_global $P1977, ["PAST"], "Op"
     find_lex $P1978, "$/"
-    unless_null $P1978, vivify_573
+    unless_null $P1978, vivify_574
     $P1978 = root_new ['parrot';'Hash']
-  vivify_573:
+  vivify_574:
     set $P1979, $P1978["quote_EXPR"]
-    unless_null $P1979, vivify_574
+    unless_null $P1979, vivify_575
     new $P1979, "Undef"
-  vivify_574:
+  vivify_575:
     $P1980 = $P1979."ast"()
     $P1981 = $P1980."value"()
     find_lex $P1982, "$/"
@@ -21748,21 +21891,21 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym</ />"  :subid("112_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym</ />"  :subid("112_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_1989
     .param pmc param_1990 :optional
     .param int has_param_1990 :opt_flag
 .annotate "line", 708
     new $P1988, 'ExceptionHandler'
     set_addr $P1988, control_1987
-    $P1988."handle_types"(58)
+    $P1988."handle_types"(57)
     push_eh $P1988
     .lex "self", self
     .lex "$/", param_1989
-    if has_param_1990, optparam_575
+    if has_param_1990, optparam_576
     new $P1991, "Undef"
     set param_1990, $P1991
-  optparam_575:
+  optparam_576:
     .lex "$key", param_1990
 .annotate "line", 718
     new $P1992, "Undef"
@@ -21782,27 +21925,27 @@
         
 .annotate "line", 714
     get_global $P1998, "@BLOCK"
-    unless_null $P1998, vivify_576
+    unless_null $P1998, vivify_577
     $P1998 = root_new ['parrot';'ResizablePMCArray']
-  vivify_576:
+  vivify_577:
     set $P1999, $P1998[0]
-    unless_null $P1999, vivify_577
+    unless_null $P1999, vivify_578
     new $P1999, "Undef"
-  vivify_577:
+  vivify_578:
     $P1999."symbol"(unicode:"$\x{a2}", "lexical" :named("scope"))
 .annotate "line", 715
     get_global $P2000, "@BLOCK"
-    unless_null $P2000, vivify_578
+    unless_null $P2000, vivify_579
     $P2000 = root_new ['parrot';'ResizablePMCArray']
-  vivify_578:
+  vivify_579:
     set $P2001, $P2000[0]
-    unless_null $P2001, vivify_579
+    unless_null $P2001, vivify_580
     new $P2001, "Undef"
-  vivify_579:
+  vivify_580:
     $P2001."symbol"("$/", "lexical" :named("scope"))
 .annotate "line", 716
     new $P2002, "Exception"
-    set $P2002['type'], 58
+    set $P2002['type'], 57
     new $P2003, "Integer"
     assign $P2003, 0
     setattribute $P2002, 'payload', $P2003
@@ -21811,13 +21954,13 @@
 .annotate "line", 719
     get_hll_global $P2004, ["Regex";"P6Regex";"Actions"], "buildsub"
     find_lex $P2005, "$/"
-    unless_null $P2005, vivify_580
+    unless_null $P2005, vivify_581
     $P2005 = root_new ['parrot';'Hash']
-  vivify_580:
+  vivify_581:
     set $P2006, $P2005["p6regex"]
-    unless_null $P2006, vivify_581
+    unless_null $P2006, vivify_582
     new $P2006, "Undef"
-  vivify_581:
+  vivify_582:
     $P2007 = $P2006."ast"()
     get_global $P2008, "@BLOCK"
     $P2009 = $P2008."shift"()
@@ -21837,10 +21980,10 @@
 .annotate "line", 727
     find_lex $P2017, "$regex"
     find_lex $P2018, "$past"
-    unless_null $P2018, vivify_582
+    unless_null $P2018, vivify_583
     $P2018 = root_new ['parrot';'Hash']
     store_lex "$past", $P2018
-  vivify_582:
+  vivify_583:
     set $P2018["sink"], $P2017
 .annotate "line", 728
     find_lex $P2019, "$/"
@@ -21857,24 +22000,24 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<$>"  :subid("113_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<$>"  :subid("113_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_2026
 .annotate "line", 731
     new $P2025, 'ExceptionHandler'
     set_addr $P2025, control_2024
-    $P2025."handle_types"(58)
+    $P2025."handle_types"(57)
     push_eh $P2025
     .lex "self", self
     .lex "$/", param_2026
     find_lex $P2027, "$/"
     find_lex $P2028, "$/"
-    unless_null $P2028, vivify_583
+    unless_null $P2028, vivify_584
     $P2028 = root_new ['parrot';'Hash']
-  vivify_583:
+  vivify_584:
     set $P2029, $P2028["variable"]
-    unless_null $P2029, vivify_584
+    unless_null $P2029, vivify_585
     new $P2029, "Undef"
-  vivify_584:
+  vivify_585:
     $P2030 = $P2029."ast"()
     $P2031 = $P2027."!make"($P2030)
     .return ($P2031)
@@ -21887,12 +22030,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<{ }>"  :subid("114_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<{ }>"  :subid("114_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_2036
 .annotate "line", 732
     new $P2035, 'ExceptionHandler'
     set_addr $P2035, control_2034
-    $P2035."handle_types"(58)
+    $P2035."handle_types"(57)
     push_eh $P2035
     .lex "self", self
     .lex "$/", param_2036
@@ -21901,13 +22044,13 @@
     get_hll_global $P2038, ["PAST"], "Op"
 .annotate "line", 734
     find_lex $P2039, "$/"
-    unless_null $P2039, vivify_585
+    unless_null $P2039, vivify_586
     $P2039 = root_new ['parrot';'Hash']
-  vivify_585:
+  vivify_586:
     set $P2040, $P2039["block"]
-    unless_null $P2040, vivify_586
+    unless_null $P2040, vivify_587
     new $P2040, "Undef"
-  vivify_586:
+  vivify_587:
     $P2041 = $P2040."ast"()
     $P2042 = "block_immediate"($P2041)
     find_lex $P2043, "$/"
@@ -21925,334 +22068,355 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<.>"  :subid("115_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<esc>"  :subid("115_1272816841.80681") :method :outer("11_1272816841.80681")
     .param pmc param_2050
-.annotate "line", 740
+.annotate "line", 737
     new $P2049, 'ExceptionHandler'
     set_addr $P2049, control_2048
-    $P2049."handle_types"(58)
+    $P2049."handle_types"(57)
     push_eh $P2049
     .lex "self", self
     .lex "$/", param_2050
     find_lex $P2051, "$/"
-    find_lex $P2052, "$/"
-    unless_null $P2052, vivify_587
-    $P2052 = root_new ['parrot';'Hash']
-  vivify_587:
-    set $P2053, $P2052["dotty"]
-    unless_null $P2053, vivify_588
-    new $P2053, "Undef"
-  vivify_588:
-    $P2054 = $P2053."ast"()
-    $P2055 = $P2051."!make"($P2054)
-    .return ($P2055)
+    $P2052 = $P2051."!make"("\e")
+    .return ($P2052)
   control_2048:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2056, exception, "payload"
-    .return ($P2056)
+    getattribute $P2053, exception, "payload"
+    .return ($P2053)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<++>"  :subid("116_1267204714.47172") :method :outer("11_1267204714.47172")
-    .param pmc param_2060
-.annotate "line", 742
-    new $P2059, 'ExceptionHandler'
-    set_addr $P2059, control_2058
-    $P2059."handle_types"(58)
-    push_eh $P2059
+.sub "postfix:sym<.>"  :subid("116_1272816841.80681") :method :outer("11_1272816841.80681")
+    .param pmc param_2057
+.annotate "line", 741
+    new $P2056, 'ExceptionHandler'
+    set_addr $P2056, control_2055
+    $P2056."handle_types"(57)
+    push_eh $P2056
     .lex "self", self
-    .lex "$/", param_2060
+    .lex "$/", param_2057
+    find_lex $P2058, "$/"
+    find_lex $P2059, "$/"
+    unless_null $P2059, vivify_588
+    $P2059 = root_new ['parrot';'Hash']
+  vivify_588:
+    set $P2060, $P2059["dotty"]
+    unless_null $P2060, vivify_589
+    new $P2060, "Undef"
+  vivify_589:
+    $P2061 = $P2060."ast"()
+    $P2062 = $P2058."!make"($P2061)
+    .return ($P2062)
+  control_2055:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P2063, exception, "payload"
+    .return ($P2063)
+.end
+
+
+.namespace ["NQP";"Actions"]
+.sub "postfix:sym<++>"  :subid("117_1272816841.80681") :method :outer("11_1272816841.80681")
+    .param pmc param_2067
 .annotate "line", 743
-    find_lex $P2061, "$/"
-    get_hll_global $P2062, ["PAST"], "Op"
+    new $P2066, 'ExceptionHandler'
+    set_addr $P2066, control_2065
+    $P2066."handle_types"(57)
+    push_eh $P2066
+    .lex "self", self
+    .lex "$/", param_2067
 .annotate "line", 744
-    new $P2063, "ResizablePMCArray"
-    push $P2063, "    clone %r, %0"
-    push $P2063, "    inc %0"
-    $P2064 = $P2062."new"("postfix:<++>" :named("name"), $P2063 :named("inline"), "inline" :named("pasttype"))
+    find_lex $P2068, "$/"
+    get_hll_global $P2069, ["PAST"], "Op"
+.annotate "line", 745
+    new $P2070, "ResizablePMCArray"
+    push $P2070, "    clone %r, %0"
+    push $P2070, "    inc %0"
+    $P2071 = $P2069."new"("postfix:<++>" :named("name"), $P2070 :named("inline"), "inline" :named("pasttype"))
+.annotate "line", 744
+    $P2072 = $P2068."!make"($P2071)
 .annotate "line", 743
-    $P2065 = $P2061."!make"($P2064)
-.annotate "line", 742
-    .return ($P2065)
-  control_2058:
+    .return ($P2072)
+  control_2065:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2066, exception, "payload"
-    .return ($P2066)
+    getattribute $P2073, exception, "payload"
+    .return ($P2073)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<-->"  :subid("117_1267204714.47172") :method :outer("11_1267204714.47172")
-    .param pmc param_2070
-.annotate "line", 748
-    new $P2069, 'ExceptionHandler'
-    set_addr $P2069, control_2068
-    $P2069."handle_types"(58)
-    push_eh $P2069
-    .lex "self", self
-    .lex "$/", param_2070
+.sub "postfix:sym<-->"  :subid("118_1272816841.80681") :method :outer("11_1272816841.80681")
+    .param pmc param_2077
 .annotate "line", 749
-    find_lex $P2071, "$/"
-    get_hll_global $P2072, ["PAST"], "Op"
+    new $P2076, 'ExceptionHandler'
+    set_addr $P2076, control_2075
+    $P2076."handle_types"(57)
+    push_eh $P2076
+    .lex "self", self
+    .lex "$/", param_2077
+.annotate "line", 750
+    find_lex $P2078, "$/"
+    get_hll_global $P2079, ["PAST"], "Op"
+.annotate "line", 751
+    new $P2080, "ResizablePMCArray"
+    push $P2080, "    clone %r, %0"
+    push $P2080, "    dec %0"
+    $P2081 = $P2079."new"("postfix:<-->" :named("name"), $P2080 :named("inline"), "inline" :named("pasttype"))
 .annotate "line", 750
-    new $P2073, "ResizablePMCArray"
-    push $P2073, "    clone %r, %0"
-    push $P2073, "    dec %0"
-    $P2074 = $P2072."new"("postfix:<-->" :named("name"), $P2073 :named("inline"), "inline" :named("pasttype"))
+    $P2082 = $P2078."!make"($P2081)
 .annotate "line", 749
-    $P2075 = $P2071."!make"($P2074)
-.annotate "line", 748
-    .return ($P2075)
-  control_2068:
+    .return ($P2082)
+  control_2075:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2076, exception, "payload"
-    .return ($P2076)
+    getattribute $P2083, exception, "payload"
+    .return ($P2083)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "prefix:sym<make>"  :subid("118_1267204714.47172") :method :outer("11_1267204714.47172")
-    .param pmc param_2080
-.annotate "line", 754
-    new $P2079, 'ExceptionHandler'
-    set_addr $P2079, control_2078
-    $P2079."handle_types"(58)
-    push_eh $P2079
-    .lex "self", self
-    .lex "$/", param_2080
+.sub "prefix:sym<make>"  :subid("119_1272816841.80681") :method :outer("11_1272816841.80681")
+    .param pmc param_2087
 .annotate "line", 755
-    find_lex $P2081, "$/"
-    get_hll_global $P2082, ["PAST"], "Op"
+    new $P2086, 'ExceptionHandler'
+    set_addr $P2086, control_2085
+    $P2086."handle_types"(57)
+    push_eh $P2086
+    .lex "self", self
+    .lex "$/", param_2087
 .annotate "line", 756
-    get_hll_global $P2083, ["PAST"], "Var"
-    $P2084 = $P2083."new"("$/" :named("name"), "contextual" :named("scope"))
-    find_lex $P2085, "$/"
-    $P2086 = $P2082."new"($P2084, "callmethod" :named("pasttype"), "!make" :named("name"), $P2085 :named("node"))
+    find_lex $P2088, "$/"
+    get_hll_global $P2089, ["PAST"], "Op"
+.annotate "line", 757
+    get_hll_global $P2090, ["PAST"], "Var"
+    $P2091 = $P2090."new"("$/" :named("name"), "contextual" :named("scope"))
+    find_lex $P2092, "$/"
+    $P2093 = $P2089."new"($P2091, "callmethod" :named("pasttype"), "!make" :named("name"), $P2092 :named("node"))
+.annotate "line", 756
+    $P2094 = $P2088."!make"($P2093)
 .annotate "line", 755
-    $P2087 = $P2081."!make"($P2086)
-.annotate "line", 754
-    .return ($P2087)
-  control_2078:
+    .return ($P2094)
+  control_2085:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2088, exception, "payload"
-    .return ($P2088)
+    getattribute $P2095, exception, "payload"
+    .return ($P2095)
 .end
 
 
 .namespace ["NQP";"Actions"]
-.sub "infix:sym<~~>"  :subid("119_1267204714.47172") :method :outer("11_1267204714.47172")
-    .param pmc param_2092
-.annotate "line", 763
-    new $P2091, 'ExceptionHandler'
-    set_addr $P2091, control_2090
-    $P2091."handle_types"(58)
-    push_eh $P2091
-    .lex "self", self
-    .lex "$/", param_2092
+.sub "infix:sym<~~>"  :subid("120_1272816841.80681") :method :outer("11_1272816841.80681")
+    .param pmc param_2099
 .annotate "line", 764
-    find_lex $P2093, "$/"
-    get_hll_global $P2094, ["PAST"], "Op"
-    find_lex $P2095, "$/"
-    $P2096 = $P2094."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2095 :named("node"))
-    $P2097 = $P2093."!make"($P2096)
-.annotate "line", 763
-    .return ($P2097)
-  control_2090:
+    new $P2098, 'ExceptionHandler'
+    set_addr $P2098, control_2097
+    $P2098."handle_types"(57)
+    push_eh $P2098
+    .lex "self", self
+    .lex "$/", param_2099
+.annotate "line", 765
+    find_lex $P2100, "$/"
+    get_hll_global $P2101, ["PAST"], "Op"
+    find_lex $P2102, "$/"
+    $P2103 = $P2101."new"("callmethod" :named("pasttype"), "ACCEPTS" :named("name"), $P2102 :named("node"))
+    $P2104 = $P2100."!make"($P2103)
+.annotate "line", 764
+    .return ($P2104)
+  control_2097:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2098, exception, "payload"
-    .return ($P2098)
+    getattribute $P2105, exception, "payload"
+    .return ($P2105)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2099"  :subid("120_1267204714.47172") :outer("11_1267204714.47172")
-.annotate "line", 768
-    .const 'Sub' $P2135 = "124_1267204714.47172" 
-    capture_lex $P2135
-    .const 'Sub' $P2125 = "123_1267204714.47172" 
-    capture_lex $P2125
-    .const 'Sub' $P2115 = "122_1267204714.47172" 
-    capture_lex $P2115
-    .const 'Sub' $P2101 = "121_1267204714.47172" 
-    capture_lex $P2101
-.annotate "line", 779
-    .const 'Sub' $P2135 = "124_1267204714.47172" 
-    capture_lex $P2135
-.annotate "line", 768
-    .return ($P2135)
+.sub "_block2106"  :subid("121_1272816841.80681") :outer("11_1272816841.80681")
+.annotate "line", 769
+    .const 'Sub' $P2142 = "125_1272816841.80681" 
+    capture_lex $P2142
+    .const 'Sub' $P2132 = "124_1272816841.80681" 
+    capture_lex $P2132
+    .const 'Sub' $P2122 = "123_1272816841.80681" 
+    capture_lex $P2122
+    .const 'Sub' $P2108 = "122_1272816841.80681" 
+    capture_lex $P2108
+.annotate "line", 780
+    .const 'Sub' $P2142 = "125_1272816841.80681" 
+    capture_lex $P2142
+.annotate "line", 769
+    .return ($P2142)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<:my>"  :subid("121_1267204714.47172") :method :outer("120_1267204714.47172")
-    .param pmc param_2104
-.annotate "line", 770
-    new $P2103, 'ExceptionHandler'
-    set_addr $P2103, control_2102
-    $P2103."handle_types"(58)
-    push_eh $P2103
-    .lex "self", self
-    .lex "$/", param_2104
+.sub "metachar:sym<:my>"  :subid("122_1272816841.80681") :method :outer("121_1272816841.80681")
+    .param pmc param_2111
 .annotate "line", 771
-    new $P2105, "Undef"
-    .lex "$past", $P2105
-    find_lex $P2106, "$/"
-    unless_null $P2106, vivify_589
-    $P2106 = root_new ['parrot';'Hash']
-  vivify_589:
-    set $P2107, $P2106["statement"]
-    unless_null $P2107, vivify_590
-    new $P2107, "Undef"
-  vivify_590:
-    $P2108 = $P2107."ast"()
-    store_lex "$past", $P2108
+    new $P2110, 'ExceptionHandler'
+    set_addr $P2110, control_2109
+    $P2110."handle_types"(57)
+    push_eh $P2110
+    .lex "self", self
+    .lex "$/", param_2111
 .annotate "line", 772
-    find_lex $P2109, "$/"
-    get_hll_global $P2110, ["PAST"], "Regex"
-    find_lex $P2111, "$past"
-    $P2112 = $P2110."new"($P2111, "pastnode" :named("pasttype"))
-    $P2113 = $P2109."!make"($P2112)
-.annotate "line", 770
-    .return ($P2113)
-  control_2102:
+    new $P2112, "Undef"
+    .lex "$past", $P2112
+    find_lex $P2113, "$/"
+    unless_null $P2113, vivify_590
+    $P2113 = root_new ['parrot';'Hash']
+  vivify_590:
+    set $P2114, $P2113["statement"]
+    unless_null $P2114, vivify_591
+    new $P2114, "Undef"
+  vivify_591:
+    $P2115 = $P2114."ast"()
+    store_lex "$past", $P2115
+.annotate "line", 773
+    find_lex $P2116, "$/"
+    get_hll_global $P2117, ["PAST"], "Regex"
+    find_lex $P2118, "$past"
+    $P2119 = $P2117."new"($P2118, "pastnode" :named("pasttype"))
+    $P2120 = $P2116."!make"($P2119)
+.annotate "line", 771
+    .return ($P2120)
+  control_2109:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2114, exception, "payload"
-    .return ($P2114)
+    getattribute $P2121, exception, "payload"
+    .return ($P2121)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<{ }>"  :subid("122_1267204714.47172") :method :outer("120_1267204714.47172")
-    .param pmc param_2118
-.annotate "line", 775
-    new $P2117, 'ExceptionHandler'
-    set_addr $P2117, control_2116
-    $P2117."handle_types"(58)
-    push_eh $P2117
-    .lex "self", self
-    .lex "$/", param_2118
-    find_lex $P2119, "$/"
-    find_lex $P2120, "$/"
-    unless_null $P2120, vivify_591
-    $P2120 = root_new ['parrot';'Hash']
-  vivify_591:
-    set $P2121, $P2120["codeblock"]
-    unless_null $P2121, vivify_592
-    new $P2121, "Undef"
+.sub "metachar:sym<{ }>"  :subid("123_1272816841.80681") :method :outer("121_1272816841.80681")
+    .param pmc param_2125
+.annotate "line", 776
+    new $P2124, 'ExceptionHandler'
+    set_addr $P2124, control_2123
+    $P2124."handle_types"(57)
+    push_eh $P2124
+    .lex "self", self
+    .lex "$/", param_2125
+    find_lex $P2126, "$/"
+    find_lex $P2127, "$/"
+    unless_null $P2127, vivify_592
+    $P2127 = root_new ['parrot';'Hash']
   vivify_592:
-    $P2122 = $P2121."ast"()
-    $P2123 = $P2119."!make"($P2122)
-    .return ($P2123)
-  control_2116:
+    set $P2128, $P2127["codeblock"]
+    unless_null $P2128, vivify_593
+    new $P2128, "Undef"
+  vivify_593:
+    $P2129 = $P2128."ast"()
+    $P2130 = $P2126."!make"($P2129)
+    .return ($P2130)
+  control_2123:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2124, exception, "payload"
-    .return ($P2124)
+    getattribute $P2131, exception, "payload"
+    .return ($P2131)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "assertion:sym<{ }>"  :subid("123_1267204714.47172") :method :outer("120_1267204714.47172")
-    .param pmc param_2128
-.annotate "line", 777
-    new $P2127, 'ExceptionHandler'
-    set_addr $P2127, control_2126
-    $P2127."handle_types"(58)
-    push_eh $P2127
-    .lex "self", self
-    .lex "$/", param_2128
-    find_lex $P2129, "$/"
-    find_lex $P2130, "$/"
-    unless_null $P2130, vivify_593
-    $P2130 = root_new ['parrot';'Hash']
-  vivify_593:
-    set $P2131, $P2130["codeblock"]
-    unless_null $P2131, vivify_594
-    new $P2131, "Undef"
+.sub "assertion:sym<{ }>"  :subid("124_1272816841.80681") :method :outer("121_1272816841.80681")
+    .param pmc param_2135
+.annotate "line", 778
+    new $P2134, 'ExceptionHandler'
+    set_addr $P2134, control_2133
+    $P2134."handle_types"(57)
+    push_eh $P2134
+    .lex "self", self
+    .lex "$/", param_2135
+    find_lex $P2136, "$/"
+    find_lex $P2137, "$/"
+    unless_null $P2137, vivify_594
+    $P2137 = root_new ['parrot';'Hash']
   vivify_594:
-    $P2132 = $P2131."ast"()
-    $P2133 = $P2129."!make"($P2132)
-    .return ($P2133)
-  control_2126:
+    set $P2138, $P2137["codeblock"]
+    unless_null $P2138, vivify_595
+    new $P2138, "Undef"
+  vivify_595:
+    $P2139 = $P2138."ast"()
+    $P2140 = $P2136."!make"($P2139)
+    .return ($P2140)
+  control_2133:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2134, exception, "payload"
-    .return ($P2134)
+    getattribute $P2141, exception, "payload"
+    .return ($P2141)
 .end
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "codeblock"  :subid("124_1267204714.47172") :method :outer("120_1267204714.47172")
-    .param pmc param_2138
-.annotate "line", 779
-    new $P2137, 'ExceptionHandler'
-    set_addr $P2137, control_2136
-    $P2137."handle_types"(58)
-    push_eh $P2137
-    .lex "self", self
-    .lex "$/", param_2138
-.annotate "line", 780
-    new $P2139, "Undef"
-    .lex "$block", $P2139
-.annotate "line", 782
-    new $P2140, "Undef"
-    .lex "$past", $P2140
+.sub "codeblock"  :subid("125_1272816841.80681") :method :outer("121_1272816841.80681")
+    .param pmc param_2145
 .annotate "line", 780
-    find_lex $P2141, "$/"
-    unless_null $P2141, vivify_595
-    $P2141 = root_new ['parrot';'Hash']
-  vivify_595:
-    set $P2142, $P2141["block"]
-    unless_null $P2142, vivify_596
-    new $P2142, "Undef"
-  vivify_596:
-    $P2143 = $P2142."ast"()
-    store_lex "$block", $P2143
+    new $P2144, 'ExceptionHandler'
+    set_addr $P2144, control_2143
+    $P2144."handle_types"(57)
+    push_eh $P2144
+    .lex "self", self
+    .lex "$/", param_2145
 .annotate "line", 781
-    find_lex $P2144, "$block"
-    $P2144."blocktype"("immediate")
+    new $P2146, "Undef"
+    .lex "$block", $P2146
 .annotate "line", 783
-    get_hll_global $P2145, ["PAST"], "Regex"
+    new $P2147, "Undef"
+    .lex "$past", $P2147
+.annotate "line", 781
+    find_lex $P2148, "$/"
+    unless_null $P2148, vivify_596
+    $P2148 = root_new ['parrot';'Hash']
+  vivify_596:
+    set $P2149, $P2148["block"]
+    unless_null $P2149, vivify_597
+    new $P2149, "Undef"
+  vivify_597:
+    $P2150 = $P2149."ast"()
+    store_lex "$block", $P2150
+.annotate "line", 782
+    find_lex $P2151, "$block"
+    $P2151."blocktype"("immediate")
 .annotate "line", 784
-    get_hll_global $P2146, ["PAST"], "Stmts"
+    get_hll_global $P2152, ["PAST"], "Regex"
 .annotate "line", 785
-    get_hll_global $P2147, ["PAST"], "Op"
+    get_hll_global $P2153, ["PAST"], "Stmts"
 .annotate "line", 786
-    get_hll_global $P2148, ["PAST"], "Var"
-    $P2149 = $P2148."new"("$/" :named("name"))
+    get_hll_global $P2154, ["PAST"], "Op"
 .annotate "line", 787
-    get_hll_global $P2150, ["PAST"], "Op"
+    get_hll_global $P2155, ["PAST"], "Var"
+    $P2156 = $P2155."new"("$/" :named("name"))
 .annotate "line", 788
-    get_hll_global $P2151, ["PAST"], "Var"
-    $P2152 = $P2151."new"(unicode:"$\x{a2}" :named("name"))
-    $P2153 = $P2150."new"($P2152, "MATCH" :named("name"), "callmethod" :named("pasttype"))
-.annotate "line", 787
-    $P2154 = $P2147."new"($P2149, $P2153, "bind" :named("pasttype"))
+    get_hll_global $P2157, ["PAST"], "Op"
+.annotate "line", 789
+    get_hll_global $P2158, ["PAST"], "Var"
+    $P2159 = $P2158."new"(unicode:"$\x{a2}" :named("name"))
+    $P2160 = $P2157."new"($P2159, "MATCH" :named("name"), "callmethod" :named("pasttype"))
+.annotate "line", 788
+    $P2161 = $P2154."new"($P2156, $P2160, "bind" :named("pasttype"))
+.annotate "line", 786
+    find_lex $P2162, "$block"
+    $P2163 = $P2153."new"($P2161, $P2162)
 .annotate "line", 785
-    find_lex $P2155, "$block"
-    $P2156 = $P2146."new"($P2154, $P2155)
+    $P2164 = $P2152."new"($P2163, "pastnode" :named("pasttype"))
 .annotate "line", 784
-    $P2157 = $P2145."new"($P2156, "pastnode" :named("pasttype"))
-.annotate "line", 783
-    store_lex "$past", $P2157
-.annotate "line", 798
-    find_lex $P2158, "$/"
-    find_lex $P2159, "$past"
-    $P2160 = $P2158."!make"($P2159)
-.annotate "line", 779
-    .return ($P2160)
-  control_2136:
+    store_lex "$past", $P2164
+.annotate "line", 799
+    find_lex $P2165, "$/"
+    find_lex $P2166, "$past"
+    $P2167 = $P2165."!make"($P2166)
+.annotate "line", 780
+    .return ($P2167)
+  control_2143:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P2161, exception, "payload"
-    .return ($P2161)
+    getattribute $P2168, exception, "payload"
+    .return ($P2168)
 .end
 
 ### .include 'src/cheats/nqp-builtins.pir'

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

Modified: branches/ops_pct/ext/nqp-rx/src/stage0/Regex-s0.pir
==============================================================================
--- branches/ops_pct/ext/nqp-rx/src/stage0/Regex-s0.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ext/nqp-rx/src/stage0/Regex-s0.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -58,6 +58,34 @@
 
 =over 4
 
+=item new_match()
+
+A method that creates an empty Match object, by default of type
+C<Regex::Match>. This method can be overridden for generating HLL-specific
+Match objects.
+
+=cut
+
+.sub 'new_match' :method
+    .local pmc match
+    match = new ['Regex';'Match']
+    .return (match)
+.end
+
+=item new_array()
+
+A method that creates an empty array object, by default of type
+C<ResizablePMCArray>. This method can be overridden for generating HLL-specific
+arrays for usage within Match objects.
+
+=cut
+
+.sub 'new_array' :method
+    .local pmc arr
+    arr = new ['ResizablePMCArray']
+    .return (arr)
+.end
+
 =item MATCH()
 
 Return this cursor's current Match object, generating a new one
@@ -75,7 +103,7 @@
 
     # First, create a Match object and bind it
   match_make:
-    match = new ['Regex';'Match']
+    match = self.'new_match'()
     setattribute self, '$!match', match
     setattribute match, '$!cursor', self
     .local pmc target, from, to
@@ -98,7 +126,7 @@
     .local pmc arr
     .local int keyint
     subname = shift caparray_it
-    arr = new ['ResizablePMCArray']
+    arr = self.'new_array'()
     caphash[subname] = arr
     keyint = is_cclass .CCLASS_NUMERIC, subname, 0
     if keyint goto caparray_int
@@ -295,7 +323,7 @@
     parrotclass = getattribute $P0, 'parrotclass'
     cur = new parrotclass
 
-    .local pmc from, pos, target, debug
+    .local pmc from, target, debug
 
     from = getattribute self, '$!pos'
     setattribute cur, '$!from', from
@@ -1036,7 +1064,7 @@
   cand_done:
   token_next:
     unless token > '' goto fail
-    chopn token, 1
+    token = chopn token, 1
     goto token_loop
 
   done:

Modified: branches/ops_pct/include/parrot/call.h
==============================================================================
--- branches/ops_pct/include/parrot/call.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/call.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /* call.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *  $Id$
  *  Overview:
@@ -157,22 +157,34 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-void Parrot_pcc_append_result(PARROT_INTERP,
-    ARGIN(PMC *sig_object),
-    ARGIN(STRING *type),
-    ARGIN(void *result))
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+PMC* Parrot_pcc_build_call_from_c_args(PARROT_INTERP,
+    ARGIN_NULLOK(PMC *signature),
+    ARGIN(const char *sig),
+    ...)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+PMC* Parrot_pcc_build_call_from_varargs(PARROT_INTERP,
+    ARGIN_NULLOK(PMC *signature),
+    ARGIN(const char *sig),
+    ARGMOD(va_list *args))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        __attribute__nonnull__(4);
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*args);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC* Parrot_pcc_build_sig_object_from_op(PARROT_INTERP,
     ARGIN_NULLOK(PMC *signature),
-    ARGIN(PMC * const raw_sig),
-    ARGIN(opcode_t * const raw_args))
+    ARGIN(PMC *raw_sig),
+    ARGIN(opcode_t *raw_args))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4);
@@ -188,17 +200,6 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC* Parrot_pcc_build_sig_object_returns_from_op(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *signature),
-    ARGIN(PMC *raw_sig),
-    ARGIN(opcode_t *raw_args))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4);
-
-PARROT_EXPORT
 void Parrot_pcc_fill_params_from_c_args(PARROT_INTERP,
     ARGMOD(PMC *call_object),
     ARGIN(const char *signature),
@@ -212,40 +213,24 @@
 void Parrot_pcc_fill_params_from_op(PARROT_INTERP,
     ARGMOD_NULLOK(PMC *call_object),
     ARGIN(PMC *raw_sig),
-    ARGIN(opcode_t *raw_params))
+    ARGIN(opcode_t *raw_params),
+    Errors_classes direction)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*call_object);
 
 PARROT_EXPORT
-void Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP,
+void Parrot_pcc_fill_params_from_varargs(PARROT_INTERP,
     ARGMOD_NULLOK(PMC *call_object),
     ARGIN(const char *signature),
-    ...)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*call_object);
-
-PARROT_EXPORT
-void Parrot_pcc_fill_returns_from_continuation(PARROT_INTERP,
-    ARGMOD_NULLOK(PMC *call_object),
-    ARGIN(PMC *raw_sig),
-    ARGIN(PMC *from_call_obj))
+    ARGMOD(va_list *args),
+    Errors_classes direction)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
-        FUNC_MODIFIES(*call_object);
-
-PARROT_EXPORT
-void Parrot_pcc_fill_returns_from_op(PARROT_INTERP,
-    ARGMOD_NULLOK(PMC *call_object),
-    ARGIN(PMC *raw_sig),
-    ARGIN(opcode_t *raw_returns))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*call_object);
+        FUNC_MODIFIES(*call_object)
+        FUNC_MODIFIES(*args);
 
 void Parrot_pcc_merge_signature_for_tailcall(PARROT_INTERP,
     ARGMOD_NULLOK(PMC * parent),
@@ -266,11 +251,25 @@
         FUNC_MODIFIES(*arg_flags)
         FUNC_MODIFIES(*return_flags);
 
-#define ASSERT_ARGS_Parrot_pcc_append_result __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+void Parrot_pcc_split_signature_string(
+    ARGIN(const char *signature),
+    ARGMOD(const char **arg_sig),
+    ARGMOD(const char **return_sig))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*arg_sig)
+        FUNC_MODIFIES(*return_sig);
+
+#define ASSERT_ARGS_Parrot_pcc_build_call_from_c_args \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(sig_object) \
-    , PARROT_ASSERT_ARG(type) \
-    , PARROT_ASSERT_ARG(result))
+    , PARROT_ASSERT_ARG(sig))
+#define ASSERT_ARGS_Parrot_pcc_build_call_from_varargs \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(sig) \
+    , PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_Parrot_pcc_build_sig_object_from_op \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -280,11 +279,6 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sig))
-#define ASSERT_ARGS_Parrot_pcc_build_sig_object_returns_from_op \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_sig) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_Parrot_pcc_fill_params_from_c_args \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -295,20 +289,11 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_sig) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_c_args \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(signature))
-#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_continuation \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_sig) \
-    , PARROT_ASSERT_ARG(from_call_obj))
-#define ASSERT_ARGS_Parrot_pcc_fill_returns_from_op \
+#define ASSERT_ARGS_Parrot_pcc_fill_params_from_varargs \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_sig) \
-    , PARROT_ASSERT_ARG(raw_returns))
+    , PARROT_ASSERT_ARG(signature) \
+    , PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_Parrot_pcc_merge_signature_for_tailcall \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -318,6 +303,11 @@
     , PARROT_ASSERT_ARG(signature) \
     , PARROT_ASSERT_ARG(arg_flags) \
     , PARROT_ASSERT_ARG(return_flags))
+#define ASSERT_ARGS_Parrot_pcc_split_signature_string \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(signature) \
+    , PARROT_ASSERT_ARG(arg_sig) \
+    , PARROT_ASSERT_ARG(return_sig))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/call/args.c */
 
@@ -329,10 +319,10 @@
 
 /* XXX Remove interp from this */
 #define ADD_OP_VAR_PART(interp, seg, pc, n) do { \
-    if (*(pc) == PARROT_OP_set_args_pc || \
-            *(pc) == PARROT_OP_get_results_pc || \
-            *(pc) == PARROT_OP_get_params_pc || \
-            *(pc) == PARROT_OP_set_returns_pc) { \
+    if (*(pc) == PARROT_OP_set_args_pc       \
+    ||  *(pc) == PARROT_OP_get_results_pc    \
+    ||  *(pc) == PARROT_OP_get_params_pc     \
+    ||  *(pc) == PARROT_OP_set_returns_pc) { \
         PMC * const sig = (seg)->const_table->constants[(pc)[1]]->u.key; \
         (n) += VTABLE_elements((interp), sig); \
     } \

Modified: branches/ops_pct/include/parrot/charset.h
==============================================================================
--- branches/ops_pct/include/parrot/charset.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/charset.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,13 +1,9 @@
 /* charset.h
- *  Copyright (C) 2004-2008, Parrot Foundation.
+ *  Copyright (C) 2004-2010, 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_CHARSET_H_GUARD
@@ -33,47 +29,44 @@
 #define PARROT_BINARY_CHARSET Parrot_binary_charset_ptr
 #define PARROT_UNICODE_CHARSET Parrot_unicode_charset_ptr
 
-typedef STRING *(*charset_get_graphemes_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset, UINTVAL count);
-typedef STRING *(*charset_get_graphemes_inplace_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset, UINTVAL count, STRING *dest_string);
-typedef void (*charset_set_graphemes_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset, UINTVAL replace_count, STRING *insert_string);
-
-typedef STRING * (*charset_to_charset_t)(PARROT_INTERP, STRING *source_string, STRING *dest);
-typedef STRING * (*charset_from_unicode_t)(PARROT_INTERP, STRING *source_string, STRING *dest);
-typedef STRING* (*charset_compose_t)(PARROT_INTERP, STRING *source_string);
-typedef STRING* (*charset_decompose_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_upcase_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_downcase_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_titlecase_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_upcase_first_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_downcase_first_t)(PARROT_INTERP, STRING *source_string);
-typedef void (*charset_titlecase_first_t)(PARROT_INTERP, STRING *source_string);
-typedef INTVAL (*charset_compare_t)(PARROT_INTERP, const STRING *lhs, const STRING *rhs);
-typedef INTVAL (*charset_index_t)(PARROT_INTERP, STRING *source_string, STRING *search_string, UINTVAL offset);
-typedef INTVAL (*charset_rindex_t)(PARROT_INTERP, STRING *source_string, STRING *search_string, UINTVAL offset);
-typedef UINTVAL (*charset_validate_t)(PARROT_INTERP, STRING *source_string);
-typedef INTVAL (*charset_is_cclass_t)(PARROT_INTERP, INTVAL, const STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_cclass_t)(PARROT_INTERP, INTVAL, STRING *source_string, UINTVAL offset, UINTVAL count);
-typedef INTVAL (*charset_find_not_cclass_t)(PARROT_INTERP, INTVAL, STRING *source_string, UINTVAL offset, UINTVAL count);
-typedef INTVAL (*charset_is_wordchar_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_wordchar_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_not_wordchar_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_is_whitespace_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_whitespace_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_not_whitespace_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_is_digit_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_digit_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_not_digit_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_is_punctuation_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_punctuation_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_not_punctuation_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_is_newline_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_newline_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_not_newline_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef INTVAL (*charset_find_word_boundary_t)(PARROT_INTERP, STRING *source_string, UINTVAL offset);
-typedef STRING *(*charset_string_from_codepoint_t)(PARROT_INTERP, UINTVAL codepoint);
-typedef size_t (*charset_compute_hash_t)(PARROT_INTERP, const STRING *, size_t seed);
+typedef STRING * (*charset_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, STRING *src, STRING *dst);
+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. */
@@ -86,7 +79,7 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-STRING* Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset);
+STRING * Parrot_charset_name(SHIM_INTERP, INTVAL number_of_charset);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -137,18 +130,19 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-CHARSET * Parrot_load_charset(PARROT_INTERP, ARGIN(const char *charsetname))
+const CHARSET * Parrot_load_charset(PARROT_INTERP,
+    ARGIN(const char *charsetname))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 INTVAL Parrot_make_default_charset(SHIM_INTERP,
     SHIM(const char *charsetname),
-    ARGIN(CHARSET *charset))
+    ARGIN(const CHARSET *charset))
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
 CHARSET * Parrot_new_charset(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -164,7 +158,7 @@
 PARROT_EXPORT
 void Parrot_register_charset_converter(PARROT_INTERP,
     ARGIN(const CHARSET *lhs),
-    ARGIN(CHARSET *rhs),
+    ARGIN(const CHARSET *rhs),
     ARGIN(charset_converter_t func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -214,8 +208,6 @@
 struct _charset {
     const char *name;
     charset_get_graphemes_t get_graphemes;
-    charset_get_graphemes_inplace_t get_graphemes_inplace;
-    charset_set_graphemes_t set_graphemes;
     charset_to_charset_t to_charset;
     charset_compose_t compose;
     charset_decompose_t decompose;
@@ -238,8 +230,6 @@
 };
 
 #define CHARSET_GET_GRAPEMES(interp, source, offset, count) ((source)->charset)->get_graphemes((interp), (source), (offset), (count))
-#define CHARSET_GET_GRAPHEMES_INPLACE(interp, source, dest, offset, count) ((source)->charset)->get_graphemes((interp), (source), (dest), (offset), (count))
-#define CHARSET_SET_GRAPHEMES(interp, source, offset, replace_count, insert) ((source)->charset)->set_graphemes((interp), (source), (offset), (replace_count), (insert))
 #define CHARSET_TO_UNICODE(interp, source, dest) ((source)->charset)->to_unicode((interp), (source), (dest))
 #define CHARSET_COMPOSE(interp, source) ((source)->charset)->compose((interp), (source))
 #define CHARSET_DECOMPOSE(interp, source) ((source)->charset)->decompose((interp), (source))
@@ -262,16 +252,10 @@
 #define CHARSET_TO_ENCODING(interp, source) ((source)->encoding)->to_encoding((interp), (source))
 #define CHARSET_COPY_TO_ENCODING(interp, source) ((source)->encoding)->copy_to_encoding((interp), (source))
 #define CHARSET_GET_CODEPOINT(interp, source, offset) ((source)->encoding)->get_codepoint((interp), (source), (offset))
-#define CHARSET_SET_CODEPOINT(interp, source, offset, codepoint) ((source)->encoding)->set_codepoint((interp), (source), (offset), (codepoint))
 #define CHARSET_GET_BYTE(interp, source, offset) ((source)->encoding)->get_byte((interp), (source), (offset))
 #define CHARSET_SET_BYTE(interp, source, offset, value) ((source)->encoding)->set_byte((interp), (source), (offset), (value))
 #define CHARSET_GET_CODEPOINTS(interp, source, offset, count) ((source)->encoding)->get_codepoints((interp), (source), (offset), (count))
-#define CHARSET_GET_CODEPOINTS_INPLACE(interp, source, dest, offset, count) ((source)->encoding)->get_codepoints_inplace((interp), (source), (dest), (offset), (count))
 #define CHARSET_GET_BYTES(interp, source, offset, count) ((source)->encoding)->get_bytes((interp), (source), (offset), (count))
-#define CHARSET_GET_BYTES_INPLACE(interp, source, offset, count, dest) ((source)->encoding)->get_bytes((interp), (source), (offset), (count), (dest))
-#define CHARSET_SET_CODEPOINTS(interp, source, offset, count, newdata) ((source)->encoding)->set_codepoints((interp), (source), (offset), (count), (newdata))
-#define CHARSET_SET_BYTES(interp, source, offset, count, newdata) ((source)->encoding)->set_bytes((interp), (source), (offset), (count), (newdata))
-#define CHARSET_BECOME_ENCODING(interp, source) ((source)->encoding)->become_encoding((interp), (source))
 #define CHARSET_CODEPOINTS(interp, source) ((source)->encoding)->codepoints((interp), (source))
 #define CHARSET_BYTES(interp, source) ((source)->encoding)->bytes((interp), (source))
 

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

Modified: branches/ops_pct/include/parrot/context.h
==============================================================================
--- branches/ops_pct/include/parrot/context.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/context.h	Wed May  5 08:45:29 2010	(r46302)
@@ -214,23 +214,12 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-size_t Parrot_pcc_get_pred_offset_func(PARROT_INTERP, ARGIN(PMC *ctx))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 UINTVAL Parrot_pcc_get_recursion_depth_func(PARROT_INTERP, ARGIN(PMC *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
-PMC* Parrot_pcc_get_results_signature_func(PARROT_INTERP, ARGIN(PMC *ctx))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
 PMC* Parrot_pcc_get_signature_func(PARROT_INTERP, ARGIN(PMC *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -322,20 +311,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_pcc_set_pred_offset_func(PARROT_INTERP,
-    ARGIN(PMC *ctx),
-    size_t pred_offset)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-void Parrot_pcc_set_results_signature_func(PARROT_INTERP,
-    ARGIN(PMC *ctx),
-    ARGIN_NULLOK(PMC *sig))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 void Parrot_pcc_set_signature_func(PARROT_INTERP,
     ARGIN(PMC *ctx),
     ARGIN_NULLOK(PMC *sig_object))
@@ -444,18 +419,10 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
-#define ASSERT_ARGS_Parrot_pcc_get_pred_offset_func \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_Parrot_pcc_get_recursion_depth_func \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
-#define ASSERT_ARGS_Parrot_pcc_get_results_signature_func \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_Parrot_pcc_get_signature_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
@@ -503,14 +470,6 @@
 #define ASSERT_ARGS_Parrot_pcc_set_pc_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
-#define ASSERT_ARGS_Parrot_pcc_set_pred_offset_func \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ctx))
-#define ASSERT_ARGS_Parrot_pcc_set_results_signature_func \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_Parrot_pcc_set_signature_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
@@ -551,15 +510,9 @@
 #  define Parrot_pcc_get_caller_ctx(i, c) (__C(c)->caller_ctx)
 #  define Parrot_pcc_set_caller_ctx(i, c, value) (__C(c)->caller_ctx = (value))
 
-#  define Parrot_pcc_get_results_signature(i, c) (__C(c)->results_signature)
-#  define Parrot_pcc_set_results_signature(i, c, value) (__C(c)->results_signature = (value))
-
 #  define Parrot_pcc_get_namespace(i, c) (__C(c)->current_namespace)
 #  define Parrot_pcc_set_namespace(i, c, value) (__C(c)->current_namespace = (value))
 
-#  define Parrot_pcc_get_pred_offset(i, c) (__C(c)->pred_offset)
-#  define Parrot_pcc_set_pred_offset(i, c, value) (__C(c)->pred_offset = (value))
-
 #  define Parrot_pcc_get_pc(i, c) (__C(c)->current_pc)
 #  define Parrot_pcc_set_pc(i, c, value) (__C(c)->current_pc = (value))
 
@@ -615,15 +568,9 @@
 #  define Parrot_pcc_get_caller_ctx(i, c) Parrot_pcc_get_caller_ctx_func((i), (c))
 #  define Parrot_pcc_set_caller_ctx(i, c, value) Parrot_pcc_set_caller_ctx_func((i), (c), (value))
 
-#  define Parrot_pcc_get_results_signature(i, c) Parrot_pcc_get_results_signature_func((i), (c))
-#  define Parrot_pcc_set_results_signature(i, c, value) Parrot_pcc_set_results_signature_func((i), (c), (value))
-
 #  define Parrot_pcc_get_namespace(i, c) Parrot_pcc_get_namespace_func((i), (c))
 #  define Parrot_pcc_set_namespace(i, c, value) Parrot_pcc_set_namespace_func((i), (c), (value))
 
-#  define Parrot_pcc_get_pred_offset(i, c) Parrot_pcc_get_pred_offset_func((i), (c))
-#  define Parrot_pcc_set_pred_offset(i, c, value) Parrot_pcc_set_pred_offset_func((i), (c), (value))
-
 #  define Parrot_pcc_get_pc(i, c) Parrot_pcc_get_pc_func((i), (c))
 #  define Parrot_pcc_set_pc(i, c, value) Parrot_pcc_set_pc_func((i), (c), (value))
 

Modified: branches/ops_pct/include/parrot/debugger.h
==============================================================================
--- branches/ops_pct/include/parrot/debugger.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/debugger.h	Wed May  5 08:45:29 2010	(r46302)
@@ -200,9 +200,9 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_debugger_start(PARROT_INTERP, ARGIN(opcode_t * cur_opcode))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+void Parrot_debugger_start(PARROT_INTERP,
+    ARGIN_NULLOK(opcode_t * cur_opcode))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 void PDB_load_source(PARROT_INTERP, ARGIN(const char *command))
@@ -371,8 +371,7 @@
 #define ASSERT_ARGS_Parrot_debugger_load __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_debugger_start __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cur_opcode))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_PDB_load_source __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(command))

Modified: branches/ops_pct/include/parrot/dynext.h
==============================================================================
--- branches/ops_pct/include/parrot/dynext.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/dynext.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2007, Parrot Foundation.
+ * Copyright (C) 2003-2010, Parrot Foundation.
  */
 
 /* dynext.h
@@ -41,7 +41,7 @@
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_load_lib(PARROT_INTERP,
     ARGIN_NULLOK(STRING *lib),
-    SHIM(PMC *initializer))
+    ARGIN_NULLOK(PMC *parameters))
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_clone_lib_into __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/include/parrot/embed.h
==============================================================================
--- branches/ops_pct/include/parrot/embed.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/embed.h	Wed May  5 08:45:29 2010	(r46302)
@@ -56,11 +56,7 @@
 
 PARROT_EXPORT void Parrot_pbc_fixup_loaded(Parrot_Interp);
 
-PARROT_EXPORT void Parrot_setup_argv(Parrot_Interp, int argc, const char **argv);
-
-PARROT_EXPORT void Parrot_setup_opt(Parrot_Interp, int n, char *argv);
-
-PARROT_EXPORT void Parrot_runcode(Parrot_Interp, int argc, char **argv);
+PARROT_EXPORT void Parrot_runcode(Parrot_Interp, int argc, const char **argv);
 
 PARROT_EXPORT Parrot_PMC Parrot_compile_string(Parrot_Interp,
         Parrot_String type, const char *code, Parrot_String *error);
@@ -77,13 +73,13 @@
 
 PARROT_EXPORT void Parrot_run_native(PARROT_INTERP, native_func_t func);
 
+PARROT_EXPORT void Parrot_load_bytecode(PARROT_INTERP, Parrot_String file_str);
+
 /* Parrot_set_config_hash exists in *_config.o (e.g install_config.o),
    so if you make this call then you will need to link with it in
    addition to libparrot */
 void Parrot_set_config_hash(void);
 
-int Parrot_revision(void);
-
 #endif /* PARROT_EMBED_H_GUARD */
 
 /*

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

Modified: branches/ops_pct/include/parrot/exceptions.h
==============================================================================
--- branches/ops_pct/include/parrot/exceptions.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/exceptions.h	Wed May  5 08:45:29 2010	(r46302)
@@ -51,7 +51,6 @@
     EXCEPTION_JIT_UNAVAILABLE,
     EXCEPTION_EXEC_UNAVAILABLE,
     EXCEPTION_INTERP_ERROR,
-    EXCEPTION_PREDEREF_LOAD_ERROR,
     EXCEPTION_PARROT_USAGE_ERROR,
     EXCEPTION_PIO_ERROR,
     EXCEPTION_PARROT_POINTER_ERROR,
@@ -118,6 +117,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void exit_fatal(int exitcode, ARGIN(const char *format), ...)
         __attribute__nonnull__(2);
 
@@ -133,6 +133,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_confess(
     ARGIN(const char *cond),
     ARGIN(const char *file),
@@ -160,6 +161,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_rethrow_from_c(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -173,12 +175,14 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_throw_from_c(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_throw_from_c_args(PARROT_INTERP,
     SHIM(void *ret_addr),
     int exitcode,
@@ -206,11 +210,13 @@
         __attribute__nonnull__(4);
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void die_from_exception(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void do_panic(
     NULLOK_INTERP,
     ARGIN_NULLOK(const char *message),

Modified: branches/ops_pct/include/parrot/exit.h
==============================================================================
--- branches/ops_pct/include/parrot/exit.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/exit.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /* exit.h
- *  Copyright (C) 2001-2007, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -29,12 +29,13 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_exit(PARROT_INTERP, int status)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
 void Parrot_on_exit(PARROT_INTERP,
-    NOTNULL(exit_handler_f function),
+    ARGIN(exit_handler_f function),
     ARGIN_NULLOK(void *arg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);

Modified: branches/ops_pct/include/parrot/extend.h
==============================================================================
--- branches/ops_pct/include/parrot/extend.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/extend.h	Wed May  5 08:45:29 2010	(r46302)
@@ -88,7 +88,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void Parrot_free_cstring(ARGIN_NULLOK(char *string));
+void Parrot_free_cstring(ARGFREE(char *string));
 
 PARROT_EXPORT
 Parrot_Int Parrot_get_intreg(PARROT_INTERP, Parrot_Int regnum)
@@ -131,13 +131,15 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 char * Parrot_PMC_get_cstring(PARROT_INTERP, Parrot_PMC pmc)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char * Parrot_PMC_get_cstring_intkey(PARROT_INTERP,
     Parrot_PMC pmc,
     Parrot_Int key)
@@ -145,7 +147,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char * Parrot_PMC_get_cstringn(PARROT_INTERP,
     ARGIN(Parrot_PMC pmc),
     ARGOUT(Parrot_Int *length))
@@ -156,7 +159,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char * Parrot_PMC_get_cstringn_intkey(PARROT_INTERP,
     ARGIN(Parrot_PMC pmc),
     ARGOUT(Parrot_Int *length),

Modified: branches/ops_pct/include/parrot/gc_api.h
==============================================================================
--- branches/ops_pct/include/parrot/gc_api.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/gc_api.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /* gc_api.h
- *  Copyright (C) 2001-2009, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -31,6 +31,8 @@
 #define WORD_ALIGN_1 (sizeof (void *) - 1)
 #define WORD_ALIGN_MASK ~WORD_ALIGN_1
 
+#define ALIGNED_STRING_SIZE(len) (((len) + sizeof (void*) + WORD_ALIGN_1) & WORD_ALIGN_MASK)
+
 /* pool iteration */
 typedef enum {
     POOL_PMC    = 0x01,
@@ -136,9 +138,8 @@
         FUNC_MODIFIES(*obj);
 
 PARROT_EXPORT
-void Parrot_gc_mark_STRING_alive_fun(PARROT_INTERP,
+void Parrot_gc_mark_STRING_alive_fun(SHIM_INTERP,
     ARGMOD_NULLOK(STRING *obj))
-        __attribute__nonnull__(1)
         FUNC_MODIFIES(*obj);
 
 PARROT_EXPORT
@@ -178,11 +179,6 @@
 int Parrot_gc_active_sized_buffers(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-void Parrot_gc_add_pmc_sync(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pmc);
-
 void Parrot_gc_allocate_buffer_storage_aligned(PARROT_INTERP,
     ARGOUT(Buffer *buffer),
     size_t size)
@@ -256,11 +252,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
-void Parrot_gc_free_pmc_sync(PARROT_INTERP, ARGMOD(PMC *p))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*p);
-
 void Parrot_gc_free_string_header(PARROT_INTERP, ARGMOD(STRING *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -350,8 +341,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(obj))
 #define ASSERT_ARGS_Parrot_gc_mark_STRING_alive_fun \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_gc_reallocate_memory_chunk \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -371,9 +361,6 @@
 #define ASSERT_ARGS_Parrot_gc_active_sized_buffers \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_gc_add_pmc_sync __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_gc_allocate_buffer_storage_aligned \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -420,9 +407,6 @@
 #define ASSERT_ARGS_Parrot_gc_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_Parrot_gc_free_pmc_sync __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(p))
 #define ASSERT_ARGS_Parrot_gc_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -472,8 +456,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/gc/api.c */
 
-void Parrot_gc_inf_init(PARROT_INTERP);
-
 #if defined(NDEBUG) && defined(PARROT_IN_CORE)
 #  define Parrot_gc_mark_STRING_alive(interp, obj) \
           do if (! STRING_IS_NULL(obj)) PObj_live_SET(obj); while (0)

Modified: branches/ops_pct/include/parrot/global_setup.h
==============================================================================
--- branches/ops_pct/include/parrot/global_setup.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/global_setup.h	Wed May  5 08:45:29 2010	(r46302)
@@ -17,6 +17,13 @@
 #include "parrot/config.h"
 #include "parrot/interpreter.h"
 
+void Parrot_register_core_pmcs(PARROT_INTERP, ARGIN(PMC *registry))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void Parrot_initialize_core_pmcs(PARROT_INTERP, int pass)
+        __attribute__nonnull__(1);
+
 /* HEADERIZER BEGIN: src/global_setup.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 

Modified: branches/ops_pct/include/parrot/hash.h
==============================================================================
--- branches/ops_pct/include/parrot/hash.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/hash.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,13 +1,9 @@
 /* hash.h
- *  Copyright (C) 2001-2003, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
  *     Hashtable implementation
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
  */
 
 #ifndef PARROT_HASH_H_GUARD
@@ -113,15 +109,14 @@
         FUNC_MODIFIES(*hash);
 
 PARROT_EXPORT
-void parrot_hash_destroy(PARROT_INTERP, ARGMOD(Hash *hash))
+void parrot_hash_destroy(PARROT_INTERP, ARGFREE_NOTNULL(Hash *hash))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*hash);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL parrot_hash_exists(PARROT_INTERP,
-    ARGIN(Hash *hash),
+    ARGIN(const Hash *hash),
     ARGIN(void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -131,7 +126,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 void * parrot_hash_get(PARROT_INTERP,
-    ARGIN(Hash *hash),
+    ARGIN(const Hash *hash),
     ARGIN(const void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -185,9 +180,10 @@
         FUNC_MODIFIES(*pinfo);
 
 PARROT_EXPORT
-void parrot_mark_hash(PARROT_INTERP, ARGIN(Hash *hash))
+void parrot_mark_hash(PARROT_INTERP, ARGMOD(Hash *hash))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*hash);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -224,15 +220,13 @@
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-void* hash_key_from_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
-    INTVAL key)
+void* hash_key_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL key)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_key_from_pmc(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN(PMC *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -240,14 +234,14 @@
 
 PARROT_CAN_RETURN_NULL
 void* hash_key_from_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN(STRING *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 INTVAL hash_key_to_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -262,61 +256,61 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING* hash_key_to_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     INTVAL value)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_number(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     FLOATVAL value)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_pmc(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(PMC *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 void* hash_value_from_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(STRING *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 INTVAL hash_value_to_int(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 FLOATVAL hash_value_to_number(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
 PMC* hash_value_to_pmc(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
 STRING* hash_value_to_string(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGIN_NULLOK(void *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -374,15 +368,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
-int PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN_NULLOK(PMC *b))
+int PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-int pointer_compare(SHIM_INTERP,
-    ARGIN_NULLOK(const void *a),
-    ARGIN_NULLOK(const void *b));
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 int STRING_compare(PARROT_INTERP,
@@ -511,8 +500,8 @@
     , PARROT_ASSERT_ARG(keyhash))
 #define ASSERT_ARGS_PMC_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(a))
-#define ASSERT_ARGS_pointer_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+    , PARROT_ASSERT_ARG(a) \
+    , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_STRING_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(search_key))

Modified: branches/ops_pct/include/parrot/imcc.h
==============================================================================
--- branches/ops_pct/include/parrot/imcc.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/imcc.h	Wed May  5 08:45:29 2010	(r46302)
@@ -9,7 +9,7 @@
 PARROT_EXPORT void imcc_initialize(PARROT_INTERP);
 PARROT_EXPORT void imcc_start_handling_flags(PARROT_INTERP);
 PARROT_EXPORT int imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt, Parrot_Run_core_t *core);
-PARROT_EXPORT int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, char **argv);
+PARROT_EXPORT int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char **argv);
 
 #endif /* PARROT_IMCC_H_GUARD */
 

Modified: branches/ops_pct/include/parrot/interpreter.h
==============================================================================
--- branches/ops_pct/include/parrot/interpreter.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/interpreter.h	Wed May  5 08:45:29 2010	(r46302)
@@ -26,11 +26,6 @@
     PARROT_THR_COPY_INTERP  = 0x2000, /* thread start copies interp state */
     PARROT_THR_THREAD_POOL  = 0x4000, /* type3 threads */
 
-    PARROT_THR_TYPE_1       = PARROT_IS_THREAD,
-    PARROT_THR_TYPE_2       = PARROT_IS_THREAD | PARROT_THR_COPY_INTERP,
-    PARROT_THR_TYPE_3       = PARROT_IS_THREAD | PARROT_THR_COPY_INTERP |
-                              PARROT_THR_THREAD_POOL
-
 } Parrot_Interp_flag;
 /* &end_gen */
 
@@ -64,9 +59,6 @@
     PARROT_SLOW_CORE,                       /* slow bounds/trace/profile core */
     PARROT_FUNCTION_CORE    = PARROT_SLOW_CORE,
     PARROT_FAST_CORE        = 0x01,         /* fast DO_OP core */
-    PARROT_SWITCH_CORE      = 0x02,         /*   P   = prederef   */
-    PARROT_CGP_CORE         = 0x06,         /*  CP                */
-    PARROT_CGOTO_CORE       = 0x04,         /*  C    = cgoto      */
     PARROT_EXEC_CORE        = 0x20,         /* TODO Parrot_exec_run variants */
     PARROT_GC_DEBUG_CORE    = 0x40,         /* run GC before each op */
     PARROT_DEBUGGER_CORE    = 0x80,         /* used by parrot debugger */
@@ -152,18 +144,6 @@
 struct _Thread_data;    /* in thread.h */
 struct _Caches;         /* caches .h */
 
-typedef struct _Prederef_branch {       /* item for recording branches */
-    size_t offs;                        /* offset in code */
-    void  *op;                          /* opcode at that position */
-} Prederef_branch;
-
-typedef struct _Prederef {
-    void **code;                        /* prederefed code */
-    Prederef_branch *branches;          /* list of branches in code */
-    size_t n_branches;                  /* entries in that list */
-    size_t n_allocated;                 /* allocated size of it */
-} Prederef;
-
 /* Get Context from interpreter */
 #define CONTEXT(interp)         Parrot_pcc_get_context_struct((interp), (interp)->ctx)
 
@@ -296,7 +276,6 @@
     /* during a call sequencer the caller fills these objects
      * inside the invoke these get moved to the context structure */
     PMC *current_cont;                        /* the return continuation PMC */
-    PMC *current_object;                      /* invocant, if a method call */
 };
 
 /* typedef struct parrot_interp_t Interp;    done in parrot.h so that
@@ -316,6 +295,8 @@
     IGLOBALS_COMPREG_HASH,
     IGLOBALS_ARGV_LIST,
     IGLOBALS_NCI_FUNCS,
+    IGLOBALS_NCI_FB_CB,
+    IGLOBALS_NCI_FB_UD,
     IGLOBALS_INTERPRETER,       /* this interpreter as ParrotInterpreter PMC */
     IGLOBALS_DYN_LIBS,          /* Hash of ParrotLibrary loaded dynamic ext */
     IGLOBALS_CONFIG_HASH,
@@ -331,30 +312,28 @@
 #define PNCONST   PF_NCONST(interp->code)
 
 /* TODO - Make this a config option */
-/* Splint complains about PMCNULL's storage, so don't use it. */
-#ifdef S_SPLINT_S
-#  define PARROT_CATCH_NULL 0
-#else
-#  define PARROT_CATCH_NULL 1
+#ifndef PARROT_CATCH_NULL
+#  ifdef S_SPLINT_S
+#    define PARROT_CATCH_NULL 0
+#  else
+#    define PARROT_CATCH_NULL 1
+#  endif
 #endif
 
+/* Maybe PMC_IS_NULL(interp, pmc) ? */
 #if PARROT_CATCH_NULL
 PARROT_DATA PMC    *PMCNULL;    /* Holds single Null PMC */
+PARROT_DATA STRING *STRINGNULL; /* a single Null STRING */
+#  define PMC_IS_NULL(pmc)  ((pmc) == PMCNULL || (pmc) == NULL)
+#  define STRING_IS_NULL(s) ((s) == STRINGNULL || (s) == NULL)
 #else
-#  define PMCNULL         ((PMC *)NULL)
+#  define PMCNULL ((PMC *)NULL)
+#  define STRINGNULL ((STRING *)NULL)
+#  define PMC_IS_NULL(pmc)       ((pmc) == NULL)
+#  define STRING_IS_NULL(string) ((string) == NULL)
 #endif /* PARROT_CATCH_NULL */
 
-/* Maybe PMC_IS_NULL(interp, pmc) ? */
-#if PARROT_CATCH_NULL
-#  define PMC_IS_NULL(pmc) ((pmc) == PMCNULL || (pmc) == NULL)
-#else
-#  define PMC_IS_NULL(pmc) (pmc) == NULL
-#endif
-
-PARROT_DATA STRING *STRINGNULL; /* a single Null STRING */
-
-#define STRING_IS_NULL(s) ((s) == STRINGNULL || (s) == NULL)
-#define STRING_IS_EMPTY(s) !(int)(s)->strlen
+#define STRING_IS_EMPTY(s) ((s)->strlen == 0)
 
 /* &gen_from_def(sysinfo.pasm) prefix(SYSINFO_) */
 
@@ -486,7 +465,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PMC* interpinfo_p(PARROT_INTERP, INTVAL what)
         __attribute__nonnull__(1);
 
@@ -509,7 +488,7 @@
 PARROT_EXPORT
 void Parrot_compreg(PARROT_INTERP,
     ARGIN(STRING *type),
-    NOTNULL(Parrot_compiler_func_t func))
+    ARGIN(Parrot_compiler_func_t func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
@@ -582,21 +561,10 @@
 /* HEADERIZER END: src/interp/inter_misc.c */
 
 
-/* interpreter.c */
-void runops_int(Interp *, size_t offset);
-void exec_init_prederef(PARROT_INTERP,
-    void *prederef_arena);
-void prepare_for_run(PARROT_INTERP);
-PARROT_EXPORT void dynop_register(PARROT_INTERP, PMC *op_lib);
-
-/* interpreter.pmc */
+/* parrotinterpreter.pmc */
+/* XXX Would be nice if this could live in some headerized grouping */
 void clone_interpreter(Parrot_Interp dest, Parrot_Interp self, INTVAL flags);
 
-void Parrot_setup_event_func_ptrs(PARROT_INTERP);
-
-PARROT_EXPORT void disable_event_checking(PARROT_INTERP);
-PARROT_EXPORT void enable_event_checking(PARROT_INTERP);
-
 #else /* !PARROT_IN_CORE */
 
 typedef void * *(*native_func_t)(PARROT_INTERP,

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

Modified: branches/ops_pct/include/parrot/io_portable.h
==============================================================================
--- branches/ops_pct/include/parrot/io_portable.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/io_portable.h	Wed May  5 08:45:29 2010	(r46302)
@@ -36,7 +36,9 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*filehandle);
 
-INTVAL Parrot_io_flush_portable(SHIM_INTERP, SHIM(PMC *filehandle));
+INTVAL Parrot_io_flush_portable(SHIM_INTERP, ARGIN(PMC *filehandle))
+        __attribute__nonnull__(2);
+
 INTVAL Parrot_io_getblksize_portable(PIOHANDLE fptr);
 INTVAL Parrot_io_init_portable(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -72,9 +74,10 @@
         __attribute__nonnull__(3);
 
 size_t Parrot_io_read_portable(PARROT_INTERP,
-    SHIM(PMC *filehandle),
+    ARGIN(PMC *filehandle),
     ARGIN(STRING **buf))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PIOOFF_T Parrot_io_seek_portable(PARROT_INTERP,
@@ -91,11 +94,10 @@
 
 size_t Parrot_io_write_portable(PARROT_INTERP,
     ARGIN(PMC *filehandle),
-    ARGMOD(STRING *s))
+    ARGIN(const STRING *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*s);
+        __attribute__nonnull__(3);
 
 #define ASSERT_ARGS_Parrot_io_close_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -103,7 +105,8 @@
 #define ASSERT_ARGS_Parrot_io_fdopen_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))
-#define ASSERT_ARGS_Parrot_io_flush_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_io_flush_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(filehandle))
 #define ASSERT_ARGS_Parrot_io_getblksize_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_io_init_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -122,6 +125,7 @@
     , PARROT_ASSERT_ARG(buf))
 #define ASSERT_ARGS_Parrot_io_read_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(filehandle) \
     , PARROT_ASSERT_ARG(buf))
 #define ASSERT_ARGS_Parrot_io_seek_portable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \

Modified: branches/ops_pct/include/parrot/io_unix.h
==============================================================================
--- branches/ops_pct/include/parrot/io_unix.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/io_unix.h	Wed May  5 08:45:29 2010	(r46302)
@@ -39,11 +39,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_io_fdopen_unix(PARROT_INTERP,
-    ARGMOD(PMC *filehandle),
+    ARGMOD_NULLOK(PMC *filehandle),
     PIOHANDLE fd,
     INTVAL flags)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         FUNC_MODIFIES(*filehandle);
 
 INTVAL Parrot_io_flush_unix(PARROT_INTERP, ARGMOD(PMC *filehandle))
@@ -55,7 +54,7 @@
 INTVAL Parrot_io_init_unix(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(PMC *filehandle))
+INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(const PMC *filehandle))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -118,11 +117,10 @@
 
 size_t Parrot_io_write_unix(PARROT_INTERP,
     ARGIN(PMC *filehandle),
-    ARGMOD(STRING *s))
+    ARGIN(const STRING *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*s);
+        __attribute__nonnull__(3);
 
 #define ASSERT_ARGS_Parrot_io_async_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -133,8 +131,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))
 #define ASSERT_ARGS_Parrot_io_fdopen_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(filehandle))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_io_flush_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))

Modified: branches/ops_pct/include/parrot/io_win32.h
==============================================================================
--- branches/ops_pct/include/parrot/io_win32.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/io_win32.h	Wed May  5 08:45:29 2010	(r46302)
@@ -110,7 +110,7 @@
 
 size_t Parrot_io_write_win32(PARROT_INTERP,
     ARGIN(PMC *filehandle),
-    ARGIN(STRING *s))
+    ARGIN(const STRING *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);

Modified: branches/ops_pct/include/parrot/key.h
==============================================================================
--- branches/ops_pct/include/parrot/key.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/key.h	Wed May  5 08:45:29 2010	(r46302)
@@ -161,6 +161,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL key_type(SHIM_INTERP, ARGIN(const PMC *key))
         __attribute__nonnull__(2);

Modified: branches/ops_pct/include/parrot/misc.h
==============================================================================
--- branches/ops_pct/include/parrot/misc.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/misc.h	Wed May  5 08:45:29 2010	(r46302)
@@ -34,6 +34,7 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_byte_index(SHIM_INTERP,
     ARGIN(const STRING *base),
     ARGIN(const STRING *search),
@@ -51,12 +52,15 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 FLOATVAL Parrot_float_rand(INTVAL how_random);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_int_rand(INTVAL how_random);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_range_rand(INTVAL from, INTVAL to, INTVAL how_random);
 
 PARROT_EXPORT
@@ -78,12 +82,15 @@
 void Parrot_srand(INTVAL seed);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_uint_rand(INTVAL how_random);
 
 PARROT_CONST_FUNCTION
+PARROT_WARN_UNUSED_RESULT
 FLOATVAL floatval_mod(FLOATVAL n2, FLOATVAL n3);
 
 PARROT_CONST_FUNCTION
+PARROT_WARN_UNUSED_RESULT
 INTVAL intval_mod(INTVAL i2, INTVAL i3);
 
 void Parrot_quicksort(PARROT_INTERP,
@@ -145,7 +152,9 @@
         FUNC_MODIFIES(*ary);
 
 PARROT_EXPORT
-int Parrot_secret_snprintf(
+PARROT_IGNORABLE_RESULT
+int /*@alt void@*/
+Parrot_secret_snprintf(
     ARGOUT(char *buffer),
     NULLOK(const size_t len),
     ARGIN(const char *format),
@@ -192,6 +201,7 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING * Parrot_vsprintf_c(PARROT_INTERP,
     ARGIN(const char *pat),
     va_list args)
@@ -296,11 +306,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_sprintf_format(PARROT_INTERP,
-    ARGIN(STRING *pat),
-    ARGIN(SPRINTF_OBJ *obj))
+    ARGIN(const STRING *pat),
+    ARGMOD(SPRINTF_OBJ *obj))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*obj);
 
 #define ASSERT_ARGS_Parrot_sprintf_format __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -311,12 +322,6 @@
 
 #endif /* IN_SPF_SYSTEM */
 
-
-/*
- * generated src/revision.c
- */
-PARROT_EXPORT int Parrot_config_revision(void);
-
 #endif /* PARROT_MISC_H_GUARD */
 
 /*

Modified: branches/ops_pct/include/parrot/nci.h
==============================================================================
--- branches/ops_pct/include/parrot/nci.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/nci.h	Wed May  5 08:45:29 2010	(r46302)
@@ -15,12 +15,26 @@
 
 #include "parrot/parrot.h"
 
-void *build_call_func(PARROT_INTERP, SHIM(PMC *pmc_nci), NOTNULL(STRING *signature), NOTNULL(int *jitted));
+typedef PMC *(*nci_fb_func_t)(PMC *user_data, STRING *signature);
+typedef void (*nci_thunk_t)(PARROT_INTERP, PMC *, PMC *);
 
 void Parrot_nci_load_core_thunks(PARROT_INTERP);
-
 void Parrot_nci_load_extra_thunks(PARROT_INTERP);
 
+/* HEADERIZER BEGIN: src/nci/api.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+PMC * build_call_func(PARROT_INTERP, ARGIN(STRING *signature))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_build_call_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(signature))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: src/nci/api.c */
+
 #endif /* PARROT_NCI_H_GUARD */
 
 /*

Modified: branches/ops_pct/include/parrot/oo.h
==============================================================================
--- branches/ops_pct/include/parrot/oo.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/oo.h	Wed May  5 08:45:29 2010	(r46302)
@@ -148,11 +148,9 @@
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_oo_clone_object(PARROT_INTERP,
     ARGIN(PMC *pmc),
-    ARGMOD_NULLOK(PMC *class_),
     ARGMOD_NULLOK(PMC *dest))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*class_)
         FUNC_MODIFIES(*dest);
 
 void Parrot_oo_extract_methods_from_namespace(PARROT_INTERP,

Modified: branches/ops_pct/include/parrot/op.h
==============================================================================
--- branches/ops_pct/include/parrot/op.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/op.h	Wed May  5 08:45:29 2010	(r46302)
@@ -57,7 +57,6 @@
 /* NOTE: Sure wish we could put the types here... */
 
 typedef opcode_t *(*op_func_t)(opcode_t *, PARROT_INTERP);
-typedef void **(*op_func_prederef_t)(void **, PARROT_INTERP);
 
 
 /*

Modified: branches/ops_pct/include/parrot/oplib.h
==============================================================================
--- branches/ops_pct/include/parrot/oplib.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/oplib.h	Wed May  5 08:45:29 2010	(r46302)
@@ -51,7 +51,6 @@
     CORE_OPS_check_events__,    /* inserted into op dispatch when an event
                                    got scheduled */
     CORE_OPS_wrapper__,         /* inserted by dynop_register for new ops */
-    CORE_OPS_prederef__         /* inserted by dynop_register for new ops */
         /* 2 more reserved */
 } special_core_ops_enum;
 

Modified: branches/ops_pct/include/parrot/oplib/core_ops.h
==============================================================================
--- branches/ops_pct/include/parrot/oplib/core_ops.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/oplib/core_ops.h	Wed May  5 08:45:29 2010	(r46302)
@@ -13,8 +13,9 @@
 
 #include "parrot/parrot.h"
 #include "parrot/oplib.h"
+#include "parrot/runcore_api.h"
 
- op_lib_t *Parrot_DynOp_core_2_1_0(PARROT_INTERP, long init);
+ op_lib_t *Parrot_DynOp_core_2_3_0(PARROT_INTERP, long init);
 
  opcode_t * Parrot_end(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_noop(opcode_t *, PARROT_INTERP);
@@ -49,9 +50,11 @@
  opcode_t * Parrot_capture_lex_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_newclosure_p_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_set_args_pc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_get_results_pc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_get_params_pc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_set_returns_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_results_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_result_info_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_result_info_pc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_result_info_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_set_addr_i_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_set_addr_p_ic(opcode_t *, PARROT_INTERP);
@@ -76,11 +79,6 @@
  opcode_t * Parrot_die_ic_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_exit_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_exit_ic(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_pushmark_i(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_pushmark_ic(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_popmark_i(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_popmark_ic(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_pushaction_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_debug_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_debug_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bounds_i(opcode_t *, PARROT_INTERP);
@@ -117,6 +115,10 @@
  opcode_t * Parrot_needs_destroy_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_loadlib_p_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_loadlib_p_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_s_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_sc_p(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_s_pc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_loadlib_p_sc_pc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_dlfunc_p_p_s_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_dlfunc_p_p_sc_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_dlfunc_p_p_s_sc(opcode_t *, PARROT_INTERP);
@@ -143,8 +145,6 @@
  opcode_t * Parrot_band_p_p_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_band_p_p_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_band_p_p_p(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bands_s_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bands_s_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bands_p_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bands_p_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bands_p_p(opcode_t *, PARROT_INTERP);
@@ -158,7 +158,6 @@
  opcode_t * Parrot_bnot_i_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bnot_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bnot_p_p(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bnots_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bnots_s_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bnots_s_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bnots_p(opcode_t *, PARROT_INTERP);
@@ -174,8 +173,6 @@
  opcode_t * Parrot_bor_p_p_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bor_p_p_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bor_p_p_p(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bors_s_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bors_s_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bors_p_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bors_p_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bors_p_p(opcode_t *, PARROT_INTERP);
@@ -232,8 +229,6 @@
  opcode_t * Parrot_bxor_p_p_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bxor_p_p_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bxor_p_p_p(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bxors_s_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_bxors_s_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bxors_p_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bxors_p_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_bxors_p_p(opcode_t *, PARROT_INTERP);
@@ -447,6 +442,8 @@
  opcode_t * Parrot_backtrace(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_getline_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_getfile_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_set_label_p_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_get_label_i_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_close_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_fdopen_p_i_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_fdopen_p_ic_s(opcode_t *, PARROT_INTERP);
@@ -1009,8 +1006,6 @@
  opcode_t * Parrot_ord_i_sc_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_chr_s_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_chr_s_ic(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_chopn_s_i(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_chopn_s_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_chopn_s_s_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_chopn_s_sc_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_chopn_s_s_ic(opcode_t *, PARROT_INTERP);
@@ -1054,26 +1049,26 @@
  opcode_t * Parrot_substr_s_sc_i_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_substr_s_s_ic_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_substr_s_sc_ic_ic(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_i_i_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_ic_i_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_i_ic_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_ic_ic_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_i_i_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_ic_i_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_i_ic_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_s_ic_ic_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_i_i_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_ic_i_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_i_ic_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_ic_ic_s(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_i_i_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_ic_i_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_i_ic_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_substr_s_ic_ic_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_substr_s_p_i_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_substr_s_p_ic_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_substr_s_p_i_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_substr_s_p_ic_ic(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_i_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_ic_s(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_i_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_i_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_i_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_s_ic_ic_sc(opcode_t *, PARROT_INTERP);
+ opcode_t * Parrot_replace_s_sc_ic_ic_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_index_i_s_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_index_i_sc_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_index_i_s_sc(opcode_t *, PARROT_INTERP);
@@ -1098,13 +1093,10 @@
  opcode_t * Parrot_stringinfo_i_sc_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_upcase_s_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_upcase_s_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_upcase_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_downcase_s_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_downcase_s_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_downcase_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_titlecase_s_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_titlecase_s_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_titlecase_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_join_s_s_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_join_s_sc_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_split_p_s_s(opcode_t *, PARROT_INTERP);
@@ -1117,8 +1109,6 @@
  opcode_t * Parrot_charsetname_s_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_find_charset_i_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_find_charset_i_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_trans_charset_s_i(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_trans_charset_s_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trans_charset_s_s_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trans_charset_s_sc_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trans_charset_s_s_ic(opcode_t *, PARROT_INTERP);
@@ -1129,8 +1119,6 @@
  opcode_t * Parrot_encodingname_s_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_find_encoding_i_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_find_encoding_i_sc(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_trans_encoding_s_i(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_trans_encoding_s_ic(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trans_encoding_s_s_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trans_encoding_s_sc_i(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trans_encoding_s_s_ic(opcode_t *, PARROT_INTERP);
@@ -1265,8 +1253,6 @@
  opcode_t * Parrot_find_sub_not_null_p_s(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_find_sub_not_null_p_sc(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_trap(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_set_label_p_ic(opcode_t *, PARROT_INTERP);
- opcode_t * Parrot_get_label_i_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_fetch_p_p_p_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_fetch_p_pc_p_p(opcode_t *, PARROT_INTERP);
  opcode_t * Parrot_fetch_p_p_pc_p(opcode_t *, PARROT_INTERP);

Modified: branches/ops_pct/include/parrot/packfile.h
==============================================================================
--- branches/ops_pct/include/parrot/packfile.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/packfile.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001-2009, Parrot Foundation.
+ * Copyright (C) 2001-2010, Parrot Foundation.
  */
 
 /* packfile.h
@@ -229,7 +229,7 @@
 typedef struct PackFile_FixupTable {
     PackFile_Segment             base;
     opcode_t                     fixup_count;
-    PackFile_FixupEntry        **fixups;
+    PackFile_FixupEntry         *fixups;
     PackFile_ByteCode           *code;   /* where this segment belongs to */
 } PackFile_FixupTable;
 
@@ -255,7 +255,6 @@
 
 struct PackFile_ByteCode {
     PackFile_Segment       base;
-    Prederef               prederef;    /* The predereferenced code and info */
     struct PackFile_Debug *debugs;
     PackFile_ConstTable   *const_table;
     PackFile_FixupTable   *fixups;
@@ -270,7 +269,7 @@
 typedef struct PackFile_Debug {
     PackFile_Segment        base;
     opcode_t                num_mappings;
-    PackFile_DebugFilenameMapping **mappings;
+    PackFile_DebugFilenameMapping *mappings;
     PackFile_ByteCode      *code;   /* where this segment belongs to */
 } PackFile_Debug;
 
@@ -453,11 +452,12 @@
 PARROT_EXPORT
 void PackFile_add_segment(PARROT_INTERP,
     ARGMOD(PackFile_Directory *dir),
-    ARGIN(PackFile_Segment *seg))
+    ARGMOD(PackFile_Segment *seg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dir);
+        FUNC_MODIFIES(*dir)
+        FUNC_MODIFIES(*seg);
 
 PARROT_EXPORT
 void PackFile_Annotations_add_entry(PARROT_INTERP,
@@ -501,9 +501,11 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 size_t PackFile_Constant_pack_size(PARROT_INTERP,
-    ARGIN(const PackFile_Constant *self))
+    ARGIN(const PackFile_Constant *self),
+    ARGIN(const PackFile_ConstTable *ct))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -562,8 +564,9 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void PackFile_destroy(PARROT_INTERP, ARGMOD_NULLOK(PackFile *pf))
+void PackFile_destroy(PARROT_INTERP, ARGMOD(PackFile *pf))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*pf);
 
 PARROT_EXPORT
@@ -580,7 +583,7 @@
 PARROT_CAN_RETURN_NULL
 PackFile_Segment * PackFile_find_segment(PARROT_INTERP,
     ARGIN_NULLOK(PackFile_Directory *dir),
-    ARGIN(STRING *name),
+    ARGIN(const STRING *name),
     int sub_dir)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
@@ -808,10 +811,9 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-opcode_t * PackFile_Annotations_pack(PARROT_INTERP,
+opcode_t * PackFile_Annotations_pack(SHIM_INTERP,
     ARGIN(PackFile_Segment *seg),
     ARGMOD(opcode_t *cursor))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*cursor);
@@ -856,7 +858,8 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_PackFile_Constant_pack_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(ct))
 #define ASSERT_ARGS_PackFile_Constant_unpack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(constt) \
@@ -880,7 +883,8 @@
     , PARROT_ASSERT_ARG(seg) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PackFile_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pf))
 #define ASSERT_ARGS_PackFile_find_fixup_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
@@ -976,8 +980,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self))
 #define ASSERT_ARGS_PackFile_Annotations_pack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(seg) \
+       PARROT_ASSERT_ARG(seg) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PackFile_Annotations_packed_size \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -1016,20 +1019,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/packdump.c */
 
-/* HEADERIZER BEGIN: src/fingerprint.c */
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-int PackFile_check_fingerprint(ARGIN(const void *cursor))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-size_t PackFile_write_fingerprint(NOTNULL(void *cursor))
-        __attribute__nonnull__(1);
-
-/* HEADERIZER END: src/fingerprint.c */
-
-
 /* HEADERIZER BEGIN: src/packfile/pf_items.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 

Copied: branches/ops_pct/include/parrot/platform_interface.h (from r46301, trunk/include/parrot/platform_interface.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/include/parrot/platform_interface.h	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/include/parrot/platform_interface.h)
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2003-2010, Parrot Foundation.
+ * $Id$
+ */
+
+#ifndef PARROT_PLATFORM_INTERFACE_H_GUARD
+#define PARROT_PLATFORM_INTERFACE_H_GUARD
+/*
+** platform_interface.h
+*/
+#include "parrot/config.h"
+#include "parrot/interpreter.h"
+
+/*
+** I/O:
+*/
+
+
+/*
+** Math:
+*/
+
+extern int Parrot_signbit(double x);
+#if NUMVAL_SIZE == 12
+int Parrot_signbit_l(long double x);
+#endif
+
+/*
+** Memory:
+*/
+
+void *Parrot_memalign(size_t align, size_t size);
+void *Parrot_memalign_if_possible(size_t align, size_t size);
+void Parrot_free_memalign(void *);
+
+#if !defined(PARROT_HAS_SOME_MEMALIGN)
+#  define Parrot_memalign_if_possible(a, s) malloc(s)
+#else
+#  define Parrot_memalign_if_possible(a, s) Parrot_memalign((a), (s))
+#endif
+
+#ifdef PARROT_HAS_EXEC_PROTECT
+void *mem_alloc_executable(size_t);
+void mem_free_executable(void *, size_t);
+void *mem_realloc_executable(void *, size_t, size_t);
+#else
+#  define mem_alloc_executable mem_internal_allocate
+#  define mem_free_executable(a, b) mem_internal_free(a)
+#  define mem_realloc_executable(a, b, c) mem_internal_realloc((a), (c))
+#endif
+
+/*
+** Time
+*/
+
+void Parrot_sleep(unsigned int seconds);
+void Parrot_usleep(unsigned int microseconds);
+INTVAL Parrot_intval_time(void);
+FLOATVAL Parrot_floatval_time(void);
+struct tm * Parrot_gmtime_r(const time_t *, struct tm *);
+struct tm * Parrot_localtime_r(const time_t *, struct tm *);
+char* Parrot_asctime_r(const struct tm*, char *);
+
+/*
+ * Env
+ */
+
+void Parrot_setenv(PARROT_INTERP, STRING *name, STRING *value);
+void Parrot_unsetenv(PARROT_INTERP, STRING *name);
+char * Parrot_getenv(PARROT_INTERP, STRING *name);
+
+/*
+** Dynamic Loading:
+*/
+
+/*
+ * The second argument to Parrot_dlopen below provides portable access to
+ * non-default behavior of dynamic linkers.
+ *
+ * All flags will be ignored on platforms for which they are inapplicable.
+ */
+
+/* &gen_from_enum(dlopenflags.pasm) */
+typedef enum Parrot_dlopen_enum {
+    /*
+     * Activates RTLD_GLOBAL on *NIX systems, making symbols from the newly
+     * loaded library visible to other libraries; this is usually needed if
+     * it will load libraries itself.
+     */
+    Parrot_dlopen_global_FLAG   = 0x01
+} Parrot_dlopen_flags;
+/* &end_gen */
+
+void *Parrot_dlopen(const char *filename, Parrot_dlopen_flags flags);
+const char *Parrot_dlerror(void);
+void *Parrot_dlsym(void *handle, const char *symbol);
+int Parrot_dlclose(void *handle);
+
+/*
+ * signal handling
+ */
+#ifndef PARROT_HAS_HEADER_SIGNAL
+#  define Parrot_set_sighandler(s, h)
+#endif
+
+/*
+ * system timer
+ */
+
+#ifdef PARROT_HAS_SOME_SYS_TIMER
+
+void * new_sys_timer_ms(void);
+void start_sys_timer_ms(void *handle, int ms);
+void stop_sys_timer_ms(void *handle);
+int get_sys_timer_ms(void *handle);
+
+#else
+
+#  define new_sys_timer_ms() NULL
+#  define start_sys_timer_ms(h, m)
+#  define stop_sys_timer_ms(h)
+#  define get_sys_timer_ms(h) 0
+
+#endif
+
+/*
+ * high-resolution timer support
+ */
+
+UHUGEINTVAL Parrot_hires_get_time(void);
+UINTVAL     Parrot_hires_get_tick_duration(void);
+
+
+struct parrot_string_t;
+INTVAL Parrot_Run_OS_Command(Interp*, struct parrot_string_t *);
+INTVAL Parrot_Run_OS_Command_Argv(Interp*, struct PMC *);
+
+#endif /* PARROT_PLATFORM_INTERFACE_H_GUARD */
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/include/parrot/pmc.h
==============================================================================
--- branches/ops_pct/include/parrot/pmc.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/pmc.h	Wed May  5 08:45:29 2010	(r46302)
@@ -53,6 +53,8 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_HOT
 INTVAL Parrot_pmc_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc));
 
 PARROT_EXPORT
@@ -75,6 +77,13 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PMC * Parrot_pmc_new_constant_init_int(PARROT_INTERP,
+    INTVAL base_type,
+    INTVAL init)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_pmc_new_constant_noinit(PARROT_INTERP, INTVAL base_type)
         __attribute__nonnull__(1);
 
@@ -108,7 +117,7 @@
 PMC * Parrot_pmc_reuse(PARROT_INTERP,
     ARGIN(PMC *pmc),
     INTVAL new_type,
-    UINTVAL flags)
+    NULLOK(UINTVAL flags))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -131,7 +140,7 @@
     ARGIN(PMC *pmc),
     INTVAL new_type,
     ARGIN(PMC *init),
-    UINTVAL flags)
+    NULLOK(UINTVAL flags))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(4);
@@ -148,6 +157,10 @@
 PMC * Parrot_pmc_new_temporary(PARROT_INTERP, INTVAL base_type)
         __attribute__nonnull__(1);
 
+INTVAL Parrot_pmc_type_does(PARROT_INTERP, ARGIN(STRING *role), INTVAL type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 #define ASSERT_ARGS_Parrot_pmc_create_mro __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -171,6 +184,9 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_new_constant_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_Parrot_pmc_new_constant_init_int \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_new_constant_noinit \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -203,6 +219,9 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_new_temporary __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_Parrot_pmc_type_does __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(role))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/pmc.c */
 

Modified: branches/ops_pct/include/parrot/pmc_freeze.h
==============================================================================
--- branches/ops_pct/include/parrot/pmc_freeze.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/pmc_freeze.h	Wed May  5 08:45:29 2010	(r46302)
@@ -13,6 +13,8 @@
 #ifndef PARROT_PMC_FREEZE_H_GUARD
 #define PARROT_PMC_FREEZE_H_GUARD
 
+#include "parrot/packfile.h"
+
 typedef enum {
     VISIT_HOW_PMC_TO_VISITOR     = 0x00, /* push to visitor */
     VISIT_HOW_VISITOR_TO_PMC     = 0x01, /* shift from visitor */
@@ -113,7 +115,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 STRING* Parrot_freeze(PARROT_INTERP, ARGIN(PMC *pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -121,24 +123,59 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
+STRING * Parrot_freeze_pbc(PARROT_INTERP,
+    ARGIN(PMC *pmc),
+    ARGIN(const PackFile_ConstTable *pf))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+UINTVAL Parrot_freeze_pbc_size(PARROT_INTERP,
+    ARGIN(PMC *pmc),
+    ARGIN(const PackFile_ConstTable *pf))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 UINTVAL Parrot_freeze_size(PARROT_INTERP, ARGIN(PMC *pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
+PMC * Parrot_freeze_strings(PARROT_INTERP, ARGIN(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 PMC* Parrot_thaw(PARROT_INTERP, ARGIN(STRING *image))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PMC* Parrot_thaw_constants(PARROT_INTERP, ARGIN(STRING *image))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+PMC* Parrot_thaw_pbc(PARROT_INTERP,
+    ARGIN(STRING *image),
+    ARGIN(PackFile_ConstTable *pf))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
 void Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -153,15 +190,30 @@
 #define ASSERT_ARGS_Parrot_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_Parrot_freeze_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(pf))
+#define ASSERT_ARGS_Parrot_freeze_pbc_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(pf))
 #define ASSERT_ARGS_Parrot_freeze_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_Parrot_freeze_strings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_thaw __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(image))
 #define ASSERT_ARGS_Parrot_thaw_constants __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(image))
+#define ASSERT_ARGS_Parrot_thaw_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(image) \
+    , PARROT_ASSERT_ARG(pf))
 #define ASSERT_ARGS_Parrot_visit_loop_thawfinish __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(info))

Modified: branches/ops_pct/include/parrot/pobj.h
==============================================================================
--- branches/ops_pct/include/parrot/pobj.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/pobj.h	Wed May  5 08:45:29 2010	(r46302)
@@ -55,10 +55,11 @@
 /* Given a pointer to the buffer, find the ref_count and the actual start of
    the allocated space. Setting ref_count is clunky because we avoid lvalue
    casts. */
-#define Buffer_alloc_offset sizeof (INTVAL)
+#define Buffer_alloc_offset sizeof (void*)
 #define Buffer_bufallocstart(b)  ((char *)Buffer_bufstart(b) - Buffer_alloc_offset)
-#define Buffer_bufrefcount(b)    (*(INTVAL *)Buffer_bufallocstart(b))
 #define Buffer_bufrefcountptr(b) ((INTVAL *)Buffer_bufallocstart(b))
+#define Buffer_pool(b) ((Memory_Block *)( *(INTVAL*)(Buffer_bufallocstart(b)) & ~3 ))
+#define Buffer_poolptr(b) ((Memory_Block **)Buffer_bufallocstart(b))
 
 
 typedef enum {
@@ -82,8 +83,6 @@
     const struct _charset  *charset;
 };
 
-struct _Sync;   /* forward decl */
-
 /* note that cache and flags are isomorphic with Buffer and PObj */
 struct PMC {
     Parrot_UInt     flags;
@@ -91,17 +90,11 @@
     DPOINTER       *data;
 
     PMC *_metadata;      /* properties */
-    /*
-     * PMC access synchronization for shared PMCs
-     * s. parrot/thread.h
-     */
-    struct _Sync *_synchronize;
 };
 
 #define PMC_data(pmc)                   (pmc)->data
 #define PMC_data_typed(pmc, type) (type)(pmc)->data
 #define PMC_metadata(pmc)         ((pmc)->_metadata)
-#define PMC_sync(pmc)             ((pmc)->_synchronize)
 
 #define POBJ_FLAG(n) ((UINTVAL)1 << (n))
 /* PObj flags */
@@ -142,9 +135,7 @@
     PObj_sysmem_FLAG            = POBJ_FLAG(15),
 
 /* PObj usage FLAGs, COW & GC */
-    /* Mark the contents as Copy on write */
-    PObj_COW_FLAG               = POBJ_FLAG(16),
-    /* the Buffer may have COW copies */
+    /* The Buffer allows COW copies, and may have some. */
     PObj_is_COWable_FLAG        = POBJ_FLAG(17),
     /* Private flag for the GC system. Set if the PObj's in use as
      * far as the GC's concerned */
@@ -208,10 +199,6 @@
 #define PObj_flags_SETTO(o, f) PObj_get_FLAGS(o) = (f)
 #define PObj_flags_CLEARALL(o) PObj_flags_SETTO((o), 0)
 
-#define PObj_COW_TEST(o) PObj_flag_TEST(COW, o)
-#define PObj_COW_SET(o) PObj_flag_SET(COW, o)
-#define PObj_COW_CLEAR(o) PObj_flag_CLEAR(COW, o)
-
 #define PObj_is_COWable_TEST(o) PObj_flag_TEST(is_COWable, o)
 #define PObj_is_COWable_SET(o) PObj_flag_SET(is_COWable, o)
 
@@ -302,17 +289,11 @@
 #define PObj_is_shared_CLEAR(o) PObj_flag_CLEAR(is_shared, o)
 
 /* some combinations */
-#define PObj_is_cowed_TESTALL(o) (PObj_get_FLAGS(o) & \
-            (PObj_COW_FLAG|PObj_constant_FLAG|PObj_external_FLAG))
-#define PObj_is_cowed_SETALL(o) (PObj_get_FLAGS(o) |= \
-            (PObj_COW_FLAG|PObj_constant_FLAG|PObj_external_FLAG))
-
 #define PObj_is_external_or_free_TESTALL(o) (PObj_get_FLAGS(o) & \
             (UINTVAL)(PObj_external_FLAG|PObj_on_free_list_FLAG))
 
 #define PObj_is_external_CLEARALL(o) (PObj_get_FLAGS(o) &= \
-            ~(UINTVAL)(PObj_COW_FLAG| \
-                       PObj_external_FLAG|PObj_sysmem_FLAG))
+            ~(UINTVAL)(PObj_external_FLAG|PObj_sysmem_FLAG))
 
 #define PObj_is_live_or_free_TESTALL(o) (PObj_get_FLAGS(o) & \
         (PObj_live_FLAG | PObj_on_free_list_FLAG))

Modified: branches/ops_pct/include/parrot/runcore_api.h
==============================================================================
--- branches/ops_pct/include/parrot/runcore_api.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/runcore_api.h	Wed May  5 08:45:29 2010	(r46302)
@@ -38,10 +38,6 @@
 typedef enum Parrot_runcore_flags {
     RUNCORE_REENTRANT_FLAG    = 1 << 0,
     RUNCORE_FUNC_TABLE_FLAG   = 1 << 1,
-    RUNCORE_EVENT_CHECK_FLAG  = 1 << 2,
-    RUNCORE_PREDEREF_OPS_FLAG = 1 << 3,
-    RUNCORE_CGOTO_OPS_FLAG    = 1 << 4,
-    RUNCORE_JIT_OPS_FLAG      = 1 << 5
 } Parrot_runcore_flags;
 
 
@@ -55,26 +51,6 @@
 #define PARROT_RUNCORE_FUNC_TABLE_SET(runcore) \
     Runcore_flag_SET(runcore, RUNCORE_FUNC_TABLE_FLAG)
 
-#define PARROT_RUNCORE_EVENT_CHECK_TEST(runcore) \
-    Runcore_flag_TEST(runcore, RUNCORE_EVENT_CHECK_FLAG)
-#define PARROT_RUNCORE_EVENT_CHECK_SET(runcore) \
-    Runcore_flag_SET(runcore, RUNCORE_EVENT_CHECK_FLAG)
-
-#define PARROT_RUNCORE_PREDEREF_OPS_TEST(runcore) \
-    Runcore_flag_TEST(runcore, RUNCORE_PREDEREF_OPS_FLAG)
-#define PARROT_RUNCORE_PREDEREF_OPS_SET(runcore) \
-    Runcore_flag_SET(runcore, RUNCORE_PREDEREF_OPS_FLAG)
-
-#define PARROT_RUNCORE_CGOTO_OPS_TEST(runcore) \
-    Runcore_flag_TEST(runcore, RUNCORE_CGOTO_OPS_FLAG)
-#define PARROT_RUNCORE_CGOTO_OPS_SET(runcore) \
-    Runcore_flag_SET(runcore, RUNCORE_CGOTO_OPS_FLAG)
-
-#define PARROT_RUNCORE_JIT_OPS_TEST(runcore) \
-    Runcore_flag_TEST(runcore, RUNCORE_JIT_OPS_FLAG)
-#define PARROT_RUNCORE_JIT_OPS_SET(runcore) \
-    Runcore_flag_SET(runcore, RUNCORE_JIT_OPS_FLAG)
-
 /* HEADERIZER BEGIN: src/runcore/main.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
@@ -83,6 +59,11 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 void enable_event_checking(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -97,10 +78,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 void Parrot_runcore_destroy(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -118,6 +95,9 @@
 
 #define ASSERT_ARGS_disable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lib_pmc))
 #define ASSERT_ARGS_enable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -126,9 +106,6 @@
 #define ASSERT_ARGS_Parrot_runcore_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(lib_pmc))
 #define ASSERT_ARGS_Parrot_runcore_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -147,26 +124,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-oplib_init_f get_core_op_lib_init(PARROT_INTERP,
+oplib_init_f get_core_op_lib_init(SHIM_INTERP,
     ARGIN(Parrot_runcore_t *runcore))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CAN_RETURN_NULL
-void * init_prederef(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-void load_prederef(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-void Parrot_runcore_cgoto_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-void Parrot_runcore_cgp_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
 void Parrot_runcore_debugger_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -182,22 +143,8 @@
 void Parrot_runcore_slow_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-void Parrot_runcore_switch_init(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
 #define ASSERT_ARGS_get_core_op_lib_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore))
-#define ASSERT_ARGS_init_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore))
-#define ASSERT_ARGS_load_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore))
-#define ASSERT_ARGS_Parrot_runcore_cgoto_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_runcore_cgp_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(runcore))
 #define ASSERT_ARGS_Parrot_runcore_debugger_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_exec_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -208,8 +155,6 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_slow_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_runcore_switch_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/runcore/cores.c */
 

Modified: branches/ops_pct/include/parrot/runcore_profiling.h
==============================================================================
--- branches/ops_pct/include/parrot/runcore_profiling.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/runcore_profiling.h	Wed May  5 08:45:29 2010	(r46302)
@@ -27,8 +27,8 @@
     PROFILING_EXIT_CHECK_FLAG         = 1 << 0,
     PROFILING_FIRST_LOOP_FLAG         = 1 << 1,
     PROFILING_HAVE_PRINTED_CLI_FLAG   = 1 << 2,
-    PROFILING_REPORT_ANNOTATIONS_FLAG = 1 << 3
-
+    PROFILING_REPORT_ANNOTATIONS_FLAG = 1 << 3,
+    PROFILING_CANONICAL_OUTPUT_FLAG   = 1 << 4
 } Parrot_profiling_flags;
 
 typedef enum Parrot_profiling_line {
@@ -129,6 +129,13 @@
 #define Profiling_report_annotations_CLEAR(o) \
     Profiling_flag_CLEAR(o, PROFILING_REPORT_ANNOTATIONS_FLAG)
 
+#define Profiling_canonical_output_TEST(o) \
+    Profiling_flag_TEST(o, PROFILING_CANONICAL_OUTPUT_FLAG)
+#define Profiling_canonical_output_SET(o) \
+    Profiling_flag_SET(o, PROFILING_CANONICAL_OUTPUT_FLAG)
+#define Profiling_canonical_output_CLEAR(o) \
+    Profiling_flag_CLEAR(o, PROFILING_CANONICAL_OUTPUT_FLAG)
+
 /* HEADERIZER BEGIN: src/runcore/profiling.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 

Modified: branches/ops_pct/include/parrot/string.h
==============================================================================
--- branches/ops_pct/include/parrot/string.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/string.h	Wed May  5 08:45:29 2010	(r46302)
@@ -24,7 +24,8 @@
 typedef struct parrot_string_t STRING;
 
 typedef enum Forward_flag {
-    Buffer_moved_FLAG = 1 << 0
+    Buffer_moved_FLAG   = 1 << 0,
+    Buffer_shared_FLAG  = 1 << 1
 } Forward_flags;
 
 /* String iterator */

Modified: branches/ops_pct/include/parrot/string_funcs.h
==============================================================================
--- branches/ops_pct/include/parrot/string_funcs.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/string_funcs.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,6 +1,5 @@
-#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* string_funcs.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -28,48 +27,31 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-STRING * Parrot_str_append(PARROT_INTERP,
-    ARGMOD_NULLOK(STRING *a),
-    ARGIN_NULLOK(STRING *b))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*a);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_and(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_not(PARROT_INTERP,
-    ARGIN_NULLOK(const STRING *s),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_or(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_xor(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -85,34 +67,24 @@
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_str_change_charset(PARROT_INTERP,
     ARGMOD_NULLOK(STRING *src),
-    INTVAL charset_nr,
-    ARGOUT_NULLOK(STRING *dest))
+    INTVAL charset_nr)
         __attribute__nonnull__(1)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        FUNC_MODIFIES(*src);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_str_change_encoding(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *src),
-    INTVAL encoding_nr,
-    ARGOUT_NULLOK(STRING *dest))
+    ARGMOD_NULLOK(STRING *src),
+    INTVAL encoding_nr)
         __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+        FUNC_MODIFIES(*src);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_chopn(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-void Parrot_str_chopn_inplace(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
+STRING * Parrot_str_chopn(PARROT_INTERP, ARGIN(const STRING *s), INTVAL n)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -124,24 +96,28 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-STRING * Parrot_str_compose(PARROT_INTERP, ARGIN_NULLOK(STRING *src))
+STRING * Parrot_str_compose(PARROT_INTERP, ARGIN_NULLOK(const STRING *src))
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_concat(PARROT_INTERP,
     ARGIN_NULLOK(STRING *a),
-    ARGIN_NULLOK(STRING *b),
-    UINTVAL Uflags)
+    ARGIN_NULLOK(STRING *b))
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-STRING * Parrot_str_copy(PARROT_INTERP, ARGMOD(STRING *s))
+STRING * Parrot_str_copy(PARROT_INTERP, ARGIN(const STRING *s))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
+PARROT_PURE_FUNCTION
+PARROT_CANNOT_RETURN_NULL
+const char * Parrot_str_cstring(SHIM_INTERP, ARGIN(const STRING *str))
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -150,11 +126,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_downcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_equal(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
@@ -177,7 +148,7 @@
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_find_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN_NULLOK(STRING *s),
+    ARGIN_NULLOK(const STRING *s),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1);
@@ -196,7 +167,7 @@
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_find_not_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN_NULLOK(STRING *s),
+    ARGIN_NULLOK(const STRING *s),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1);
@@ -214,7 +185,7 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_str_free_cstring(ARGIN_NULLOK(char *p));
+void Parrot_str_free_cstring(ARGFREE(char *p));
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -250,6 +221,8 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
 PARROT_EXPORT
@@ -262,19 +235,16 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-PARROT_IGNORABLE_RESULT
-INTVAL /*@alt void@*/
-Parrot_str_length(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
+PARROT_WARN_UNUSED_RESULT
+INTVAL Parrot_str_length(SHIM_INTERP, ARGIN(const STRING *s))
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_new(PARROT_INTERP,
-    ARGIN_NULLOK(const char * const buffer),
+    ARGIN_NULLOK(const char *buffer),
     const UINTVAL len)
         __attribute__nonnull__(1);
 
@@ -286,14 +256,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING * Parrot_str_new_COW(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
@@ -332,8 +294,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_pin(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
+void Parrot_str_pin(SHIM_INTERP, ARGMOD(STRING *s))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*s);
 
@@ -347,46 +308,19 @@
 
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING * Parrot_str_replace(PARROT_INTERP,
-    ARGIN(STRING *src),
+    ARGIN(const STRING *src),
     INTVAL offset,
     INTVAL length,
-    ARGIN(STRING *rep),
-    ARGOUT_NULLOK(STRING **d))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*d);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_resize(PARROT_INTERP, ARGMOD(STRING *s), UINTVAL addlen)
+    ARGIN(const STRING *rep))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_reuse_COW(SHIM_INTERP,
-    ARGMOD(STRING *s),
-    ARGOUT(STRING *d))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*s)
-        FUNC_MODIFIES(*d);
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING * Parrot_str_set(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *dest),
-    ARGMOD(STRING *src))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*src);
+        __attribute__nonnull__(5);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
+PARROT_CAN_RETURN_NULL
 PMC* Parrot_str_split(PARROT_INTERP,
     ARGIN_NULLOK(STRING *delim),
     ARGIN_NULLOK(STRING *str))
@@ -396,13 +330,10 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * Parrot_str_substr(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *src),
+    ARGIN_NULLOK(const STRING *src),
     INTVAL offset,
-    INTVAL length,
-    ARGOUT_NULLOK(STRING **d),
-    int replace_dest)
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*d);
+    INTVAL length)
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -411,11 +342,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_titlecase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 char * Parrot_str_to_cstring(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
@@ -460,29 +386,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_upcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-void Parrot_str_write_COW(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CANNOT_RETURN_NULL
-const char * Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-UINTVAL string_capacity(SHIM_INTERP, ARGIN(const STRING *s))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * string_chr(PARROT_INTERP, UINTVAL character)
@@ -496,9 +399,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-INTVAL STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING * string_make(PARROT_INTERP,
@@ -520,13 +420,15 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 INTVAL string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-INTVAL string_ord(PARROT_INTERP, ARGIN_NULLOK(const STRING *s), INTVAL idx)
-        __attribute__nonnull__(1);
+INTVAL string_ord(PARROT_INTERP, ARGIN(const STRING *s), INTVAL idx)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -543,6 +445,12 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
+STRING* Parrot_str_clone(PARROT_INTERP, ARGIN(const STRING *s))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_from_int_base(PARROT_INTERP,
     ARGOUT(char *tc),
     HUGEINTVAL num,
@@ -562,8 +470,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*tc);
 
-#define ASSERT_ARGS_Parrot_str_append __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_bitwise_and __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_bitwise_not __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -582,9 +488,6 @@
 #define ASSERT_ARGS_Parrot_str_chopn __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_Parrot_str_chopn_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_compose __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -594,10 +497,10 @@
 #define ASSERT_ARGS_Parrot_str_copy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_Parrot_str_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_Parrot_str_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_downcase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_escape __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -635,16 +538,12 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ar))
 #define ASSERT_ARGS_Parrot_str_length __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_new __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_new_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(buffer))
-#define ASSERT_ARGS_Parrot_str_new_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_new_from_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(buffer))
@@ -657,8 +556,7 @@
 #define ASSERT_ARGS_Parrot_str_not_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_pin __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_repeat __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
@@ -666,23 +564,12 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src) \
     , PARROT_ASSERT_ARG(rep))
-#define ASSERT_ARGS_Parrot_str_resize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_Parrot_str_reuse_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s) \
-    , PARROT_ASSERT_ARG(d))
-#define ASSERT_ARGS_Parrot_str_set __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_Parrot_str_split __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_substr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_titlecase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_to_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_to_hashval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -700,21 +587,11 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_upcase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_write_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_Parrot_string_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_string_capacity __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_increment __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #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 = (\
@@ -722,11 +599,15 @@
 #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(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) \
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_from_int_base __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(tc))

Modified: branches/ops_pct/include/parrot/string_primitives.h
==============================================================================
--- branches/ops_pct/include/parrot/string_primitives.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/string_primitives.h	Wed May  5 08:45:29 2010	(r46302)
@@ -36,12 +36,11 @@
 PARROT_EXPORT
 Parrot_UInt4 string_unescape_one(PARROT_INTERP,
     ARGMOD(UINTVAL *offset),
-    ARGMOD(STRING *string))
+    ARGIN(const STRING *string))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*offset)
-        FUNC_MODIFIES(*string);
+        FUNC_MODIFIES(*offset);
 
 #define ASSERT_ARGS_Parrot_char_digit_value __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_str_dup_remove_quotes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/include/parrot/sub.h
==============================================================================
--- branches/ops_pct/include/parrot/sub.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/sub.h	Wed May  5 08:45:29 2010	(r46302)
@@ -2,14 +2,9 @@
  *  Copyright (C) 2001-2008, Parrot Foundation.
  *  SVN Info
  *     $Id$
- *  Overview:
  *  Data Structure and Algorithms:
  *     Subroutine, coroutine, closure and continuation structures
  *     and related routines.
- *  History:
- *     Initial version by Melvin on on 2002/06/6
- *  Notes:
- *  References:
  */
 
 #ifndef PARROT_SUB_H_GUARD
@@ -36,9 +31,6 @@
     SUB_FLAG_PF_IMMEDIATE = PObj_private6_FLAG,
     SUB_FLAG_PF_POSTCOMP  = PObj_private7_FLAG,
 
-    /* [temporary expedient.  -- rgr, 13-Jul-08.] */
-    SUB_FLAG_NEWCLOSURE   = SUB_FLAG_PF_IMMEDIATE,
-
     SUB_FLAG_PF_MASK      = SUB_FLAG_PF_ANON
                           | SUB_FLAG_PF_MAIN
                           | SUB_FLAG_PF_LOAD
@@ -64,6 +56,7 @@
 typedef enum {
     SUB_COMP_FLAG_BIT_0     = SUB_FLAG(0),
     SUB_COMP_FLAG_BIT_1     = SUB_FLAG(1),
+    SUB_COMP_FLAG_VTABLE    = SUB_COMP_FLAG_BIT_1,
     SUB_COMP_FLAG_BIT_2     = SUB_FLAG(2),
     SUB_COMP_FLAG_METHOD    = SUB_COMP_FLAG_BIT_2,
     SUB_COMP_FLAG_BIT_3     = SUB_FLAG(3),
@@ -76,6 +69,7 @@
     SUB_COMP_FLAG_BIT_10    = SUB_FLAG(10),
     SUB_COMP_FLAG_PF_INIT   = SUB_COMP_FLAG_BIT_10,
     SUB_COMP_FLAG_BIT_11    = SUB_FLAG(11),
+    SUB_COMP_FLAG_NSENTRY   = SUB_COMP_FLAG_BIT_11,
     SUB_COMP_FLAG_BIT_12    = SUB_FLAG(12),
     SUB_COMP_FLAG_BIT_13    = SUB_FLAG(13),
     SUB_COMP_FLAG_BIT_14    = SUB_FLAG(14),
@@ -95,7 +89,7 @@
     SUB_COMP_FLAG_BIT_28    = SUB_FLAG(28),
     SUB_COMP_FLAG_BIT_29    = SUB_FLAG(29),
     SUB_COMP_FLAG_BIT_30    = SUB_FLAG(30),
-    SUB_COMP_FLAG_MASK      = 0x00000404
+    SUB_COMP_FLAG_MASK      = SUB_COMP_FLAG_VTABLE | SUB_COMP_FLAG_METHOD | SUB_COMP_FLAG_NSENTRY | SUB_COMP_FLAG_PF_INIT
 } sub_comp_flags_enum;
 #undef SUB_FLAG
 
@@ -170,13 +164,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-PMC * new_ret_continuation_pmc(PARROT_INTERP,
-    ARGIN_NULLOK(opcode_t *address))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
 void Parrot_capture_lex(PARROT_INTERP, ARGMOD(PMC *sub_pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -217,11 +204,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void invalidate_retc_context(PARROT_INTERP, ARGMOD(PMC *cont))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*cont);
-
 void mark_context_start(void);
 void Parrot_continuation_check(PARROT_INTERP, ARGIN(const PMC *pmc))
         __attribute__nonnull__(1)
@@ -260,8 +242,6 @@
     ARGIN_NULLOK(opcode_t *pc))
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_new_ret_continuation_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_capture_lex __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_pmc))
@@ -281,9 +261,6 @@
 #define ASSERT_ARGS_parrot_new_closure __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_pmc))
-#define ASSERT_ARGS_invalidate_retc_context __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cont))
 #define ASSERT_ARGS_mark_context_start __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_continuation_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \

Modified: branches/ops_pct/include/parrot/thr_windows.h
==============================================================================
--- branches/ops_pct/include/parrot/thr_windows.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/thr_windows.h	Wed May  5 08:45:29 2010	(r46302)
@@ -119,13 +119,13 @@
 
 typedef void (*Cleanup_Handler)(void *);
 
-#ifndef HAVE_STRUCT_TIMESPEC
-#  define HAVE_STRUCT_TIMESPEC
+#ifndef _TIMESPEC_DEFINED
+#  define _TIMESPEC_DEFINED
 struct timespec {
     time_t tv_sec;
     long tv_nsec;
 };
-#endif /* HAVE_STRUCT_TIMESPEC */
+#endif /* _TIMESPEC_DEFINED */
 
 #endif /* PARROT_THR_WINDOWS_H_GUARD */
 

Modified: branches/ops_pct/include/parrot/thread.h
==============================================================================
--- branches/ops_pct/include/parrot/thread.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/thread.h	Wed May  5 08:45:29 2010	(r46302)
@@ -147,12 +147,6 @@
 /* TODO use thread pools instead */
 VAR_SCOPE Shared_gc_info *shared_gc_info;
 
-typedef struct _Sync {
-    Parrot_Interp owner;                /* that interpreter, that owns
-                                           the arena, where the PMC is in */
-    Parrot_mutex pmc_lock;              /* for wr access to PMCs content */
-} Sync;
-
 /* HEADERIZER BEGIN: src/thread.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
@@ -164,6 +158,12 @@
 void Parrot_shared_gc_unblock(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PMC * pt_thread_create(PARROT_INTERP, INTVAL type, INTVAL clone_flags)
+        __attribute__nonnull__(1);
+
 void pt_add_to_interpreters(PARROT_INTERP,
     ARGIN_NULLOK(Parrot_Interp new_interp))
         __attribute__nonnull__(1);
@@ -194,51 +194,29 @@
 void pt_suspend_self_for_gc(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+int pt_thread_create_run(PARROT_INTERP,
+    INTVAL type,
+    INTVAL clone_flags,
+    ARGIN(PMC *sub),
+    ARGIN_NULLOK(PMC *arg))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(4);
+
 void pt_thread_detach(UINTVAL tid);
 PARROT_CAN_RETURN_NULL
-PMC* pt_thread_join(NOTNULL(Parrot_Interp parent), UINTVAL tid)
+PMC* pt_thread_join(ARGIN(Parrot_Interp parent), UINTVAL tid)
         __attribute__nonnull__(1);
 
 void pt_thread_kill(UINTVAL tid);
 void pt_thread_prepare_for_run(Parrot_Interp d, NULLOK(Parrot_Interp s));
 int pt_thread_run(PARROT_INTERP,
-    ARGOUT(PMC *dest_interp),
+    ARGMOD(PMC *thread_interp_pmc),
     ARGIN(PMC *sub),
     ARGIN_NULLOK(PMC *arg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dest_interp);
-
-int pt_thread_run_1(PARROT_INTERP,
-    ARGOUT(PMC* dest_interp),
-    ARGIN(PMC* sub),
-    ARGIN(PMC *arg))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(* dest_interp);
-
-int pt_thread_run_2(PARROT_INTERP,
-    ARGOUT(PMC* dest_interp),
-    ARGIN(PMC* sub),
-    ARGIN(PMC *arg))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(* dest_interp);
-
-int pt_thread_run_3(PARROT_INTERP,
-    ARGOUT(PMC* dest_interp),
-    ARGIN(PMC* sub),
-    ARGIN(PMC *arg))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(* dest_interp);
+        FUNC_MODIFIES(*thread_interp_pmc);
 
 void pt_thread_wait_with(PARROT_INTERP, ARGMOD(Parrot_mutex *mutex))
         __attribute__nonnull__(1)
@@ -260,6 +238,8 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_shared_gc_unblock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_thread_create __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pt_add_to_interpreters __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pt_clone_code __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -279,6 +259,9 @@
     , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_pt_suspend_self_for_gc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_thread_create_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(sub))
 #define ASSERT_ARGS_pt_thread_detach __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_thread_join __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(parent))
@@ -286,23 +269,8 @@
 #define ASSERT_ARGS_pt_thread_prepare_for_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_thread_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(dest_interp) \
+    , PARROT_ASSERT_ARG(thread_interp_pmc) \
     , PARROT_ASSERT_ARG(sub))
-#define ASSERT_ARGS_pt_thread_run_1 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(dest_interp) \
-    , PARROT_ASSERT_ARG(sub) \
-    , PARROT_ASSERT_ARG(arg))
-#define ASSERT_ARGS_pt_thread_run_2 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(dest_interp) \
-    , PARROT_ASSERT_ARG(sub) \
-    , PARROT_ASSERT_ARG(arg))
-#define ASSERT_ARGS_pt_thread_run_3 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(dest_interp) \
-    , PARROT_ASSERT_ARG(sub) \
-    , PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_pt_thread_wait_with __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mutex))

Modified: branches/ops_pct/include/parrot/vtables.h
==============================================================================
--- branches/ops_pct/include/parrot/vtables.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/include/parrot/vtables.h	Wed May  5 08:45:29 2010	(r46302)
@@ -1,13 +1,9 @@
 /* vtables.h
- *  Copyright (C) 2001-2003, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
  *     Vtable manipulation code. Not to be confused with vtable.h
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
  */
 
 #ifndef PARROT_VTABLES_H_GUARD
@@ -26,10 +22,9 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_destroy_vtable(PARROT_INTERP, ARGMOD(VTABLE *vtable))
+void Parrot_destroy_vtable(PARROT_INTERP, ARGFREE_NOTNULL(VTABLE *vtable))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*vtable);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 void Parrot_initialize_core_vtables(PARROT_INTERP)

Modified: branches/ops_pct/lib/Parrot/Configure/Options/Conf.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Configure/Options/Conf.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Configure/Options/Conf.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -91,7 +91,6 @@
    --opcode=(type)      Use the given type for opcodes
    --ops=(files)        Use the given ops files
 
-   --cgoto=0            Don't build cgoto core - recommended when short of mem
    --jitcapable         Use JIT
    --execcapable        Use JIT to emit a native executable
    --without-threads    Build parrot without thread support
@@ -99,12 +98,11 @@
 
 External Library Options:
 
-   --without-crypto     Build parrot without crypto support (libssl)
-   --without-gdbm       Build parrot without GDBM support
    --without-gettext    Build parrot without gettext support
    --without-gmp        Build parrot without GMP support
    --without-opengl     Build parrot without OpenGL support (GL/GLU/GLUT)
    --without-pcre       Build parrot without pcre support
+   --without-zlib       Build parrot without zlib support
 
 ICU Options:
 
@@ -157,6 +155,8 @@
     --oldincludedir=DIR   C header files for non-gcc [/usr/include]
     --infodir=DIR         info documentation [PREFIX/info]
     --mandir=DIR          man documentation [PREFIX/man]
+    --pkgconfigdir=DIR    subdirectory of <libdir> for pkgconfig
+                              [<libdir>/pkgconfig/<version>]
 
 EOT
     return 1;

Modified: branches/ops_pct/lib/Parrot/Configure/Options/Conf/Shared.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Configure/Options/Conf/Shared.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Configure/Options/Conf/Shared.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -15,7 +15,6 @@
     cc
     ccflags
     ccwarn
-    cgoto
     configure_trace
     cxx
     darwin_no_fink
@@ -61,6 +60,7 @@
     ops
     optimize
     parrot_is_shared
+    pkgconfigdir
     prefix
     profile
     sbindir
@@ -79,6 +79,7 @@
     without-opengl
     without-pcre
     without-threads
+    without-zlib
     yacc
 };
 

Modified: branches/ops_pct/lib/Parrot/Configure/Options/Test/Prepare.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Configure/Options/Test/Prepare.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Configure/Options/Test/Prepare.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -78,6 +78,8 @@
                 ? qq|$secondlevel-$number|
                 : $number;
             $steps_tests_complex{$category}{$class}{$final}++;
+
+            return;
         }
     } # END wanted()
     finddepth( \&wanted, ( $steps_dir ) );

Modified: branches/ops_pct/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Configure/Step/List.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Configure/Step/List.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -41,7 +41,6 @@
     auto::isreg
     auto::jit
     auto::frames
-    auto::cgoto
     auto::inline
     auto::gc
     auto::memalign
@@ -52,10 +51,9 @@
     auto::thread
     auto::gmp
     auto::readline
-    auto::gdbm
     auto::pcre
     auto::opengl
-    auto::crypto
+    auto::zlib
     auto::gettext
     auto::snprintf
     auto::perldoc
@@ -65,7 +63,6 @@
     auto::icu
     gen::config_h
     gen::core_pmcs
-    gen::crypto
     gen::opengl
     gen::makefiles
     gen::platform

Modified: branches/ops_pct/lib/Parrot/Distribution.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Distribution.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Distribution.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2009, Parrot Foundation.
+# Copyright (C) 2004-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -248,13 +248,13 @@
                 # and make a hash out of the directories
                 my %dirs =
                     map { ( ( File::Spec->splitpath($_) )[1] => 1 ) }
-                    grep { m|(?i)(?:$filter_ext)| } $self->_dist_files;
+                    grep { m/(?i)(?:$filter_ext)/ } $self->_dist_files;
 
                 # Filter out ignored directories
                 # and return the results
                 my @dirs = sort
                     map  { $self->directory_with_name($_) }
-                    grep { !m|(?:$filter_dir)| }
+                    grep { !m/(?:$filter_dir)/ }
                     keys %dirs;
                 return @dirs;
             };
@@ -281,7 +281,7 @@
                     }
                 }
 
-                print 'WARNING: ' . __FILE__ . ':' . __LINE__ . ' File not found: ' . $name . "\n";
+                print '# WARNING: ' . __FILE__ . ':' . __LINE__ . ' File not found: ' . $name . "\n";
                 return;
             };
 
@@ -293,7 +293,7 @@
                 # and return a sorted list of filenames
                 my @files = sort
                     map  { $self->file_with_name($_) }
-                    grep { m|(?i)(?:$filter_ext)| }
+                    grep { m/(?i)(?:$filter_ext)/ }
                     $self->_dist_files;
                 return @files;
             };
@@ -334,7 +334,7 @@
     # and return a sorted list of filenames
     my @files = sort
         map  { $self->file_with_name($_) }
-        grep { m|[/\\]makefiles[/\\][a-z]+\.in$| }
+        grep { m{[/\\]makefiles[/\\][a-z]+\.in$} }
         $self->_dist_files;
     return @files;
 }
@@ -582,11 +582,9 @@
 
 =cut
 
-{
-    sub is_pir_exemption {
-        my ( $self, $file ) = @_;
-        $file->path =~ m{/ext/};
-    }
+sub is_pir_exemption {
+    my ( $self, $file ) = @_;
+    return $file->path =~ m{/ext/};
 }
 
 
@@ -618,7 +616,7 @@
     my $line = <$file_handle>;
     close $file_handle;
 
-    if ( $line && $line =~ /^#!.*parrot/ ) {
+    if ( $line && $line =~ /^#!.*parrot(?:\s|$)/ ) {
         # something that specifies a pir or pbc is probably a HLL, skip it
         return 0 if $line =~ /\.(?:pir|pbc)/;
         return 1;

Modified: branches/ops_pct/lib/Parrot/Docs/Section/Compilers.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Docs/Section/Compilers.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Docs/Section/Compilers.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -45,7 +45,7 @@
         $self->new_group( 'PGE',  'the Parrot Grammar Engine',                 'compilers/pge' ),
         $self->new_group( 'TGE',  'the Tree Grammar Engine',                   'compilers/tge' ),
         $self->new_group( 'PCT',  'Parrot Compiler Toolkit',    'compilers/pct' ),
-        $self->new_group( 'JSON', 'JavaScript Object Notation', 'compilers/json' ),
+        $self->new_group( 'JSON', 'JavaScript Object Notation', 'compilers/data_json' ),
         $self->new_group( 'PIRC', 'a PIR Compiler',             'compilers/pirc' ),
         $self->new_group( 'NCIGEN', 'Native Call Interface Generator', 'compilers/ncigen' ),
     );

Modified: branches/ops_pct/lib/Parrot/H2inc.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/H2inc.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/H2inc.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -44,17 +44,17 @@
 
 sub parse_file {
     my ( $in_file, $out_file) = @_;
-    $out_file =~ s/\\/\//g; # transform Windows backslash
+    $out_file =~ s{\\}{/}g; # transform Windows backslash
 
-    my ( @directives, %values, $last_val, $cur, $or_continues );
+    my ( %values, $last_val, $cur, $or_continues );
     open my $fh, '<', $in_file or die "Can't open $in_file: $!\n";
     while ( my $line = <$fh> ) {
         if (
-            $line =~ m!
+            $line =~ m{
             &gen_from_(enum|def) \( ( [^)]* ) \)
             (?: \s+ prefix \( (\w+) \) )?
             (?: \s+ subst \( (s/.*?/.*?/[eig]?) \) )?
-            !x
+            }x
             )
         {
             $cur and die "Missing '&end_gen' in $in_file\n";
@@ -131,7 +131,7 @@
                 $values{$k} = $last_val = $v;
                 push @{ $cur->{defs} }, [ $k, $v ];
             }
-            elsif ( $line =~ m!^\s*(\w+)\s*(?:,\s*)?(?:/\*|$)! ) {
+            elsif ( $line =~ m{^\s*(\w+)\s*(?:,\s*)?(?:/\*|$)} ) {
                 my $k = $1;
                 my $v = $values{$k} = ++$last_val;
                 push @{ $cur->{defs} }, [ $k, $v ];
@@ -196,7 +196,7 @@
     my $keylen = (sort { $a <=> $b } map { length($_->[0]) } @_ )[-1] ;
     my $vallen = (sort { $a <=> $b } map { length($_->[1]) } @_ )[-1] ;
 
-    map {sprintf ".macro_const %-${keylen}s %${vallen}s", $_->[0], $_->[1]} @_;
+    return map {sprintf ".macro_const %-${keylen}s %${vallen}s", $_->[0], $_->[1]} @_;
 }
 
 =head2 C<const_to_perl()>
@@ -221,7 +221,7 @@
 
     my $keylen = (sort { $a <=> $b } map { length($_->[0]) } @_ )[-1] ;
 
-    map {sprintf "use constant %-${keylen}s => %s;", $_->[0], $_->[1]} @_;
+    return map {sprintf "use constant %-${keylen}s => %s;", $_->[0], $_->[1]} @_;
 }
 
 =head2 C<transform_name()>
@@ -271,7 +271,7 @@
 sub prepend_prefix {
     my $prefix = shift;
 
-    transform_name( sub { $prefix . $_[0] }, @_ );
+    return transform_name( sub { $prefix . $_[0] }, @_ );
 }
 
 =head2 C<generate_text()>
@@ -335,7 +335,7 @@
 sub print_generated_file {
     my $args = shift;
     open my $out_fh, '>', $args->{out} or die "Can't open $args->{out}: $!\n";
-    print $out_fh <<"EOF";
+    print {$out_fh} <<"EOF";
 # DO NOT EDIT THIS FILE.
 #
 # This file is generated automatically from
@@ -346,6 +346,8 @@
 $args->{gen}
 EOF
     close $out_fh;
+
+    return;
 }
 
 1;

Modified: branches/ops_pct/lib/Parrot/Harness/DefaultTests.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Harness/DefaultTests.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Harness/DefaultTests.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -77,6 +77,7 @@
     t/perl/*.t
 );
 
+
 # library tests are run unless --runcore-tests or --core-tests is present.
 @library_tests = qw(
     t/compilers/pct/*.t
@@ -84,8 +85,10 @@
     t/compilers/pge/p5regex/*.t
     t/compilers/pge/perl6regex/*.t
     t/compilers/tge/*.t
+    t/compilers/data_json/*.t
     t/library/*.t
     t/tools/*.t
+    t/profiling/*.t
 );
 
 # configure tests are tests to be run at the beginning of 'make test';

Modified: branches/ops_pct/lib/Parrot/Harness/Options.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Harness/Options.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Harness/Options.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -88,10 +88,7 @@
 
     my %remap      = (
         'j' => '-runcore=fast',
-        'g' => '-runcore=cgoto',
         'G' => '-runcore=gcdebug',
-        'C' => '-runcore=cgp',
-        'S' => '-runcore=switch',
         'b' => '-runcore=bounds',
         'f' => '-runcore=fast',
         'r' => '-run-pbc',
@@ -113,9 +110,6 @@
     print <<"EOF";
 perl t/harness [options] [testfiles]
     -w         ... warnings on
-    -g         ... run CGoto
-    -C         ... run CGP
-    -S         ... run Switched
     -b         ... run bounds checked
     --run-exec ... run exec core
     -f         ... run fast core

Modified: branches/ops_pct/lib/Parrot/Harness/Smoke.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Harness/Smoke.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Harness/Smoke.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -116,6 +116,7 @@
           . '/app/projects/process_add_report/'
           . $project_id;
     my $ua = LWP::UserAgent->new();
+    $ua->timeout(360);
     $ua->agent( 'Parrot::Harness::Smoke' );
     $ua->env_proxy();
 

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

Modified: branches/ops_pct/lib/Parrot/Manifest.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Manifest.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Manifest.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 # $Id$
-# Copyright (C) 2007, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 
 =head1 NAME
 
@@ -68,7 +68,7 @@
     my %data = (
         id         => '$' . 'Id$',
         time       => scalar gmtime,
-        cmd        => -d '.svn' ? 'svn' : 'svk',
+        cmd        => 'svn',
         script     => $argsref->{script},
         file       => $argsref->{file}      ? $argsref->{file}      : q{MANIFEST},
         skip       => $argsref->{skip}      ? $argsref->{skip}      : q{MANIFEST.SKIP},
@@ -201,7 +201,8 @@
 #
 # See below for documentation on the format of this file.
 #
-# See docs/submissions.pod on how to recreate this file after SVN
+# See docs/submissions.pod and the documentation in
+# $self->{script} on how to recreate this file after SVN
 # has been told about new or deleted files.
 END_HEADER
 
@@ -241,8 +242,6 @@
             : m[^lib/Parrot/]                 ? '[devel]lib'
             : m[^runtime/]                    ? '[library]'
             : m[^src/pmc/.*\.h]               ? '[devel]include'
-            : m[^src/pmc/.*\.pmc]             ? '[devel]src'
-            : m[^src/dynpmc/.*\.pmc]          ? '[devel]src'
             : m[^runtime/parrot/library/PCT]  ? '[pct]'
             : m[^runtime/parrot/library/PCT]  ? '[pge]'
             : m[^runtime/parrot/library/TGE]  ? '[tge]'

Modified: branches/ops_pct/lib/Parrot/OpTrans.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpTrans.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/OpTrans.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -16,15 +16,9 @@
 The subclass hierarchy is as follows:
 
     OpTrans
-       |___________
-       |           |
-       C         CGoto
-       |           |
-    CPrederef      |
-       | |         |
-       | |_________|
-       |           |
-    CSwitch       CGP
+       |
+       |
+       C
 
 =head2 Class Methods
 
@@ -91,11 +85,6 @@
     die ref($self) . " doesn't have core_type()";
 }
 
-=item C<core_prefix()>
-
-Implemented in subclasses to return a short prefix indicating the core
-type used to individuate core function names.
-
 =item C<run_core_func_decl($base)>
 
 Optionally implemented in subclasses to return the C code for the run
@@ -222,14 +211,6 @@
 
 =item C<Parrot::OpTrans::C>
 
-=item C<Parrot::OpTrans::CGP>
-
-=item C<Parrot::OpTrans::CGoto>
-
-=item C<Parrot::OpTrans::CPrederef>
-
-=item C<Parrot::OpTrans::CSwitch>
-
 =back
 
 =cut

Modified: branches/ops_pct/lib/Parrot/OpTrans/C.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpTrans/C.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/OpTrans/C.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2006, Parrot Foundation.
+# Copyright (C) 2002-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -33,16 +33,6 @@
     return 'PARROT_FUNCTION_CORE';
 }
 
-=item C<core_prefix()>
-
-Returns an empty string.
-
-=cut
-
-sub core_prefix {
-    return "";
-}
-
 =item C<defines()>
 
 Returns the C C<#define> macros for register access etc.
@@ -68,7 +58,7 @@
 
 sub add_body_prelude {
     my ($self) = @_;
-    return "    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);\n";
+    return "    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);\n";
 }
 
 =item C<gen_goto($where)>
@@ -173,14 +163,6 @@
 
 =item C<Parrot::OpTrans>
 
-=item C<Parrot::OpTrans::CGP>
-
-=item C<Parrot::OpTrans::CGoto>
-
-=item C<Parrot::OpTrans::CPrederef>
-
-=item C<Parrot::OpTrans::CSwitch>
-
 =back
 
 =cut

Deleted: branches/ops_pct/lib/Parrot/OpTrans/CGP.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpTrans/CGP.pm	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,162 +0,0 @@
-# Copyright (C) 2002, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::OpTrans::CGP - C Goto Predereferenced Transform
-
-=head1 DESCRIPTION
-
-C<Parrot::OpTrans::CGP> inherits from C<Parrot::OpTrans::CPrederef> and
-C<Parrot::OpTrans::CGoto> to provide predereferenced register addressing
-and C C<goto> run loop.
-
-=head2 Instance Methods
-
-=over 4
-
-=cut
-
-package Parrot::OpTrans::CGP;
-
-use strict;
-use warnings;
-
-use base qw( Parrot::OpTrans::CPrederef Parrot::OpTrans::CGoto );
-
-=item C<core_type()>
-
-Returns C<PARROT_CGP_CORE>.
-
-=cut
-
-sub core_type {
-    return 'PARROT_CGP_CORE';
-}
-
-=item C<suffix()>
-
-The suffix is C<'_cgp'>.
-
-=cut
-
-sub suffix {
-    return "_cgp";
-}
-
-=item C<core_prefix()>
-
-The core prefix is C<'cgp_'>.
-
-=cut
-
-sub core_prefix {
-    return "cgp_";
-}
-
-=item C<defines()>
-
-Returns the C C<#define> macros required by the ops.
-
-=cut
-
-sub defines {
-    my ( $self, $pred_def );
-    $self     = shift;
-    $pred_def = $self->SUPER::defines();
-    my $type = __PACKAGE__;
-    return $pred_def . <<END;
-/* defines - $0 -> $type */
-#  define opcode_to_prederef(i, op)   \\
-     (opcode_t *) (op   - Parrot_pcc_get_pred_offset(interp, i->ctx))
-END
-}
-
-=item C<goto_address($address)>
-
-Transforms the C<goto ADDRESS($address)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_address {
-    my ( $self, $addr ) = @_;
-
-    #print STDERR "pbcc: map_ret_abs($addr)\n";
-
-    if ( $addr eq '0' ) {
-        return "return (0);";
-    }
-    else {
-        return "if ($addr == 0)
-          return 0;
-   Parrot_cx_handle_tasks(interp, interp->scheduler);
-   _reg_base = (char*)Parrot_pcc_get_regs_ni(interp, CURRENT_CONTEXT(interp))->regs_i;
-   goto **(void **)(cur_opcode = opcode_to_prederef(interp, $addr))";
-    }
-}
-
-=item C<goto_offset($offset)>
-
-Transforms the C<goto OFFSET($offset)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_offset {
-    my ( $self, $offset ) = @_;
-
-    # this must be a single expression, in case it's in a single-statement if
-    return "do {\nParrot_pcc_set_pc(interp, CURRENT_CONTEXT(interp), CUR_OPCODE + $offset);\n"
-    .      "goto **(void **)(cur_opcode += $offset);\n} while (1)";
-}
-
-sub run_core_func_start {
-    my $type = __PACKAGE__;
-    return <<END_C;
-/* run_core_func_start - $0 -> $type */
-    /* at least gcc 2.95.2 miscompiles set_args - %edi
-     * is used for the vtable call and _reg_base is clobbered
-     * # if 1191 := PARROT_OP_set_args_pc
-     * (gdb) disas l_ops_addr[1191] l_ops_addr[1192]
-     */
-#if defined(__GNUC__) && defined(I386) && defined(PARROT_CGP_REGS)
-    register opcode_t *   cur_opcode __asm__ ("esi") = cur_op;
-    register char *   _reg_base   __asm__ ("edi");
-#else
-    opcode_t *cur_opcode = cur_op;
-    char * _reg_base;
-#endif
-
-    static void *const l_ops_addr[] = {
-END_C
-}
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::OpTrans>
-
-=item C<Parrot::OpTrans::C>
-
-=item C<Parrot::OpTrans::CGoto>
-
-=item C<Parrot::OpTrans::CPrederef>
-
-=item C<Parrot::OpTrans::CSwitch>
-
-=back
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/ops_pct/lib/Parrot/OpTrans/CGoto.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpTrans/CGoto.pm	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,368 +0,0 @@
-# Copyright (C) 2002-2007, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::OpTrans::CGoto - CGoto Transform
-
-=head1 DESCRIPTION
-
-Used to generate C code from Parrot operations.
-
-C<Parrot::OpTrans::CGoto> inherits from C<Parrot::OpTrans> to provide a
-C C<goto> run loop.
-
-=head2 Instance Methods
-
-=over 4
-
-=cut
-
-package Parrot::OpTrans::CGoto;
-
-use strict;
-use warnings;
-
-use base qw( Parrot::OpTrans );
-
-=item C<suffix()>
-
-The suffix is C<'_cg'>.
-
-=cut
-
-sub suffix {
-    return "_cg";
-}
-
-=item C<core_prefix()>
-
-The core prefix is C<'cg_'>.
-
-=cut
-
-sub core_prefix {
-    return "cg_";
-}
-
-=item C<core_type()>
-
-The core type is C<PARROT_CGOTO_CORE>.
-
-=cut
-
-sub core_type {
-    return 'PARROT_CGOTO_CORE';
-}
-
-=item C<defines()>
-
-Returns the C C<#define> macros required by the ops.
-
-=cut
-
-sub defines {
-    my $type = __PACKAGE__;
-    return <<END;
-/* defines - $0 -> $type */
-#undef CONST
-#define REL_PC     ((size_t)(cur_opcode - (opcode_t*)interp->code->base.data))
-#define CUR_OPCODE cur_opcode
-#define IREG(i) REG_INT(interp, cur_opcode[i])
-#define NREG(i) REG_NUM(interp, cur_opcode[i])
-#define PREG(i) REG_PMC(interp, cur_opcode[i])
-#define SREG(i) REG_STR(interp, cur_opcode[i])
-#define CONST(i) Parrot_pcc_get_constants(interp, interp->ctx)[cur_opcode[i]]
-END
-}
-
-=item C<pc($pc)>
-
-=item C<pc()>
-
-Sets/gets the current position in Parrot code.
-
-=cut
-
-sub pc {
-    my $self = shift;
-
-    if (@_) {
-        $self->{PC} = shift;
-    }
-    else {
-        return $self->{PC};
-    }
-}
-
-=item C<args(@args)>
-
-=item C<args()>
-
-Sets/gets the transform's arguments.
-
-=cut
-
-sub args {
-    my $self = shift;
-
-    if (@_) {
-        $self->{ARGS} = [@_];
-    }
-    else {
-        return $self->{ARGS};
-    }
-}
-
-=item C<arg($index)>
-
-Returns the argument at C<$index>.
-
-=cut
-
-sub arg {
-    my $self = shift;
-
-    return $self->{ARGS}[shift];
-}
-
-=item C<goto_address($address)>
-
-Transforms the C<goto ADDRESS($address)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_address {
-    my ( $self, $addr ) = @_;
-
-    #print STDERR "pbcc: map_ret_abs($addr)\n";
-
-    if ( $addr eq '0' ) {
-        return "return (0);";
-    }
-    else {
-        return "if ((opcode_t *) $addr == 0)
-          return 0;
-    goto *ops_addr[*(cur_opcode = (opcode_t *)$addr)]";
-    }
-}
-
-=item C<expr_offset($offset)>
-
-Transforms the C<OFFSET($offset)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub expr_offset {
-    my ( $self, $offset ) = @_;
-
-    return "cur_opcode + $offset";
-}
-
-=item C<goto_offset($offset)>
-
-Transforms the C<goto OFFSET($offset)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_offset {
-    my ( $self, $offset ) = @_;
-
-    return "goto *ops_addr[*(cur_opcode += $offset)]";
-}
-
-my %arg_maps = (
-    'op' => "cur_opcode[%ld]",
-
-    'i'  => "IREG(%ld)",
-    'n'  => "NREG(%ld)",
-    'p'  => "PREG(%ld)",
-    's'  => "SREG(%ld)",
-    'k'  => "PREG(%ld)",
-    'ki' => "IREG(%ld)",
-
-    'ic'  => "cur_opcode[%ld]",
-    'nc'  => "CONST(%ld)->u.number",
-    'pc'  => "CONST(%ld)->u.key",
-    'sc'  => "CONST(%ld)->u.string",
-    'kc'  => "CONST(%ld)->u.key",
-    'kic' => "cur_opcode[%ld]"
-);
-
-=item C<access_arg($type, $num, $op)>
-
-Returns the C code for the specified op argument type (see
-C<Parrot::OpTrans>) and value. C<$op> is an instance of C<Parrot::Op>.
-
-=cut
-
-sub access_arg {
-    my ( $self, $type, $num, $op ) = @_;
-
-    #print STDERR "pbcc: map_arg($type, $num)\n";
-
-    die "Unrecognized type '$type' for num '$num'" unless exists $arg_maps{$type};
-
-    return sprintf( $arg_maps{$type}, $num );
-}
-
-=item C<restart_address($address)>
-
-Returns the C code for C<restart ADDRESS($address)>.
-
-=cut
-
-sub restart_address {
-    my ( $self, $addr ) = @_;
-
-    return "interp->resume_offset = $addr; interp->resume_flag = 1";
-}
-
-=item C<restart_offset($offset)>
-
-Returns the C code for C<restart OFFSET($offset)>.
-
-=cut
-
-sub restart_offset {
-    my ( $self, $offset ) = @_;
-
-    return "interp->resume_offset = REL_PC + $offset; interp->resume_flag = 1";
-}
-
-=item C<run_core_func_decl($core)>
-
-Returns the C code for the run core function declaration.
-
-=cut
-
-sub run_core_func_decl {
-    my ( $self, $core ) = @_;
-
-    return "opcode_t * " . $self->core_prefix . "$core(opcode_t *cur_op, PARROT_INTERP)";
-}
-
-=item C<ops_addr_decl($base_suffix)>
-
-Returns the C code for the ops address declaration.
-
-=cut
-
-sub ops_addr_decl {
-    my ( $self, $bs ) = @_;
-
-    return "static void *const* ${bs}ops_addr;\n\n";
-}
-
-=item C<run_core_func_start()>
-
-Returns the C code prior to the run core function.
-
-=cut
-
-sub run_core_func_start {
-    return <<END_C;
-#if defined(__GNUC__) && defined(I386) /* && defined(NO_DYNOPS) */
-    register opcode_t *cur_opcode __asm__ ("esi") = cur_op;
-#else
-    opcode_t *cur_opcode = cur_op;
-#endif
-
-    static void *const l_ops_addr[] = {
-END_C
-}
-
-=item C<run_core_after_addr_table($base_suffix)>
-
-Returns the run core C code for section after the address table.
-
-=cut
-
-sub run_core_after_addr_table {
-    my ( $self, $bs ) = @_;
-    return <<END_C;
-
-    if (!${bs}ops_addr)
-        ${bs}ops_addr = l_ops_addr;
-    if (cur_opcode == 0) {
-        DECL_CONST_CAST;
-        return (opcode_t *) PARROT_const_cast(void **, ${bs}ops_addr);
-    }
-END_C
-}
-
-=item C<run_core_finish($base)>
-
-Returns the C code following the run core function.
-
-=cut
-
-sub run_core_finish {
-    my ( $self, $base ) = @_;
-
-    return "\n} /* " . $self->core_prefix . "$base */\n\n";
-}
-
-=item C<init_func_init1($base)>
-
-Returns the C code for the init function.
-
-=cut
-
-sub init_func_init1 {
-    my ( $self, $base ) = @_;
-    my $cg_func = $self->core_prefix . $base;
-    my $bs      = $base . $self->suffix . '_';
-
-    return <<END_C;
-        if (!${bs}op_lib.op_func_table)
-            ${bs}op_lib.op_func_table = (op_func_t *) $cg_func(0, 0);
-END_C
-}
-
-=item C<init_set_dispatch($base_suffix)>
-
-Returns the C code to initialize the dispatch mechanism within the core's
-initialization function.
-
-=cut
-
-sub init_set_dispatch {
-    my ( $self, $bs ) = @_;
-
-    return <<END_C;
-        ${bs}ops_addr = (void**) init;
-END_C
-}
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::OpTrans>
-
-=item C<Parrot::OpTrans::C>
-
-=item C<Parrot::OpTrans::CGP>
-
-=item C<Parrot::OpTrans::CPrederef>
-
-=item C<Parrot::OpTrans::CSwitch>
-
-=back
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/ops_pct/lib/Parrot/OpTrans/CPrederef.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpTrans/CPrederef.pm	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,144 +0,0 @@
-#! perl
-# Copyright (C) 2001-2007, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::OpTrans::CPrederef - C Predereferenced Transform
-
-=head1 DESCRIPTION
-
-C<Parrot::OpTrans::CPrederef> inherits from C<Parrot::OpTrans::C>
-to provide basic functionality for predereferenced run loops (switch,
-CGP).
-
-=head2 Instance Methods
-
-=over 4
-
-=cut
-
-package Parrot::OpTrans::CPrederef;
-
-use strict;
-use warnings;
-
-use Parrot::OpTrans;
-use base qw( Parrot::OpTrans::C );
-
-=item C<defines()>
-
-Returns the C C<#define> macros required by the ops.
-
-=cut
-
-sub defines {
-    my $type = __PACKAGE__;
-    return <<END;
-/* defines - $0 -> $type */
-#define REL_PC ((size_t)(cur_opcode - (opcode_t*)interp->code->prederef.code))
-#define CUR_OPCODE \\
-    ((opcode_t*)cur_opcode + Parrot_pcc_get_pred_offset(interp, CURRENT_CONTEXT(interp)))
-#define OP_AS_OFFS(o) (_reg_base + ((opcode_t*)cur_opcode)[o])
-
-END
-}
-
-=item expr_address($addr)
-
-=item expr_address($offset)
-
-=item expr_pop()
-
-Create various address parts.
-
-=cut
-
-sub expr_address {
-    my ( $self, $addr ) = @_;
-    return "opcode_to_prederef(interp, $addr)";
-}
-
-sub expr_offset {
-    my ( $self, $offset ) = @_;
-    return "CUR_OPCODE + $offset";
-}
-
-sub expr_pop {
-    my ($self) = @_;
-    return "opcode_to_prederef(interp, pop_dest(interp))";
-}
-
-sub run_core_func_decl {
-    my ( $self, $core ) = @_;
-
-    my $type   = __PACKAGE__;
-    my $prefix = $self->core_prefix;
-    return <<END;
-/* run_core_func_decl - $0 -> $type */
-opcode_t * $prefix$core(opcode_t *cur_op, PARROT_INTERP)
-END
-}
-
-=item C<access_arg($type, $num, $op)>
-
-Returns the C code for the specified op argument type (see
-C<Parrot::OpTrans>) and value. C<$op> is an instance of C<Parrot::Op>.
-
-=cut
-
-sub access_arg {
-    my ( $self, $type, $num, $op ) = @_;
-
-    my %arg_maps = (
-        'op' => "cur_opcode[%ld]",
-
-        'i'  => "(*(INTVAL *)OP_AS_OFFS(%ld))",
-        'ki' => "(*(INTVAL *)OP_AS_OFFS(%ld))",
-        'n'  => "(*(FLOATVAL *)OP_AS_OFFS(%ld))",
-        'p'  => "(*(PMC **)OP_AS_OFFS(%ld))",
-        's'  => "(*(STRING **)OP_AS_OFFS(%ld))",
-        'k'  => "(*(PMC **)OP_AS_OFFS(%ld))",
-
-        'ic'  => "((INTVAL)cur_opcode[%ld])",
-        'kic' => "((INTVAL)cur_opcode[%ld])",
-        'nc'  => "(*(FLOATVAL *)cur_opcode[%ld])",
-        'sc'  => "((STRING *)cur_opcode[%ld])",
-        'pc'  => "((PMC *)cur_opcode[%ld])",
-        'kc'  => "((PMC *)cur_opcode[%ld])",
-    );
-
-    die "Unrecognized type '$type' for num '$num' in opcode @{[$op->full_name]}"
-        unless exists $arg_maps{$type};
-
-    return sprintf( $arg_maps{$type}, $num );
-}
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::OpTrans>
-
-=item C<Parrot::OpTrans::C>
-
-=item C<Parrot::OpTrans::CGP>
-
-=item C<Parrot::OpTrans::CGoto>
-
-=item C<Parrot::OpTrans::CSwitch>
-
-=back
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/ops_pct/lib/Parrot/OpTrans/CSwitch.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpTrans/CSwitch.pm	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,247 +0,0 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-Parrot::OpTrans::CSwitch - C Switch Transform
-
-=head1 DESCRIPTION
-
-C<Parrot::OpTrans::CSwitch> inherits from C<Parrot::OpTrans::CPrederef>
-to provide a mixture of predereferenced register addressing and a
-C<switch>ed run loop.
-
-=head2 Instance Methods
-
-=over 4
-
-=cut
-
-package Parrot::OpTrans::CSwitch;
-
-use strict;
-use warnings;
-
-use Parrot::OpTrans;
-use base qw( Parrot::OpTrans::CPrederef );
-
-sub new {
-    my $class = shift;
-    my $self  = $class->SUPER::new(@_);
-    $self->{split_count} ||= 0;
-    return $self;
-}
-
-=item C<core_type()>
-
-The core type is C<PARROT_SWITCH_CORE>.
-
-=cut
-
-sub core_type {
-    return 'PARROT_SWITCH_CORE';
-}
-
-=item C<core_prefix()>
-
-The prefix is C<'switch_'>.
-
-=cut
-
-sub core_prefix {
-    return "switch_";
-}
-
-=item C<suffix()>
-
-The suffix is C<'_switch'>.
-
-=cut
-
-sub suffix {
-    return "_switch";
-}
-
-=item C<defines()>
-
-Returns the C C<#define> macros required by the ops.
-
-=cut
-
-sub defines {
-    my ( $self, $pred_def );
-    $self     = shift;
-    $pred_def = $self->SUPER::defines();
-    my $type = __PACKAGE__;
-    return $pred_def . <<END;
-/* defines - $0 -> $type */
-#  define opcode_to_prederef(i, op)   (op ? \\
-     (opcode_t*) (op   - Parrot_pcc_get_pred_offset(interp, i->ctx)) : (opcode_t*)NULL)
-END
-}
-
-=item C<goto_address($address)>
-
-Transforms the C<goto ADDRESS($address)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_address {
-    my ( $self, $addr ) = @_;
-
-    #print STDERR "pbcc: map_ret_abs($addr)\n";
-
-    if ( $addr eq '0' ) {
-        return "return (0);";
-    }
-    else {
-        return <<EOC;
-            {
-               cur_opcode = opcode_to_prederef(interp, $addr);
-               goto SWITCH_RELOAD;
-            }
-EOC
-    }
-}
-
-=item C<goto_offset($offset)>
-
-Transforms the C<goto OFFSET($offset)> macro in an ops file into the
-relevant C code.
-
-=cut
-
-sub goto_offset {
-    my ( $self, $offset ) = @_;
-    return "{ cur_opcode += $offset; goto SWITCH_AGAIN; }";
-}
-
-=item C<init_func_init1($base)>
-
-Returns the C code for the init function.
-
-=cut
-
-sub init_func_init1 {
-    my ( $self, $base ) = @_;
-    my $cg_func = $self->core_prefix . $base;
-    my $bs      = $base . $self->suffix . '_';
-
-    return <<END_C;
-        if (!${bs}op_lib.op_func_table)
-            ${bs}op_lib.op_func_table = (op_func_t *)&${bs}op_lib;
-END_C
-}
-
-
-=item C<run_core_func_start()>
-
-Returns the C code prior to the run core function.
-
-=cut
-
-sub run_core_func_start {
-    my $type = __PACKAGE__;
-    return <<END_C;
-/* run_core_func_start - $0 -> $type */
-#if defined(__GNUC__) && defined(I386) && defined(PARROT_SWITCH_REGS)
-    register opcode_t *   cur_opcode __asm__ ("esi") = cur_op;
-    register char *   _reg_base   __asm__ ("edi");
-#else
-    opcode_t * cur_opcode = cur_op;
-    char * _reg_base;
-#endif
-
-SWITCH_RELOAD:
-    _reg_base = (char*)Parrot_pcc_get_regs_ni(interp, CURRENT_CONTEXT(interp))->regs_i;
-    do {
-SWITCH_AGAIN:
-    Parrot_cx_handle_tasks(interp, interp->scheduler);
-    if (!cur_opcode)
-        break;
-    switch (*(opcode_t*)cur_opcode) {
-END_C
-}
-
-=item C<run_core_split($base)>
-
-If defined return code to split e.g. a switch.
-
-=cut
-
-sub run_core_split {
-    my ($self) = @_;
-    $self->{split_count}++;
-
-    return <<END_C;
-    default:
-    switch (*(opcode_t*)cur_opcode) {
-END_C
-}
-
-=item C<run_core_finish($base)>
-
-Returns the C code following the run core function.
-
-=cut
-
-sub run_core_finish {
-    my ( $self, $base ) = @_;
-    my $bs = $base . $self->suffix . '_';
-    my $c  = <<END_C;
-        default:
-            if (*(opcode_t*)cur_opcode >= 0 &&
-                *(opcode_t*)cur_opcode < (opcode_t)${bs}op_lib.op_count) {
-                *(opcode_t*)cur_opcode = CORE_OPS_wrapper__;
-                continue;
-            }
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                "illegal opcode in switch core\\n");
-            break;
-        } /* switch */
-END_C
-    for ( my $i = 0 ; $i < $self->{split_count} ; $i++ ) {
-        $c .= <<END_C;
-    } /* switch $i */
-END_C
-    }
-    $c .= <<END_C;
-    } while (1);
-    return NULL;
-}
-END_C
-
-    $c .= " /* " . $self->core_prefix . "$base */\n\n";
-
-    return $c;
-}
-
-=back
-
-=head1 SEE ALSO
-
-=over 4
-
-=item C<Parrot::OpTrans>
-
-=item C<Parrot::OpTrans::C>
-
-=item C<Parrot::OpTrans::CGP>
-
-=item C<Parrot::OpTrans::CGoto>
-
-=item C<Parrot::OpTrans::CPrederef>
-
-=back
-
-=cut
-
-1;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/lib/Parrot/Ops2c/Auxiliary.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Ops2c/Auxiliary.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Ops2c/Auxiliary.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -12,7 +12,7 @@
     my $usage_msg = <<USAGE;
     % perl tools/build/ops2c.pl trans [--help] [--no-lines] [--dynamic]
                                       [--core | input.ops [input2.ops ...]]
-       trans := C | CGoto | CGP | CSwitch | CPrederef
+       trans := C
 
 For example:
 

Modified: branches/ops_pct/lib/Parrot/Ops2c/Utils.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Ops2c/Utils.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Ops2c/Utils.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -89,10 +89,10 @@
         return;
     }
     my $class_name = shift @argv;
-    my %is_allowed = map { $_ => 1 } qw(C CGoto CGP CSwitch CPrederef);
+    my %is_allowed = map { $_ => 1 } qw( C );
     unless ( $is_allowed{$class_name} ) {
         print STDERR
-            "Parrot::Ops2c::Utils::new() requires C, CGoto, CGP, CSwitch and/or  CPrederef: $!";
+            "Parrot::Ops2c::Utils::new() requires C: $!";
         return;
     }
 
@@ -200,7 +200,7 @@
 
     my ( $op_info, $op_func, $getop );
     $op_info = $op_func = 'NULL';
-    $getop = '( int (*)(PARROT_INTERP, const char *, int) )NULL';
+    $getop = 'NULL';
 
     if ($self->{suffix} eq '') {
         $op_func = $self->{bs} . "op_func_table";
@@ -372,10 +372,6 @@
 
     $self->_print_run_core_func_decl_source($SOURCE);
 
-    $self->_print_cg_jump_table($SOURCE);
-
-    $self->_print_goto_opcode($SOURCE);
-
     $self->_print_op_function_definitions($SOURCE);
 }
 
@@ -479,6 +475,7 @@
     print $fh <<END_C;
 #include "parrot/parrot.h"
 #include "parrot/oplib.h"
+#include "parrot/runcore_api.h"
 
 $self->{sym_export} op_lib_t *$self->{init_func}(PARROT_INTERP, long init);
 
@@ -649,7 +646,6 @@
             $one_op .= "$definition $comment {\n$src}\n\n";
             push @op_funcs,  $one_op;
             push @op_protos, $prototype;
-            $prev_src = $src if ( $self->{suffix} eq '_cgp' || $self->{suffix} eq '_switch' );
             $prev_index = $index;
         }
         $index++;
@@ -661,47 +657,6 @@
     $self->{cg_jump_table} = \@cg_jump_table;
 }
 
-sub _print_cg_jump_table {
-    my ( $self, $fh ) = @_;
-
-    my @cg_jump_table = @{ $self->{cg_jump_table} };
-
-    if ( $self->{suffix} =~ /cg/ ) {
-        print $fh @cg_jump_table;
-        print $fh <<END_C;
-        NULL
-    };
-END_C
-        print $fh $self->{trans}->run_core_after_addr_table( $self->{bs} );
-    }
-    return 1;
-}
-
-sub _print_goto_opcode {
-    my ( $self, $fh ) = @_;
-
-    if ( $self->{suffix} =~ /cgp/ ) {
-        print $fh <<END_C;
-#ifdef __GNUC__
-# ifdef I386
-    else if (cur_opcode == (opcode_t *)(void **) 1)
-    __asm__ ("jmp *4(%ebp)");  /* jump to ret addr, used by JIT */
-# endif
-#endif
-    _reg_base = (char*)Parrot_pcc_get_regs_ni(interp, CURRENT_CONTEXT(interp))->regs_i;
-    goto **(void **)cur_opcode;
-
-END_C
-    }
-    elsif ( $self->{suffix} =~ /cg/ ) {
-        print $fh <<END_C;
-goto *$self->{bs}ops_addr[*cur_opcode];
-
-END_C
-    }
-    return 1;
-}
-
 sub _print_op_function_definitions {
     my ( $self, $fh ) = @_;
 
@@ -893,8 +848,8 @@
 static HOP **hop;
 
 static void hop_init(PARROT_INTERP);
-static size_t hash_str(const char *str);
-static void store_op(PARROT_INTERP, op_info_t *info, int full);
+static size_t hash_str(ARGIN_NULLOK(const char *str));
+static void store_op(PARROT_INTERP, ARGIN(op_info_t *info), int full);
 
 /* XXX on changing interpreters, this should be called,
    through a hook */
@@ -911,7 +866,8 @@
  * returns >= 0 (found idx into info_table), -1 if not
  */
 
-static size_t hash_str(const char *str) {
+static size_t hash_str(ARGIN_NULLOK(const char *str))
+{
     size_t      key = 0;
     const char *s   = str;
 
@@ -923,8 +879,9 @@
     return key;
 }
 
-static void store_op(PARROT_INTERP, op_info_t *info, int full) {
-    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
+static void store_op(PARROT_INTERP, ARGIN(op_info_t *info), int full)
+{
+    HOP * const p     = mem_gc_allocate_typed(interp, HOP);
     const size_t hidx =
         hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
 
@@ -932,30 +889,40 @@
     p->next   = hop[hidx];
     hop[hidx] = p;
 }
+
 static int get_op(PARROT_INTERP, const char * name, int full) {
-    const HOP * p;
+    const HOP *p;
+
     const size_t hidx = hash_str(name) % OP_HASH_SIZE;
+
     if (!hop) {
-        hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE,HOP *);
+        hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE, HOP *);
         hop_init(interp);
     }
+
     for (p = hop[hidx]; p; p = p->next) {
         if (STREQ(name, full ? p->info->full_name : p->info->name))
             return p->info - $self->{bs}op_lib.op_info_table;
     }
+
     return -1;
 }
-static void hop_init(PARROT_INTERP) {
+
+static void hop_init(PARROT_INTERP)
+{
     size_t i;
     op_info_t * const info = $self->{bs}op_lib.op_info_table;
+
     /* store full names */
     for (i = 0; i < $self->{bs}op_lib.op_count; i++)
         store_op(interp, info + i, 1);
+
     /* plus one short name */
     for (i = 0; i < $self->{bs}op_lib.op_count; i++)
         if (get_op(interp, info[i].name, 0) == -1)
             store_op(interp, info + i, 0);
 }
+
 static void hop_deinit(PARROT_INTERP)
 {
     if (hop) {

Modified: branches/ops_pct/lib/Parrot/Ops2pm/Base.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Ops2pm/Base.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Ops2pm/Base.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -3,6 +3,8 @@
 package Parrot::Ops2pm::Base;
 use strict;
 use warnings;
+use Cwd;
+use File::Spec;
 use lib qw ( lib );
 use Parrot::OpsFile;
 
@@ -94,6 +96,9 @@
     $argsref->{argv} = \@argv;
     $argsref->{num_file}    = "src/ops/ops.num";
     $argsref->{skip_file}   = "src/ops/ops.skip";
+    $argsref->{opsenum_file} = File::Spec->catfile(
+        cwd(), qw(  include parrot opsenum.h )
+    );
     return bless $argsref, $class;
 }
 

Modified: branches/ops_pct/lib/Parrot/OpsRenumber.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/OpsRenumber.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/OpsRenumber.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -134,7 +134,7 @@
     # above the DYNAMIC line.  For the purpose of renumbering, we create
     # an index $n.
 
-    my $opsenumfn = "include/parrot/opsenum.h";
+    my $opsenumfn = $self->{opsenum_file};
     open my $OPSENUM, '>', $opsenumfn or die "Can't open $opsenumfn, error $!";
     print $OPSENUM $OPSENUM_PREAMBLE;
     open $OP, '>', $file

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Attribute.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Attribute.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Attribute.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -140,7 +140,10 @@
 /* Generated macro accessors for '$attrname' attribute of $pmcname PMC. */
 #define GETATTR_${pmcname}_${attrname}(interp, pmc, dest) \\
     do { \\
-        if (PObj_is_object_TEST(pmc)) { \\
+        if (!PObj_is_object_TEST(pmc)) { \\
+            (dest) = ((Parrot_${pmcname}_attributes *)PMC_data(pmc))->$attrname; \\
+        } \\
+        else { \\
 EOA
 
     if ($isfuncptr == 1) {
@@ -189,8 +192,6 @@
 
     $decl .= <<"EOA";
         } \\
-        else \\
-            (dest) = ((Parrot_${pmcname}_attributes *)PMC_data(pmc))->$attrname; \\
     } while (0)
 
 #define SETATTR_${pmcname}_${attrname}(interp, pmc, value) \\
@@ -207,8 +208,7 @@
     }
     elsif ($attrtype eq "INTVAL") {
         $decl .= <<"EOA";
-            PMC * const attr_value = Parrot_pmc_new(interp, enum_class_Integer); \\
-            VTABLE_set_integer_native(interp, attr_value, value); \\
+            PMC * const attr_value = Parrot_pmc_new_init_int(interp, enum_class_Integer, value); \\
             VTABLE_set_attr_str(interp, pmc, \\
                               Parrot_str_new_constant(interp, "$attrname"), attr_value); \\
 EOA

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Dumper.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Dumper.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Dumper.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -51,8 +51,7 @@
     @files = glob $files[0] if $files[0] eq 'src/pmc/*.pmc';
 
     # make sure that a default.dump will always be created if it doesn't
-    # already exist; do so by adding default.pmc to list of files for dumping
-    unshift @files, 'default.pmc' unless -e './src/pmc/default.dump';
+    $pmc2cMain->find_file('default.dump') or unshift @files, 'default.pmc';
 
     # load and parse all pmc files in @files
     for my $filename (@files) {
@@ -72,7 +71,7 @@
     }
 
     for my $pmc ( values %$pmcs ) {
-        next if $pmc->name =~ /default$/ && $pmc->dump_is_current;
+        next if $pmc->name =~ /default$/ && $pmc->dump_is_current($pmc2cMain->find_file('default.dump'));
 
         gen_parent_lookup_info( $pmc, $pmc2cMain, $pmcs );
         gen_parent_reverse_lookup_info( $pmc, $pmcs, $vtable_dump );

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Emitter.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Emitter.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Emitter.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -3,7 +3,7 @@
 package Parrot::Pmc2c::Emitter;
 use strict;
 use warnings;
-use Parrot::Pmc2c::UtilFunctions qw(count_newlines spew escape_filename);
+use Parrot::Pmc2c::UtilFunctions qw(count_newlines spew);
 use Parrot::Pmc2c::Pmc2cMain ();
 use overload '""'   => \&stringify;
 use overload 'bool' => \&boolify;
@@ -129,8 +129,8 @@
         }
         else {
             $line = $self->{current_line} if $line == -1;
-            my $filename_escaped = escape_filename($filename);
             if (!$Parrot::Pmc2c::Pmc2cMain::OPTIONS->{nolines}) {
+                ( my $filename_escaped = $filename ) =~ s|\\|/|g;
                 $data .= "#line $line \"$filename_escaped\"\n";
             }
             $data .= $it->{data};

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Library.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Library.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Library.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -24,6 +24,7 @@
 
 use strict;
 use warnings;
+use File::Basename qw(basename);
 use Parrot::Pmc2c::PMCEmitter ();
 use Parrot::Pmc2c::UtilFunctions qw(dont_edit dynext_load_code c_code_coda spew);
 
@@ -36,8 +37,9 @@
 sub generate_library {
     my ( $class, $library_name, $pmcs ) = @_;
 
-    spew( "$library_name.c", gen_c( $library_name, $pmcs ) );
-    spew( "$library_name.h", gen_h($library_name) );
+    my $basename = basename($library_name);
+    spew( $library_name . '.c', gen_c( $basename, $pmcs ) );
+    spew( $library_name . '.h', gen_h( $basename ) );
 }
 
 =item C<gen_h>

Modified: branches/ops_pct/lib/Parrot/Pmc2c/MethodEmitter.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/MethodEmitter.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/MethodEmitter.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -107,7 +107,7 @@
         $newl   = "\n";
         $semi   = '';
     }
-    my $pmcarg = 'PMC *pmc';
+    my $pmcarg = 'PMC *_self';
     $pmcarg    = "SHIM($pmcarg)" if $self->pmc_unused;
 
     return <<"EOC";
@@ -134,7 +134,7 @@
       \.(\w+)        # other_method
       \(\s*(.*?)\)   # capture argument list
       }x,
-        sub { "pmc->vtable->$1(" . full_arguments($2) . ')' }
+        sub { "_self->vtable->$1(" . full_arguments($2) . ')' }
     );
 
     # Rewrite STATICSELF.other_method(args...)
@@ -151,8 +151,8 @@
         }
     );
 
-    # Rewrite SELF -> pmc, INTERP -> interp
-    $body->subst( qr{\bSELF\b},   sub { 'pmc' } );
+    # Rewrite SELF -> _self, INTERP -> interp
+    $body->subst( qr{\bSELF\b},   sub { '_self' } );
     $body->subst( qr{\bINTERP\b}, sub { 'interp' } );
 
     # Rewrite GET_ATTR, SET_ATTR with typename
@@ -163,7 +163,7 @@
 =item C<rewrite_vtable_method($self, $pmc, $super, $super_table)>
 
 Rewrites the method body performing the various macro substitutions for
-vtable method bodies (see F<tools/build/pmc2c.pl>).
+vtable function bodies (see F<tools/build/pmc2c.pl>).
 
 =cut
 
@@ -180,7 +180,7 @@
     # Some MMD variants don't have a super mapping.
     if ($super) {
         my $supertype = "enum_class_$super";
-        die "$pmcname defines unknown vtable method '$name'\n" unless defined $super_table->{$name};
+        die "$pmcname defines unknown vtable function '$name'\n" unless defined $super_table->{$name};
         my $supermethod = "Parrot_" . $super_table->{$name} . "_$name";
 
         # Rewrite OtherClass.SUPER(args...)
@@ -219,7 +219,7 @@
         \.(\w+)        # other_method
         \(\s*(.*?)\)   # capture argument list
       }x,
-        sub { "pmc->vtable->$1(" . full_arguments($2) . ')' }
+        sub { "_self->vtable->$1(" . full_arguments($2) . ')' }
     );
 
     # Rewrite SELF(args...). See comments above.
@@ -228,7 +228,7 @@
         \bSELF\b       # Macro: SELF
         \(\s*(.*?)\)   # capture argument list
       }x,
-        sub { "pmc->vtable->$name(" . full_arguments($1) . ')' }
+        sub { "_self->vtable->$name(" . full_arguments($1) . ')' }
     );
 
     # Rewrite OtherClass.SELF.other_method(args...)
@@ -304,8 +304,8 @@
         }
     );
 
-    # Rewrite SELF -> pmc, INTERP -> interp
-    $body->subst( qr{\bSELF\b},   sub { 'pmc' } );
+    # Rewrite SELF -> _self, INTERP -> interp
+    $body->subst( qr{\bSELF\b},   sub { '_self' } );
     $body->subst( qr{\bINTERP\b}, sub { 'interp' } );
 
     # Rewrite GET_ATTR, SET_ATTR with typename

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Object.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Object.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Object.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -37,8 +37,8 @@
 generating.
 
 Overrides the default implementation to direct all unknown methods to
-first check if there is an implementation of the vtable method in the
-vtable methods hash of this class of any others, and delegates up to
+first check if there is an implementation of the vtable function in the
+vtable function hash of this class of any others, and delegates up to
 any PMCs in the MRO.
 
 =back

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PCCMETHOD.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PCCMETHOD.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PCCMETHOD.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2008, Parrot Foundation.
+# Copyright (C) 2004-2010, Parrot Foundation.
 # $Id$
 
 package Parrot::Pmc2c::PCCMETHOD;
@@ -258,8 +258,8 @@
     /*BEGIN RETURN $returns */
 END
         $e->emit( <<"END", __FILE__, __LINE__ + 1 );
-    Parrot_pcc_fill_returns_from_c_args(interp, _call_object, "$returns_signature",
-            $returns_varargs);
+    _ret_object = Parrot_pcc_build_call_from_c_args(interp, _call_object,
+        "$returns_signature", $returns_varargs);
     return;
     /*END RETURN $returns */
     }
@@ -399,7 +399,7 @@
     unshift @$linear_args,
         {
         type  => convert_type_string_to_reg_type('PMC'),
-        name  => 'pmc',
+        name  => '_self',
         attrs => parse_adverb_attributes(':invocant')
         };
 
@@ -415,8 +415,7 @@
     PMC * const _ctx         = CURRENT_CONTEXT(interp);
     PMC * const _ccont       = Parrot_pcc_get_continuation(interp, _ctx);
     PMC * const _call_object = Parrot_pcc_get_signature(interp, _ctx);
-
-    Parrot_pcc_set_signature(interp, _ctx, NULL);
+    PMC * _ret_object        = PMCNULL;
 
     { /* BEGIN PARMS SCOPE */
 END
@@ -429,11 +428,11 @@
             $params_varargs);
 END
     }
-    $e->emit( <<"END", __FILE__, __LINE__ + 1 );
+    $e->emit( <<'END', __FILE__, __LINE__ + 1 );
     { /* BEGIN PMETHOD BODY */
 END
 
-    $e_post->emit( <<"END", __FILE__, __LINE__ + 1 );
+    $e_post->emit( <<'END', __FILE__, __LINE__ + 1 );
 
     } /* END PMETHOD BODY */
     } /* END PARAMS SCOPE */
@@ -451,10 +450,6 @@
     return 1;
 }
 
-sub isquoted {
-    1;
-}
-
 sub rewrite_pccinvoke {
     my ( $method, $pmc ) = @_;
     my $body             = $method->body;

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PMC.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PMC.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PMC.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -132,7 +132,7 @@
 
 =item C<implements_vtable($method)>
 
-True if pmc generates code for vtable method C<$method>.
+True if pmc generates code for vtable C<$method>.
 
 =cut
 
@@ -321,7 +321,7 @@
 
 =item C<vtable_method_does_write($method)>
 
-Returns true if the vtable method C<$method> writes our value.
+Returns true if the vtable C<$method> writes our value.
 
 =back
 
@@ -432,11 +432,13 @@
 =cut
 
 sub dump_is_current {
-    my ($self)   = @_;
-    my $dumpfile = $self->filename('.dump');
+    my ($self, $dumpfile)   = @_;
+    $dumpfile ||= $self->filename('.dump');
     return 0 unless -e $dumpfile;
 
     my $pmcfile  = $self->filename('.pmc');
+    return 1 unless -e $pmcfile;
+
     return ( stat $dumpfile )[9] >= ( stat $pmcfile )[9];
 }
 

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PMC/Null.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PMC/Null.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PMC/Null.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -29,7 +29,7 @@
 sub pre_method_gen {
     my ($self) = @_;
 
-    # vtable methods
+    # vtables
     foreach my $method ( @{ $self->vtable->methods } ) {
         my $vt_method_name = $method->name;
         next unless $self->normal_unimplemented_vtable($vt_method_name);
@@ -44,7 +44,7 @@
         # to avoid compiler warnings
         my $body = <<"EOC";
     UNUSED(interp)
-    UNUSED(pmc)
+    UNUSED(_self)
 EOC
 
         foreach my $param (split /,\s*/, $method->parameters) {

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PMC/Object.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PMC/Object.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PMC/Object.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -22,8 +22,8 @@
 Returns the C code for the method body.
 
 Overrides the default implementation to direct all unknown methods to
-first check if there is an implementation of the vtable method in the
-vtable methods hash of this class of any others, and delegates up to
+first check if there is an implementation of the vtable function in the
+vtable function hash of this class of any others, and delegates up to
 any PMCs in the MRO.
 
 =cut
@@ -31,7 +31,7 @@
 sub pre_method_gen {
     my ($self) = @_;
 
-    # vtable methods
+    # vtables
     foreach my $method ( @{ $self->vtable->methods } ) {
         my $vt_method_name = $method->name;
         next unless $self->normal_unimplemented_vtable($vt_method_name);
@@ -52,11 +52,11 @@
         $superargs       =~ s/^,//;
 
         my $method_body_text = <<"EOC";
-    Parrot_Object_attributes * const obj       = PARROT_OBJECT(pmc);
+    Parrot_Object_attributes * const obj       = PARROT_OBJECT(_self);
     Parrot_Class_attributes  * const _class    = PARROT_CLASS(obj->_class);
     STRING        * const meth_name = CONST_STRING_GEN(interp, "$vt_method_name");
 
-    /* Walk and search for the vtable method. */
+    /* Walk and search for the vtable. */
     const int num_classes = VTABLE_elements(interp, _class->all_parents);
     int i;
     for (i = 0; i < num_classes; i++) {
@@ -66,7 +66,7 @@
         PMC * const meth = Parrot_oo_find_vtable_override_for_class(interp, cur_class, meth_name);
         if (!PMC_IS_NULL(meth)) {
             $pcc_result_decl
-            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi$pcc_sig", pmc$pcc_args);
+            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi$pcc_sig", _self$pcc_args);
             $pcc_return_stmt
         }
         /* method name is $vt_method_name */
@@ -76,7 +76,7 @@
         unless ($self->vtable_method_does_multi($vt_method_name)) {
             $method_body_text .= <<"EOC";
         if (cur_class->vtable->base_type == enum_class_PMCProxy) {
-            /* Get the PMC instance and call the vtable method on that. */
+            /* Get the PMC instance and call the vtable on that. */
             STRING * const proxy      = CONST_STRING_GEN(interp, "proxy");
             PMC    * const del_object = VTABLE_get_attr_str(interp, SELF, proxy);
 

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PMC/ParrotClass.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PMC/ParrotClass.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PMC/ParrotClass.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -66,7 +66,7 @@
 sub pre_method_gen {
     my ($self) = @_;
 
-    # vtable methods
+    # vtables
     foreach my $method ( @{ $self->vtable->methods } ) {
         my $vt_method_name = $method->name;
         next if exists $dont_delegate->{$vt_method_name};

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PMC/default.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PMC/default.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PMC/default.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2008, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -32,7 +32,7 @@
 sub pre_method_gen {
     my ($self) = @_;
 
-    # vtable methods
+    # vtables
     foreach my $method ( @{ $self->vtable->methods } ) {
         my $vt_method_name = $method->name;
         next unless $self->unimplemented_vtable($vt_method_name);
@@ -55,9 +55,9 @@
             # Generate default_ro_find_method.
             $self->{emitter}->emit(<<'EOC');
 static  PMC *
-Parrot_default_ro_find_method(PARROT_INTERP, PMC *pmc, STRING *method_name) {
+Parrot_default_ro_find_method(PARROT_INTERP, PMC *_self, STRING *method_name) {
     /* Use non-readonly find_method. Current vtable is ro variant. So ro_variant contains non-ro variant */
-    PMC *const method = pmc->vtable->ro_variant_vtable->find_method(interp, pmc, method_name);
+    PMC *const method = _self->vtable->ro_variant_vtable->find_method(interp, _self, method_name);
     if (!PMC_IS_NULL(VTABLE_getprop(interp, method, CONST_STRING_GEN(interp, "write"))))
         return PMCNULL;
     else
@@ -90,7 +90,7 @@
         $body .= "    UNUSED($param)\n";
     }
     my $vt_method_name = uc $method->name;
-    $body .= qq{    $stub_func(interp, pmc, PARROT_VTABLE_SLOT_$vt_method_name);\n};
+    $body .= qq{    $stub_func(interp, _self, PARROT_VTABLE_SLOT_$vt_method_name);\n};
 
     $clone->body( Parrot::Pmc2c::Emitter->text($body));
 
@@ -134,7 +134,7 @@
 
 PARROT_EXPORT VTABLE* Parrot_default_ro_get_vtable(PARROT_INTERP) {
 
-    VTABLE * vt = Parrot_default_get_vtable(interp);
+    VTABLE * const vt = Parrot_default_get_vtable(interp);
 
 $ro_vtable_decl
 

Modified: branches/ops_pct/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -167,7 +167,7 @@
     my $name    = $self->name;
     my $lc_name = $self->name;
 
-    # generate decls for all vtable methods in this PMC
+    # generate decls for all vtables in this PMC
     foreach my $vt_method_name ( @{ $self->vtable->names } ) {
         if ( $self->implements_vtable($vt_method_name) ) {
             $hout .=
@@ -274,7 +274,7 @@
 sub gen_methods {
     my ($self) = @_;
 
-    # vtable methods
+    # vtables
     foreach my $method ( @{ $self->vtable->methods } ) {
         my $vt_method_name = $method->name;
         next if $vt_method_name eq 'class_init';
@@ -284,7 +284,7 @@
         }
     }
 
-    # non-vtable methods
+    # methods
     foreach my $method ( @{ $self->methods } ) {
         next if $method->is_vtable;
         $method->generate_body($self);
@@ -476,6 +476,7 @@
     my $multi_strings = '';
     my $cache         = {};
 
+    my $i = 0;
     for my $multi (@$multi_funcs) {
         my ($name, $ssig, $fsig, $ns, $func) = @$multi;
         my ($name_str, $ssig_str, $fsig_str, $ns_name)     =
@@ -487,21 +488,23 @@
                    [$ns,   $ns_name ]) {
             my ($raw_string, $name) = @$s;
             next if $strings_seen{$name}++;
-            $multi_strings .=  "        STRING * const $name = "
+            $multi_strings .=  "            STRING * const $name = "
                            . qq|CONST_STRING_GEN(interp, "$raw_string");\n|;
         }
 
         push @multi_list, <<END_MULTI_LIST;
-        { $name_str,
-          $ssig_str,
-          $fsig_str,
-          $ns_name,
-          (funcptr_t) $func }
+            _temp_multi_func_list[$i].multi_name = $name_str;
+            _temp_multi_func_list[$i].short_sig = $ssig_str;
+            _temp_multi_func_list[$i].full_sig = $fsig_str;
+            _temp_multi_func_list[$i].ns_name = $ns_name;
+            _temp_multi_func_list[$i].func_ptr = (funcptr_t) $func;
 END_MULTI_LIST
+        $i++;
 
     }
 
-    my $multi_list = join( ",\n", @multi_list);
+    my $multi_list_size = @multi_list;
+    my $multi_list = join( "\n", @multi_list);
 
     my @isa = grep { $_ ne 'default' } @{ $self->parents };
 
@@ -570,7 +573,7 @@
         vt->base_type    = entry;
         vt->whoami       = string_make(interp, "$classname", @{[length($classname)]},
                                        "ascii", PObj_constant_FLAG|PObj_external_FLAG);
-        vt->provides_str = Parrot_str_append(interp, vt->provides_str,
+        vt->provides_str = Parrot_str_concat(interp, vt->provides_str,
             string_make(interp, "$provides", @{[length($provides)]}, "ascii",
             PObj_constant_FLAG|PObj_external_FLAG));
 
@@ -692,14 +695,13 @@
 
 
     if ( @$multi_funcs ) {
+        # Don't const the list, breaks some older C compilers
         $cout .= $multi_strings . <<"EOC";
 
-            $const multi_func_list _temp_multi_func_list[] = {
-                $multi_list
-            };
-#define N_MULTI_LIST (sizeof(_temp_multi_func_list)/sizeof(_temp_multi_func_list[0]))
+            multi_func_list _temp_multi_func_list[$multi_list_size];
+$multi_list
             Parrot_mmd_add_multi_list_from_c_args(interp,
-                _temp_multi_func_list, N_MULTI_LIST);
+                _temp_multi_func_list, $multi_list_size);
 EOC
     }
 
@@ -718,7 +720,7 @@
 
 =item C<update_vtable_func()>
 
-Returns the C code for the PMC's update_vtable method.
+Returns the C code for the PMC's update_vtable.
 
 =cut
 
@@ -739,8 +741,9 @@
     my $flag_auto_attrs = $self->{flags}{auto_attrs};
     my $flag_manual_attrs = $self->{flags}{manual_attrs};
     die 'manual_attrs and auto_attrs can not be used together'
+         . 'in PMC ' . $self->name
         if ($flag_auto_attrs && $flag_manual_attrs);
-    warn 'PMC has attributes but no auto_attrs or manual_attrs'
+    die 'PMC ' . $self->name . ' has attributes but no auto_attrs or manual_attrs'
         if (@{$self->attributes} && ! ($flag_auto_attrs || $flag_manual_attrs));
 
     if ( @{$self->attributes} &&  $flag_auto_attrs) {
@@ -887,7 +890,7 @@
 
 =item C<get_vtable_func()>
 
-Returns the C code for the PMC's update_vtable method.
+Returns the C code for the PMC's update_vtable.
 
 =cut
 
@@ -989,7 +992,7 @@
         push @{ $multi_methods{ $name } }, [ $sig[1], $ssig, $fsig, $ns, $func, $method ];
     }
 
-    # vtable methods
+    # vtables
     foreach my $method ( @{ $self->vtable->methods } ) {
         my $vt_method_name = $method->name;
         next if $vt_method_name eq 'class_init';

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Parser.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Parser.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Parser.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -279,7 +279,7 @@
         }
         else {
 
-            # Name-mangle NCI and multi methods to avoid conflict with vtable methods.
+            # Name-mangle NCI and multi methods to avoid conflict with vtables
             if ( $marker) {
                 if ( $marker =~ /MULTI/ ) {
                     $method->type(Parrot::Pmc2c::Method::MULTI);

Modified: branches/ops_pct/lib/Parrot/Pmc2c/Pmc2cMain.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/Pmc2cMain.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/Pmc2cMain.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -240,8 +240,11 @@
         return $path if -e $path;
     }
 
-    print Carp::longmess;
-    die "cannot find file '$file' in path '", join( "', '", @includes ), "'" if $die_unless_found;
+    if ($die_unless_found) {
+        my $includes_list = join q|', '| => @includes;
+        Carp::confess("cannot find file '$file' in path '$includes_list'");
+    }
+
     return;
 }
 

Modified: branches/ops_pct/lib/Parrot/Pmc2c/UtilFunctions.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Pmc2c/UtilFunctions.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Pmc2c/UtilFunctions.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -9,7 +9,7 @@
 
 use base qw( Exporter );
 our @EXPORT_OK = qw( count_newlines return_statement dont_edit dynext_load_code
-    c_code_coda slurp spew filename escape_filename
+    c_code_coda slurp spew filename
     args_from_parameter_list
     passable_args_from_parameter_list
 );
@@ -74,11 +74,6 @@
     return scalar $_[0] =~ tr/\n//;
 }
 
-sub escape_filename {
-    ( my $filename = shift ) =~ s|(\\)|$1$1|g;
-    return $filename;
-}
-
 =item C<dont_edit($pmcfile)>
 
 Returns the "DO NOT EDIT THIS FILE" warning text. C<$pmcfile> is the name

Modified: branches/ops_pct/lib/Parrot/Vtable.pm
==============================================================================
--- branches/ops_pct/lib/Parrot/Vtable.pm	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/lib/Parrot/Vtable.pm	Wed May  5 08:45:29 2010	(r46302)
@@ -67,7 +67,7 @@
 
   [ return_type method_name parameters section MMD_type attributes ]
 
-for each vtable method defined in C<$file>. If C<$file> is unspecified it
+for each vtable function defined in C<$file>. If C<$file> is unspecified it
 defaults to F<src/vtable.tbl>.  If it is not an MMD method, C<MMD_type> is -1.
 
 =cut
@@ -209,7 +209,7 @@
 
 /*
  * vtable accessor macros
- * as vtable methods might get moved around internally
+ * as vtable functions might get moved around internally
  * these macros hide the details
  */
 
@@ -281,7 +281,7 @@
 
 =item C<vtbl_embed($vtable)>
 
-Returns the C function definitions to call the vtable methods on a PMC for the
+Returns the C function definitions to call the vtable functions on a PMC for the
 elements in the referenced vtable array.
 
 =cut

Modified: branches/ops_pct/ports/cygwin/README
==============================================================================
--- branches/ops_pct/ports/cygwin/README	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ports/cygwin/README	Wed May  5 08:45:29 2010	(r46302)
@@ -682,9 +682,6 @@
  /usr/include/parrot/1.0.0/parrot/op.h
  /usr/include/parrot/1.0.0/parrot/oplib.h
  /usr/include/parrot/1.0.0/parrot/oplib/core_ops.h
- /usr/include/parrot/1.0.0/parrot/oplib/core_ops_cg.h
- /usr/include/parrot/1.0.0/parrot/oplib/core_ops_cgp.h
- /usr/include/parrot/1.0.0/parrot/oplib/core_ops_switch.h
  /usr/include/parrot/1.0.0/parrot/oplib/ops.h
  /usr/include/parrot/1.0.0/parrot/packfile.h
  /usr/include/parrot/1.0.0/parrot/parrot.h
@@ -748,8 +745,6 @@
  /usr/lib/parrot/1.0.0/src/install_config.o
  /usr/lib/parrot/1.0.0/src/nci.c
  /usr/lib/parrot/1.0.0/src/null_config.o
- /usr/lib/parrot/1.0.0/src/ops/core_ops_cgp.c
- /usr/lib/parrot/1.0.0/src/ops/core_ops_switch.c
  /usr/lib/parrot/1.0.0/src/parrot_config.o
  /usr/lib/parrot/1.0.0/tools/build/ops2c.pl
  /usr/lib/parrot/1.0.0/tools/build/pmc2c.pl
@@ -892,7 +887,6 @@
  /usr/share/doc/parrot/1.0.0/html/config/auto/attributes.pm.html
  /usr/share/doc/parrot/1.0.0/html/config/auto/backtrace.pm.html
  /usr/share/doc/parrot/1.0.0/html/config/auto/byteorder.pm.html
- /usr/share/doc/parrot/1.0.0/html/config/auto/cgoto.pm.html
  /usr/share/doc/parrot/1.0.0/html/config/auto/cpu.pm.html
  /usr/share/doc/parrot/1.0.0/html/config/auto/cpu/i386/auto.pm.html
  /usr/share/doc/parrot/1.0.0/html/config/auto/cpu/ppc/auto.pm.html

Modified: branches/ops_pct/ports/debian/changelog
==============================================================================
--- branches/ops_pct/ports/debian/changelog	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ports/debian/changelog	Wed May  5 08:45:29 2010	(r46302)
@@ -1,3 +1,13 @@
+parrot (2.3.0-1) unstable; urgency=low
+  * New upstream release
+  * debian/patches:
+    - Removed 01_fix_doc_install.patch, change included upstream.
+    - Removed 02_fix_man_whatis.patch, change included upstream.
+  * control.in
+    - Removed package dependency on libgdbm-dev, no longer used.
+
+ -- Allison Randal <allison at parrot.org>  Tue, 27 Apr 2010 18:03:12 +0100
+
 parrot (2.0.0-1) unstable; urgency=low
   * New upstream release
   * parrot-devel.install.in

Modified: branches/ops_pct/ports/debian/control.in
==============================================================================
--- branches/ops_pct/ports/debian/control.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ports/debian/control.in	Wed May  5 08:45:29 2010	(r46302)
@@ -3,7 +3,7 @@
 Priority: optional
 Maintainer: Debian Parrot Maintainers <pkg-parrot-devel at lists.alioth.debian.org>
 Uploaders: Allison Randal <allison at parrot.org>, Nuno Carvalho <mestre.smash at gmail.com>, Patrick Michaud <pmichaud at pobox.com>
-Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libgdbm-dev, libreadline-dev, quilt
+Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libreadline-dev, quilt
 Standards-Version: 3.8.4
 
 Package: parrot

Deleted: branches/ops_pct/ports/debian/patches/01_fix_doc_install.patch
==============================================================================
--- branches/ops_pct/ports/debian/patches/01_fix_doc_install.patch	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,11 +0,0 @@
---- parrot-2.0.0.orig/config/gen/makefiles/root.in
-+++ parrot-2.0.0/config/gen/makefiles/root.in
-@@ -2664,6 +2664,7 @@
-     --buildprefix=$(BUILDPREFIX) \
-     --prefix=$(PREFIX) \
-     --docdir=$(DOC_DIR) \
-+    --destdir=$(DESTDIR) \
-     --versiondir=$(VERSION_DIR) \
-     MANIFEST MANIFEST.generated
- 
-

Deleted: branches/ops_pct/ports/debian/patches/02_fix_man_whatis.patch
==============================================================================
--- branches/ops_pct/ports/debian/patches/02_fix_man_whatis.patch	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,22 +0,0 @@
---- parrot-2.0.0.orig/tools/dev/pbc_to_exe.pir
-+++ parrot-2.0.0/tools/dev/pbc_to_exe.pir
-@@ -4,7 +4,7 @@
- 
- =head1 NAME
- 
--pbc_to_exe
-+pbc_to_exe - Generate executables from Parrot bytecode
- 
- =head1 DESCRIPTION
- 
---- parrot-2.0.0.orig/src/parrot_debugger.c
-+++ parrot-2.0.0/src/parrot_debugger.c
-@@ -4,7 +4,7 @@
- 
- =head1 NAME
- 
--parrot_debugger
-+parrot_debugger - The Parrot Debugger
- 
- =head1 DESCRIPTION
- 

Modified: branches/ops_pct/ports/debian/patches/series
==============================================================================
--- branches/ops_pct/ports/debian/patches/series	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ports/debian/patches/series	Wed May  5 08:45:29 2010	(r46302)
@@ -1,3 +1 @@
-01_fix_doc_install.patch
-02_fix_man_whatis.patch
 03_fix_nqp_man.patch

Copied: branches/ops_pct/ports/fedora/2.3.0/parrot.desk.in.tar.gz (from r46301, trunk/ports/fedora/2.3.0/parrot.desk.in.tar.gz)
==============================================================================
Binary file (source and/or target). No diff available.

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

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

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

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

Copied: branches/ops_pct/ports/mandriva/2.3.0/parrot-2.3.0-remove_md2_upstream_r45824.patch (from r46301, trunk/ports/mandriva/2.3.0/parrot-2.3.0-remove_md2_upstream_r45824.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/ports/mandriva/2.3.0/parrot-2.3.0-remove_md2_upstream_r45824.patch	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/ports/mandriva/2.3.0/parrot-2.3.0-remove_md2_upstream_r45824.patch)
@@ -0,0 +1,42 @@
+Index: trunk/config/gen/makefiles/dynpmc.in
+===================================================================
+--- trunk/config/gen/makefiles/dynpmc.in	(revision 44649)
++++ trunk/config/gen/makefiles/dynpmc.in	(revision 45824)
+@@ -39,5 +39,4 @@
+ 
+ PMCS_DIGEST = \
+-  md2.pmc \
+   md4.pmc \
+   md5.pmc \
+@@ -49,5 +48,4 @@
+ 
+ OBJS_DIGEST = \
+-  md2$(O) \
+   md4$(O) \
+   md5$(O) \
+@@ -202,13 +200,4 @@
+ 	$(PMC2C) --library digest_group --c $(PMCS_DIGEST)
+ 
+-md2$(O): md2.c
+-	$(CC) -c @cc_o_out at md2$(O) $(INCLUDES) $(CFLAGS) md2.c
+-
+-md2.c: md2.dump
+-	$(PMC2CC) md2.pmc
+-
+-md2.dump: md2.pmc
+-	$(PMC2CD) md2.pmc
+-
+ md4$(O): md4.c
+ 	$(CC) -c @cc_o_out at md4$(O) $(INCLUDES) $(CFLAGS) md4.c
+Index: trunk/config/gen/crypto.pm
+===================================================================
+--- trunk/config/gen/crypto.pm	(revision 42949)
++++ trunk/config/gen/crypto.pm	(revision 45824)
+@@ -28,7 +28,4 @@
+     $data{result}      = q{};
+     $data{digest}      = {
+-        MD2         => {
+-            md_result => 'ab4f496bfb2a530b219ff33031fe06b0',
+-        },
+         MD4         => {
+             md_result => 'd9130a8164549fe818874806e1c7014b',

Copied: branches/ops_pct/ports/mandriva/2.3.0/parrot.spec (from r46301, trunk/ports/mandriva/2.3.0/parrot.spec)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/ports/mandriva/2.3.0/parrot.spec	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/ports/mandriva/2.3.0/parrot.spec)
@@ -0,0 +1,339 @@
+%define name    parrot
+%define version 2.3.0
+%define release %mkrel 2
+
+%define libname        %mklibname %{name}
+%define libname_devel  %mklibname -d %{name} 
+
+%define _requires_exceptions perl(Parrot::Pmc2c::.*)
+%define _provides_exceptions perl(File::Which)
+
+Name:          %name
+Version:       %version
+Release:       %release
+
+Summary:       Parrot Virtual Machine
+License:       Artistic 2.0
+Group:         Development/Perl
+Url:           http://www.parrot.org/
+Source0:       ftp://ftp.parrot.org/pub/parrot/releases/devel/%{version}/%{name}-%{version}.tar.gz
+Patch0:        parrot-2.3.0-remove_md2_upstream_r45824.patch
+
+BuildRequires: gdbm-devel
+BuildRequires: gmp-devel
+BuildRequires: libicu-devel
+BuildRequires: ncurses-devel
+BuildRequires: perl-doc
+BuildRequires: readline-devel
+
+BuildRoot:     %{_tmppath}/%{name}-%{version}-%{release}
+
+%description
+Parrot is a virtual machine designed to efficiently compile and execute 
+bytecode for interpreted languages. Parrot will be the target for the final 
+Perl 6 compiler, and is already usable as a backend for Pugs, as well as 
+variety of other languages
+
+#--
+
+%package -n %libname
+Summary:    Parrot Virtual Machine run time library
+License:    Artistic 2.0
+Group:      Development/Perl
+Provides:   lib%{name} = %{version}-%{release}
+Requires:   %{name} = %{version}-%{release}
+Requires:   %{_libdir}/pkgconfig
+
+%description -n %libname
+Run time library for %{name}.
+
+#--
+
+%package -n %{name}-doc
+Summary:    Parrot Virtual Machine documentation
+License:    Artistic 2.0
+Group:      Development/Perl
+
+%description -n %{name}-doc
+Documentation for %{name}.
+
+#--
+
+%package -n %libname_devel
+Summary:    Parrot Virtual Machine development headers and libraries
+License:    Artistic 2.0
+Group:      Development/Perl
+Provides:   %{name}-devel = %{version}-%{release}
+Requires:   %libname = %{version}
+
+%description -n %libname_devel
+Development files for %{name}.
+
+#--
+
+%package -n %{name}-src
+Summary:    Parrot Virtual Machine sources
+License:    Artistic 2.0
+Group:      Development/Perl
+Provides:   %{name}-src = %{version}-%{release}
+
+%description -n %{name}-src
+Sources of %{name}.
+
+
+%prep
+%setup -q
+%patch0 -p1 -b .md2
+%{__perl} -pi -e 's,"lib/,"%{_lib}/, if (/CONST_STRING\(interp,/)' \
+    src/library.c
+%{__perl} -pi -e "s,'/usr/lib','%{_libdir}',;s,runtime/lib/,runtime/%{_lib}/," \
+    tools/dev/install_files.pl \
+    tools/dev/mk_manifest_and_skip.pl
+
+%build
+%{__perl} Configure.pl \
+    --prefix=%{_usr} \
+    --libdir=%{_libdir} \
+    --sysconfdir=%{_sysconfdir} \
+    --infodir=%{_datadir}/info \
+    --mandir=%{_mandir} \
+    --cc="%{__cc}" \
+    --parrot_is_shared \
+    --lex=/usr/bin/flex \
+    --yacc=/usr/bin/yacc \
+    --libs='-lcurses -lm -lrt'
+
+    #--cxx=%{__cxx} \
+# the following Configure.pl flag makes the compile goes boom
+    #--optimize="$RPM_OPT_FLAGS -maccumulate-outgoing-args" \
+
+%make
+export LD_LIBRARY_PATH=$( pwd )/blib/lib
+%make parrot_utils
+%make installable
+%make html
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+export LD_LIBRARY_PATH=$( pwd )/blib/lib
+make install DESTDIR=$RPM_BUILD_ROOT
+
+# Drop the docs so rpm can pick them up itself.
+rm -rf $RPM_BUILD_ROOT/%{_docdir}/parrot
+
+# Force permissions on doc directories.
+find docs examples -type d -exec chmod 755 {} \;
+find docs examples -type f -exec chmod 644 {} \;
+
+# Force permissions on shared libs so they get stripped.
+find $RPM_BUILD_ROOT%{_libdir} -type f \( -name '*.so' -o -name '*.so.*' \) \
+    -exec chmod 755 {} \;
+
+%check
+export LD_LIBRARY_PATH=$( pwd )/blib/lib
+#make test
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%if %mdkversion < 200900
+%post -n %libname -p /sbin/ldconfig
+%endif
+
+%if %mdkversion < 200900
+%postun -n %libname -p /sbin/ldconfig
+%endif
+
+%files
+%defattr(-,root,root,-)
+%doc ChangeLog CREDITS NEWS PBC_COMPAT PLATFORMS README
+%doc RESPONSIBLE_PARTIES TODO
+%exclude %{_bindir}/parrot_config
+%exclude %{_bindir}/parrot_debugger
+%exclude %{_bindir}/pbc_*
+%{_bindir}/*
+
+%files -n %{name}-doc
+%defattr(-,root,root,-)
+%doc docs examples
+
+%files -n %libname
+%defattr(-,root,root,-)
+%{_libdir}/parrot
+%{_libdir}/*.so.*
+
+%files -n %libname_devel
+%defattr(-,root,root,-)
+%{_bindir}/parrot_config
+%{_bindir}/parrot_debugger
+%{_bindir}/pbc_disassemble
+%{_bindir}/pbc_merge
+%{_bindir}/pbc_to_exe
+%{_bindir}/pbc_dump
+%{_includedir}/*
+%{_libdir}/pkgconfig/*
+%{_libdir}/*.so
+%{_libdir}/*.a
+
+%files -n %{name}-src
+%defattr(-,root,root,-)
+/usr/src/parrot
+
+
+%changelog
+* Wed Apr 21 2010 Jérôme Quelin <jquelin at mandriva.org> 2.3.0-2mdv2010.1
++ Revision: 537554
+- update to 2.3.0
+
+* Sun Mar 21 2010 Funda Wang <fwang at mandriva.org> 2.2.0-2mdv2010.1
++ Revision: 526122
+- rebuild for new icu
+
+* Wed Mar 17 2010 Jérôme Quelin <jquelin at mandriva.org> 2.2.0-1mdv2010.1
++ Revision: 523422
+- update to new version 2.2.0
+
+* Fri Feb 19 2010 Jérôme Quelin <jquelin at mandriva.org> 2.1.1-1mdv2010.1
++ Revision: 507974
+- update to new version 2.1.1
+
+* Tue Feb 09 2010 Funda Wang <fwang at mandriva.org> 2.0.0-2mdv2010.1
++ Revision: 503382
+- rebuild for new gmp
+
+* Thu Jan 21 2010 Jérôme Quelin <jquelin at mandriva.org> 2.0.0-1mdv2010.1
++ Revision: 494465
+- update to 2.0.0
+
+* Wed Dec 16 2009 Jérôme Quelin <jquelin at mandriva.org> 1.9.0-2mdv2010.1
++ Revision: 479530
+- bump mkrel
+- remove weird requires
+
+* Wed Dec 16 2009 Jérôme Quelin <jquelin at mandriva.org> 1.9.0-1mdv2010.1
++ Revision: 479220
+- update to new version 1.9.0
+
+* Tue Dec 08 2009 Jérôme Quelin <jquelin at mandriva.org> 1.8.0-5mdv2010.1
++ Revision: 474872
+- splitting -src from -devel
+
+* Tue Dec 08 2009 Jérôme Quelin <jquelin at mandriva.org> 1.8.0-4mdv2010.1
++ Revision: 474853
+- shipping parrot src, needed for rakudo
+
+* Mon Nov 23 2009 Jérôme Quelin <jquelin at mandriva.org> 1.8.0-3mdv2010.1
++ Revision: 469206
+- fix #55891: parrot was providing perl(file::which)
+
+* Wed Nov 18 2009 Jérôme Quelin <jquelin at mandriva.org> 1.8.0-2mdv2010.1
++ Revision: 467209
+- bump mkrel
+- removing a bogus requires auto-extracted
+
+* Tue Nov 17 2009 Jérôme Quelin <jquelin at mandriva.org> 1.8.0-1mdv2010.1
++ Revision: 467002
+- update to new version 1.8.0
+
+* Fri Nov 06 2009 Jérôme Quelin <jquelin at mandriva.org> 1.7.0-1mdv2010.1
++ Revision: 460705
+- update to new version 1.7.0
+
+* Tue Sep 15 2009 Jérôme Quelin <jquelin at mandriva.org> 1.6.0-1mdv2010.0
++ Revision: 443097
+- update to 1.6.0
+
+* Fri Sep 04 2009 Jérôme Quelin <jquelin at mandriva.org> 1.5.0-2mdv2010.0
++ Revision: 431070
+- rebuild
+
+* Sun Aug 23 2009 Jérôme Quelin <jquelin at mandriva.org> 1.5.0-1mdv2010.0
++ Revision: 419770
+- forgot to commit tarball
+- update to 1.5.0
+
+* Wed Jul 22 2009 Jérôme Quelin <jquelin at mandriva.org> 1.4.0-1mdv2010.0
++ Revision: 398641
+- update to 1.4.0
+
+* Thu Jun 18 2009 Jérôme Quelin <jquelin at mandriva.org> 1.3.0-1mdv2010.0
++ Revision: 386942
+- update to new version 1.3.0
+
+* Sun May 31 2009 Funda Wang <fwang at mandriva.org> 1.2.0-2mdv2010.0
++ Revision: 381586
+- rebuild for new icu libmajor
+
+* Sat May 30 2009 Jérôme Quelin <jquelin at mandriva.org> 1.2.0-1mdv2010.0
++ Revision: 381426
+- update to 1.2.0
+
+* Sun Mar 22 2009 Jérôme Quelin <jquelin at mandriva.org> 1.0.0-1mdv2009.1
++ Revision: 360489
+- removing make languages, target has been removed
+- update to 1.0.0
+
+* Wed Mar 11 2009 Jérôme Quelin <jquelin at mandriva.org> 0.9.1-2mdv2009.1
++ Revision: 353832
+- fixing url
+
+* Wed Mar 11 2009 Jérôme Quelin <jquelin at mandriva.org> 0.9.1-1mdv2009.1
++ Revision: 353669
+- Development/Liraries group doesn't exist. using devel/perl
+- adding missing group to fix strange submit error (thanks misc++)
+- fixing rpmlint warnings
+- minor tweak
+- version 0.9.1 - most of specfile taken from upstream project
+
+* Wed Jul 30 2008 Thierry Vignaud <tv at mandriva.org> 0.4.17-4mdv2009.0
++ Revision: 255040
+- rebuild
+- kill re-definition of %%buildroot on Pixel's request
+
+  + Pixel <pixel at mandriva.com>
+    - do not call ldconfig in %%post/%%postun, it is now handled by filetriggers
+
+  + Michael Scherer <misc at mandriva.org>
+    - remove old Obsoletes, prevent rpm to compile
+
+  + Olivier Blin <oblin at mandriva.com>
+    - restore BuildRoot
+
+* Fri Nov 23 2007 Thierry Vignaud <tv at mandriva.org> 0.4.17-2mdv2008.1
++ Revision: 111491
+- rebuild for new libicu
+
+  + Funda Wang <fwang at mandriva.org>
+    - New version 0.4.17
+
+* Sun Jul 15 2007 Funda Wang <fwang at mandriva.org> 0.4.13-2mdv2008.0
++ Revision: 52316
+- Obsoletes old major
+
+* Wed Jun 27 2007 Funda Wang <fwang at mandriva.org> 0.4.13-1mdv2008.0
++ Revision: 44826
+- more BuildRequires
+- remove unneeded(?) .c source files
+- disable patch
+  make reallyinstall
+- New version
+
+
+* Wed Aug 30 2006 Thierry Vignaud <tvignaud at mandriva.com> 0.4.6-1mdv2007.0
+- new release
+
+* Mon May 29 2006 Michael Scherer <misc at mandriva.org> 0.4.4-1mdv2007.0
+- New release 0.4.4
+
+* Tue Apr 18 2006 Michael Scherer <misc at mandriva.org> 0.4.3-1mdk
+- New release 0.4.3
+
+* Fri Mar 24 2006 Michael Scherer <misc at mandriva.org> 0.4.2-1mdk
+- New release 0.4.2
+- patch0 to compile with lib readline
+
+* Sat Feb 11 2006 Michael Scherer <misc at mandriva.org> 0.4.1-1mdk
+- Initial release
+

Deleted: branches/ops_pct/ports/mandriva/parrot.spec.mandriva
==============================================================================
--- branches/ops_pct/ports/mandriva/parrot.spec.mandriva	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,167 +0,0 @@
-%define name    parrot
-%define version 0.9.1
-%define release %mkrel 2
-
-%define libname %mklibname %{name}
-%define libname_devel  %mklibname -d %{name} 
-
-Summary:       Parrot Virtual Machine
-Name:          %name
-Version:       %version
-Release:       %release
-Source0:       ftp://ftp.parrot.org/pub/parrot/releases/devel/%{version}/%{name}-%{version}.tar.gz
-License:       Artistic 2.0
-Group:         Development/Perl
-Url:           http://www.parrot.org/
-BuildRoot:     %{_tmppath}/%{name}-%{version}-%{release}-buildroot
-BuildRequires: readline-devel
-BuildRequires: ncurses-devel
-BuildRequires: gmp-devel
-BuildRequires: gdbm-devel
-BuildRequires: perl-doc
-BuildRequires: libicu-devel
-
-%description
-Parrot is a virtual machine designed to efficiently compile and execute 
-bytecode for interpreted languages. Parrot will be the target for the final 
-Perl 6 compiler, and is already usable as a backend for Pugs, as well as 
-variety of other languages
-
-#--
-
-%package -n %libname
-Summary:    Parrot Virtual Machine run time library
-License:    Artistic 2.0
-Group:      Development/Perl
-Provides:   lib%{name} = %{version}-%{release}
-Requires:       %{name} = %{version}-%{release}
-Requires:       %{_libdir}/pkgconfig
-
-%description -n %libname
-Run time library for %{name}.
-
-#--
-
-%package -n %{name}-doc
-Summary:    Parrot Virtual Machine documentation
-License:    Artistic 2.0
-Group:      Development/Perl
-
-%description -n %{name}-doc
-Documentation for %{name}.
-
-#--
-
-%package -n %libname_devel
-Summary:    Parrot Virtual Machine development headers and libraries
-License:    Artistic 2.0
-Group:      Development/Perl
-Provides:   %{name}-devel = %version-%release
-Requires:   %libname = %version
-
-%description -n %libname_devel
-Development files for %{name}.
-
-%prep
-%setup -q
-
-%{__perl} -pi -e 's,"lib/,"%{_lib}/, if (/CONST_STRING\(interp,/)' \
-    src/library.c
-%{__perl} -pi -e "s,'/usr/lib','%{_libdir}',;s,runtime/lib/,runtime/%{_lib}/," \
-    tools/dev/install_files.pl \
-    tools/dev/mk_manifest_and_skip.pl
-
-%build
-%{__perl} Configure.pl \
-    --prefix=%{_usr} \
-    --libdir=%{_libdir} \
-    --sysconfdir=%{_sysconfdir} \
-    --infodir=%{_datadir}/info \
-    --mandir=%{_mandir} \
-    --cc="%{__cc}" \
-    --cxx=%{__cxx} \
-    --parrot_is_shared \
-    --lex=/usr/bin/flex \
-    --yacc=/usr/bin/yacc \
-    --libs='-lcurses -lm'
-
-# the following Configure.pl flag makes the compile goes boom
-    #--optimize="$RPM_OPT_FLAGS -maccumulate-outgoing-args" \
-
-make
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-make languages
-make parrot_utils
-make installable
-make html
-
-
-%install
-rm -rf $RPM_BUILD_ROOT
-
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-make install DESTDIR=$RPM_BUILD_ROOT
-
-# Drop the docs so rpm can pick them up itself.
-rm -rf $RPM_BUILD_ROOT/%{_docdir}/parrot
-
-# Force permissions on doc directories.
-find docs examples -type d -exec chmod 755 {} \;
-find docs examples -type f -exec chmod 644 {} \;
-
-# Force permissions on shared libs so they get stripped.
-find $RPM_BUILD_ROOT%{_libdir} -type f \( -name '*.so' -o -name '*.so.*' \) \
-    -exec chmod 755 {} \;
-
-# These files *probably* aren't needed.
-rm -rf $RPM_BUILD_ROOT%{_usr}/config \
-    $RPM_BUILD_ROOT%{_includedir}/src \
-    $RPM_BUILD_ROOT%{_usr}/src \
-    $RPM_BUILD_ROOT%{_usr}/tools
-
-
-%check
-export LD_LIBRARY_PATH=$( pwd )/blib/lib
-#make test
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%if %mdkversion < 200900
-%post -n %libname -p /sbin/ldconfig
-%endif
-
-%if %mdkversion < 200900
-%postun -n %libname -p /sbin/ldconfig
-%endif
-
-%files
-%defattr(-,root,root,-)
-%doc ChangeLog CREDITS NEWS PBC_COMPAT PLATFORMS README
-%doc RESPONSIBLE_PARTIES TODO
-%exclude %{_bindir}/parrot_config
-%exclude %{_bindir}/parrot_debugger
-%exclude %{_bindir}/pbc_*
-%{_bindir}/*
-
-%files -n %{name}-doc
-%defattr(-,root,root,-)
-%doc docs examples
-
-%files -n %libname
-%defattr(-,root,root,-)
-%{_libdir}/parrot
-%{_libdir}/*.so.*
-
-%files -n %libname_devel
-%defattr(-,root,root,-)
-%{_bindir}/parrot_config
-%{_bindir}/parrot_debugger
-%{_bindir}/pbc_disassemble
-%{_bindir}/pbc_merge
-%{_bindir}/pbc_to_exe
-%{_bindir}/pbc_dump
-%{_includedir}/*
-%{_libdir}/pkgconfig/*
-%_libdir/*.so
-%_libdir/*.a

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

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

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

Modified: branches/ops_pct/ports/ubuntu/control.in
==============================================================================
--- branches/ops_pct/ports/ubuntu/control.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/ports/ubuntu/control.in	Wed May  5 08:45:29 2010	(r46302)
@@ -4,7 +4,7 @@
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss at lists.ubuntu.com>
 XSBC-Original-Maintainer: Debian Parrot Maintainers <pkg-parrot-devel at lists.alioth.debian.org>
 Uploaders: Allison Randal <allison at parrot.org>, Nuno Carvalho <mestre.smash at gmail.com>, Patrick Michaud <pmichaud at pobox.com>
-Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libgdbm-dev, libreadline-dev
+Build-Depends: debhelper (>= 5.0.0), perl, perl-doc, libreadline-dev
 Standards-Version: 3.8.1
 
 Package: parrot

Copied: branches/ops_pct/runtime/parrot/library/Archive/Tar.pir (from r46301, trunk/runtime/parrot/library/Archive/Tar.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/runtime/parrot/library/Archive/Tar.pir	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/runtime/parrot/library/Archive/Tar.pir)
@@ -0,0 +1,455 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+Archive/Tar
+
+=head2 DESCRIPTION
+
+Partial port of Archive::Tar (version 1.60)
+
+See L<http://search.cpan.org/~bingos/Archive-Tar/>
+
+=cut
+
+.include 'stat.pasm'
+
+=head3 Class Archive;Tar;File
+
+=over 4
+
+=cut
+
+.namespace ['Archive';'Tar';'File']
+
+.sub '' :init :load :anon
+    load_bytecode 'osutils.pbc' # splitpath
+    $P0 = newclass ['Archive';'Tar';'File']
+    $P0.'add_attribute'('name')
+    $P0.'add_attribute'('mode')
+    $P0.'add_attribute'('uid')
+    $P0.'add_attribute'('gid')
+    $P0.'add_attribute'('size')
+    $P0.'add_attribute'('mtime')
+    $P0.'add_attribute'('type')
+    $P0.'add_attribute'('linkname')
+    $P0.'add_attribute'('magic')
+    $P0.'add_attribute'('version')
+    $P0.'add_attribute'('uname')
+    $P0.'add_attribute'('gname')
+    $P0.'add_attribute'('devmajor')
+    $P0.'add_attribute'('devminor')
+    $P0.'add_attribute'('prefix')
+    $P0.'add_attribute'('data')
+    .globalconst int MODE = 0o666
+    .globalconst string FILE = '0'
+    .globalconst string MAGIC = 'ustar'
+    .globalconst string TAR_VERSION = '00'
+    .globalconst int BLOCK = 512
+.end
+
+=item data
+
+=cut
+
+.sub 'data' :method
+    $P0 = getattribute self, 'data'
+    .return ($P0)
+.end
+
+=item new_from_file
+
+=cut
+
+.sub 'new_from_file'
+    .param string path
+    .local string data
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    .local string data
+    data = $P0.'readall'(path)
+    pop_eh
+    .local int uid, gid, mtime
+    uid = stat path, .STAT_UID
+    gid = stat path, .STAT_GID
+    mtime = stat path, .STAT_MODIFYTIME
+    .tailcall new_from_data(path, data, uid :named('uid'), gid :named('gid'), mtime :named('mtime'))
+  _handler:
+    null $P0
+    .return ($P0)
+.end
+
+=item new_from_data
+
+=cut
+
+.sub 'new_from_data'
+    .param string path
+    .param string data
+    .param int mode             :named('mode') :optional
+    .param int has_mode         :opt_flag
+    .param int uid              :named('uid') :optional
+    .param int has_uid          :opt_flag
+    .param int gid              :named('gid') :optional
+    .param int has_gid          :opt_flag
+    .param int mtime            :named('mtime') :optional
+    .param int has_mtime        :opt_flag
+    .param string type          :named('type') :optional
+    .param int has_type         :opt_flag
+    .param string linkname      :named('linkname') :optional
+    .param int has_linkname     :opt_flag
+    .param string uname         :named('uname') :optional
+    .param int has_uname        :opt_flag
+    .param string gname         :named('gname') :optional
+    .param int has_gname        :opt_flag
+    .param int devmajor         :named('devmajor') :optional
+    .param int has_devmajor     :opt_flag
+    .param int devminor         :named('devminor') :optional
+    .param int has_devminor     :opt_flag
+    $P0 = new ['Archive';'Tar';'File']
+    .local string prefix, name
+    (prefix, name) = _prefix_and_file(path)
+    if has_mode goto L1
+    mode = MODE
+  L1:
+    if has_uid goto L2
+    uid = 0
+  L2:
+    if has_gid goto L3
+    gid = 0
+  L3:
+    if has_mtime goto L4
+    mtime = time
+  L4:
+    if has_type goto L5
+    type = FILE
+  L5:
+    if has_linkname goto L6
+    linkname = ''
+  L6:
+    if has_uname goto L7
+    uname = 'unknown'
+  L7:
+    if has_gname goto L8
+    gname = 'unknown'
+  L8:
+    if has_devmajor goto L9
+    devmajor = 0
+  L9:
+    if has_devminor goto L10
+    devminor = 0
+  L10:
+    $P1 = box data
+    setattribute $P0, 'data', $P1
+    $P1 = box name
+    setattribute $P0, 'name', $P1
+    $P1 = box mode
+    setattribute $P0, 'mode', $P1
+    $P1 = box uid
+    setattribute $P0, 'uid', $P1
+    $P1 = box gid
+    setattribute $P0, 'gid', $P1
+    $I0 = length data
+    $P1 = box $I0
+    setattribute $P0, 'size', $P1
+    $I0 = mtime
+    $P1 = box $I0
+    setattribute $P0, 'mtime', $P1
+    $P1 = box type
+    setattribute $P0, 'type', $P1
+    $P1 = box linkname
+    setattribute $P0, 'linkname', $P1
+    $P1 = box MAGIC
+    setattribute $P0, 'magic', $P1
+    $P1 = box TAR_VERSION
+    setattribute $P0, 'version', $P1
+    $P1 = box uname
+    setattribute $P0, 'uname', $P1
+    $P1 = box gname
+    setattribute $P0, 'gname', $P1
+    $P1 = box devminor
+    setattribute $P0, 'devminor', $P1
+    $P1 = box devmajor
+    setattribute $P0, 'devmajor', $P1
+    $P1 = box prefix
+    setattribute $P0, 'prefix', $P1
+    .return ($P0)
+.end
+
+.sub '_prefix_and_file' :anon
+    .param string path
+    .local string volume, directories, file
+    (volume, directories, file) = splitpath(path)
+    .return (directories, file)
+.end
+
+=item full_path
+
+=cut
+
+.sub 'full_path' :method
+    .local string prefix, name
+    $P0 = getattribute self, 'name'
+    name = $P0
+    $P0 = getattribute self, 'prefix'
+    prefix = $P0
+    unless prefix == '' goto L1
+    .return (name)
+  L1:
+    $S0 = catfile(prefix, name)
+    .return ($S0)
+.end
+
+=item rename
+
+=cut
+
+.sub 'rename' :method
+    .param string path
+    .local string prefix, name
+    (prefix, name) = _prefix_and_file(path)
+    $P0 = box name
+    setattribute self, 'name', $P0
+    $P0 = box prefix
+    setattribute self, 'prefix', $P0
+.end
+
+=item _format_tar_entry
+
+=cut
+
+.sub '_format_tar_entry' :method
+    $P0 = new 'ResizableStringArray'
+    $P1 = new 'FixedPMCArray'
+    set $P1, 1
+    .const string f1 = '%06o'
+    .const string f2 = '%11o'
+    $P2 = getattribute self, 'name'
+    $S0 = pad_string_with_null($P2, 100)
+    push $P0, $S0
+    $P2 = getattribute self, 'mode'
+    $P1[0] = $P2
+    $S0 = sprintf f1, $P1
+    $S0 = pad_string_with_null($S0, 8)
+    push $P0, $S0
+    $P2 = getattribute self, 'uid'
+    $P1[0] = $P2
+    $S0 = sprintf f1, $P1
+    $S0 = pad_string_with_null($S0, 8)
+    push $P0, $S0
+    $P2 = getattribute self, 'gid'
+    $P1[0] = $P2
+    $S0 = sprintf f1, $P1
+    $S0 = pad_string_with_null($S0, 8)
+    push $P0, $S0
+    $P2 = getattribute self, 'size'
+    $P1[0] = $P2
+    $S0 = sprintf f2, $P1
+    $S0 = pad_string_with_null($S0, 12)
+    push $P0, $S0
+    $P2 = getattribute self, 'mtime'
+    $P1[0] = $P2
+    $S0 = sprintf f2, $P1
+    $S0 = pad_string_with_null($S0, 12)
+    push $P0, $S0
+    push $P0, "        " # checksum
+    $P2 = getattribute self, 'type'
+    $S0 = pad_string_with_null($P2, 1)
+    push $P0, $S0
+    $P2 = getattribute self, 'linkname'
+    $S0 = pad_string_with_null($P2, 100)
+    push $P0, $S0
+    $P2 = getattribute self, 'magic'
+    $S0 = pad_string_with_null($P2, 6)
+    push $P0, $S0
+    $P2 = getattribute self, 'version'
+    $S0 = pad_string_with_null($P2, 2)
+    push $P0, $S0
+    $P2 = getattribute self, 'uname'
+    $S0 = pad_string_with_null($P2, 32)
+    push $P0, $S0
+    $P2 = getattribute self, 'gname'
+    $S0 = pad_string_with_null($P2, 32)
+    push $P0, $S0
+    $P2 = getattribute self, 'devmajor'
+    $P1[0] = $P2
+    $S0 = sprintf f1, $P1
+    $S0 = pad_string_with_null($S0, 8)
+    push $P0, $S0
+    $P2 = getattribute self, 'devminor'
+    $P1[0] = $P2
+    $S0 = sprintf f1, $P1
+    $S0 = pad_string_with_null($S0, 8)
+    push $P0, $S0
+    $P2 = getattribute self, 'prefix'
+    $S0 = pad_string_with_null($P2, 155)
+    push $P0, $S0
+    $S0 = join '', $P0
+    $I0 = compute_checksum($S0)
+    $P1[0] = $I0
+    $S1 = sprintf "%6o\0\0", $P1
+    $S0 = replace $S0, 148, 8, $S1
+    $S0 = pad_string_with_null($S0, BLOCK)
+    .return ($S0)
+.end
+
+.sub 'pad_string_with_null' :anon
+    .param string str
+    .param int size
+    $S0 = substr str, 0, size
+    $I0 = length str
+    $I0 = size - $I0
+    unless $I0 > 0 goto L1
+    $S1 = repeat "\0", $I0
+    $S0 .= $S1
+  L1:
+    .return ($S0)
+.end
+
+.sub 'compute_checksum' :anon
+    .param string str
+    .local int chk
+    chk = 0
+    $P0 = split '', str
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $I0 = ord $S0
+    chk += $I0
+    goto L1
+  L2:
+    .return (chk)
+.end
+
+=back
+
+=head3 Class Archive;Tar
+
+=over 4
+
+=cut
+
+.namespace ['Archive';'Tar']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['Archive';'Tar']
+    $P0.'add_attribute'('data')
+.end
+
+.sub 'init' :vtable :method
+    $P0 = new 'ResizablePMCArray'
+    setattribute self, 'data', $P0
+.end
+
+=item add_files
+
+=cut
+
+.sub 'add_files' :method
+    .param pmc filenames :slurpy
+    .local pmc rv
+    rv = new 'ResizablePMCArray'
+    $P0 = iter filenames
+  L1:
+    unless $P0 goto L2
+    .local string filename
+    filename = shift $P0
+    $I0 = stat filename, .STAT_EXISTS
+    if $I0 goto L3
+    self.'_error'("No such file: '", filename, "'")
+    goto L1
+  L3:
+    .local pmc obj
+    $P1 = get_hll_global ['Archive';'Tar';'File'], 'new_from_file'
+    obj = $P1(filename)
+    unless null obj goto L4
+    self.'_error'("Unable to add file: '", filename, "'")
+    goto L1
+  L4:
+    push rv, obj
+    goto L1
+  L2:
+    $P0 = getattribute self, 'data'
+    $P1 = iter rv
+  L5:
+    unless $P1 goto L6
+    $P2 = shift $P1
+    push $P0, $P2
+    goto L5
+  L6:
+    .return (rv)
+.end
+
+=item add_data
+
+=cut
+
+.sub 'add_data' :method
+    .param string filename
+    .param string data
+    .param pmc opt :slurpy :named
+    .local pmc obj
+    $P0 = get_hll_global ['Archive';'Tar';'File'], 'new_from_data'
+    obj = $P0(filename, data, opt :flat :named)
+    $P0 = getattribute self, 'data'
+    push $P0, obj
+    .return (obj)
+.end
+
+=item write
+
+=cut
+
+.sub 'write' :method
+    .param pmc fh
+    $P0 = getattribute self, 'data'
+    $P1 = iter $P0
+  L1:
+    unless $P1 goto L2
+    .local pmc entry
+    entry = shift $P1
+    .local string header
+    header = entry.'_format_tar_entry'()
+    fh.'puts'(header)
+    $S0 = entry.'data'()
+    fh.'puts'($S0)
+    $I0 = length $S0
+    $I0 %= BLOCK
+    unless $I0 goto L1
+    .local string TAR_PAD
+    $I0 = BLOCK - $I0
+    TAR_PAD = repeat "\0", $I0
+    fh.'puts'(TAR_PAD)
+    goto L1
+  L2:
+    .local string TAR_END
+    TAR_END = repeat "\0", BLOCK
+    $S0 = repeat TAR_END, 2
+    fh.'puts'($S0)
+.end
+
+=item _error
+
+=cut
+
+.sub '_error' :method
+    .param pmc args :slurpy
+    $S0 = join '', args
+    printerr $S0
+    printerr "\n"
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/runtime/parrot/library/CGI/QueryHash.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/CGI/QueryHash.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/CGI/QueryHash.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -143,7 +143,7 @@
         # TODO: This should be an array
         v_array = new 'Hash'
         v_array[0] = v
-        substr k, -2, 2, ''
+        k = replace k, -2, 2, ''
         query_hash[k] = v_array
         branch next_item
 v_isnt_array:

Modified: branches/ops_pct/runtime/parrot/library/Config/JSON.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Config/JSON.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Config/JSON.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -36,11 +36,10 @@
     text = fh.'readall'()
 
     # Convert the text to an object and return it.
-    .local pmc json, code, config
-    load_language  'data_json'
+    .local pmc json, code
+    load_language 'data_json'
     json = compreg 'data_json'
     code = json.'compile'(text)
-
     .tailcall code()
 .end
 
@@ -71,7 +70,7 @@
     expanded = not compact
 
     # render the object as a string.
-    load_bytecode 'JSON.pir'
+    load_bytecode 'JSON.pbc'
     .local string output
     output = _json( config, expanded )
 

Modified: branches/ops_pct/runtime/parrot/library/Crow.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Crow.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Crow.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -124,7 +124,7 @@
         $I0 = index template, symbol
         if -1 == $I0 goto repl_done
         $I1 = length symbol
-        substr template, $I0, $I1, value
+        template = replace template, $I0, $I1, value
         goto repl_loop
       repl_done:
     goto it_loop

Modified: branches/ops_pct/runtime/parrot/library/Getopt/Obj.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Getopt/Obj.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Getopt/Obj.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -357,7 +357,7 @@
 
 =item C<push_string(STRING format)>
 
-A vtable method, invoked by e.g. C<push getopts, "foo|f=s">.  The format is as such.
+A vtable, invoked by e.g. C<push getopts, "foo|f=s">.  The format is:
 
 =over 4
 

Modified: branches/ops_pct/runtime/parrot/library/HTTP/Daemon.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/HTTP/Daemon.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/HTTP/Daemon.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -207,10 +207,9 @@
     $P0 = doc_root
 .end
 
-=item __get_bool()
+=item get_bool()
 
-Vtable method, called from the C<if> or C<unless> opcode. Returns
-true, if the daemon object is listening on a socket, that is if the
+Object is true if the daemon is listening on a socket, that is if the
 initialization went ok.
 
 =cut

Modified: branches/ops_pct/runtime/parrot/library/JSON.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/JSON.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/JSON.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -12,7 +12,7 @@
  load_bytecode 'JSON.pir'
  $S0 = _json( $P0 )
 
-To generate a PMC from a JSON string, see L<compilers/json/JSON.pir>.
+To generate a PMC from a JSON string, see L<compilers/data_json>.
 
 =cut
 

Modified: branches/ops_pct/runtime/parrot/library/MIME/Base64.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/MIME/Base64.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/MIME/Base64.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -164,9 +164,9 @@
 
     # padding with '='
     if len_mod_3 == 0 goto END_2
-        substr base64, -1, 1, ascii:"="
+        base64 = replace base64, -1, 1, ascii:"="
         if len_mod_3 == 2 goto END_2
-            substr base64, -2, 1, ascii:"="
+            base64 = replace base64, -2, 1, ascii:"="
     END_2:
 
     .return( base64 )
@@ -260,9 +260,9 @@
     # cut padded '='
     if len_mod_4 == 0 goto END_3
         if len_mod_4 == 1 goto END_3
-	    chopn plain, 1
+	    plain = chopn plain, 1
             if len_mod_4 == 3 goto END_3
-	        chopn plain, 1
+	        plain = chopn plain, 1
     END_3:
 
     .return( plain )

Modified: branches/ops_pct/runtime/parrot/library/OpenGL.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/OpenGL.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/OpenGL.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -309,8 +309,7 @@
     # Rename all 'glutcb*' symbols to 'glut*'
   rename_callbacks:
     .local string renamed
-    renamed = clone symbol
-    substr renamed, 4, 2, ''
+    renamed = replace symbol, 4, 2, ''
     export_renames[symbol] = renamed
     goto symbol_loop
   symbol_loop_end:
@@ -371,8 +370,7 @@
     # Rename all 'glutcb*' symbols to 'glut*'
   rename_callbacks:
     .local string renamed
-    renamed = clone symbol
-    substr renamed, 4, 2, ''
+    renamed = replace symbol, 4, 2, ''
     export_renames[symbol] = renamed
     goto symbol_loop
   symbol_loop_end:

Modified: branches/ops_pct/runtime/parrot/library/P6object.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/P6object.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/P6object.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -95,7 +95,7 @@
 
 =cut
 
-.sub 'HOW' :method
+.sub 'HOW' :method :nsentry
     $P0 = typeof self
     $P1 = getprop 'metaclass', $P0
     .return ($P1)
@@ -108,7 +108,7 @@
 
 =cut
 
-.sub 'WHAT' :method
+.sub 'WHAT' :method :nsentry
     .local pmc how, what
     how = self.'HOW'()
     .tailcall how.'WHAT'()
@@ -121,7 +121,7 @@
 
 =cut
 
-.sub 'WHERE' :method
+.sub 'WHERE' :method :nsentry
     $I0 = get_addr self
     .return ($I0)
 .end
@@ -133,7 +133,7 @@
 
 =cut
 
-.sub 'WHO' :method
+.sub 'WHO' :method :nsentry
     $P0 = typeof self
     $P0 = getprop 'metaclass', $P0
     $P0 = getattribute $P0, 'parrotclass'
@@ -170,7 +170,7 @@
 
 .namespace ['P6metaclass']
 
-.sub 'WHAT' :method
+.sub 'WHAT' :method :nsentry
     $P0 = getattribute self, 'protoobject'
     .return ($P0)
 .end
@@ -251,8 +251,7 @@
 
   parent_proxy:
     ##  iterate over parent's mro and methods, adding them to parrotclass' namespace
-    .local pmc parrotclassns, mroiter, methods, methoditer
-    parrotclassns = parrotclass.'get_namespace'()
+    .local pmc mroiter, methods, methoditer
     $P0 = parentclass.'inspect'('all_parents')
     mroiter = iter $P0
   mro_loop:
@@ -270,18 +269,20 @@
     $I0 = isa methodpmc, 'NCI'
     if $I0 goto method_loop
     # if there's no existing entry, add method directly
-    $P0 = parrotclassns[methodname]
+    push_eh add_method_failed
+    $P0 = inspect parrotclass, 'methods'
+    $P0 = $P0[methodname]
     if null $P0 goto add_method
     # if existing entry isn't a MultiSub, skip it
     $I0 = isa $P0, ['MultiSub']
     unless $I0 goto method_loop
-    push_eh err
-    parrotclassns.'add_sub'(methodname, methodpmc)
-  err:
+    parrotclass.'add_method'(methodname, methodpmc)
     pop_eh
     goto method_loop
   add_method:
-    parrotclassns[methodname] = methodpmc
+    parrotclass.'add_method'(methodname, methodpmc)
+  add_method_failed:
+    pop_eh
     goto method_loop
   mro_end:
 
@@ -727,7 +728,7 @@
 
 =over 4
 
-=item get_string()  (vtable method)
+=item get_string()
 
 Returns the "shortname" of the protoobject's class and parens.
 
@@ -743,7 +744,7 @@
     .return ($S0)
 .end
 
-=item defined()  (vtable method)
+=item defined()
 
 Protoobjects are always treated as being undefined.
 
@@ -754,7 +755,7 @@
 .end
 
 
-=item name()  (vtable method)
+=item name()
 
 Have protoobjects return their longname in response to a
 C<typeof_s_p> opcode.

Copied: branches/ops_pct/runtime/parrot/library/ProfTest/Matcher.nqp (from r46301, trunk/runtime/parrot/library/ProfTest/Matcher.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/runtime/parrot/library/ProfTest/Matcher.nqp	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/runtime/parrot/library/ProfTest/Matcher.nqp)
@@ -0,0 +1,98 @@
+
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class ProfTest::Matcher is Hash;
+
+method new(*@wants) {
+    self<wants> := ();
+    for @wants -> $want {
+        self<wants>.push($want);
+        self.say("pushed a thing:"~$want.get_str);
+    }
+    self<wants>.push(
+        ProfTest::Want::Goal.new()
+    );
+    self;
+}
+
+method matches($profile) {
+
+    my @backtracks := ();
+    my $line_idx   := 0;
+    my $want_idx   := 0;
+    my $start_line := 0;
+    my $max_line   := +$profile.profile_array;
+
+    my %curr_line;
+    my $curr_want;
+
+    while ($line_idx < $max_line) {
+
+        %curr_line := $profile.profile_array[$line_idx];
+        $curr_want := self<wants>[$want_idx];
+        self.say("current want: "~$curr_want.get_str);
+        my $line_desc;
+        if self<debugging> {
+            $line_desc := "current line: " ~ %curr_line<type> ~'(';
+            for %curr_line -> $k {
+                unless $k eq 'type' {
+                    $line_desc := "$line_desc :$k(" ~ %curr_line{$k} ~") ";
+                }
+            }
+            $line_desc := $line_desc ~ ")";
+        }
+        self.say($line_desc);
+
+        if $curr_want.goal {
+            self.say("SUCCESS\n");
+            return 1;
+        }
+        elsif ($curr_want.accepts(%curr_line)) {
+
+            self.say("ACCEPTED");
+            $line_idx++;
+            # +0 is a workaround for crappy lvalue semantics
+            @backtracks.push( [$line_idx+0, $want_idx+0] );
+            self.say("saving line $line_idx, want $want_idx");
+            self.say("now have "~ ~@backtracks ~ " elements in the stack");
+            $want_idx++;
+        }
+        else {
+            self.say("REJECTED");
+            if !@backtracks && $start_line == $max_line {
+                self.say("FAILURE\n");
+                return 0;
+            }
+            elsif !@backtracks {
+                $start_line++;
+                $line_idx := $start_line+0;
+                self.say("FAILURE: restarting at $line_idx\n");
+            }
+            else {
+                my @a := @backtracks.pop;
+                $line_idx := @a[0];
+                $want_idx := @a[1];
+                self.say("backtracking to line $line_idx, want $want_idx");
+                self.say("now have "~ ~@backtracks ~ " elements in the stack");
+            }
+        }
+        self.say('');
+    }
+}
+
+method say($str) {
+    if self<debugging> {
+        pir::say($str);
+    }
+}
+
+method debugging($i) {
+    self<debugging> := $i+0;
+}
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl

Copied: branches/ops_pct/runtime/parrot/library/ProfTest/NQPProfile.nqp (from r46301, trunk/runtime/parrot/library/ProfTest/NQPProfile.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/runtime/parrot/library/ProfTest/NQPProfile.nqp	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/runtime/parrot/library/ProfTest/NQPProfile.nqp)
@@ -0,0 +1,17 @@
+
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class ProfTest::NQPProfile is ProfTest::PIRProfile;
+
+method new($nqp_code, $canonical? = 1) {
+    my $nqp_compiler := pir::compreg__ps("NQP-rx");
+    my $pir_code     := $nqp_compiler.compile($nqp_code, :target('pir'));
+    ProfTest::PIRProfile.new($pir_code, $canonical);
+}
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl

Copied: branches/ops_pct/runtime/parrot/library/ProfTest/PIRProfile.nqp (from r46301, trunk/runtime/parrot/library/ProfTest/PIRProfile.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/runtime/parrot/library/ProfTest/PIRProfile.nqp	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/runtime/parrot/library/ProfTest/PIRProfile.nqp)
@@ -0,0 +1,113 @@
+
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class ProfTest::PIRProfile is Hash;
+
+method new($pir_code, $canonical? = 1) {
+    self<canonical> := $canonical;
+    self<pir_code>  := $pir_code;
+    self.build_pir_profile;
+    self.build_profile_array;
+    self;
+}
+
+method profile_array() {
+    self<profile_array>;
+}
+
+method build_profile_array() {
+    my %config := self.get_config();
+    my $newline := %config<win32> ?? "\r\n" !! "\n";
+    my @pprof_lines := pir::split($newline, self<profile>);
+    self<profile_array> := ();
+
+    for @pprof_lines -> $line {
+        my $line_match := self.make_line_hash($line);
+        #pir::say($line);
+        #_dumper($line_match);
+        self<profile_array>.push($line_match);
+    }
+}
+
+method make_line_hash($line) {
+
+    my %line_hash := {};
+
+    my $colon_idx := pir::index($line, ":");
+    #if the line starts with "VERSION, CLI or END_OF_RUNLOOP,
+    if ($colon_idx >= 3) {
+        my $type := pir::substr($line, 0, $colon_idx);
+        my $data := pir::substr($line, $colon_idx+1);
+        %line_hash<type> := $type;
+        %line_hash<data> := $data;
+    }
+    else {
+        my $type := pir::substr($line, 0, $colon_idx);
+        %line_hash<type> := $type;
+        $line := pir::substr($line, $colon_idx+1);
+        while ($line) {
+            $line := pir::substr($line, 3);
+            my $colon_idx := pir::index($line, ":");
+            my $split_idx := pir::index($line, "}x}");
+            my $name  := pir::substr($line, 0, $colon_idx);
+            my $value := pir::substr($line, $colon_idx+1, $split_idx-$colon_idx-1);
+            %line_hash{ $name } := $value;
+            $line := pir::substr($line, $split_idx+3);
+        }
+    }
+    %line_hash;
+}
+
+
+method build_pir_profile() {
+
+    my %config    := self.get_config();
+    #XXX(cotto) use a random filename (requires randomness from pir)
+    my $tmp_pir   := %config<tempdir> ~ %config<slash> ~ 'test.pir';
+    my $tmp_pprof := %config<tempdir> ~ %config<slash> ~ 'test.pprof';
+
+    my $fh := pir::new__p_sc('FileHandle');
+    $fh.open($tmp_pir, "w");
+    $fh.puts(self<pir_code>);
+    $fh.close();
+
+    my $parrot_exe := %config<prefix> ~ %config<slash> ~ %config<test_prog>;
+    my $hash_seed_opt := '';
+
+    my %env := pir::new__p_sc('Env');
+    %env{'PARROT_PROFILING_FILENAME'} := $tmp_pprof;
+    if self<canonical> {
+        %env{'PARROT_PROFILING_CANONICAL_OUTPUT'} := 1;
+        $hash_seed_opt := '--hash-seed=1234';
+    }
+
+    my $cli := "$parrot_exe $hash_seed_opt --runcore profiling $tmp_pir";
+
+    my $pipe := pir::new__p_sc('FileHandle');
+    $pipe.open($cli, "rp");
+    $pipe.readall();
+    self<exit_status> := $pipe.exit_status();
+
+    my $pprof_fh  := pir::new__p_sc('FileHandle');
+    self<profile> := $pprof_fh.readall($tmp_pprof);
+
+    pir::loadlib__ps('os');
+    pir::new__p_sc('OS').rm($tmp_pir);
+    pir::new__p_sc('OS').rm($tmp_pprof);
+}
+
+method get_config() {
+    return Q:PIR {
+        .include 'iglobals.pasm'
+        .local pmc i
+        i = getinterp
+        %r = i[.IGLOBALS_CONFIG_HASH]
+    };
+}
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl

Copied: branches/ops_pct/runtime/parrot/library/ProfTest/Want.nqp (from r46301, trunk/runtime/parrot/library/ProfTest/Want.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/runtime/parrot/library/ProfTest/Want.nqp	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/runtime/parrot/library/ProfTest/Want.nqp)
@@ -0,0 +1,185 @@
+
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+class ProfTest::Want is Hash;
+
+method new() { die('...'); }
+
+method accepts() { 1; }
+
+method goal() { 0; }
+
+
+class ProfTest::Want::Goal;
+
+method new() { self; }
+
+method goal() { 1; }
+
+method get_str() { 'Goal' };
+
+
+
+class ProfTest::Want::Any is ProfTest::Want;
+
+method new(@except?) {
+    self<except> := @except;
+    self;
+}
+
+method accepts(%prof_line) {
+    for self<except> -> $except_type {
+        if $except_type eq %prof_line<type>{
+            return 0;
+        }
+    }
+    return 1;
+}
+
+method get_str() {
+    my $str := 'Any(';
+    if self<except> {
+        $str := $str ~ 'except(' ~ join(',', self<except>) ~ '),';
+    }
+    $str := $str ~ ')';
+    $str;
+}
+
+
+
+class ProfTest::Want::Version is ProfTest::Want;
+
+method new($version?) {
+    self<version> := $version;
+    self;
+}
+
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'VERSION' {
+        return 1;
+    }
+}
+
+method get_str() {
+    my $str := 'Version(';
+    if self<version> {
+        $str := $str ~ 'version(' ~ self<version> ~ ')';
+    }
+    $str := $str ~ ')';
+    $str;
+}
+
+
+
+class ProfTest::Want::CLI is ProfTest::Want;
+
+method new() { self }
+
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'CLI' {
+        return 1;
+    }
+}
+
+method get_str() { "CLI()" }
+
+
+
+class ProfTest::Want::EndOfRunloop is ProfTest::Want;
+
+method new() { self; }
+
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'END_OF_RUNLOOP' {
+        return 1;
+    }
+}
+
+method get_str() { 'EndOfRunloop()' }
+
+
+
+class ProfTest::Want::Op is ProfTest::Want;
+
+method new($name, $line?) {
+    self<name> := $name;
+    if $line {
+        self<line> := $line;
+    }
+    self;
+}
+
+method accepts(%prof_line) {
+    if %prof_line<type> eq 'OP' {
+        if self<name> ne %prof_line<op> {
+            return 0;
+        }
+        if self<line> && self<line> != %prof_line<line> {
+            return 0;
+        }
+        return 1;
+    }
+    return 0;
+}
+
+method get_str() {
+    my $str := 'Op(' ~ self<name>;
+    if self<line> {
+        $str := $str ~ ', :line(' ~ self<line> ~ ')';
+    }
+    $str := $str ~ ')';
+    $str;
+}
+
+
+
+class ProfTest::Want::CS is ProfTest::Want;
+
+method new(:$ns?, :$slurp_until?) {
+    self<ns> := $ns;
+    if $slurp_until {
+        self<slurp_until> := $slurp_until;
+    }
+    self<found_cs> := 0;
+    self;
+}
+
+method accepts(%prof_line) {
+    if self<found_cs> && self<slurp_until> {
+        if pir::downcase__SS(%prof_line<type>) ne self<slurp_until> {
+            return 1;
+        }
+        return 0;
+    }
+    elsif %prof_line<type> eq 'CS' {
+        if !self<ns> {
+            self<found_cs> := 1;
+            return 1;
+        }
+        if %prof_line<ns> eq self<ns> {
+            self<found_cs> := 1;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+method get_str() {
+    my $str := 'CS(';
+    if self<ns> {
+        $str := $str ~ ':ns(' ~ self<ns> ~ ')';
+    }
+    if self<slurp_until> {
+        $str := $str ~ ', :slurp_until(' ~ self<slurp_until> ~ ')';
+    }
+    $str := $str ~ ')';
+    $str;
+}
+
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl

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

Modified: branches/ops_pct/runtime/parrot/library/Stream/Base.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Stream/Base.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Stream/Base.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -65,7 +65,7 @@
 
 =cut
 
-.sub close :method
+.sub close :method :nsentry
     .local pmc temp
 
     # reset source

Modified: branches/ops_pct/runtime/parrot/library/String/Utils.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/String/Utils.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/String/Utils.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -53,7 +53,7 @@
     $I0 = strl - sepl
     $I1 = index res, sep, $I0
     unless $I1 == $I0 goto return
-    chopn res, sepl
+    res = chopn res, sepl
     goto chomp
 
   return:

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

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

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

Modified: branches/ops_pct/runtime/parrot/library/Test/Builder.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Test/Builder.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Test/Builder.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -312,22 +312,18 @@
     .return()
 .end
 
-=item C<diag( diagnostic_message )>
+=item C<diag( diagnostic_message, ... )>
 
 Records a diagnostic message for output.
 
 =cut
 
 .sub 'diag' :method
-    .param string diagnostic
+    .param pmc args :slurpy
 
-    if diagnostic goto DIAGNOSTIC_SET
-    .return()
-
-  DIAGNOSTIC_SET:
     .local pmc output
     output = self.'output'()
-    output.'diag'( diagnostic )
+    .tailcall output.'diag'( args :flat )
 .end
 
 =item C<ok( passed, description )>

Modified: branches/ops_pct/runtime/parrot/library/Test/Builder/Output.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Test/Builder/Output.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Test/Builder/Output.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -122,7 +122,8 @@
   	newline_index = index message, "\n"
 	if newline_index == -1 goto END_LOOP
 	inc newline_index
-	line = substr message, 0, newline_index, ''
+	line    = substr message, 0, newline_index
+	message = replace message, 0, newline_index, ''
 	push lines, line
 	if message goto SPLIT_LOOP
 
@@ -161,7 +162,7 @@
 	.return( message )
 .end
 
-=item C<diag( message )>
+=item C<diag( message, ... )>
 
 Writes the string C<message> to the diagnostic filehandle, TAP-escaping any
 unescaped newlines.
@@ -169,7 +170,9 @@
 =cut
 
 .sub diag :method
-	.param string message
+	.param pmc args :slurpy
+	.local string message
+	message = join '', args
 
 	.local int message_length
 	message_length = length message
@@ -190,7 +193,7 @@
   WRITE_MESSAGE:
 	.local pmc diag_output
 	diag_output = self.'diag_output'()
-	diag_output.'puts'( message )
+	.tailcall diag_output.'puts'( message )
 .end
 
 =back

Modified: branches/ops_pct/runtime/parrot/library/Test/Builder/Test.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Test/Builder/Test.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Test/Builder/Test.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -323,30 +323,32 @@
 
 .sub report :method
     .local pmc    passed
-    .local pmc    description
+    .local pmc    reason
     .local pmc    number
     .local string report
-    .local string number_string
-    .local string desc_string
 
     passed        = self.'passed'()
     number        = self.'number'()
-    description   = self.'description'()
     report        = ''
-    number_string = number
-    desc_string   = description
 
     if passed goto PASSED
     report      = 'not '
 
   PASSED:
     concat report, 'ok '
-    concat report, number_string
-    concat report, ' # TODO'
-
-    unless description goto REPORT
-    concat report, ' '
-    concat report, desc_string
+    $S0 = number
+    concat report, $S0
+    concat report, ' # TODO '
+
+    $S0 = self.'reason'()
+    concat report, $S0
+
+    if passed goto REPORT
+    # Build long explanation why
+    report .= "\n\tFailed (TODO) test '"
+    $S0     = self.'description'()
+    report .= $S0
+    report .= "'"
 
   REPORT:
     .return( report )

Modified: branches/ops_pct/runtime/parrot/library/Test/More.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/Test/More.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/Test/More.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -527,18 +527,18 @@
   done:
 .end
 
-=item C<diag( diagnostic )>
+=item C<diag( diagnostic, ... )>
 
 Prints C<diagnostic> to the screen, without affecting test comparisons.
 
 =cut
 
 .sub diag
-    .param string diagnostic
+    .param pmc args :slurpy
 
     .local pmc test
     get_hll_global test, [ 'Test'; 'More' ], '_test'
-    test.'diag'( diagnostic )
+    .tailcall test.'diag'( args :flat )
 .end
 
 

Modified: branches/ops_pct/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/distutils.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/distutils.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -62,7 +62,7 @@
 
 Output a skeleton for Plumage
 
-=item sdist, sdist_gztar, sdist_bztar, sdist_zip, sdist_rpm, manifest
+=item sdist, sdist_gztar, sdist_zip, sdist_rpm, manifest
 
 Create a source distribution or a source RPM package
 
@@ -96,22 +96,10 @@
 
 =over 4
 
-=item prove (in step 'test')
-
-core module Test-Harness
-
-=item prove --archive (in step 'smoke')
-
-module TAP-Harness-Archive
-
 =item pod2html
 
 core module Pod-Html
 
-=item chmod (in step 'install')
-
-core module ExtUtils::Command, see TT #1322
-
 =back
 
 =head2 PARROT DEPENDENCIES
@@ -120,9 +108,11 @@
 
 =item glob (in step 'manifest' & 'sdist')
 
-PGE::Glob
+PGE/Glob.pbc
 
-Limitation: currently, OS.'readdir' is dummy with MSVC.
+=item tempdir (in step 'smoke')
+
+Math/Rand.pbc
 
 =back
 
@@ -134,14 +124,6 @@
 
 curl
 
-=item sdist_gztar
-
-Some coreutils : tar, gzip
-
-=item sdist_bztar
-
-bzip2
-
 =item sdist_zip
 
 zip
@@ -199,6 +181,7 @@
 =cut
 
 .sub '__onload' :load :init :anon
+    load_bytecode 'osutils.pbc'
     $P0 = new 'Hash'
     set_global '%step', $P0
 
@@ -214,12 +197,16 @@
     register_step_after('build', _build_pir_nqp)
     .const 'Sub' _build_pir_nqp_rx = '_build_pir_nqp_rx'
     register_step_after('build', _build_pir_nqp_rx)
+    .const 'Sub' _build_inc_pir = '_build_inc_pir'
+    register_step_after('build', _build_inc_pir)
     .const 'Sub' _build_pir_pir = '_build_pir_pir'
     register_step_after('build', _build_pir_pir)
     .const 'Sub' _build_pbc_pir = '_build_pbc_pir'
     register_step_after('build', _build_pbc_pir)
     .const 'Sub' _build_pbc_pbc = '_build_pbc_pbc'
     register_step_after('build', _build_pbc_pbc)
+    .const 'Sub' _build_hll_hook = '_build_hll_hook'
+    register_step_after('build', _build_hll_hook)
     .const 'Sub' _build_exe_pbc = '_build_exe_pbc'
     register_step_after('build', _build_exe_pbc)
     .const 'Sub' _build_installable_pbc = '_build_installable_pbc'
@@ -239,6 +226,8 @@
     register_step_after('clean', _clean_pir_nqp)
     .const 'Sub' _clean_pir_nqp_rx = '_clean_pir_nqp_rx'
     register_step_after('clean', _clean_pir_nqp_rx)
+    .const 'Sub' _clean_inc_pir = '_clean_inc_pir'
+    register_step_after('clean', _clean_inc_pir)
     .const 'Sub' _clean_pir_pir = '_clean_pir_pir'
     register_step_after('clean', _clean_pir_pir)
     .const 'Sub' _clean_pbc_pir = '_clean_pbc_pir'
@@ -253,8 +242,6 @@
     register_step_after('clean', _clean_html_pod)
     .const 'Sub' _clean_gztar = '_clean_gztar'
     register_step_after('clean', _clean_gztar)
-    .const 'Sub' _clean_bztar = '_clean_bztar'
-    register_step_after('clean', _clean_bztar)
     .const 'Sub' _clean_zip = '_clean_zip'
     register_step_after('clean', _clean_zip)
     .const 'Sub' _clean_smoke = '_clean_smoke'
@@ -288,8 +275,6 @@
     register_step('sdist', _sdist)
     .const 'Sub' _sdist_gztar = '_sdist_gztar'
     register_step('sdist_gztar', _sdist_gztar)
-    .const 'Sub' _sdist_bztar = '_sdist_bztar'
-    register_step('sdist_bztar', _sdist_bztar)
     .const 'Sub' _sdist_zip = '_sdist_zip'
     register_step('sdist_zip', _sdist_zip)
     .const 'Sub' _manifest = '_manifest'
@@ -386,7 +371,7 @@
 
 =cut
 
-.sub 'run_step'
+.sub 'run_step' :multi()
     .param string name
     .param pmc kv :slurpy :named
     $P0 = get_global '%step'
@@ -405,6 +390,12 @@
     .return (1)
 .end
 
+.sub 'run_step' :multi(String,Hash)
+    .param string name
+    .param pmc hash
+    .tailcall run_step(name, hash :flat :named)
+.end
+
 =item register_step
 
 Register a step by its name
@@ -540,6 +531,8 @@
 
 .sub 'build_pbc_pir'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -558,13 +551,26 @@
     $I0 = newer(pbc, src)
     if $I0 goto L1
   L4:
+    $S0 = dirname(pbc)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = get_parrot()
     cmd .= " -o "
     cmd .= pbc
     cmd .= " "
     cmd .= src
-    system(cmd, 1 :named('verbose'))
+    push jobs, cmd
+    goto L1
+  L2:
+    .tailcall run_jobs(jobs)
+.end
+
+.sub 'run_jobs'
+    .param pmc jobs
+  L1:
+    unless jobs goto L2
+    $S0 = shift jobs
+    system($S0, 1 :named('verbose'))
     goto L1
   L2:
 .end
@@ -594,6 +600,8 @@
 .sub 'build_pir_pge'
     .param pmc hash
     .param string flags
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -612,6 +620,8 @@
     $I0 = newer(pir, src)
     if $I0 goto L1
   L4:
+    $S0 = dirname(pir)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = get_parrot()
     cmd .= " "
@@ -623,9 +633,10 @@
     cmd .= flags
     cmd .= " "
     cmd .= src
-    system(cmd, 1 :named('verbose'))
+    push jobs, cmd
     goto L1
   L2:
+    .tailcall run_jobs(jobs)
 .end
 
 =item pir_tge
@@ -649,6 +660,8 @@
 
 .sub 'build_pir_tge'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -657,6 +670,8 @@
     tge = hash[pir]
     $I0 = newer(pir, tge)
     if $I0 goto L1
+    $S0 = dirname(pir)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = get_parrot()
     cmd .= " "
@@ -666,9 +681,10 @@
     cmd .= pir
     cmd .= " "
     cmd .= tge
-    system(cmd, 1 :named('verbose'))
+    push jobs, cmd
     goto L1
   L2:
+    .tailcall run_jobs(jobs)
 .end
 
 =item pir_nqp
@@ -696,6 +712,8 @@
 .sub 'build_pir_nqp'
     .param pmc hash
     .param string flags
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -704,6 +722,8 @@
     nqp = hash[pir]
     $I0 = newer(pir, nqp)
     if $I0 goto L1
+    $S0 = dirname(pir)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = get_parrot()
     cmd .= " "
@@ -715,9 +735,10 @@
     cmd .= flags
     cmd .= " "
     cmd .= nqp
-    system(cmd, 1 :named('verbose'))
+    push jobs, cmd
     goto L1
   L2:
+    .tailcall run_jobs(jobs)
 .end
 
 =item pir_nqp-rx / pir_nqprx
@@ -728,6 +749,8 @@
 
 the value is the NQP pathname
 
+=item pir_nqp_flags
+
 =cut
 
 .sub '_build_pir_nqp_rx' :anon
@@ -735,17 +758,22 @@
     $I0 = exists kv['pir_nqp-rx']
     unless $I0 goto L1
     $P0 = kv['pir_nqp-rx']
-    build_pir_nqp_rx($P0)
+    $S0 = get_value('pir_nqp_flags', '' :named('default'), kv :flat :named)
+    build_pir_nqp_rx($P0, $S0)
   L1:
     $I0 = exists kv['pir_nqprx']
     unless $I0 goto L2
     $P0 = kv['pir_nqprx']
-    build_pir_nqp_rx($P0)
+    $S0 = get_value('pir_nqp_flags', '' :named('default'), kv :flat :named)
+    build_pir_nqp_rx($P0, $S0)
   L2:
 .end
 
 .sub 'build_pir_nqp_rx'
     .param pmc hash
+    .param string flags
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -754,13 +782,59 @@
     nqp = hash[pir]
     $I0 = newer(pir, nqp)
     if $I0 goto L1
+    $S0 = dirname(pir)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = get_nqp()
     cmd .= " --target=pir --output="
     cmd .= pir
     cmd .= " "
+    cmd .= flags
+    cmd .= " "
     cmd .= nqp
-    system(cmd, 1 :named('verbose'))
+    push jobs, cmd
+    goto L1
+  L2:
+    .tailcall run_jobs(jobs)
+.end
+
+=item inc_pir (include)
+
+hash
+
+the key is the PIR pathname
+
+the value is an array of PIR pathname
+
+=cut
+
+.sub '_build_inc_pir' :anon
+    .param pmc kv :slurpy :named
+    $I0 = exists kv['inc_pir']
+    unless $I0 goto L1
+    $P0 = kv['inc_pir']
+    build_inc_pir($P0)
+  L1:
+.end
+
+.sub 'build_inc_pir'
+    .param pmc hash
+    $P0 = iter hash
+  L1:
+    unless $P0 goto L2
+    .local string inc
+    inc = shift $P0
+    .local pmc srcs
+    srcs = hash[inc]
+    $I0 = newer(inc, srcs)
+    if $I0 goto L1
+    $S0 = dirname(inc)
+    mkpath($S0, 1 :named('verbose'))
+    $S0 = "# generated by distutils\n\n.include '"
+    $S1 = join "'\n.include '", srcs
+    $S0 .= $S1
+    $S0 .= "'\n\n"
+    spew(inc, $S0, 1 :named('verbose'))
     goto L1
   L2:
 .end
@@ -789,12 +863,14 @@
     $P0 = iter hash
   L1:
     unless $P0 goto L2
-    .local string pir, src
+    .local string pir
     pir = shift $P0
     .local pmc srcs
     srcs = hash[pir]
     $I0 = newer(pir, srcs)
     if $I0 goto L1
+    $S0 = dirname(pir)
+    mkpath($S0, 1 :named('verbose'))
     spew(pir, '', 1 :named('verbose'))
     $P1 = iter srcs
   L3:
@@ -830,25 +906,45 @@
 
 .sub 'build_pbc_pbc'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
-    .local string pbc, src
+    .local string pbc
     pbc = shift $P0
     .local pmc srcs
     srcs = hash[pbc]
     $I0 = newer(pbc, srcs)
     if $I0 goto L1
-    src = join ' ', srcs
+    $S0 = dirname(pbc)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = get_executable('pbc_merge')
     cmd .= " -o "
     cmd .= pbc
     cmd .= " "
-    cmd .= src
-    system(cmd, 1 :named('verbose'))
+    $S0 = join " ", srcs
+    cmd .= $S0
+    push jobs, cmd
     goto L1
   L2:
+    .tailcall run_jobs(jobs)
+.end
+
+=item hll_hook
+
+a subroutine
+
+=cut
+
+.sub '_build_hll_hook' :anon
+    .param pmc kv :slurpy :named
+    $I0 = exists kv['hll_hook']
+    unless $I0 goto L1
+    $P0 = kv['hll_hook']
+    $P0(kv :flat :named)
+  L1:
 .end
 
 =item exe_pbc
@@ -872,6 +968,8 @@
 
 .sub 'build_exe_pbc'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     .local string exe
     exe = get_exe()
     $P0 = iter hash
@@ -880,19 +978,27 @@
     .local string bin, pbc
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = $S0 . exe
+    $S1 = _mk_path_exe(pbc, exe)
     $I0 = newer($S1, pbc)
     if $I0 goto L1
     .local string cmd
     cmd = get_executable('pbc_to_exe')
     cmd .= " "
     cmd .= pbc
-    system(cmd, 1 :named('verbose'))
+    push jobs, cmd
     goto L1
   L2:
+    .tailcall run_jobs(jobs)
+.end
+
+.sub '_mk_path_exe' :anon
+    .param string pbcname
+    .param string exe
+    $I0 = length pbcname
+    $I0 -= 4
+    $S0 = substr pbcname, 0, $I0
+    $S1 = $S0 . exe
+    .return ($S1)
 .end
 
 =item installable_pbc
@@ -916,6 +1022,8 @@
 
 .sub 'build_installable_pbc'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     .local string exe
     exe = get_exe()
     .local int has_strip
@@ -926,11 +1034,7 @@
     .local string bin, pbc
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = "installable_" . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $I0 = newer($S1, pbc)
     if $I0 goto L1
     .local string cmd
@@ -938,12 +1042,29 @@
     cmd .= " "
     cmd .= pbc
     cmd .= " --install"
-    system(cmd, 1 :named('verbose'))
-    unless has_strip goto L1
-    cmd = "strip " . $S1
-    system(cmd, 1 :named('verbose'))
+    unless has_strip goto L3
+    cmd .= " && strip "
+    cmd .= $S1
+  L3:
+    push jobs, cmd
     goto L1
   L2:
+    .tailcall run_jobs(jobs)
+.end
+
+.sub '_mk_path_installable' :anon
+    .param string pbcname
+    .param string exe
+    $P0 = split '/', pbcname
+    $S0 = $P0[-1]
+    $I0 = length $S0
+    $I0 -= 4
+    $S0 = substr $S0, 0, $I0
+    $S1 = "installable_" . $S0
+    $S1 .= exe
+    $P0[-1] = $S1
+    $S1 = join '/', $P0
+    .return ($S1)
 .end
 
 .sub '_has_strip' :anon
@@ -1139,9 +1260,6 @@
 .sub 'get_cores'
     $P0 = new 'Hash'
     $P0['C'] = ''
-#    $P0['CGP'] = '_cgp'
-#    $P0['CGoto'] = '_cg'
-    $P0['CSwitch'] = '_switch'
     .return ($P0)
 .end
 
@@ -1217,7 +1335,7 @@
   L2:
 .end
 
-.sub '__build_dynpmc' :anon
+.sub '__build_dynpmc'
     .param string src
     .param string cflags
     .local pmc config
@@ -1234,32 +1352,25 @@
     pmc2c_includes .= " --include "
     pmc2c_includes .= $S0
     pmc2c_includes .= "/pmc"
-    .local string current_dir
-    current_dir = cwd()
     $S0 = dirname(src)
-    chdir($S0)
+    pmc2c_includes .= " --include "
+    pmc2c_includes .= $S0
 
     .local string cmd
     cmd = clone pmc2c
     cmd .= " --dump "
     cmd .= pmc2c_includes
     cmd .= " "
-#    cmd .= src
-    $S0 = basename(src)
-    cmd .= $S0
+    cmd .= src
     system(cmd, 1 :named('verbose'))
 
     cmd = clone pmc2c
     cmd .= " --c "
     cmd .= pmc2c_includes
     cmd .= " "
-#    cmd .= src
-    $S0 = basename(src)
-    cmd .= $S0
+    cmd .= src
     system(cmd, 1 :named('verbose'))
 
-    chdir(current_dir)
-
     $S0 = config['o']
     $S1 = _mk_path_gen_dynpmc(src, $S0)
     $S2 = _mk_path_gen_dynpmc(src, '.c')
@@ -1276,10 +1387,6 @@
     .local string src, obj
     src = srcs[0]
     obj = config['o']
-    .local string current_dir
-    current_dir = cwd()
-    $S0 = dirname(src)
-    chdir($S0)
 
     .local string cmd
     cmd = config['perl']
@@ -1287,26 +1394,15 @@
     $S0 = get_tool('build/pmc2c.pl')
     cmd .= $S0
     cmd .= " --library "
-#    $S0 = dirname(src)
-#    cmd .= $S0
-#    cmd .= "/"
+    $S0 = dirname(src)
+    cmd .= $S0
+    cmd .= "/"
     cmd .= group
     cmd .= " --c "
-#    $S0 = join " ", srcs
-#    cmd .= $S0
-    $P0 = iter srcs
-  L1:
-    unless $P0 goto L2
-    src = shift $P0
-    $S0 = basename(src)
+    $S0 = join " ", srcs
     cmd .= $S0
-    cmd .= " "
-    goto L1
-  L2:
     system(cmd, 1 :named('verbose'))
 
-    chdir(current_dir)
-
     $S1 = _mk_path_gen_dynpmc_group(src, group, obj)
     $S2 = _mk_path_gen_dynpmc_group(src, group, '.c')
     __compile_cc($S1, $S2, cflags)
@@ -1462,6 +1558,8 @@
     pod = hash[html]
     $I0 = newer(html, pod)
     if $I0 goto L1
+    $S0 = dirname(html)
+    mkpath($S0, 1 :named('verbose'))
     .local string cmd
     cmd = "pod2html --infile "
     cmd .= pod
@@ -1504,6 +1602,19 @@
   L2:
 .end
 
+=item inc_pir
+
+=cut
+
+.sub '_clean_inc_pir' :anon
+    .param pmc kv :slurpy :named
+    $I0 = exists kv['inc_pir']
+    unless $I0 goto L1
+    $P0 = kv['inc_pir']
+    clean_key($P0)
+  L1:
+.end
+
 =item pir_pir
 
 =cut
@@ -1610,14 +1721,11 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = $S0 . exe
+    $S1 = _mk_path_exe(pbc, exe)
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . '.c'
+    $S1 = _mk_path_exe(pbc, '.c')
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . obj
+    $S1 = _mk_path_exe(pbc, obj)
     unlink($S1, 1 :named('verbose'))
     goto L1
   L2:
@@ -1646,15 +1754,11 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . '.c'
+    $S1 = _mk_path_exe(pbc, '.c')
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . obj
+    $S1 = _mk_path_exe(pbc, obj)
     unlink($S1, 1 :named('verbose'))
     goto L1
   L2:
@@ -1917,65 +2021,13 @@
 
 =head3 Step test
 
-If t/harness exists, run : t/harness
-
-If parrot-tapir exists, run it with t/*.t
-
-Else run : prove t/*.t
-
-=cut
-
-.sub '_test' :anon
-    .param pmc kv :slurpy :named
-    run_step('build', kv :flat :named)
-    $I0 = file_exists('t/harness')
-    unless $I0 goto L1
-    .tailcall _test_harness(kv :flat :named)
-  L1:
-    $S0 = get_executable('parrot-tapir')
-    $I0 = file_exists($S0)
-    unless $I0 goto L2
-    .tailcall _test_tapir($S0, kv :flat :named)
-  L2:
-    .tailcall _test_prove(kv :flat :named)
-.end
-
 =over 4
 
-=item harness_exec
-
-the default value is with perl
-
-=item harness_files
-
-the default value is "t/*.t"
-
-=cut
-
-.sub '_test_harness' :anon
-    .param pmc kv :slurpy :named
-    .local string cmd
-    $I0 = exists kv['harness_exec']
-    unless $I0 goto L1
-    cmd = kv['harness_exec']
-    goto L2
-  L1:
-    cmd = "perl -I"
-    $S0 = get_libdir()
-    cmd .= $S0
-    cmd .= "/tools/lib"
-  L2:
-    cmd .= " t/harness "
-    $S0 = get_value('harness_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-.end
+=item prove_exec / test_exec
 
-=item prove_exec
+option --exec of prove / tapir
 
-option --exec of prove
-
-=item prove_files
+=item prove_files / test_files
 
 the default value is "t/*.t"
 
@@ -1983,111 +2035,78 @@
 
 =cut
 
-.sub '_test_prove' :anon
+.sub '_test' :anon
     .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = "prove"
-    $I0 = exists kv['prove_exec']
-    unless $I0 goto L1
-    $S0 = get_prove_version()
-    $S0 = substr $S0, 0, 1
-    unless $S0 == "3" goto L3
-    cmd .= " --exec="
-    goto L4
-  L3:
-    cmd .= " --perl="
-  L4:
-    $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
-  L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-.end
-
-.sub 'get_prove_version' :anon
-    $P0 = open 'prove --version', 'rp'
-    $S0 = $P0.'readline'()
-    $P0.'close'()
-    $I1 = index $S0, "Test::Harness v"
-    $I1 += 15
-    $I2 = index $S0, " ", $I1
-    $I3 = $I2 - $I1
-    $S0 = substr $S0, $I1, $I3
-    .return ($S0)
-.end
+    run_step('build', kv :flat :named)
 
-.sub '_test_tapir' :anon
-    .param string tapir
-    .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = tapir
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc opts, files, harness, aggregate
+    opts = new 'Hash'
     $I0 = exists kv['prove_exec']
     unless $I0 goto L1
-    cmd .= " --exec="
     $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
+    opts['exec'] = $S0
   L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
+    $I0 = exists kv['test_exec']
+    unless $I0 goto L2
+    $S0 = kv['test_exec']
+    opts['exec'] = $S0
+  L2:
+    $S0 = "t/*.t"
+    $I0 = exists kv['prove_files']
+    unless $I0 goto L3
+    $S0 = kv['prove_files']
+  L3:
+    $I0 = exists kv['test_files']
+    unless $I0 goto L4
+    $S0 = kv['test_files']
+  L4:
+    $P0 = glob($S0)
+    files = sort_strings($P0)
+    harness = new ['TAP';'Harness']
+    harness.'process_args'(opts)
+    aggregate = harness.'runtests'(files)
+    $I0 = aggregate.'has_errors'()
+    unless $I0 goto L5
+    die "test fails"
+  L5:
 .end
 
-=head3 Step smoke
-
-Unless t/harness exists, run : prove --archive t/*.t
-
-=cut
-
-.sub '_smoke' :anon
-    .param pmc kv :slurpy :named
-    run_step('build', kv :flat :named)
-    $I0 = file_exists('t/harness')
-    if $I0 goto L1
-    $S0 = get_prove_version()
-    $S0 = substr $S0, 0, 1
-    unless $S0 == "3" goto L2
-    .tailcall _smoke_prove(kv :flat :named)
-  L2:
-    die "Require Test::Harness v3.x (option --archive)."
+.sub 'sort_strings'
+    .param pmc array
+    # currently, FixedStringArray hasn't the method sort.
+    # see TT #1356
+    $I0 = elements array
+    $P0 = new 'FixedPMCArray'
+    set $P0, $I0
+    $I0 = 0
+    $P1 = iter array
   L1:
-    die "Don't known how to smoke with t/harness."
+    unless $P1 goto L2
+    $S0 = shift $P1
+    $P0[$I0] = $S0
+    inc $I0
+    goto L1
+  L2:
+    $P0.'sort'()
+    .return ($P0)
 .end
 
-.sub '_clean_smoke' :anon
-    .param pmc kv :slurpy :named
-    $S0 = get_value('prove_archive', "report.tar.gz" :named('default'), kv :flat :named)
-    unlink($S0, 1 :named('verbose'))
-    unlink('meta.yml', 1 :named('verbose'))
-.end
+=head3 Step smoke
 
 =over 4
 
-=item prove_exec
+=item prove_exec / test_exec
 
 option --exec of prove
 
-=item prove_files
+=item prove_files / test_files
 
 the default value is "t/*.t"
 
-=item prove_archive
+=item prove_archive / smolder_archive
 
-option --archive of prove
+option --archive of prove / tapir
 
 the default value is report.tar.gz
 
@@ -2111,53 +2130,64 @@
 
 =cut
 
-.sub '_smoke_prove' :anon
+.sub '_smoke' :anon
     .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = "prove"
+    run_step('build', kv :flat :named)
+
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc opts, files, harness, aggregate
+    opts = new 'Hash'
     $I0 = exists kv['prove_exec']
     unless $I0 goto L1
-    cmd .= " --exec="
     $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
+    opts['exec'] = $S0
   L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    cmd .= " --archive="
+    $I0 = exists kv['test_exec']
+    unless $I0 goto L2
+    $S0 = kv['test_exec']
+    opts['exec'] = $S0
+  L2:
+    $S0 = "t/*.t"
+    $I0 = exists kv['prove_files']
+    unless $I0 goto L3
+    $S0 = kv['prove_files']
+  L3:
+    $I0 = exists kv['test_files']
+    unless $I0 goto L4
+    $S0 = kv['test_files']
+  L4:
+    $P0 = glob($S0)
+    files = sort_strings($P0)
+    harness = new ['TAP';'Harness';'Archive']
+    harness.'process_args'(opts)
     .local string archive
+    archive = "report.tar.gz"
+    $I0 = exists kv['prove_archive']
+    unless $I0 goto L5
+    archive = kv['prove_archive']
+  L5:
+    $I0 = exists kv['smolder_archive']
+    unless $I0 goto L6
+    archive = kv['smolder_archive']
+  L6:
     archive = get_value('prove_archive', "report.tar.gz" :named('default'), kv :flat :named)
-    cmd .= archive
-    system(cmd, 1 :named('verbose'), 1 :named('ignore_error'))
-
+    harness.'archive'(archive)
     $I0 = exists kv['smolder_extra_properties']
-    unless $I0 goto L4
-    system('perl -MExtUtils::Command -e rm_rf tmp')
-    cmd = "mkdir tmp && cd tmp && tar xzf ../"
-    cmd .= archive
-    system(cmd, 1 :named('verbose'))
-
+    unless $I0 goto L7
     $P0 = kv['smolder_extra_properties']
-    $S0 = mk_extra_properties($P0)
-    say "append extra properties"
-    append('tmp/meta.yml', $S0)
+    harness.'extra_props'($P0)
+  L7:
+    aggregate = harness.'runtests'(files)
 
-    unlink(archive)
-    cmd = "cd tmp && tar czf ../"
-    cmd .= archive
-    cmd .= " *"
-    system(cmd, 1 :named('verbose'))
-    system('perl -MExtUtils::Command -e rm_rf tmp')
-  L4:
+    smolder_post(archive, kv :flat :named)
+.end
 
+.sub 'smolder_post' :anon
+    .param string archive
+    .param pmc kv :slurpy :named
+    .local string cmd
     $I0 = exists kv['smolder_url']
-    unless $I0 goto L5
+    unless $I0 goto L1
     .local pmc config
     config = get_config()
     cmd = "curl -F architecture="
@@ -2170,57 +2200,49 @@
     $S0 = config['revision']
     cmd .= $S0
     $I0 = exists kv['smolder_tags']
-    unless $I0 goto L6
+    unless $I0 goto L2
     cmd .= " -F tags=\""
     $S0 = kv['smolder_tags']
     cmd .= $S0
     cmd .= "\""
-  L6:
+  L2:
     $I0 = exists kv['smolder_comments']
-    unless $I0 goto L7
+    unless $I0 goto L3
     cmd .= " -F comments=\""
     $S0 = kv['smolder_comments']
     cmd .= $S0
     cmd .= "\""
-  L7:
+  L3:
     cmd .= " -F report_file=@"
     cmd .= archive
     cmd .= " "
     $S0 = kv['smolder_url']
     cmd .= $S0
     system(cmd, 1 :named('verbose'))
-  L5:
+  L1:
 .end
 
-.sub 'mk_extra_properties' :anon
-    .param pmc hash
-    $S0 = "extra_properties:\n"
-    $P0 = iter hash
-  L1:
-    unless $P0 goto L2
-    .local string key, value
-    key = shift $P0
-    value = hash[key]
-    if value == '' goto L1
-    $S0 .= "  "
-    $S0 .= key
-    $S0 .= ": "
-    $S0 .= value
-    $S0 .= "\n"
-    goto L1
-  L2:
-    .return ($S0)
+.sub '_clean_smoke' :anon
+    .param pmc kv :slurpy :named
+    $S0 = get_value('prove_archive', "report.tar.gz" :named('default'), kv :flat :named)
+    unlink($S0, 1 :named('verbose'))
+    $S0 = get_value('smolder_archive', "report.tar.gz" :named('default'), kv :flat :named)
+    unlink($S0, 1 :named('verbose'))
 .end
 
 =head3 Step install
 
 =over 4
 
-=item inst_bin ???
+=item inst_bin (useful ?)
+
+array of pathname or a single pathname
+
+=item inst_data
 
 array of pathname or a single pathname
 
-=item inst_dynext ???
+=item inst_dynext (useful ?)
 
 array of pathname or a single pathname
 
@@ -2303,6 +2325,11 @@
     $P0 = kv['inst_lib']
     get_install_lib(files, "library", $P0)
   L5:
+    $I0 = exists kv['inst_data']
+    unless $I0 goto L6
+    $P0 = kv['inst_data']
+    get_install_data(files, $P0)
+  L6:
     .return (files)
 .end
 
@@ -2328,6 +2355,28 @@
   L2:
 .end
 
+.sub 'get_install_data' :anon
+    .param pmc files
+    .param pmc array
+    $S1 = get_datadir()
+    $S1 .= "/"
+    $I0 = does array, 'array'
+    if $I0 goto L1
+    $S0 = array
+    $S2 = $S1 . $S0
+    files[$S2] = $S0
+    goto L2
+  L1:
+    $P0 = iter array
+  L3:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $S2 = $S1 . $S0
+    files[$S2] = $S0
+    goto L3
+  L2:
+.end
+
 .sub 'get_install_lib' :anon
     .param pmc files
     .param string dirname
@@ -2339,7 +2388,12 @@
     $I0 = does array, 'array'
     if $I0 goto L1
     $S0 = array
-    $S2 = $S1 . $S0
+    $S3 = $S0
+    $S2 = $S1 . $S3
+    $I0 = index $S0, "build/"
+    unless $I0 == 0 goto L0
+    $S3 = substr $S0, 6
+  L0:
     files[$S2] = $S0
     goto L2
   L1:
@@ -2347,7 +2401,12 @@
   L3:
     unless $P0 goto L2
     $S0 = shift $P0
-    $S2 = $S1 . $S0
+    $S3 = $S0
+    $I0 = index $S0, "build/"
+    unless $I0 == 0 goto L4
+    $S3 = substr $S0, 6
+  L4:
+    $S2 = $S1 . $S3
     files[$S2] = $S0
     goto L3
   L2:
@@ -2386,11 +2445,7 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $S2 = bindir . '/'
     $S2 .= bin
     $S2 .= exe
@@ -2679,7 +2734,7 @@
         "requires"     : {
             "fetch"    : ["%s"],
             "build"    : [],
-            "test"     : ["perl5"],
+            "test"     : [],
             "install"  : [],
             "runtime"  : []
         }
@@ -2735,10 +2790,10 @@
 
 array of pathname or a single pathname
 
-=item pbc_pir, pir_pge, pir_tge, pir_nqp, pir_nqp-rx, pir_nqprx, pir_pir
+=item pbc_pir, pir_pge, pir_tge, pir_nqp, pir_nqp-rx, pir_nqprx, inc_pir, pir_pir
 pbc_pbc, exe_pbc, installable_pbc, dynops, dynpmc, html_pod
 
-=item inst_bin, inst_dynext, inst_inc, inst_lang, inst_lib
+=item inst_bin, inst_data, inst_dynext, inst_inc, inst_lang, inst_lib
 
 =item harness_files, prove_files
 
@@ -2771,7 +2826,7 @@
     needed = new 'Hash'
     generated = new 'Hash'
 
-    $P0 = split ' ', 'pbc_pir pir_pge pir_tge pir_nqp pir_nqp-rx pir_nqprx pir_pir pbc_pbc exe_pbc installable_pbc dynops dynpmc html_pod'
+    $P0 = split ' ', 'pbc_pir pir_pge pir_tge pir_nqp pir_nqp-rx pir_nqprx inc_pir pir_pir pbc_pbc exe_pbc installable_pbc dynops dynpmc html_pod'
   L1:
     unless $P0 goto L2
     $S0 = shift $P0
@@ -2782,7 +2837,7 @@
     goto L1
   L2:
 
-    $P0 = split ' ', 'inst_bin inst_dynext inst_inc inst_lang inst_lib doc_files'
+    $P0 = split ' ', 'inst_bin inst_data inst_dynext inst_inc inst_lang inst_lib doc_files'
   L3:
     unless $P0 goto L4
     $S0 = shift $P0
@@ -2967,26 +3022,33 @@
     .param pmc kv :slurpy :named
     run_step('manifest', kv :flat :named)
 
+    load_bytecode 'Archive/Tar.pbc'
     $S0 = slurp('MANIFEST')
     $P0 = split "\n", $S0
     $S0 = pop $P0
-    $S0 = get_tarname('.tar.gz', kv :flat :named)
-    $I0 = newer($S0, $P0)
+    .local string archive_file
+    archive_file = get_tarname('.tar.gz', kv :flat :named)
+    $I0 = newer(archive_file, $P0)
     if $I0 goto L1
-    $S0 = get_tarname('', kv :flat :named)
-    copy_sdist($S0, $P0)
-
-    .local string cmd
-    cmd = 'tar -cvf ' . $S0
-    cmd .= '.tar '
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-
-    rmtree($S0)
-
-    cmd = 'gzip --best ' . $S0
-    cmd .= '.tar'
-    system(cmd, 1 :named('verbose'))
+    .local pmc archive
+    archive = new ['Archive';'Tar']
+    $P1 = archive.'add_files'($P0 :flat)
+    .local string dir
+    dir = get_tarname('', kv :flat :named)
+  L2:
+    unless $P1 goto L3
+    $P2 = shift $P1
+    $S0 = $P2.'full_path'()
+    $S0 = '/' . $S0
+    $S0 = dir . $S0
+    $P2.'rename'($S0)
+    goto L2
+  L3:
+    $P0 = loadlib 'gziphandle'
+    $P0 = new 'GzipHandle'
+    $P0.'open'(archive_file, 'wb')
+    archive.'write'($P0)
+    $P0.'close'()
   L1:
 .end
 
@@ -2998,21 +3060,6 @@
     unlink('MANIFEST', 1 :named('verbose'))
 .end
 
-.sub 'copy_sdist' :anon
-    .param string dirname
-    .param pmc files
-    mkdir(dirname)
-    $S1 = dirname . "/"
-    $P0 = iter files
-  L1:
-    unless $P0 goto L2
-    $S0 = shift $P0
-    $S2 = $S1 . $S0
-    install($S0, $S2)
-    goto L1
-  L2:
-.end
-
 .sub 'get_tarname' :anon
     .param string ext
     .param pmc kv :slurpy :named
@@ -3027,45 +3074,6 @@
     .return ($S0)
 .end
 
-=head3 Step sdist_bztar
-
-=cut
-
-.sub '_sdist_bztar' :anon
-    .param pmc kv :slurpy :named
-    run_step('manifest', kv :flat :named)
-
-    $S0 = slurp('MANIFEST')
-    $P0 = split "\n", $S0
-    $S0 = pop $P0
-    $S0 = get_tarname('.tar.bz2', kv :flat :named)
-    $I0 = newer($S0, $P0)
-    if $I0 goto L1
-    $S0 = get_tarname('', kv :flat :named)
-    copy_sdist($S0, $P0)
-
-    .local string cmd
-    cmd = 'tar -cvf ' . $S0
-    cmd .= '.tar '
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-
-    rmtree($S0)
-
-    cmd = 'bzip2 ' . $S0
-    cmd .= '.tar'
-    system(cmd, 1 :named('verbose'))
-  L1:
-.end
-
-.sub '_clean_bztar' :anon
-    .param pmc kv :slurpy :named
-
-    $S0 = get_tarname('.tar.bz2', kv :flat :named)
-    unlink($S0, 1 :named('verbose'))
-    unlink('MANIFEST', 1 :named('verbose'))
-.end
-
 =head3 Step sdist_zip
 
 =cut
@@ -3102,6 +3110,21 @@
     unlink('MANIFEST', 1 :named('verbose'))
 .end
 
+.sub 'copy_sdist' :anon
+    .param string dirname
+    .param pmc files
+    mkdir(dirname)
+    $S1 = dirname . "/"
+    $P0 = iter files
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $S2 = $S1 . $S0
+    install($S0, $S2)
+    goto L1
+  L2:
+.end
+
 =head3 Step sdist_rpm
 
 =cut
@@ -3176,7 +3199,7 @@
 
 =item installable_pbc, dynops, dynpmc
 
-=item inst_bin, inst_dynext, inst_inc, inst_lang, inst_lib
+=item inst_bin, inst_data, inst_dynext, inst_inc, inst_lang, inst_lib
 
 =item setup
 
@@ -3419,7 +3442,7 @@
 
 =item installable_pbc, dynops, dynpmc
 
-=item inst_bin, inst_dynext, inst_inc, inst_lang, inst_lib
+=item inst_bin, inst_data, inst_dynext, inst_inc, inst_lang, inst_lib
 
 =item setup
 
@@ -3909,7 +3932,7 @@
 
 =item installable_pbc, dynops, dynpmc
 
-=item inst_bin, inst_dynext, inst_inc, inst_lang, inst_lib
+=item inst_bin, inst_data, inst_dynext, inst_inc, inst_lang, inst_lib
 
 =item doc_files
 
@@ -3931,11 +3954,7 @@
     unless $P1 goto L1
     bin = shift $P1
     pbc = $P0[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $S2 = bin . exe
     $I0 = newer($S2, $S1)
     if $I0 goto L2
@@ -4206,9 +4225,6 @@
     flags .= " "
     $S0 = $P0['cc_hasjit']
     flags .= $S0
-    flags .= " "
-    $S0 = $P0['cg_flag']
-    flags .= $S0
     .return (flags)
 .end
 
@@ -4234,6 +4250,16 @@
     .return ($S0)
 .end
 
+=item get_datadir
+
+=cut
+
+.sub 'get_datadir'
+    $P0 = get_config()
+    $S0 = $P0['datadir']
+    .return ($S0)
+.end
+
 =item get_exe
 
 =cut
@@ -4596,662 +4622,6 @@
 
 =back
 
-=head2 OS Utilities
-
-=over 4
-
-=item system
-
-=cut
-
-.sub 'system'
-    .param string cmd
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    .param int ignore_error     :named('ignore_error') :optional
-    .param int has_ignore_error :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    say cmd
-  L1:
-    $I0 = spawnw cmd
-    unless $I0 goto L2
-    unless has_ignore_error goto L3
-    if ignore_error goto L2
-  L3:
-    $S0 = "exit status: "
-    $S1 = $I0
-    $S0 .= $S1
-    $S0 .= "\ncommand: "
-    $S0 .= cmd
-    $S0 .= "\n"
-    die $S0
-  L2:
-    .return ($I0)
-.end
-
-.include 'stat.pasm'
-
-.sub 'file_exists'
-    .param string filename
-    $I0 = stat filename, .STAT_EXISTS
-    .return ($I0)
-.end
-
-=item newer
-
-=cut
-
-.sub 'newer' :multi(string, pmc)
-    .param string target
-    .param pmc depends
-    $I0 = does depends, 'array'
-    if $I0 goto L1
-    $S0 = depends
-    .tailcall newer(target, $S0)
-  L1:
-    $I0 = stat target, .STAT_EXISTS
-    unless $I0 goto L2
-    $I0 = stat target, .STAT_FILESIZE
-    unless $I0 goto L2
-    goto L3
-  L2:
-    .return (0)
-  L3:
-    $I0 = stat target, .STAT_MODIFYTIME
-    $P0 = iter depends
-  L4:
-    unless $P0 goto L5
-    $S0 = shift $P0
-    if $S0 == '' goto L4
-    $I1 = stat $S0, .STAT_MODIFYTIME
-    if $I1 < $I0 goto L4
-    .return (0)
-  L5:
-    .return (1)
-.end
-
-.sub 'newer' :multi(string, string)
-    .param string target
-    .param string depend
-    $I0 = stat target, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat target, .STAT_FILESIZE
-    unless $I0 goto L1
-    goto L2
-  L1:
-    .return (0)
-  L2:
-    $I1 = stat target, .STAT_MODIFYTIME
-    $I2 = stat depend, .STAT_MODIFYTIME
-    $I0 = $I1 > $I2
-    .return ($I0)
-.end
-
-.sub 'newer' :multi(pmc, pmc)
-    .param pmc target
-    .param pmc depend
-    $S0 = target
-    .tailcall newer($S0, depend)
-.end
-
-=item mkpath
-
-=cut
-
-.sub 'mkpath'
-    .param string pathname
-    .param int verbose          :named('verbose') :optional
-    $I1 = 1
-  L1:
-    $I1 = index pathname, '/', $I1
-    if $I1 < 0 goto L2
-    $S0 = substr pathname, 0, $I1
-    inc $I1
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
-    mkdir($S0, verbose :named('verbose'))
-    goto L1
-  L2:
-    $I0 = stat pathname, .STAT_EXISTS
-    if $I0 goto L3
-    mkdir(pathname, verbose :named('verbose'))
-  L3:
-.end
-
-=item mkdir
-
-=cut
-
-.sub 'mkdir'
-    .param string dirname
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "mkdir "
-    say dirname
-  L1:
-    $P0 = new 'OS'
-    $I1 = 0o775
-    push_eh _handler
-    $P0.'mkdir'(dirname, $I1)
-    pop_eh
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't mkdir '"
-    $S0 .= dirname
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item install
-
-=cut
-
-.sub 'install'
-    .param string src
-    .param string dst
-    .param int exe              :named('exe') :optional
-    .param int has_exe          :opt_flag
-    .param int verbose          :named('verbose') :optional
-    # mkpath
-    $I1 = 1
-  L1:
-    $I1 = index dst, '/', $I1
-    if $I1 < 0 goto L2
-    $S0 = substr dst, 0, $I1
-    inc $I1
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
-    mkdir($S0, verbose :named('verbose'))
-    goto L1
-  L2:
-    $I0 = newer(dst, src)
-    if $I0 goto L3
-    cp(src, dst, verbose :named('verbose'))
-    unless has_exe goto L3
-    unless exe goto L3
-    $P0 = getinterp
-    $P0 = $P0[.IGLOBALS_CONFIG_HASH]
-    $I0 = $P0['cygwin']
-    if $I0 goto L4
-    $I0 = $P0['hpux']
-    if $I0 goto L4
-    goto L3
-  L4:
-    chmod(dst, 0o755, verbose :named('verbose'))
-  L3:
-.end
-
-=item cp
-
-=cut
-
-.sub 'cp'
-    .param string src
-    .param string dst
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "cp "
-    print src
-    print " "
-    say dst
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler1
-    $S0 = $P0.'readall'(src)
-    pop_eh
-    push_eh _handler2
-    $P0.'open'(dst, 'w')
-    pop_eh
-    $P0.'puts'($S0)
-    $P0.'close'()
-    .return ()
-  _handler1:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= src
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-  _handler2:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= dst
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item chmod
-
-=cut
-
-.sub 'chmod'
-    .param string filename
-    .param int mode
-    .param int verbose          :named('verbose') :optional
-    # see TT #1322
-    $P0 = get_config()
-    .local string cmd
-    cmd = $P0['perl']
-    cmd .= " -MExtUtils::Command -e ExtUtils::Command::chmod "
-    $P1 = new 'FixedIntegerArray'
-    set $P1, 1
-    $P1[0] = mode
-    $S0 = sprintf '0%o', $P1
-    cmd .= $S0
-    cmd .= " "
-    cmd .= filename
-    system(cmd, verbose :named('verbose'))
-.end
-
-=item unlink
-
-=cut
-
-.sub 'unlink' :multi(string)
-    .param string filename
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    $I0 = stat filename, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat filename, .STAT_ISREG
-    unless $I0 goto L1
-    unless has_verbose goto L2
-    unless verbose goto L2
-    print "unlink "
-    say filename
-  L2:
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'rm'(filename)
-    pop_eh
-  L1:
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't remove '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-.sub 'unlink' :multi(pmc)
-    .param pmc list
-    .param int verbose          :named('verbose') :optional
-    $I0 = does list, 'array'
-    if $I0 goto L1
-    $S0 = list
-    unlink($S0, verbose :named('verbose'))
-    goto L2
-  L1:
-    $P0 = iter list
-  L3:
-    unless $P0 goto L2
-    $S0 = shift $P0
-    unlink($S0, verbose :named('verbose'))
-    goto L3
-  L2:
-.end
-
-=item rmtree
-
-=cut
-
-.sub 'rmtree'
-    .param string path
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    $I0 = stat path, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat path, .STAT_ISDIR
-    unless $I0 goto L1
-    unless has_verbose goto L2
-    unless verbose goto L2
-    print "rmtree "
-    say path
-  L2:
-    new $P0, 'OS'
-    $P1 = $P0.'readdir'(path)
-    push_eh _handler
-  L3:
-    unless $P1 goto L4
-    $S0 = shift $P1
-    if $S0 == '.' goto L3
-    if $S0 == '..' goto L3
-    $S1 = path . '/'
-    $S1 .= $S0
-    $I0 = stat $S1, .STAT_ISDIR
-    unless $I0 goto L5
-    rmtree($S1)
-    goto L3
-  L5:
-    $P0.'rm'($S1)
-    goto L3
-  L4:
-    push_eh _handler
-    $S1 = path
-    $P0.'rm'($S1)
-    pop_eh
-  L1:
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't remove '"
-    $S0 .= $S1
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item basename
-
-=cut
-
-.sub 'basename'
-    .param string path
-    $I0 = 0
-  L1:
-    $I1 = index path, '/', $I0
-    if $I1 < 0 goto L2
-    $I0 = $I1 + 1
-    goto L1
-  L2:
-    $S0 = substr path, $I0
-    .return ($S0)
-.end
-
-=item dirname
-
-=cut
-
-.sub 'dirname'
-    .param string path
-    unless path goto L3
-    $I0 = 0
-  L1:
-    $I1 = index path, '/', $I0
-    if $I1 < 0 goto L2
-    $I0 = $I1 + 1
-    goto L1
-  L2:
-    dec $I0
-    unless $I0 > 0 goto L3
-    $S0 = substr path, 0, $I0
-    .return ($S0)
-  L3:
-    .return ('.')
-.end
-
-=item cwd
-
-=cut
-
-.sub 'cwd'
-    new $P0, 'OS'
-    $S0 = $P0.'cwd'()
-    $P0 = split "\\", $S0
-    $S0 = join "/", $P0
-    .return ($S0)
-.end
-
-=item chdir
-
-=cut
-
-.sub 'chdir'
-    .param string dirname
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "cd "
-    say dirname
-  L1:
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'chdir'(dirname)
-    pop_eh
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't chdir '"
-    $S0 .= dirname
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item chomp
-
-=cut
-
-.include 'cclass.pasm'
-
-.sub 'chomp'
-    .param string str
-    $I0 = index str, "\r"
-    if $I0 < 0 goto L1
-    str = substr str, 0, $I0
-  L1:
-    $I1 = index str, "\n"
-    if $I1 < 0 goto L2
-    str = substr str, 0, $I1
-  L2:
-    .return (str)
-.end
-
-=item glob
-
-=cut
-
-.sub 'glob'
-    .param string patterns
-    $P0 = new 'ResizableStringArray'
-    $P1 = split ' ', patterns
-  L1:
-    unless $P1 goto L2
-    .local string pattern
-    pattern = shift $P1
-    $I0 = index pattern, '*'
-    unless $I0 < 0 goto L3
-    $I0 = index pattern, '?'
-    unless $I0 < 0 goto L3
-    $I0 = index pattern, '['
-    unless $I0 < 0 goto L3
-    $I0 = stat pattern, .STAT_EXISTS
-    unless $I0 goto L1
-    push $P0, pattern
-    goto L1
-  L3:
-    .local pmc matcher
-    load_bytecode 'PGE/Glob.pbc'
-    $P2 = compreg 'PGE::Glob'
-    matcher = $P2.'compile'(pattern)
-    $S0 = dirname(pattern)
-    $P3 = glob($S0)
-    $P4 = new 'OS'
-  L4:
-    unless $P3 goto L1
-    .local string dir
-    dir = shift $P3
-    $I0 = stat dir, .STAT_ISDIR
-    unless $I0 goto L4
-    $S0 = basename(dir)
-    $P5 = $P4.'readdir'(dir)
-  L5:
-    unless $P5 goto L4
-    $S0 = shift $P5
-    if $S0 == '.' goto L5
-    if $S0 == '..' goto L5
-    if dir == '.' goto L6
-    $S1 = dir . '/'
-    $S0 = $S1 . $S0
-  L6:
-    $P6 = matcher($S0)
-    unless $P6 goto L5
-    push $P0, $S0
-    goto L5
-  L2:
-    .return ($P0)
-.end
-
-=item getenv
-
-=cut
-
-.sub 'getenv'
-    .param string name
-    new $P0, 'Env'
-    $S0 = $P0[name]
-    .return ($S0)
-.end
-
-=item setenv
-
-=cut
-
-.sub 'setenv'
-    .param string name
-    .param string value
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "setenv "
-    print name
-    print " = "
-    say value
-  L1:
-    new $P0, 'Env'
-    $P0[name] = value
-.end
-
-=item slurp
-
-=cut
-
-.sub 'slurp'
-    .param string filename
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $S0 = $P0.'readall'(filename)
-    pop_eh
-    .return ($S0)
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item spew
-
-=cut
-
-.sub 'spew'
-    .param string filename
-    .param string content
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "creat "
-    say filename
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $P0.'open'(filename, 'w')
-    pop_eh
-    $P0.'puts'(content)
-    $P0.'close'()
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item append
-
-=cut
-
-.sub 'append'
-    .param string filename
-    .param string content
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "append "
-    say filename
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $P0.'open'(filename, 'a')
-    pop_eh
-    $P0.'puts'(content)
-    $P0.'close'()
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=back
-
 =head1 AUTHOR
 
 Francois Perrad

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

Modified: branches/ops_pct/runtime/parrot/library/pcore.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/pcore.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/pcore.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -7,7 +7,7 @@
 .namespace [ 'Sub' ]
 
 # implementation Sub.get_lexenv :method
-.sub get_lexenv :method
+.sub get_lexenv :method :nsentry
     .local pmc env, pad, interp
     env = new 'ResizablePMCArray'
     .local int level

Modified: branches/ops_pct/runtime/parrot/library/uuid.pir
==============================================================================
--- branches/ops_pct/runtime/parrot/library/uuid.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/runtime/parrot/library/uuid.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -289,7 +289,7 @@
 .sub 'hex' :anon
     .param string in
     .const string xdigits = '0123456789ABCDEF'
-    upcase in
+    in  = upcase in
     $S1 = substr in, 0, 1
     $I1 = index xdigits, $S1
     $I1 *= 16

Modified: branches/ops_pct/src/byteorder.c
==============================================================================
--- branches/ops_pct/src/byteorder.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/byteorder.c	Wed May  5 08:45:29 2010	(r46302)
@@ -10,7 +10,7 @@
 
 These are assigned to a vtable when the PBC file is loaded.
 
-If the vtable method for conversion from the native byteorder is called,
+If the vtable function for conversion from the native byteorder is called,
 it is a I<no op> and will work, but the caller should know if the
 byteorder in the PBC file is native and skip the conversion and just map
 it in.

Modified: branches/ops_pct/src/call/args.c
==============================================================================
--- branches/ops_pct/src/call/args.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/call/args.c	Wed May  5 08:45:29 2010	(r46302)
@@ -71,85 +71,18 @@
     INTVAL param_index,
     INTVAL param_flags,
     ARGIN(void *arg_info),
-    ARGIN(struct pcc_set_funcs *accessor))
+    ARGMOD(struct pcc_set_funcs *accessor))
         __attribute__nonnull__(1)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
-
-static void assign_default_result_value(PARROT_INTERP,
-    ARGMOD(PMC *results),
-    INTVAL index,
-    INTVAL result_flags)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*results);
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*accessor);
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC* clone_key_arg(PARROT_INTERP, ARGIN(PMC *key))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void csr_fill_integer(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL key,
-    INTVAL value)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void csr_fill_number(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL key,
-    FLOATVAL value)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void csr_fill_pmc(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL key,
-    ARGIN_NULLOK(PMC *value))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void csr_fill_string(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL key,
-    ARGIN_NULLOK(STRING *value))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static void* csr_get_pointer_keyed_int(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL key)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING* csr_get_string_keyed_int(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL key)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void csr_push_pointer(PARROT_INTERP,
-    ARGIN(PMC *self),
-    ARGIN_NULLOK(void *value),
-    INTVAL type)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static void** csr_reallocate_return_values(PARROT_INTERP,
-    ARGIN(PMC *self),
-    INTVAL size)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static INTVAL csr_returns_count(PARROT_INTERP, ARGIN(PMC *self))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
 static void dissect_aggregate_arg(PARROT_INTERP,
     ARGMOD(PMC *call_object),
     ARGIN(PMC *aggregate))
@@ -161,8 +94,8 @@
 static void extract_named_arg_from_op(PARROT_INTERP,
     ARGMOD(PMC *call_object),
     ARGIN(STRING *name),
-    ARGIN(PMC * const raw_sig),
-    ARGIN(opcode_t * const raw_args),
+    ARGIN(PMC *raw_sig),
+    ARGIN(opcode_t *raw_args),
     INTVAL arg_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -175,224 +108,129 @@
     ARGMOD_NULLOK(PMC *call_object),
     ARGIN(PMC *raw_sig),
     ARGIN(void *arg_info),
-    ARGIN(struct pcc_set_funcs *accessor))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*call_object);
-
-static void fill_results(PARROT_INTERP,
-    ARGMOD_NULLOK(PMC *call_object),
-    ARGIN(PMC *raw_sig),
-    ARGIN(void *return_info),
-    ARGIN(struct pcc_get_funcs *accessor))
+    ARGIN(struct pcc_set_funcs *accessor),
+    Errors_classes direction)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         __attribute__nonnull__(5)
         FUNC_MODIFIES(*call_object);
 
-PARROT_CANNOT_RETURN_NULL
-static INTVAL intval_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static INTVAL intval_arg_from_continuation(PARROT_INTERP,
-    ARGIN(PMC *cs),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static INTVAL intval_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static INTVAL intval_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+PARROT_WARN_UNUSED_RESULT
+static INTVAL intval_constant_from_op(SHIM_INTERP,
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static INTVAL intval_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static INTVAL intval_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static INTVAL* intval_param_from_c_args(PARROT_INTERP,
+static INTVAL* intval_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static INTVAL* intval_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL numval_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL numval_arg_from_continuation(PARROT_INTERP,
-    ARGIN(PMC *cs),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL numval_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL numval_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static FLOATVAL numval_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static FLOATVAL numval_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static FLOATVAL* numval_param_from_c_args(PARROT_INTERP,
+static FLOATVAL* numval_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static FLOATVAL* numval_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CAN_RETURN_NULL
 static void parse_signature_string(PARROT_INTERP,
     ARGIN(const char *signature),
-    ARGMOD(PMC **arg_flags),
-    ARGMOD(PMC **return_flags))
+    ARGMOD(PMC **arg_flags))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*arg_flags)
-        FUNC_MODIFIES(*return_flags);
-
-PARROT_CANNOT_RETURN_NULL
-static PMC* pmc_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static PMC* pmc_arg_from_continuation(PARROT_INTERP,
-    ARGIN(PMC *cs),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static PMC* pmc_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        FUNC_MODIFIES(*arg_flags);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC* pmc_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-static PMC* pmc_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static PMC* pmc_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static PMC** pmc_param_from_c_args(PARROT_INTERP,
+static PMC** pmc_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC** pmc_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING* string_arg_from_c_args(PARROT_INTERP,
-    ARGIN(va_list *args),
-    SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING* string_arg_from_continuation(PARROT_INTERP,
-    ARGIN(PMC *cs),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING* string_arg_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_args),
-    INTVAL arg_index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static STRING* string_constant_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
-static STRING* string_constant_from_varargs(PARROT_INTERP,
-    ARGIN(void *data),
-    INTVAL index)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+PARROT_WARN_UNUSED_RESULT
+static STRING* string_constant_from_varargs(SHIM_INTERP,
+    SHIM(void *data),
+    SHIM(INTVAL index));
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static STRING** string_param_from_c_args(PARROT_INTERP,
+static STRING** string_param_from_c_args(SHIM_INTERP,
     ARGIN(va_list *args),
     SHIM(INTVAL param_index))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING** string_param_from_op(PARROT_INTERP,
-    ARGIN(opcode_t *raw_params),
+    ARGIN(const opcode_t *raw_params),
     INTVAL param_index)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -401,39 +239,9 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(arg_info) \
     , PARROT_ASSERT_ARG(accessor))
-#define ASSERT_ARGS_assign_default_result_value __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(results))
 #define ASSERT_ARGS_clone_key_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(key))
-#define ASSERT_ARGS_csr_fill_integer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_fill_number __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_fill_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_fill_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_get_pointer_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_get_string_keyed_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_push_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_reallocate_return_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
-#define ASSERT_ARGS_csr_returns_count __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(self))
 #define ASSERT_ARGS_dissect_aggregate_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(call_object) \
@@ -449,97 +257,42 @@
     , PARROT_ASSERT_ARG(raw_sig) \
     , PARROT_ASSERT_ARG(arg_info) \
     , PARROT_ASSERT_ARG(accessor))
-#define ASSERT_ARGS_fill_results __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_sig) \
-    , PARROT_ASSERT_ARG(return_info) \
-    , PARROT_ASSERT_ARG(accessor))
-#define ASSERT_ARGS_intval_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_intval_arg_from_continuation __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cs))
-#define ASSERT_ARGS_intval_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_intval_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_intval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+       PARROT_ASSERT_ARG(raw_params))
+#define ASSERT_ARGS_intval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_intval_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_intval_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_numval_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_numval_arg_from_continuation __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cs))
-#define ASSERT_ARGS_numval_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_numval_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_numval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_numval_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_numval_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_numval_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
 #define ASSERT_ARGS_parse_signature_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(signature) \
-    , PARROT_ASSERT_ARG(arg_flags) \
-    , PARROT_ASSERT_ARG(return_flags))
-#define ASSERT_ARGS_pmc_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_pmc_arg_from_continuation __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cs))
-#define ASSERT_ARGS_pmc_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
+    , PARROT_ASSERT_ARG(arg_flags))
 #define ASSERT_ARGS_pmc_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_pmc_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_pmc_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pmc_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_pmc_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_string_arg_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
-#define ASSERT_ARGS_string_arg_from_continuation __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cs))
-#define ASSERT_ARGS_string_arg_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(raw_args))
 #define ASSERT_ARGS_string_constant_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
-#define ASSERT_ARGS_string_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_string_constant_from_varargs __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_string_param_from_c_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(args))
+       PARROT_ASSERT_ARG(args))
 #define ASSERT_ARGS_string_param_from_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(raw_params))
@@ -549,7 +302,7 @@
 /*
 
 =item C<PMC* Parrot_pcc_build_sig_object_from_op(PARROT_INTERP, PMC *signature,
-PMC * const raw_sig, opcode_t * const raw_args)>
+PMC *raw_sig, opcode_t *raw_args)>
 
 Take a raw signature and argument list from a set_args opcode and
 convert it to a CallContext PMC.
@@ -563,26 +316,28 @@
 PARROT_CANNOT_RETURN_NULL
 PMC*
 Parrot_pcc_build_sig_object_from_op(PARROT_INTERP, ARGIN_NULLOK(PMC *signature),
-        ARGIN(PMC * const raw_sig), ARGIN(opcode_t * const raw_args))
+        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_args))
 {
     ASSERT_ARGS(Parrot_pcc_build_sig_object_from_op)
-    PMC            *call_object;
     PMC            * const ctx = CURRENT_CONTEXT(interp);
+    PMC            *call_object;
     INTVAL         *int_array;
     INTVAL          arg_count;
-    INTVAL          arg_index;
+    INTVAL          arg_index = 0;
 
     if (PMC_IS_NULL(signature))
         call_object = Parrot_pmc_new(interp, enum_class_CallContext);
-    else
+    else {
         call_object = signature;
+        VTABLE_morph(interp, call_object, PMCNULL);
+    }
 
     /* this macro is much, much faster than the VTABLE STRING comparisons */
     SETATTR_CallContext_arg_flags(interp, call_object, raw_sig);
     GETATTR_FixedIntegerArray_size(interp, raw_sig, arg_count);
     GETATTR_FixedIntegerArray_int_array(interp, raw_sig, int_array);
 
-    for (arg_index = 0; arg_index < arg_count; arg_index++) {
+    for (; arg_index < arg_count; ++arg_index) {
         const INTVAL arg_flags = int_array[arg_index];
         const INTVAL constant  = PARROT_ARG_CONSTANT_ISSET(arg_flags);
         const INTVAL raw_index = raw_args[arg_index + 2];
@@ -609,14 +364,12 @@
             {
                 STRING *string_value;
                 if (constant)
-                    /* ensure that callees don't modify constant caller strings */
-                    string_value = Parrot_str_new_COW(interp,
-                            Parrot_pcc_get_string_constant(interp, ctx, raw_index));
+                    string_value = Parrot_pcc_get_string_constant(interp, ctx, raw_index);
                 else
                     string_value = CTX_REG_STR(ctx, raw_index);
 
                 if (arg_flags & PARROT_ARG_NAME) {
-                    arg_index++;
+                    ++arg_index;
                     if (!PMC_IS_NULL(call_object)
                          && VTABLE_exists_keyed_str(interp, call_object, string_value)) {
                         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
@@ -643,7 +396,11 @@
                     dissect_aggregate_arg(interp, call_object, pmc_value);
                 }
                 else {
-                    VTABLE_push_pmc(interp, call_object, clone_key_arg(interp, pmc_value));
+                    VTABLE_push_pmc(interp, call_object, PMC_IS_NULL(pmc_value)
+                            ? PMCNULL
+                            : clone_key_arg(interp, pmc_value));
+                    if (arg_flags & PARROT_ARG_INVOCANT)
+                        Parrot_pcc_set_object(interp, call_object, pmc_value);
                 }
 
                 break;
@@ -660,7 +417,7 @@
 /*
 
 =item C<static void extract_named_arg_from_op(PARROT_INTERP, PMC *call_object,
-STRING *name, PMC * const raw_sig, opcode_t * const raw_args, INTVAL arg_index)>
+STRING *name, PMC *raw_sig, opcode_t *raw_args, INTVAL arg_index)>
 
 Pulls in the next argument from a set_args opcode, and sets it as the
 value of a named argument in the CallContext PMC.
@@ -671,8 +428,7 @@
 
 static void
 extract_named_arg_from_op(PARROT_INTERP, ARGMOD(PMC *call_object), ARGIN(STRING *name),
-        ARGIN(PMC * const raw_sig), ARGIN(opcode_t * const raw_args),
-        INTVAL arg_index)
+        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_args), INTVAL arg_index)
 {
     ASSERT_ARGS(extract_named_arg_from_op)
     PMC   * const ctx = CURRENT_CONTEXT(interp);
@@ -698,10 +454,8 @@
         break;
       case PARROT_ARG_STRING:
         if (constant)
-            /* ensure that callees don't modify constant caller strings */
             VTABLE_set_string_keyed_str(interp, call_object, name,
-                        Parrot_str_new_COW(interp,
-                                Parrot_pcc_get_string_constant(interp, ctx, raw_index)));
+                    Parrot_pcc_get_string_constant(interp, ctx, raw_index));
         else
             VTABLE_set_string_keyed_str(interp, call_object, name,
                         CTX_REG_STR(ctx, raw_index));
@@ -733,7 +487,6 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
 static void
 dissect_aggregate_arg(PARROT_INTERP, ARGMOD(PMC *call_object), ARGIN(PMC *aggregate))
 {
@@ -741,7 +494,7 @@
     if (VTABLE_does(interp, aggregate, CONST_STRING(interp, "array"))) {
         const INTVAL elements = VTABLE_elements(interp, aggregate);
         INTVAL index;
-        for (index = 0; index < elements; index++) {
+        for (index = 0; index < elements; ++index) {
             VTABLE_push_pmc(interp, call_object,
                     VTABLE_get_pmc_keyed_int(interp, aggregate, index));
         }
@@ -754,7 +507,7 @@
         SETATTR_Key_next_key(interp, key, (PMC *)INITBucketIndex);
 
         /* Low-level hash iteration. */
-        for (index = 0; index < elements; index++) {
+        for (index = 0; index < elements; ++index) {
             if (!PMC_IS_NULL(key)) {
                 STRING * const name = (STRING *)parrot_hash_get_idx(interp,
                                 (Hash *)VTABLE_get_pointer(interp, aggregate), key);
@@ -772,12 +525,12 @@
 
 /*
 
-=item C<PMC* Parrot_pcc_build_sig_object_returns_from_op(PARROT_INTERP, PMC
-*signature, PMC *raw_sig, opcode_t *raw_args)>
+=item C<PMC* Parrot_pcc_build_call_from_c_args(PARROT_INTERP, PMC *signature,
+const char *sig, ...)>
 
-Take a raw signature and argument list from a set_results opcode and
-convert it to a CallContext PMC. Uses an existing CallContext PMC if
-one was already created for set_args. Otherwise, creates a new one.
+Converts a variable list of C args into a CallContext PMC. The CallContext
+stores the original short signature string and an array of integer types to
+pass on to the multiple dispatch search.
 
 =cut
 
@@ -785,74 +538,105 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PMC*
-Parrot_pcc_build_sig_object_returns_from_op(PARROT_INTERP, ARGIN_NULLOK(PMC *signature),
-        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_args))
+Parrot_pcc_build_call_from_c_args(PARROT_INTERP,
+        ARGIN_NULLOK(PMC *signature), ARGIN(const char *sig), ...)
 {
-    ASSERT_ARGS(Parrot_pcc_build_sig_object_returns_from_op)
-    PMC            *call_object;
-    INTVAL         *int_array;
-    PMC            * const ctx  = CURRENT_CONTEXT(interp);
-    INTVAL          arg_index;
-    INTVAL          arg_count;
+    ASSERT_ARGS(Parrot_pcc_build_call_from_c_args)
+    PMC *call_object;
+    va_list args;
+    va_start(args, sig);
+    call_object = Parrot_pcc_build_call_from_varargs(interp, signature,
+         sig, &args);
+    va_end(args);
+    return call_object;
+}
+
+/*
+
+=item C<PMC* Parrot_pcc_build_call_from_varargs(PARROT_INTERP, PMC *signature,
+const char *sig, va_list *args)>
+
+Converts a varargs list into a CallContext PMC. The CallContext stores the
+original short signature string and an array of integer types to pass on to the
+multiple dispatch search.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+PMC*
+Parrot_pcc_build_call_from_varargs(PARROT_INTERP,
+        ARGIN_NULLOK(PMC *signature), ARGIN(const char *sig),
+        ARGMOD(va_list *args))
+{
+    ASSERT_ARGS(Parrot_pcc_build_call_from_varargs)
+    PMC         * arg_flags         = PMCNULL;
+    PMC         * call_object;
+    INTVAL       i                  = 0;
 
     if (PMC_IS_NULL(signature))
         call_object = Parrot_pmc_new(interp, enum_class_CallContext);
-    /* A hack to support 'get_results' as the way of fetching the
-     * exception object inside an exception handler. The first argument
-     * in the call object is the exception, stick it directly into the
-     * destination register. */
-    else if (CALLSIGNATURE_is_exception_TEST(signature)) {
-        const INTVAL raw_index = raw_args[2];
-        CTX_REG_PMC(ctx, raw_index) =
-                VTABLE_get_pmc_keyed_int(interp, signature, 0);
-        return NULL;
-    }
-    else
+    else {
         call_object = signature;
+        VTABLE_morph(interp, call_object, PMCNULL);
+    }
 
-    /* a little encapsulation violation for great speed */
-    SETATTR_CallContext_return_flags(interp, call_object, raw_sig);
-
-    GETATTR_FixedIntegerArray_size(interp, raw_sig, arg_count);
-    GETATTR_FixedIntegerArray_int_array(interp, raw_sig, int_array);
+    parse_signature_string(interp, sig, &arg_flags);
+    VTABLE_set_attr_str(interp, call_object, CONST_STRING(interp, "arg_flags"), arg_flags);
 
-    for (arg_index = 0; arg_index < arg_count; arg_index++) {
-        const INTVAL arg_flags = int_array[arg_index];
-        const INTVAL raw_index = raw_args[arg_index + 2];
+    /* Process the varargs list */
+    for (; sig[i] != '\0'; ++i) {
+        const INTVAL type = sig[i];
 
-        /* Returns store a pointer to the register, so they can pass
-         * the result back to the caller. */
-        switch (PARROT_ARG_TYPE_MASK_MASK(arg_flags)) {
-          case PARROT_ARG_INTVAL:
-            csr_push_pointer(interp, call_object, &(CTX_REG_INT(ctx, raw_index)),
-                        PARROT_ARG_INTVAL);
+        /* Regular arguments just set the value */
+        switch (type) {
+          case 'I':
+            VTABLE_push_integer(interp, call_object, va_arg(*args, INTVAL));
             break;
-          case PARROT_ARG_FLOATVAL:
-            csr_push_pointer(interp, call_object, &(CTX_REG_NUM(ctx, raw_index)),
-                        PARROT_ARG_FLOATVAL);
+          case 'N':
+            VTABLE_push_float(interp, call_object, va_arg(*args, FLOATVAL));
             break;
-          case PARROT_ARG_STRING:
-            if (arg_flags & PARROT_ARG_NAME) {
-                STRING * string_val = arg_flags & PARROT_ARG_CONSTANT
-                                    ? Parrot_pcc_get_string_constant(interp, ctx, raw_index)
-                                    : CTX_REG_STR(ctx, raw_index);
-                csr_push_pointer(interp, call_object, string_val, PARROT_ARG_STRING);
-            }
-            else {
-                csr_push_pointer(interp, call_object,
-                            &(CTX_REG_STR(ctx, raw_index)), PARROT_ARG_STRING);
-            }
+          case 'S':
+            VTABLE_push_string(interp, call_object, va_arg(*args, STRING *));
             break;
-          case PARROT_ARG_PMC:
-            csr_push_pointer(interp, call_object, &(CTX_REG_PMC(ctx, raw_index)),
-                        PARROT_ARG_PMC);
+          case 'P':
+            {
+                const INTVAL type_lookahead = sig[i+1];
+                PMC * const pmc_arg = va_arg(*args, PMC *);
+                if (type_lookahead == 'f') {
+                    dissect_aggregate_arg(interp, call_object, pmc_arg);
+                    ++i; /* skip 'f' */
+                }
+                else if (type_lookahead == 'i') {
+                    if (i)
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_INVALID_OPERATION,
+                            "Dispatch: only the first argument can be an invocant");
+                    else {
+                        VTABLE_push_pmc(interp, call_object, pmc_arg);
+                        ++i; /* skip 'i' */
+                        Parrot_pcc_set_object(interp, call_object, pmc_arg);
+                    }
+                }
+                else
+                    VTABLE_push_pmc(interp, call_object, PMC_IS_NULL(pmc_arg)
+                            ? PMCNULL
+                            : clone_key_arg(interp, pmc_arg));
+                break;
+            }
+          case '-':
+            return call_object;
             break;
           default:
-            break;
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Dispatch: invalid argument type %c!", type);
         }
-
     }
 
     return call_object;
@@ -879,100 +663,75 @@
         ARGIN(const char *sig), va_list args)
 {
     ASSERT_ARGS(Parrot_pcc_build_sig_object_from_varargs)
-    PMC         *arg_flags     = PMCNULL;
-    PMC         *return_flags  = PMCNULL;
+    PMC         * arg_flags         = PMCNULL;
     PMC         * const call_object = Parrot_pmc_new(interp, enum_class_CallContext);
-    const INTVAL sig_len            = strlen(sig);
     INTVAL       in_return_sig      = 0;
     INTVAL       i;
     int          append_pi          = 1;
 
-    if (!sig_len)
+    /* empty args or empty returns */
+    if (*sig == '-' || *sig == '\0')
         return call_object;
 
-    parse_signature_string(interp, sig, &arg_flags, &return_flags);
+    parse_signature_string(interp, sig, &arg_flags);
     VTABLE_set_attr_str(interp, call_object, CONST_STRING(interp, "arg_flags"), arg_flags);
-    VTABLE_set_attr_str(interp, call_object, CONST_STRING(interp, "return_flags"), return_flags);
 
     /* Process the varargs list */
-    for (i = 0; i < sig_len; ++i) {
+    for (i = 0; sig[i] != '\0'; ++i) {
         const INTVAL type = sig[i];
 
-        if (in_return_sig) {
-            /* Returns store the original passed-in pointer so they can pass
-             * the result back to the caller. */
-            switch (type) {
-              case 'I':
-                csr_push_pointer(interp, call_object,
-                            (void *)va_arg(args, INTVAL *), PARROT_ARG_INTVAL);
-                break;
-              case 'N':
-                csr_push_pointer(interp, call_object,
-                            (void *)va_arg(args, FLOATVAL *), PARROT_ARG_FLOATVAL);
-                break;
-              case 'S':
-                csr_push_pointer(interp, call_object,
-                            (void *)va_arg(args, STRING **), PARROT_ARG_STRING);
-                break;
-              case 'P':
-                csr_push_pointer(interp, call_object,
-                            (void *)va_arg(args, PMC **), PARROT_ARG_PMC);
-                break;
-              default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION,
-                        "Dispatch: invalid argument type %c!", type);
-             }
-        }
-        else {
-            /* Regular arguments just set the value */
-            switch (type) {
-              case 'I':
-                VTABLE_push_integer(interp, call_object, va_arg(args, INTVAL));
-                break;
-              case 'N':
-                VTABLE_push_float(interp, call_object, va_arg(args, FLOATVAL));
-                break;
-              case 'S':
-                VTABLE_push_string(interp, call_object, va_arg(args, STRING *));
-                break;
-              case 'P':
-                {
-                    const INTVAL type_lookahead = sig[i+1];
-                    PMC * const pmc_arg = va_arg(args, PMC *);
-                    if (type_lookahead == 'f') {
-                         dissect_aggregate_arg(interp, call_object, pmc_arg);
-                        i++; /* skip 'f' */
-                    }
-                    else {
-                        VTABLE_push_pmc(interp, call_object, clone_key_arg(interp, pmc_arg));
-                        if (type_lookahead == 'i') {
-                            if (i != 0)
-                                Parrot_ex_throw_from_c_args(interp, NULL,
-                                    EXCEPTION_INVALID_OPERATION,
-                                    "Dispatch: only the first argument can be an invocant");
-                            i++; /* skip 'i' */
-                            append_pi = 0; /* Don't append Pi in front of signature */
-                        }
+        /* Don't process returns */
+        if (in_return_sig)
+            break;
+
+        /* Regular arguments just set the value */
+        switch (type) {
+          case 'I':
+            VTABLE_push_integer(interp, call_object, va_arg(args, INTVAL));
+            break;
+          case 'N':
+            VTABLE_push_float(interp, call_object, va_arg(args, FLOATVAL));
+            break;
+          case 'S':
+            VTABLE_push_string(interp, call_object, va_arg(args, STRING *));
+            break;
+          case 'P':
+            {
+                const INTVAL type_lookahead = sig[i+1];
+                PMC * const pmc_arg = va_arg(args, PMC *);
+                if (type_lookahead == 'f') {
+                     dissect_aggregate_arg(interp, call_object, pmc_arg);
+                     ++i; /* skip 'f' */
+                }
+                else {
+                    VTABLE_push_pmc(interp, call_object, PMC_IS_NULL(pmc_arg)
+                            ? PMCNULL
+                            : clone_key_arg(interp, pmc_arg));
+                    if (type_lookahead == 'i') {
+                        if (i != 0)
+                            Parrot_ex_throw_from_c_args(interp, NULL,
+                                EXCEPTION_INVALID_OPERATION,
+                                "Dispatch: only the first argument "
+                                "can be an invocant");
+                        ++i;           /* skip 'i' */
+                        append_pi = 0; /* Don't prepend Pi to signature */
                     }
-                    break;
                 }
-              case '-':
-                i++; /* skip '>' */
-                in_return_sig = 1;
                 break;
-              default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION,
-                        "Dispatch: invalid argument type %c!", type);
             }
+          case '-':
+            in_return_sig = 1;
+            break;
+          default:
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "Dispatch: invalid argument type %c!", type);
         }
     }
 
-    /* Check if we have an invocant, and add it to the front of the arguments iff needed */
-    if (!PMC_IS_NULL(obj) && append_pi) {
+    /* Add invocant to the front of the arguments iff needed */
+    if (!PMC_IS_NULL(obj) && append_pi)
         VTABLE_unshift_pmc(interp, call_object, obj);
-    }
 
     return call_object;
 }
@@ -980,7 +739,7 @@
 /*
 
 =item C<static void fill_params(PARROT_INTERP, PMC *call_object, PMC *raw_sig,
-void *arg_info, struct pcc_set_funcs *accessor)>
+void *arg_info, struct pcc_set_funcs *accessor, Errors_classes direction)>
 
 Gets args for the current function call and puts them into position.
 First it gets the positional non-slurpy parameters, then the positional
@@ -993,7 +752,9 @@
 
 static void
 fill_params(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(PMC *raw_sig), ARGIN(void *arg_info), ARGIN(struct pcc_set_funcs *accessor))
+        ARGIN(PMC *raw_sig), ARGIN(void *arg_info),
+        ARGIN(struct pcc_set_funcs *accessor),
+        Errors_classes direction)
 {
     ASSERT_ARGS(fill_params)
     INTVAL *raw_params;
@@ -1009,7 +770,7 @@
 
     /* Check if we should be throwing errors. This is configured separately
      * for parameters and return values. */
-    if (PARROT_ERRORS_test(interp, PARROT_ERRORS_PARAM_COUNT_FLAG))
+    if (PARROT_ERRORS_test(interp, direction))
         err_check = 1;
 
     /* A null call object is fine if there are no arguments and no returns. */
@@ -1043,24 +804,23 @@
     }
 
     /* First iterate over positional args and positional parameters. */
-    arg_index = 0;
-    param_index = 0;
-    positional_args = VTABLE_elements(interp, call_object);
+    GETATTR_CallContext_num_positionals(interp, call_object, positional_args);
+
     while (1) {
         INTVAL param_flags;
 
         /* Check if we've used up all the parameters. */
         if (param_index >= param_count) {
-            if (arg_index >= positional_args) {
-                /* We've used up all the arguments and parameters, we're done. */
+            /* We've used up all arguments and parameters; we're done. */
+            if (arg_index >= positional_args)
                 break;
-            }
             else if (err_check) {
                 /* We've used up all the parameters, but have extra positional
                  * args left over. */
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "too many positional arguments: %d passed, %d expected",
-                        positional_args, param_index);
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "too many positional arguments: %d passed, %d expected",
+                    positional_args, param_index);
             }
             return;
         }
@@ -1076,23 +836,25 @@
         if (param_flags & PARROT_ARG_SLURPY_ARRAY) {
             PMC *collect_positional;
 
-            /* Can't handle named slurpy here, go on to named argument handling. */
+            /* Can't handle named slurpy here, go to named argument handling */
             if (param_flags & PARROT_ARG_NAME)
                 break;
 
             if (named_count > 0)
                 Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION,
-                        "named parameters must follow all positional parameters");
+                    EXCEPTION_INVALID_OPERATION,
+                    "named parameters must follow all positional parameters");
 
             collect_positional = Parrot_pmc_new(interp,
-                    Parrot_get_ctx_HLL_type(interp, enum_class_ResizablePMCArray));
-            for (; arg_index < positional_args; arg_index++) {
+                Parrot_get_ctx_HLL_type(interp, enum_class_ResizablePMCArray));
+
+            for (; arg_index < positional_args; ++arg_index) {
                 VTABLE_push_pmc(interp, collect_positional,
-                        VTABLE_get_pmc_keyed_int(interp, call_object, arg_index));
+                    VTABLE_get_pmc_keyed_int(interp, call_object, arg_index));
             }
+
             *accessor->pmc(interp, arg_info, param_index) = collect_positional;
-            param_index++;
+            ++param_index;
             break; /* Terminate the positional arg loop. */
         }
 
@@ -1103,13 +865,15 @@
             if (param_flags & PARROT_ARG_NAME) {
                 STRING *param_name;
                 if (!(param_flags & PARROT_ARG_STRING))
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                            "named parameters must have a name specified");
+                    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);
-                named_count++;
-                param_index++;
+                   ?  accessor->string_constant(interp, arg_info, param_index)
+                   : *accessor->string(interp, arg_info, param_index);
+
+                ++named_count;
+                ++param_index;
                 if (param_index >= param_count)
                     continue;
 
@@ -1121,10 +885,10 @@
 
                 VTABLE_set_integer_keyed_str(interp, named_used_list, param_name, 1);
             }
-            else if (named_count > 0) {
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "named parameters must follow all positional parameters");
-            }
+            else if (named_count > 0)
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "named parameters must follow all positional parameters");
 
             /* Check for :lookahead parameter goes here. */
 
@@ -1132,23 +896,23 @@
             switch (PARROT_ARG_TYPE_MASK_MASK(param_flags)) {
               case PARROT_ARG_INTVAL:
                 *accessor->intval(interp, arg_info, param_index) =
-                            VTABLE_get_integer_keyed_int(interp, call_object, arg_index);
+                    VTABLE_get_integer_keyed_int(interp, call_object, arg_index);
                 break;
               case PARROT_ARG_FLOATVAL:
                 *accessor->numval(interp, arg_info, param_index) =
-                            VTABLE_get_number_keyed_int(interp, call_object, arg_index);
+                    VTABLE_get_number_keyed_int(interp, call_object, arg_index);
                 break;
               case PARROT_ARG_STRING:
                 *accessor->string(interp, arg_info, param_index) =
-                            VTABLE_get_string_keyed_int(interp, call_object, arg_index);
+                    VTABLE_get_string_keyed_int(interp, call_object, arg_index);
                 break;
               case PARROT_ARG_PMC:
                 *accessor->pmc(interp, arg_info, param_index) =
-                            VTABLE_get_pmc_keyed_int(interp, call_object, arg_index);
+                    VTABLE_get_pmc_keyed_int(interp, call_object, arg_index);
                 break;
               default:
                 Parrot_ex_throw_from_c_args(interp, NULL,
-                            EXCEPTION_INVALID_OPERATION, "invalid parameter type");
+                    EXCEPTION_INVALID_OPERATION, "invalid parameter type");
                 break;
             }
 
@@ -1158,7 +922,7 @@
                     const int next_param_flags = raw_params[param_index + 1];
 
                     if (next_param_flags & PARROT_ARG_OPT_FLAG) {
-                        param_index++;
+                        ++param_index;
                         *accessor->intval(interp, arg_info, param_index) = 1;
                     }
                 }
@@ -1181,7 +945,7 @@
                 const INTVAL next_param_flags = raw_params[param_index + 1];
 
                 if (next_param_flags & PARROT_ARG_OPT_FLAG) {
-                    param_index++;
+                    ++param_index;
                     *accessor->intval(interp, arg_info, param_index) = 0;
                 }
             }
@@ -1194,20 +958,22 @@
                 break;
 
             if (err_check)
-                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);
+                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. */
-        arg_index++;
-        param_index++;
+        ++arg_index;
+        ++param_index;
     }
 
     /* Now iterate over the named arguments and parameters. */
     while (1) {
-        STRING *param_name    = NULL;
-        INTVAL param_flags;
+        STRING *param_name;
+        INTVAL  param_flags;
 
         /* Check if we've used up all the parameters. We'll check for leftover
          * named args after the loop. */
@@ -1217,10 +983,10 @@
         param_flags = raw_params[param_index];
 
         /* All remaining parameters must be named. */
-        if (!(param_flags & PARROT_ARG_NAME)) {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named parameters must follow all positional parameters");
-        }
+        if (!(param_flags & PARROT_ARG_NAME))
+            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;
@@ -1229,13 +995,15 @@
 
             /* 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) {
-                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,
-                    "too many positional arguments: %d passed, %d expected",
-                    positional_args, param_index);
+            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,
+                "too many positional arguments: %d passed, %d expected",
+                positional_args, param_index);
         }
 
         /* Collected ("slurpy") named parameter */
@@ -1243,24 +1011,26 @@
             PMC * const collect_named = Parrot_pmc_new(interp,
                     Parrot_get_ctx_HLL_type(interp, enum_class_Hash));
             PMC * const named_arg_list = VTABLE_get_attr_str(interp, call_object, CONST_STRING(interp, "named"));
+
             if (!PMC_IS_NULL(named_arg_list)) {
-                INTVAL named_arg_count = VTABLE_elements(interp, named_arg_list);
+                const INTVAL named_arg_count = VTABLE_elements(interp, named_arg_list);
                 INTVAL named_arg_index;
 
                 /* Named argument iteration. */
-                for (named_arg_index = 0; named_arg_index < named_arg_count; named_arg_index++) {
+                for (named_arg_index = 0; named_arg_index < named_arg_count; ++named_arg_index) {
                     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 ((PMC_IS_NULL(named_used_list))
+                    || !VTABLE_exists_keyed_str(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. */
-                        if (PMC_IS_NULL(named_used_list)) /* Only created if needed. */
+                        /* 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);
-                        named_count++;
+                        ++named_count;
                     }
                 }
             }
@@ -1270,17 +1040,18 @@
         }
 
         /* Store the name. */
-       if (!(param_flags & PARROT_ARG_STRING))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named parameters must have a name specified");
+        if (!(param_flags & PARROT_ARG_STRING))
+            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);
+                   ?  accessor->string_constant(interp, arg_info, param_index)
+                   : *accessor->string(interp, arg_info, param_index);
 
         if (!STRING_IS_NULL(param_name)) {
             /* The next parameter is the actual value. */
-            param_index++;
-            if (param_index >= param_count)
+            if (++param_index >= param_count)
                 continue;
 
             param_flags = raw_params[param_index];
@@ -1288,32 +1059,33 @@
             if (VTABLE_exists_keyed_str(interp, call_object, param_name)) {
 
                 /* Mark the name as used, cannot be filled again. */
-                if (PMC_IS_NULL(named_used_list)) /* Only created if needed. */
+                /* 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);
-                named_count++;
+                ++named_count;
 
                 /* Fill the named parameter. */
                 switch (PARROT_ARG_TYPE_MASK_MASK(param_flags)) {
                   case PARROT_ARG_INTVAL:
                     *accessor->intval(interp, arg_info, param_index) =
-                                VTABLE_get_integer_keyed_str(interp, call_object, param_name);
+                        VTABLE_get_integer_keyed_str(interp, call_object, param_name);
                     break;
                   case PARROT_ARG_FLOATVAL:
                     *accessor->numval(interp, arg_info, param_index) =
-                                VTABLE_get_number_keyed_str(interp, call_object, param_name);
+                        VTABLE_get_number_keyed_str(interp, call_object, param_name);
                     break;
                   case PARROT_ARG_STRING:
                     *accessor->string(interp, arg_info, param_index) =
-                                VTABLE_get_string_keyed_str(interp, call_object, param_name);
+                        VTABLE_get_string_keyed_str(interp, call_object, param_name);
                     break;
                   case PARROT_ARG_PMC:
                     *accessor->pmc(interp, arg_info, param_index) =
-                                VTABLE_get_pmc_keyed_str(interp, call_object, param_name);
+                        VTABLE_get_pmc_keyed_str(interp, call_object, param_name);
                     break;
                   default:
                     Parrot_ex_throw_from_c_args(interp, NULL,
-                                EXCEPTION_INVALID_OPERATION, "invalid parameter type");
+                        EXCEPTION_INVALID_OPERATION, "invalid parameter type");
                     break;
                 }
 
@@ -1323,7 +1095,7 @@
                         const INTVAL next_param_flags = raw_params[param_index + 1];
 
                         if (next_param_flags & PARROT_ARG_OPT_FLAG) {
-                            param_index++;
+                            ++param_index;
                             *accessor->intval(interp, arg_info, param_index) = 1;
                         }
                     }
@@ -1333,28 +1105,30 @@
                 assign_default_param_value(interp, param_index, param_flags,
                         arg_info, accessor);
 
-                /* Mark the option flag for the parameter to FALSE, it was filled
-                 * with a default value. */
+                /* Mark the option flag for the parameter to FALSE;
+                 * it was filled with a default value. */
                 if (param_index + 1 < param_count) {
                     const INTVAL next_param_flags = raw_params[param_index + 1];
 
                     if (next_param_flags & PARROT_ARG_OPT_FLAG) {
-                        param_index++;
+                        ++param_index;
                         *accessor->intval(interp, arg_info, param_index) = 0;
                     }
                 }
             }
-            /* We don't have an argument for the parameter, and it's not optional,
-             * so it's an error. */
+
+            /* We don't have an argument for the parameter, and it's not
+             * optional, so it's an error. */
             else {
                 if (err_check)
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                            "too few named arguments: no argument for required parameter '%S'",
-                            param_name);
+                    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++;
+        ++param_index;
     }
 
     /* Double check that all named arguments were assigned to parameters. */
@@ -1367,28 +1141,32 @@
             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))
                 return;
-                /* The 'return' above is a temporary hack to duplicate an old bug,
-                 * and will be replaced by the exception below at the next
+
+                /* The 'return' above is a temporary hack to duplicate an old
+                 * bug, and will be replaced by the exception below at the next
                  * deprecation point, see TT #1103
 
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "too many named arguments: %d passed, 0 used",
-                        named_arg_count);
+                Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_INVALID_OPERATION,
+                    "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
                  * assigned to parameters. We're going to throw an exception
-                 * anyway, so spend a little extra effort to tell the user *which*
-                 * named argument is extra. */
+                 * anyway, so spend a little extra effort to tell the user
+                 * *which* named argument is extra. */
                 INTVAL named_arg_index;
 
                 /* Named argument iteration. */
-                for (named_arg_index = 0; named_arg_index < named_arg_count; named_arg_index++) {
-                    STRING *name = VTABLE_get_string_keyed_int(interp,
+                for (named_arg_index = 0; named_arg_index < named_arg_count; ++named_arg_index) {
+                    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)) {
@@ -1403,6 +1181,7 @@
     }
 }
 
+
 /*
 
 =item C<static void assign_default_param_value(PARROT_INTERP, INTVAL
@@ -1417,7 +1196,7 @@
 
 static void
 assign_default_param_value(PARROT_INTERP, INTVAL param_index, INTVAL param_flags,
-        ARGIN(void *arg_info), ARGIN(struct pcc_set_funcs *accessor))
+        ARGIN(void *arg_info), ARGMOD(struct pcc_set_funcs *accessor))
 {
     ASSERT_ARGS(assign_default_param_value)
     switch (PARROT_ARG_TYPE_MASK_MASK(param_flags)) {
@@ -1442,49 +1221,17 @@
 
 /*
 
-=item C<static void assign_default_result_value(PARROT_INTERP, PMC *results,
-INTVAL index, INTVAL result_flags)>
-
-Assign an appropriate default value to the result depending on its type
-
-=cut
-
-*/
-
-static void
-assign_default_result_value(PARROT_INTERP, ARGMOD(PMC *results), INTVAL index, INTVAL result_flags)
-{
-    ASSERT_ARGS(assign_default_result_value)
-    switch (PARROT_ARG_TYPE_MASK_MASK(result_flags)) {
-      case PARROT_ARG_INTVAL:
-        csr_fill_integer(interp, results, index, 0);
-        break;
-      case PARROT_ARG_FLOATVAL:
-        csr_fill_number(interp, results, index, 0.0);
-        break;
-      case PARROT_ARG_STRING:
-        csr_fill_string(interp, results, index, NULL);
-        break;
-      case PARROT_ARG_PMC:
-        csr_fill_pmc(interp, results, index, PMCNULL);
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL,
-                    EXCEPTION_INVALID_OPERATION, "invalid parameter type");
-        break;
-    }
-}
-
-/*
-
 =item C<void Parrot_pcc_fill_params_from_op(PARROT_INTERP, PMC *call_object, PMC
-*raw_sig, opcode_t *raw_params)>
+*raw_sig, opcode_t *raw_params, Errors_classes direction)>
 
 Gets args for the current function call and puts them into position.
 First it gets the positional non-slurpy parameters, then the positional
 slurpy parameters, then the named parameters, and finally the named
 slurpy parameters.
 
+C<direction> used to distinguish set_returns vs set_params for checking
+different flags.
+
 =cut
 
 */
@@ -1492,7 +1239,7 @@
 PARROT_EXPORT
 void
 Parrot_pcc_fill_params_from_op(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_params))
+        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_params), Errors_classes direction)
 {
     ASSERT_ARGS(Parrot_pcc_fill_params_from_op)
 
@@ -1508,7 +1255,7 @@
         (pmc_func_t)pmc_constant_from_op,
     };
 
-    fill_params(interp, call_object, raw_sig, raw_params, &function_pointers);
+    fill_params(interp, call_object, raw_sig, raw_params, &function_pointers, direction);
 }
 
 /*
@@ -1537,8 +1284,39 @@
 {
     ASSERT_ARGS(Parrot_pcc_fill_params_from_c_args)
     va_list args;
+
+    va_start(args, signature);
+    Parrot_pcc_fill_params_from_varargs(interp, call_object, signature, &args,
+            PARROT_ERRORS_PARAM_COUNT_FLAG);
+    va_end(args);
+}
+
+/*
+
+=item C<void Parrot_pcc_fill_params_from_varargs(PARROT_INTERP, PMC
+*call_object, const char *signature, va_list *args, Errors_classes direction)>
+
+Gets args for the current function call and puts them into position.
+First it gets the positional non-slurpy parameters, then the positional
+slurpy parameters, then the named parameters, and finally the named
+slurpy parameters.
+
+The signature is a string in the format used for
+C<Parrot_pcc_invoke_from_sig_object>, but with no return arguments. The
+parameters are passed in as a list of references to the destination
+variables.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+void
+Parrot_pcc_fill_params_from_varargs(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
+        ARGIN(const char *signature), ARGMOD(va_list *args), Errors_classes direction)
+{
+    ASSERT_ARGS(Parrot_pcc_fill_params_from_varargs)
     PMC    *raw_sig  = PMCNULL;
-    PMC    *invalid_sig = PMCNULL;
     static pcc_set_funcs function_pointers = {
         (intval_ptr_func_t)intval_param_from_c_args,
         (numval_ptr_func_t)numval_param_from_c_args,
@@ -1551,837 +1329,161 @@
         (pmc_func_t)pmc_constant_from_varargs,
     };
 
-    parse_signature_string(interp, signature, &raw_sig, &invalid_sig);
-    if (!PMC_IS_NULL(invalid_sig))
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                "returns should not be included in the parameter list");
+    /* empty args or empty returns */
+    if (*signature == '-' || *signature == '\0')
+        return;
 
-    va_start(args, signature);
-    fill_params(interp, call_object, raw_sig, &args, &function_pointers);
-    va_end(args);
+    parse_signature_string(interp, signature, &raw_sig);
+
+    fill_params(interp, call_object, raw_sig, args, &function_pointers,
+            direction);
 }
 
 /*
 
-=item C<static void fill_results(PARROT_INTERP, PMC *call_object, PMC *raw_sig,
-void *return_info, struct pcc_get_funcs *accessor)>
+=item C<void Parrot_pcc_split_signature_string(const char *signature, const char
+**arg_sig, const char **return_sig)>
 
-Gets return values for the current return and puts them into position.
-First it gets the positional non-slurpy returns, then the positional
-slurpy returns, then the named returns, and finally the named
-slurpy returns.
+Splits a full signature string and creates call and return signature strings.
+The two result strings should be passed in as references to a C string.
 
 =cut
 
 */
 
-static void
-fill_results(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(PMC *raw_sig), ARGIN(void *return_info), ARGIN(struct pcc_get_funcs *accessor))
+void
+Parrot_pcc_split_signature_string(ARGIN(const char *signature),
+        ARGMOD(const char **arg_sig), ARGMOD(const char **return_sig))
 {
-    ASSERT_ARGS(fill_results)
-    INTVAL *return_array       = NULL;
-    INTVAL *result_array       = NULL;
-    PMC    *result_sig         = NULL;
-    PMC    *named_used_list    = PMCNULL;
-    PMC    *named_return_list  = PMCNULL;
-    INTVAL  return_index       = 0;
-    INTVAL  return_subindex    = 0;
-    INTVAL  result_index       = 0;
-    INTVAL  named_count        = 0;
-    INTVAL  err_check          = 0;
-    INTVAL  positional_returns = 0; /* initialized by a loop later */
-    INTVAL  i                  = 0; /* used by the initialization loop */
-    INTVAL  return_count;
-    INTVAL  result_count;
+    ASSERT_ARGS(Parrot_pcc_split_signature_string)
+    const char *cur;
+    *arg_sig = signature;
+
+    for (cur = signature; *cur != '\0'; ++cur) {
+        if (*cur == '-') {
+            *return_sig = cur + 2;
+            return;
+        }
+    }
 
-    /* Check if we should be throwing errors. This is configured separately
-     * for parameters and return values. */
-    if (PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
-        err_check = 1;
+    *return_sig = cur;
+}
 
-    GETATTR_FixedIntegerArray_size(interp, raw_sig, return_count);
+/*
 
-    /* A null call object is fine if there are no returns and no results. */
-    if (PMC_IS_NULL(call_object)) {
-        /* If the return_count is 0, then there are no return values waiting to
-         * fill the results, so no error. */
-        if (return_count > 0 && err_check)
-            Parrot_ex_throw_from_c_args(interp, NULL,
-                EXCEPTION_INVALID_OPERATION,
-                "too few returns: 0 passed, %d expected", return_count);
+=item C<static void parse_signature_string(PARROT_INTERP, const char *signature,
+PMC **arg_flags)>
 
-        return;
-    }
+Parses a signature string and creates call and return signature integer
+arrays. The two integer arrays should be passed in as references to a
+PMC.
 
-    GETATTR_CallContext_return_flags(interp, call_object, result_sig);
+=cut
 
-    result_count = csr_returns_count(interp, call_object);
-    PARROT_ASSERT((result_count == 0) || !PMC_IS_NULL(result_sig));
+*/
 
-    GETATTR_FixedIntegerArray_int_array(interp, raw_sig, return_array);
-    if (!PMC_IS_NULL(result_sig))
-        GETATTR_FixedIntegerArray_int_array(interp, result_sig, result_array);
-
-    /* the call obj doesn't have the returns as positionals.
-     * instead count number of returns before first named return */
-    for (i = 0; i < return_count; i++) {
-        const INTVAL flags = return_array[i];
-        if (flags & PARROT_ARG_NAME)
-            break;
+static void
+parse_signature_string(PARROT_INTERP, ARGIN(const char *signature),
+        ARGMOD(PMC **arg_flags))
+{
+    ASSERT_ARGS(parse_signature_string)
+    PMC *current_array;
+    const char *x;
+    INTVAL flags = 0;
+    INTVAL set = 0;
 
-        positional_returns++;
-    }
+    if (PMC_IS_NULL(*arg_flags))
+        *arg_flags = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
+    current_array = *arg_flags;
 
-    /*
-    Parrot_io_eprintf(interp,
-     "return_count: %d\nresult_count: %d\npositional_returns: %d\nraw_sig: %S\nresult_sig: %S\n",
-         return_count, result_count, positional_returns, VTABLE_get_repr(interp, raw_sig),
-         VTABLE_get_repr(interp, result_sig));
-    */
+    for (x = signature; *x != '\0'; ++x) {
 
-    while (1) {
-        INTVAL result_flags;
+        /* detect -> separator */
+        if (*x == '-')
+            break;
 
-        /* Check if we've used up all the results. */
-        if (result_index >= result_count) {
-            if (return_index >= return_count) {
-                /* We've used up all returns and results, we're
-                 * done with the whole process. */
-                return;
+        /* parse arg type */
+        else if (isupper((unsigned char)*x)) {
+            /* Starting a new argument, so store the previous argument,
+             * if there was one. */
+            if (set) {
+                VTABLE_push_integer(interp, current_array, flags);
+                set = 0;
             }
-            else if (err_check) {
-                /* We've used up all the results, but have extra positional
-                 * returns left over. */
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "too many positional returns: %d passed, %d expected",
-                        return_index, result_count);
+
+            switch (*x) {
+                case 'I': flags = PARROT_ARG_INTVAL;   ++set; break;
+                case 'N': flags = PARROT_ARG_FLOATVAL; ++set; break;
+                case 'S': flags = PARROT_ARG_STRING;   ++set; break;
+                case 'P': flags = PARROT_ARG_PMC;      ++set; break;
+                default:
+                    Parrot_ex_throw_from_c_args(interp, NULL,
+                        EXCEPTION_INVALID_OPERATION,
+                        "invalid signature string element %c!", *x);
+            }
+
+        }
+        /* parse arg adverbs */
+        else if (islower((unsigned char)*x)) {
+            switch (*x) {
+                case 'c': flags |= PARROT_ARG_CONSTANT;     break;
+                case 'f': flags |= PARROT_ARG_FLATTEN;      break;
+                case 'i': flags |= PARROT_ARG_INVOCANT;     break;
+                case 'l': flags |= PARROT_ARG_LOOKAHEAD;    break;
+                case 'n': flags |= PARROT_ARG_NAME;         break;
+                case 'o': flags |= PARROT_ARG_OPTIONAL;     break;
+                case 'p': flags |= PARROT_ARG_OPT_FLAG;     break;
+                case 's': flags |= PARROT_ARG_SLURPY_ARRAY; break;
+                default:
+                    Parrot_ex_throw_from_c_args(interp, NULL,
+                        EXCEPTION_INVALID_OPERATION,
+                        "invalid signature string element %c!", *x);
             }
-            return;
         }
+    }
 
-        result_flags = result_array[result_index];
+    /* Store the final argument, if there was one. */
+    if (set)
+        VTABLE_push_integer(interp, current_array, flags);
+}
 
-        /* If the result is slurpy, collect all remaining positional
-         * returns into an array.*/
-        if (result_flags & PARROT_ARG_SLURPY_ARRAY) {
-            PMC *collect_positional;
+/*
 
-            /* Can't handle named slurpy here, go on to named return handling. */
-            if (result_flags & PARROT_ARG_NAME)
-                break;
+=item C<void Parrot_pcc_parse_signature_string(PARROT_INTERP, STRING *signature,
+PMC **arg_flags, PMC **return_flags)>
 
-            if (named_count > 0)
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION,
-                        "named results must follow all positional results");
+Parses a signature string and creates call and return signature integer
+arrays. The two integer arrays should be passed in as references to a
+PMC.
 
-            collect_positional = Parrot_pmc_new(interp,
-                    Parrot_get_ctx_HLL_type(interp, enum_class_ResizablePMCArray));
+=cut
 
-            /* Iterate over all positional returns in the list. */
-            while (1) {
-                INTVAL constant;
-                INTVAL return_flags;
-                if (return_index >= return_count)
-                    break; /* no more returns */
+*/
 
-                return_flags = return_array[return_index];
+PARROT_CAN_RETURN_NULL
+void
+Parrot_pcc_parse_signature_string(PARROT_INTERP, ARGIN(STRING *signature),
+        ARGMOD(PMC **arg_flags), ARGMOD(PMC **return_flags))
+{
+    ASSERT_ARGS(Parrot_pcc_parse_signature_string)
+    char * const s = Parrot_str_to_cstring(interp, signature);
+    const char *arg_sig, *ret_sig;
 
-                if (return_flags & PARROT_ARG_NAME)
-                    break; /* stop at named returns */
+    Parrot_pcc_split_signature_string(s, &arg_sig, &ret_sig);
 
-                constant = PARROT_ARG_CONSTANT_ISSET(return_flags);
-                switch (PARROT_ARG_TYPE_MASK_MASK(return_flags)) {
-                  case PARROT_ARG_INTVAL:
-                    VTABLE_push_integer(interp, collect_positional, constant?
-                                accessor->intval_constant(interp, return_info, return_index)
-                                :accessor->intval(interp, return_info, return_index));
-                    break;
-                  case PARROT_ARG_FLOATVAL:
-                    VTABLE_push_float(interp, collect_positional, constant?
-                                accessor->numval_constant(interp, return_info, return_index)
-                                :accessor->numval(interp, return_info, return_index));
-                    break;
-                  case PARROT_ARG_STRING:
-                    VTABLE_push_string(interp, collect_positional, constant?
-                                accessor->string_constant(interp, return_info, return_index)
-                                :accessor->string(interp, return_info, return_index));
-                    break;
-                  case PARROT_ARG_PMC:
-                    {
-                        PMC *return_item = (constant)
-                                         ? accessor->pmc_constant(interp, return_info, return_index)
-                                         : accessor->pmc(interp, return_info, return_index);
-                        if (return_flags & PARROT_ARG_FLATTEN) {
-                            INTVAL flat_pos;
-                            INTVAL flat_elems;
-                            if (!VTABLE_does(interp, return_item, CONST_STRING(interp, "array"))) {
-                                Parrot_ex_throw_from_c_args(interp, NULL,
-                                                            EXCEPTION_INVALID_OPERATION,
-                                                            "flattened return on a non-array");
-                            }
-                            flat_elems = VTABLE_elements(interp, return_item);
-                            for (flat_pos = 0; flat_pos < flat_elems; flat_pos++) {
-                                /* fetch an item out of the aggregate */
-                                VTABLE_push_pmc(interp, collect_positional,
-                                        VTABLE_get_pmc_keyed_int(interp, return_item, flat_pos));
-                            }
-                        }
-                        else
-                            VTABLE_push_pmc(interp, collect_positional, return_item);
-                        break;
-                    }
-                  default:
-                    Parrot_ex_throw_from_c_args(interp, NULL,
-                                EXCEPTION_INVALID_OPERATION, "invalid return type");
-                    break;
-                }
-                return_index++;
-            }
-            csr_fill_pmc(interp, call_object, result_index, collect_positional);
-            result_index++;
-            break; /* Terminate the positional return loop. */
-        }
+    *arg_flags    = PMCNULL;
+    *return_flags = PMCNULL;
+    parse_signature_string(interp, arg_sig, arg_flags);
+    parse_signature_string(interp, ret_sig, return_flags);
+    Parrot_str_free_cstring(s);
+}
 
-        /* We have a positional return, fill the result with it. */
-        if (return_index < positional_returns) {
-            INTVAL return_flags = return_array[return_index];
-            INTVAL constant     = PARROT_ARG_CONSTANT_ISSET(return_flags);
-
-            /* Fill a named result with a positional return. */
-            if (result_flags & PARROT_ARG_NAME) {
-                STRING *result_name;
-                if (!(result_flags & PARROT_ARG_STRING))
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                            "named results must have a name specified 1683");
-                result_name = csr_get_string_keyed_int(interp, call_object, result_index);
-                named_count++;
-                result_index++;
-                if (result_index >= result_count)
-                    continue;
-                result_flags = result_array[result_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,
-                            Parrot_get_ctx_HLL_type(interp, enum_class_Hash));
-                VTABLE_set_integer_keyed_str(interp, named_used_list, result_name, 1);
-            }
-            else if (named_count > 0) {
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "named results must follow all positional results");
-            }
+=item C<void Parrot_pcc_merge_signature_for_tailcall(PARROT_INTERP, PMC *
+parent, PMC * tailcall)>
 
-            /* Check for :lookahead result goes here. */
-
-            /* Go ahead and fill the result with a positional return. */
-            switch (PARROT_ARG_TYPE_MASK_MASK(return_flags)) {
-              case PARROT_ARG_INTVAL:
-                if (constant)
-                    csr_fill_integer(interp, call_object, result_index,
-                            accessor->intval_constant(interp, return_info, return_index));
-                else
-                    csr_fill_integer(interp, call_object, result_index,
-                            accessor->intval(interp, return_info, return_index));
-                break;
-              case PARROT_ARG_FLOATVAL:
-                if (constant)
-                    csr_fill_number(interp, call_object, result_index,
-                            accessor->numval_constant(interp, return_info, return_index));
-                else
-                    csr_fill_number(interp, call_object, result_index,
-                            accessor->numval(interp, return_info, return_index));
-                break;
-              case PARROT_ARG_STRING:
-                if (constant)
-                    csr_fill_string(interp, call_object, result_index,
-                            accessor->string_constant(interp, return_info, return_index));
-                else
-                        csr_fill_string(interp, call_object, result_index,
-                            accessor->string(interp, return_info, return_index));
-                break;
-              case PARROT_ARG_PMC:
-                {
-                    PMC *return_item = (constant)
-                                     ? accessor->pmc_constant(interp, return_info, return_index)
-                                     : accessor->pmc(interp, return_info, return_index);
-                    if (return_flags & PARROT_ARG_FLATTEN) {
-                        INTVAL flat_elems;
-                        if (!VTABLE_does(interp, return_item, CONST_STRING(interp, "array"))) {
-                            Parrot_ex_throw_from_c_args(interp, NULL,
-                                                            EXCEPTION_INVALID_OPERATION,
-                                                            "flattened return on a non-array");
-                        }
-                        flat_elems = VTABLE_elements(interp, return_item);
-                        if (flat_elems == 0) {
-                            /* Skip empty aggregate */
-                            break;
-                        }
-                        if (return_subindex < flat_elems) {
-                            /* fetch an item out of the aggregate */
-                            return_item = VTABLE_get_pmc_keyed_int(interp, return_item,
-                                                                       return_subindex);
-                            return_subindex++;
-                        }
-                        if (return_subindex >= flat_elems) {
-                            return_subindex = 0; /* reset */
-                        }
-                        else {
-                            return_index--; /* we want to stay on the same item */
-                        }
-                    }
-                    csr_fill_pmc(interp, call_object, result_index, return_item);
-                    break;
-                }
-              default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                            EXCEPTION_INVALID_OPERATION, "invalid return type");
-                break;
-            }
-
-            /* Mark the option flag for the filled result. */
-            if (result_flags & PARROT_ARG_OPTIONAL) {
-                if (result_index + 1 < result_count) {
-                    const INTVAL next_result_flags = result_array[result_index + 1];
-                    if (next_result_flags & PARROT_ARG_OPT_FLAG) {
-                        result_index++;
-                        csr_fill_integer(interp, call_object, result_index, 1);
-                    }
-                }
-            }
-        }
-        /* We have no more positional returns, fill the optional result
-         * with a default value. */
-        else if (result_flags & PARROT_ARG_OPTIONAL) {
-            /* We don't handle optional named results here, handle them in the
-             * next loop. */
-            if (result_flags & PARROT_ARG_NAME)
-                break;
-
-            assign_default_result_value(interp, call_object, result_index, result_flags);
-
-            /* Mark the option flag for the result to FALSE, it was filled
-             * with a default value. */
-            if (result_index + 1 < result_count) {
-                const INTVAL next_result_flags = result_array[result_index + 1];
-                if (next_result_flags & PARROT_ARG_OPT_FLAG) {
-                    result_index++;
-                    csr_fill_integer(interp, call_object, result_index, 0);
-                }
-            }
-        }
-        /* We don't have an return for the result, and it's not optional,
-         * so it's an error. */
-        else {
-            /* We don't handle named results here, go to the next loop. */
-            if (result_flags & PARROT_ARG_NAME)
-                break;
-
-            if (err_check)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                        "too few positional returns: %d passed, %d (or more) expected",
-                        positional_returns, result_index + 1);
-        }
-
-        /* Go on to next return and result. */
-        return_index++;
-        result_index++;
-    }
-
-    for (; return_index < return_count; return_index++) {
-        STRING *return_name;
-        INTVAL  return_flags;
-        INTVAL  constant;
-
-        return_flags = return_array[return_index];
-
-        /* All remaining returns must be named. */
-        if (!(return_flags & PARROT_ARG_NAME))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named returns must follow all positional returns");
-
-        if (!(return_flags & PARROT_ARG_STRING))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named results must have a name specified 1836");
-
-        return_name = PARROT_ARG_CONSTANT_ISSET(return_flags)
-                           ? accessor->string_constant(interp, return_info, return_index)
-                           : accessor->string(interp, return_info, return_index);
-        named_count++;
-        return_index++;
-        if (result_index >= result_count)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named returns must have a value");
-
-        return_flags = return_array[return_index];
-
-        if (PMC_IS_NULL(named_return_list)) /* Only created if needed. */
-            named_return_list = Parrot_pmc_new(interp,
-                    Parrot_get_ctx_HLL_type(interp, enum_class_Hash));
-
-        if (VTABLE_exists_keyed_str(interp, named_return_list, return_name))
-            continue;
-
-        constant = PARROT_ARG_CONSTANT_ISSET(return_flags);
-        switch (PARROT_ARG_TYPE_MASK_MASK(return_flags)) {
-          case PARROT_ARG_INTVAL:
-            VTABLE_set_integer_keyed_str(interp, named_return_list, return_name,
-                        constant
-                        ? accessor->intval_constant(interp, return_info, return_index)
-                        : accessor->intval(interp, return_info, return_index));
-            break;
-          case PARROT_ARG_FLOATVAL:
-            VTABLE_set_number_keyed_str(interp, named_return_list, return_name,
-                        constant
-                        ? accessor->numval_constant(interp, return_info, return_index)
-                        : accessor->numval(interp, return_info, return_index));
-            break;
-          case PARROT_ARG_STRING:
-            VTABLE_set_string_keyed_str(interp, named_return_list, return_name,
-                        constant
-                        ? accessor->string_constant(interp, return_info, return_index)
-                        : accessor->string(interp, return_info, return_index));
-            break;
-          case PARROT_ARG_PMC:
-            if (0) {
-                PMC * const return_item = (constant)
-                                 ? accessor->pmc_constant(interp, return_info, return_index)
-                                 : accessor->pmc(interp, return_info, return_index);
-                if (return_flags & PARROT_ARG_FLATTEN) {
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                                                "named flattened returns not yet implemented");
-                }
-                VTABLE_set_pmc_keyed_str(interp, named_return_list, return_name, return_item);
-                break;
-            }
-          default:
-            Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION, "invalid return type");
-            break;
-        }
-    }
-
-    /* Now iterate over the named results, filling them from the
-     * temporary hash of named returns. */
-    while (1) {
-        STRING *result_name    = NULL;
-        INTVAL result_flags;
-
-        /* Check if we've used up all the results. We'll check for leftover
-         * named returns after the loop. */
-        if (result_index >= result_count)
-            break;
-
-        result_flags = result_array[result_index];
-
-        /* All remaining results must be named. */
-        if (!(result_flags & PARROT_ARG_NAME))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named results must follow all positional results");
-
-        /* Collected ("slurpy") named result */
-        if (result_flags & PARROT_ARG_SLURPY_ARRAY) {
-            if (PMC_IS_NULL(named_return_list))
-                named_return_list = Parrot_pmc_new(interp,
-                        Parrot_get_ctx_HLL_type(interp, enum_class_Hash));
-
-            csr_fill_pmc(interp, call_object, result_index, named_return_list);
-            break; /* End of named results. */
-        }
-
-        /* Store the name. */
-        if (!(result_flags & PARROT_ARG_STRING))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "named results must have a name specified 1926");
-        result_name = csr_get_string_keyed_int(interp, call_object, result_index);
-
-        if (!STRING_IS_NULL(result_name)) {
-            /* The next result is the actual value. */
-            result_index++;
-            if (result_index >= result_count)
-                continue;
-            result_flags = result_array[result_index];
-
-            if (VTABLE_exists_keyed_str(interp, named_return_list, result_name)) {
-
-                named_count++;
-
-                /* Fill the named result. */
-                switch (PARROT_ARG_TYPE_MASK_MASK(result_flags)) {
-                  case PARROT_ARG_INTVAL:
-                    csr_fill_integer(interp, call_object, result_index,
-                            VTABLE_get_integer_keyed_str(interp, named_return_list, result_name));
-                    break;
-                  case PARROT_ARG_FLOATVAL:
-                    csr_fill_number(interp, call_object, result_index,
-                            VTABLE_get_number_keyed_str(interp, named_return_list, result_name));
-                    break;
-                  case PARROT_ARG_STRING:
-                    csr_fill_string(interp, call_object, result_index,
-                            VTABLE_get_string_keyed_str(interp, named_return_list, result_name));
-                    break;
-                  case PARROT_ARG_PMC:
-                    csr_fill_pmc(interp, call_object, result_index,
-                            VTABLE_get_pmc_keyed_str(interp, named_return_list, result_name));
-                    break;
-                  default:
-                    Parrot_ex_throw_from_c_args(interp, NULL,
-                                EXCEPTION_INVALID_OPERATION, "invalid result type");
-                    break;
-                }
-                VTABLE_delete_keyed_str(interp, named_return_list, result_name);
-
-                /* Mark the option flag for the filled result. */
-                if (result_flags & PARROT_ARG_OPTIONAL) {
-                    if (result_index + 1 < result_count) {
-                        const INTVAL next_result_flags = return_array[result_index + 1];
-                        if (next_result_flags & PARROT_ARG_OPT_FLAG) {
-                            result_index++;
-                            csr_fill_integer(interp, call_object, result_index, 1);
-                        }
-                    }
-                }
-            }
-            else if (result_flags & PARROT_ARG_OPTIONAL) {
-                assign_default_result_value(interp, call_object, result_index, result_flags);
-
-                /* Mark the option flag for the result to FALSE, it was filled
-                 * with a default value. */
-                if (result_index + 1 < result_count) {
-                    const INTVAL next_result_flags = result_array[result_index + 1];
-                    if (next_result_flags & PARROT_ARG_OPT_FLAG) {
-                        result_index++;
-                        csr_fill_integer(interp, call_object, result_index, 1);
-                    }
-                }
-            }
-            /* We don't have a return for the result, and it's not optional,
-             * so it's an error. */
-            else {
-                if (err_check)
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                            "too few named returns: no return for required result '%S'",
-                            result_name);
-            }
-        }
-
-        result_index++;
-    }
-
-    /* Double check that all named returns were assigned to results. */
-    if (err_check) {
-        if (!PMC_IS_NULL(named_return_list)) {
-            const INTVAL named_return_count = VTABLE_elements(interp, named_return_list);
-            if (named_return_count > 0)
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                            "too many named returns: %d passed, %d used",
-                            named_return_count + named_count, named_count);
-        }
-    }
-
-}
-
-/*
-
-=item C<void Parrot_pcc_fill_returns_from_op(PARROT_INTERP, PMC *call_object,
-PMC *raw_sig, opcode_t *raw_returns)>
-
-Sets return values for the current function call. First it sets the
-positional returns, then the named returns.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_pcc_fill_returns_from_op(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(PMC *raw_sig), ARGIN(opcode_t *raw_returns))
-{
-    ASSERT_ARGS(Parrot_pcc_fill_returns_from_op)
-
-    static pcc_get_funcs function_pointers = {
-        (intval_func_t)intval_arg_from_op,
-        (numval_func_t)numval_arg_from_op,
-        (string_func_t)string_arg_from_op,
-        (pmc_func_t)pmc_arg_from_op,
-
-        (intval_func_t)intval_constant_from_op,
-        (numval_func_t)numval_constant_from_op,
-        (string_func_t)string_constant_from_op,
-        (pmc_func_t)pmc_constant_from_op,
-    };
-
-    INTVAL raw_return_count = 0;
-
-    GETATTR_FixedIntegerArray_size(interp, raw_sig, raw_return_count);
-
-    /* A null call object is fine if there are no arguments and no returns. */
-    if (PMC_IS_NULL(call_object)) {
-
-        /* Check if we should be throwing errors. This is configured separately
-         * for parameters and return values. */
-        if (raw_return_count > 0
-        &&  PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
-            Parrot_ex_throw_from_c_args(interp, NULL,
-                EXCEPTION_INVALID_OPERATION,
-                "too many return values: %d passed, 0 expected",
-                raw_return_count);
-        return;
-    }
-
-    fill_results(interp, call_object, raw_sig, raw_returns, &function_pointers);
-
-    return;
-}
-
-
-/*
-
-=item C<void Parrot_pcc_fill_returns_from_continuation(PARROT_INTERP, PMC
-*call_object, PMC *raw_sig, PMC *from_call_obj)>
-
-Evil function.  Fill results from arguments passed to a continuation.
-Only works for positional arguments.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_pcc_fill_returns_from_continuation(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(PMC *raw_sig), ARGIN(PMC *from_call_obj))
-{
-    ASSERT_ARGS(Parrot_pcc_fill_returns_from_continuation)
-    const INTVAL raw_return_count = VTABLE_elements(interp, raw_sig);
-
-    static pcc_get_funcs function_pointers = {
-        (intval_func_t)intval_arg_from_continuation,
-        (numval_func_t)numval_arg_from_continuation,
-        (string_func_t)string_arg_from_continuation,
-        (pmc_func_t)pmc_arg_from_continuation,
-
-        (intval_func_t)intval_arg_from_continuation,
-        (numval_func_t)numval_arg_from_continuation,
-        (string_func_t)string_arg_from_continuation,
-        (pmc_func_t)pmc_arg_from_continuation,
-    };
-
-    /* A null call object is fine if there are no arguments and no returns. */
-    if (PMC_IS_NULL(call_object)) {
-
-        /* Check if we should be throwing errors. This is configured separately
-         * for parameters and return values. */
-        if (raw_return_count > 0
-        &&  PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                    EXCEPTION_INVALID_OPERATION,
-                    "too many return values: %d passed, 0 expected",
-                    raw_return_count);
-        return;
-    }
-
-    fill_results(interp, call_object, raw_sig, from_call_obj, &function_pointers);
-
-    return;
-}
-
-
-/*
-
-=item C<void Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP, PMC
-*call_object, const char *signature, ...)>
-
-Sets return values for the current function call. First it sets the
-positional returns, then the named returns.
-
-The signature is a string in the format used for
-C<Parrot_pcc_invoke_from_sig_object>, but with only return arguments.
-The parameters are passed in as a list of INTVAL, FLOATVAL, STRING *, or
-PMC * variables.
-
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_pcc_fill_returns_from_c_args(PARROT_INTERP, ARGMOD_NULLOK(PMC *call_object),
-        ARGIN(const char *signature), ...)
-{
-    ASSERT_ARGS(Parrot_pcc_fill_returns_from_c_args)
-    va_list args;
-    INTVAL raw_return_count = 0;
-    PMC    *raw_sig         = PMCNULL;
-    PMC    *invalid_sig     = PMCNULL;
-
-    static pcc_get_funcs function_pointers = {
-        (intval_func_t)intval_arg_from_c_args,
-        (numval_func_t)numval_arg_from_c_args,
-        (string_func_t)string_arg_from_c_args,
-        (pmc_func_t)pmc_arg_from_c_args,
-
-        (intval_func_t)intval_constant_from_varargs,
-        (numval_func_t)numval_constant_from_varargs,
-        (string_func_t)string_constant_from_varargs,
-        (pmc_func_t)pmc_constant_from_varargs,
-    };
-
-    parse_signature_string(interp, signature, &raw_sig, &invalid_sig);
-
-    if (!PMC_IS_NULL(invalid_sig))
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                "parameters should not be included in the return signature");
-
-    raw_return_count = VTABLE_elements(interp, raw_sig);
-
-    /* A null call object is fine if there are no arguments and no returns. */
-    if (PMC_IS_NULL(call_object)) {
-
-        /* Check if we should be throwing errors. This is configured separately
-         * for parameters and return values. */
-        if (raw_return_count > 0
-        &&  PARROT_ERRORS_test(interp, PARROT_ERRORS_RESULT_COUNT_FLAG))
-                Parrot_ex_throw_from_c_args(interp, NULL,
-                    EXCEPTION_INVALID_OPERATION,
-                    "too many return values: %d passed, 0 expected",
-                    raw_return_count);
-        return;
-    }
-
-    va_start(args, signature);
-    fill_results(interp, call_object, raw_sig, &args, &function_pointers);
-    va_end(args);
-}
-
-
-/*
-
-=item C<static void parse_signature_string(PARROT_INTERP, const char *signature,
-PMC **arg_flags, PMC **return_flags)>
-
-Parses a signature string and creates call and return signature integer
-arrays. The two integer arrays should be passed in as references to a
-PMC.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static void
-parse_signature_string(PARROT_INTERP, ARGIN(const char *signature),
-        ARGMOD(PMC **arg_flags), ARGMOD(PMC **return_flags))
-{
-    ASSERT_ARGS(parse_signature_string)
-    PMC *current_array;
-    const char *x;
-    INTVAL flags = 0;
-    INTVAL set = 0;
-
-    if (PMC_IS_NULL(*arg_flags))
-        *arg_flags = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
-    current_array = *arg_flags;
-
-    for (x = signature; *x != '\0'; x++) {
-
-        /* detect -> separator */
-        if (*x == '-') {
-            /* skip '>' */
-            x++;
-
-            /* Starting a new argument, so store the previous argument,
-             * if there was one. */
-            if (set) {
-                VTABLE_push_integer(interp, current_array, flags);
-                set = 0;
-            }
-
-            /* Switch to the return argument flags. */
-            if (PMC_IS_NULL(*return_flags))
-                *return_flags = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
-            current_array = *return_flags;
-        }
-        /* parse arg type */
-        else if (isupper((unsigned char)*x)) {
-            /* Starting a new argument, so store the previous argument,
-             * if there was one. */
-            if (set) {
-                VTABLE_push_integer(interp, current_array, flags);
-                set = 0;
-            }
-
-            switch (*x) {
-                case 'I': flags = PARROT_ARG_INTVAL;   set++; break;
-                case 'N': flags = PARROT_ARG_FLOATVAL; set++; break;
-                case 'S': flags = PARROT_ARG_STRING;   set++; break;
-                case 'P': flags = PARROT_ARG_PMC;      set++; break;
-                default:
-                    Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION,
-                        "invalid signature string element %c!", *x);
-            }
-
-        }
-        /* parse arg adverbs */
-        else if (islower((unsigned char)*x)) {
-            switch (*x) {
-                case 'c': flags |= PARROT_ARG_CONSTANT;     break;
-                case 'f': flags |= PARROT_ARG_FLATTEN;      break;
-                case 'i': flags |= PARROT_ARG_INVOCANT;     break;
-                case 'l': flags |= PARROT_ARG_LOOKAHEAD;    break;
-                case 'n': flags |= PARROT_ARG_NAME;         break;
-                case 'o': flags |= PARROT_ARG_OPTIONAL;     break;
-                case 'p': flags |= PARROT_ARG_OPT_FLAG;     break;
-                case 's': flags |= PARROT_ARG_SLURPY_ARRAY; break;
-                default:
-                    Parrot_ex_throw_from_c_args(interp, NULL,
-                        EXCEPTION_INVALID_OPERATION,
-                        "invalid signature string element %c!", *x);
-            }
-        }
-    }
-
-    /* Store the final argument, if there was one. */
-    if (set)
-        VTABLE_push_integer(interp, current_array, flags);
-}
-
-/*
-
-=item C<void Parrot_pcc_parse_signature_string(PARROT_INTERP, STRING *signature,
-PMC **arg_flags, PMC **return_flags)>
-
-Parses a signature string and creates call and return signature integer
-arrays. The two integer arrays should be passed in as references to a
-PMC.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-void
-Parrot_pcc_parse_signature_string(PARROT_INTERP, ARGIN(STRING *signature),
-        ARGMOD(PMC **arg_flags), ARGMOD(PMC **return_flags))
-{
-    ASSERT_ARGS(Parrot_pcc_parse_signature_string)
-    char * const s = Parrot_str_to_cstring(interp, signature);
-    *arg_flags    = PMCNULL;
-    *return_flags = PMCNULL;
-    parse_signature_string(interp, s, arg_flags, return_flags);
-    Parrot_str_free_cstring(s);
-}
-
-/*
-
-=item C<void Parrot_pcc_merge_signature_for_tailcall(PARROT_INTERP, PMC *
-parent, PMC * tailcall)>
-
-merge in signatures for tailcall
+merge in signatures for tailcall
 
 =cut
 
@@ -2396,20 +1498,8 @@
         return;
     else {
         /* Broke encapuslation. Direct poking into CallContext is much faster */
-        void ** returns_values;
-        void ** tailcall_returns_values;
-        INTVAL  returns_size;
         PMC * return_flags;
 
-        GETATTR_CallContext_returns_size(interp, parent, returns_size);
-        GETATTR_CallContext_returns_values(interp, parent, returns_values);
-
-        /* Resize tailcall.returns_values to new size */
-        tailcall_returns_values = csr_reallocate_return_values(interp, tailcall, returns_size);
-
-        /* And copy values over it */
-        mem_copy_n_typed(tailcall_returns_values, returns_values, returns_size, void**);
-
         /* Store raw signature */
         GETATTR_CallContext_return_flags(interp, parent, return_flags);
         SETATTR_CallContext_return_flags(interp, tailcall, return_flags);
@@ -2419,60 +1509,46 @@
 
 /*
 
-Get the appropriate argument value from the continuation
-
-=item C<static INTVAL intval_arg_from_continuation(PARROT_INTERP, PMC *cs,
-INTVAL arg_index)>
-
-=item C<static FLOATVAL numval_arg_from_continuation(PARROT_INTERP, PMC *cs,
-INTVAL arg_index)>
-
-=item C<static STRING* string_arg_from_continuation(PARROT_INTERP, PMC *cs,
-INTVAL arg_index)>
-
-=item C<static PMC* pmc_arg_from_continuation(PARROT_INTERP, PMC *cs, INTVAL
-arg_index)>
-
 Get the appropriate argument value from the op.
 
-=item C<static INTVAL intval_arg_from_op(PARROT_INTERP, opcode_t *raw_args,
-INTVAL arg_index)>
+=item C<static INTVAL intval_arg_from_op(PARROT_INTERP, const opcode_t
+*raw_args, INTVAL arg_index)>
 
-=item C<static FLOATVAL numval_arg_from_op(PARROT_INTERP, opcode_t *raw_args,
-INTVAL arg_index)>
+=item C<static FLOATVAL numval_arg_from_op(PARROT_INTERP, const opcode_t
+*raw_args, INTVAL arg_index)>
 
-=item C<static STRING* string_arg_from_op(PARROT_INTERP, opcode_t *raw_args,
-INTVAL arg_index)>
+=item C<static STRING* string_arg_from_op(PARROT_INTERP, const opcode_t
+*raw_args, INTVAL arg_index)>
 
-=item C<static PMC* pmc_arg_from_op(PARROT_INTERP, opcode_t *raw_args, INTVAL
-arg_index)>
+=item C<static PMC* pmc_arg_from_op(PARROT_INTERP, const opcode_t *raw_args,
+INTVAL arg_index)>
 
 Get the appropriate parameter value from the op (these are pointers, so the
 argument value can be stored into them.)
 
-=item C<static INTVAL* intval_param_from_op(PARROT_INTERP, opcode_t *raw_params,
-INTVAL param_index)>
+=item C<static INTVAL* intval_param_from_op(PARROT_INTERP, const opcode_t
+*raw_params, INTVAL param_index)>
 
-=item C<static FLOATVAL* numval_param_from_op(PARROT_INTERP, opcode_t
+=item C<static FLOATVAL* numval_param_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static STRING** string_param_from_op(PARROT_INTERP, opcode_t
+=item C<static STRING** string_param_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static PMC** pmc_param_from_op(PARROT_INTERP, opcode_t *raw_params,
-INTVAL param_index)>
+=item C<static PMC** pmc_param_from_op(PARROT_INTERP, const opcode_t
+*raw_params, INTVAL param_index)>
 
-=item C<static INTVAL intval_constant_from_op(PARROT_INTERP, opcode_t
+=item C<static INTVAL intval_constant_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static FLOATVAL numval_constant_from_op(PARROT_INTERP, opcode_t
+=item C<static FLOATVAL numval_constant_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static STRING* string_constant_from_op(PARROT_INTERP, opcode_t
+=item C<static STRING* string_constant_from_op(PARROT_INTERP, const opcode_t
 *raw_params, INTVAL param_index)>
 
-=item C<static PMC* pmc_constant_from_op(PARROT_INTERP, opcode_t *raw_params,
-INTVAL param_index)>
+=item C<static PMC* pmc_constant_from_op(PARROT_INTERP, const opcode_t
+*raw_params, INTVAL param_index)>
 
 Get the appropriate argument value from varargs.
 
@@ -2506,264 +1582,172 @@
 Parrot constants cannot be passed from varargs, so these functions are dummies
 that throw exceptions.
 
-=item C<static INTVAL intval_constant_from_varargs(PARROT_INTERP, void *data,
-INTVAL index)>
-
-=item C<static FLOATVAL numval_constant_from_varargs(PARROT_INTERP, void *data,
-INTVAL index)>
-
-=item C<static STRING* string_constant_from_varargs(PARROT_INTERP, void *data,
-INTVAL index)>
-
-=item C<static PMC* pmc_constant_from_varargs(PARROT_INTERP, void *data, INTVAL
-index)>
-
- - More specific comments can be added later
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static INTVAL
-intval_arg_from_continuation(PARROT_INTERP, ARGIN(PMC *cs), INTVAL arg_index)
-{
-    ASSERT_ARGS(intval_arg_from_continuation)
-    const INTVAL ret      = VTABLE_get_integer_keyed_int(interp, cs, arg_index);
-    return ret;
-}
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL
-numval_arg_from_continuation(PARROT_INTERP, ARGIN(PMC *cs), INTVAL arg_index)
-{
-    ASSERT_ARGS(numval_arg_from_continuation)
-    const FLOATVAL ret      = VTABLE_get_number_keyed_int(interp, cs, arg_index);
-    return ret;
-}
+=item C<static INTVAL intval_constant_from_varargs(PARROT_INTERP, void *data,
+INTVAL index)>
 
-PARROT_CANNOT_RETURN_NULL
-static STRING*
-string_arg_from_continuation(PARROT_INTERP, ARGIN(PMC *cs), INTVAL arg_index)
-{
-    ASSERT_ARGS(string_arg_from_continuation)
-    STRING * const ret = VTABLE_get_string_keyed_int(interp, cs, arg_index);
-    return ret;
-}
+=item C<static FLOATVAL numval_constant_from_varargs(PARROT_INTERP, void *data,
+INTVAL index)>
 
-PARROT_CANNOT_RETURN_NULL
-static PMC*
-pmc_arg_from_continuation(PARROT_INTERP, ARGIN(PMC *cs), INTVAL arg_index)
-{
-    ASSERT_ARGS(pmc_arg_from_continuation)
-    PMC * const ret = VTABLE_get_pmc_keyed_int(interp, cs, arg_index);
-    return ret;
-}
+=item C<static STRING* string_constant_from_varargs(PARROT_INTERP, void *data,
+INTVAL index)>
 
-PARROT_CANNOT_RETURN_NULL
-static INTVAL
-intval_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(intval_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_INT(interp, raw_index);
-}
+=item C<static PMC* pmc_constant_from_varargs(PARROT_INTERP, void *data, INTVAL
+index)>
 
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL
-numval_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(numval_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_NUM(interp, raw_index);
-}
+ - More specific comments can be added later
 
-PARROT_CANNOT_RETURN_NULL
-static STRING*
-string_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(string_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_STR(interp, raw_index);
-}
+=cut
 
-PARROT_CANNOT_RETURN_NULL
-static PMC*
-pmc_arg_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_args), INTVAL arg_index)
-{
-    ASSERT_ARGS(pmc_arg_from_op)
-    const INTVAL raw_index      = raw_args[arg_index + 2];
-    return REG_PMC(interp, raw_index);
-}
+*/
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static INTVAL*
-intval_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+intval_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(intval_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_INT(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static FLOATVAL*
-numval_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+numval_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(numval_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_NUM(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING**
-string_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+string_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(string_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_STR(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC**
-pmc_param_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+pmc_param_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(pmc_param_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return &REG_PMC(interp, raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-intval_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+intval_constant_from_op(SHIM_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(intval_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return raw_index;
 }
 
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL
-numval_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+numval_constant_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(numval_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return Parrot_pcc_get_num_constant(interp, CURRENT_CONTEXT(interp), raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static STRING*
-string_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+string_constant_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(string_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return Parrot_pcc_get_string_constant(interp, CURRENT_CONTEXT(interp), raw_index);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC*
-pmc_constant_from_op(PARROT_INTERP, ARGIN(opcode_t *raw_params), INTVAL param_index)
+pmc_constant_from_op(PARROT_INTERP, ARGIN(const opcode_t *raw_params), INTVAL param_index)
 {
     ASSERT_ARGS(pmc_constant_from_op)
     const INTVAL raw_index      = raw_params[param_index + 2];
     return Parrot_pcc_get_pmc_constant(interp, CURRENT_CONTEXT(interp), raw_index);
 }
 
-PARROT_CANNOT_RETURN_NULL
-static INTVAL
-intval_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(intval_arg_from_c_args)
-    return va_arg(*args, INTVAL);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static FLOATVAL
-numval_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(numval_arg_from_c_args)
-    return va_arg(*args, FLOATVAL);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static STRING*
-string_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(string_arg_from_c_args)
-    return va_arg(*args, STRING*);
-}
-
-PARROT_CANNOT_RETURN_NULL
-static PMC*
-pmc_arg_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
-{
-    ASSERT_ARGS(pmc_arg_from_c_args)
-    return va_arg(*args, PMC*);
-}
-
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static INTVAL*
-intval_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+intval_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(intval_param_from_c_args)
     return va_arg(*args, INTVAL*);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static FLOATVAL*
-numval_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+numval_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(numval_param_from_c_args)
     return va_arg(*args, FLOATVAL*);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING**
-string_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+string_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(string_param_from_c_args)
     return va_arg(*args, STRING**);
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static PMC**
-pmc_param_from_c_args(PARROT_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
+pmc_param_from_c_args(SHIM_INTERP, ARGIN(va_list *args), SHIM(INTVAL param_index))
 {
     ASSERT_ARGS(pmc_param_from_c_args)
     return va_arg(*args, PMC**);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-intval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+intval_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(intval_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return 0;
 }
 
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL
-numval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+numval_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(numval_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return 0.0;
 }
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static STRING*
-string_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+string_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(string_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return NULL;
 }
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
-pmc_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
+pmc_constant_from_varargs(SHIM_INTERP, SHIM(void *data), SHIM(INTVAL index))
 {
     ASSERT_ARGS(pmc_constant_from_varargs)
-    UNUSED(index);
     PARROT_FAILURE("Wrong call");
     return PMCNULL;
 }
@@ -2781,6 +1765,7 @@
 */
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
 clone_key_arg(PARROT_INTERP, ARGIN(PMC *key))
 {
@@ -2805,384 +1790,6 @@
 
 /*
 
-VTABLE functions from CallContextReturns. TODO Rename them appropriately.
-
-*/
-
-/* mask off lower two bits (1 + 2 = 3) for pointer tags */
-#define TAG_BITS 3
-#define UNTAG_CELL(c) INTVAL2PTR(void *, (PTR2INTVAL(c)) & ~TAG_BITS)
-#define CELL_TYPE_MASK(c) (PTR2INTVAL(c)) & TAG_BITS
-
-/*
-
-=item C<static void** csr_reallocate_return_values(PARROT_INTERP, PMC *self,
-INTVAL size)>
-
-Resizes the array to C<size> elements.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static void**
-csr_reallocate_return_values(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
-{
-    ASSERT_ARGS(csr_reallocate_return_values)
-    void    **values = NULL;
-    INTVAL    resize_threshold;
-
-    GETATTR_CallContext_returns_values(interp, self, values);
-    GETATTR_CallContext_returns_resize_threshold(interp, self, resize_threshold);
-
-    /* Empty. Allocate 8 elements (arbitary number) */
-    if (!values) {
-        /* It's slightly wrong. We have to allocate directly from system allocator
-         * when initial size is greater than 8. But it's never happen. So, put
-         * assert here to be sure */
-        PARROT_ASSERT(size < 8);
-        values = (void **)Parrot_gc_allocate_fixed_size_storage(interp,
-                                 8 * sizeof (void *));
-
-        SETATTR_CallContext_returns_values(interp, self, values);
-        SETATTR_CallContext_returns_size(interp, self, size);
-        SETATTR_CallContext_returns_resize_threshold(interp, self, 8);
-    }
-    else if (size <= resize_threshold) {
-        SETATTR_CallContext_returns_size(interp, self, size);
-    }
-    else {
-        INTVAL  cur = resize_threshold;
-
-        /* Switch to system allocator */
-        if (cur == 8) {
-            void * const old_values = values;
-
-            values     = mem_gc_allocate_n_typed(interp, 8, void *);
-            memcpy(values, old_values, 8 * sizeof (void *));
-            Parrot_gc_free_fixed_size_storage(interp,
-                8 * sizeof (void *), old_values);
-        }
-
-        if (cur < 8192)
-            cur = size < 2 * cur ? 2 * cur : size;
-        else {
-            const INTVAL needed = size - cur;
-            cur          += needed + 4096;
-            cur          &= ~0xfff;
-        }
-
-        values = mem_gc_realloc_n_typed_zeroed(interp, values,
-                cur, resize_threshold, void *);
-
-        SETATTR_CallContext_returns_values(interp, self, values);
-        SETATTR_CallContext_returns_size(interp, self, size);
-        SETATTR_CallContext_returns_resize_threshold(interp, self, cur);
-    }
-
-    return values;
-}
-
-/*
-
-=item C<static INTVAL csr_returns_count(PARROT_INTERP, PMC *self)>
-
-Returns the number of returns values.
-
-=cut
-
-*/
-
-static INTVAL
-csr_returns_count(PARROT_INTERP, ARGIN(PMC *self))
-{
-    ASSERT_ARGS(csr_returns_count)
-    INTVAL size;
-    GETATTR_CallContext_returns_size(interp, self, size);
-    return size;
-}
-
-/*
-
-=item C<static void csr_push_pointer(PARROT_INTERP, PMC *self, void *value,
-INTVAL type)>
-
-Push pointer to results.  The pointer should point to a storage
-location for a return value -- it must be a pointer to an INTVAL, FLOATVAL,
-PMC, or STRING storage location. C<type> is type of pointer.
-
-TODO Rephrase doc. It's weird.
-
-=cut
-
-*/
-
-static void
-csr_push_pointer(PARROT_INTERP, ARGIN(PMC *self), ARGIN_NULLOK(void *value), INTVAL type)
-{
-    ASSERT_ARGS(csr_push_pointer)
-    void   **values;
-    INTVAL   size;
-
-    PARROT_ASSERT_MSG((type >= 0 && type < 4), "Wrong pointer type");
-
-    GETATTR_CallContext_returns_size(interp, self, size);
-    values = csr_reallocate_return_values(interp, self, size + 1);
-
-    /* Tag pointer */
-    values[size] = INTVAL2PTR(void *, PTR2INTVAL(value) | type);
-}
-
-
-/*
-
-=item C<static void csr_fill_integer(PARROT_INTERP, PMC *self, INTVAL key,
-INTVAL value)>
-
-=item C<static void csr_fill_number(PARROT_INTERP, PMC *self, INTVAL key,
-FLOATVAL value)>
-
-=item C<static void csr_fill_string(PARROT_INTERP, PMC *self, INTVAL key, STRING
-*value)>
-
-=item C<static void csr_fill_pmc(PARROT_INTERP, PMC *self, INTVAL key, PMC
-*value)>
-
-Sets the value of the element at index C<key> to C<value>, casting if
-necessary.
-
-=cut
-
-*/
-
-static void
-csr_fill_integer(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, INTVAL value)
-{
-    ASSERT_ARGS(csr_fill_integer)
-    void * const cell = csr_get_pointer_keyed_int(interp, self, key);
-    void * const ptr  = UNTAG_CELL(cell);
-
-    switch ((Call_bits_enum_t)CELL_TYPE_MASK(cell)) {
-      case PARROT_ARG_INTVAL:
-        *(INTVAL *)ptr = value;
-        break;
-      case PARROT_ARG_FLOATVAL:
-        *(FLOATVAL *)ptr = value;
-        break;
-      case PARROT_ARG_STRING:
-        *(STRING **)ptr = Parrot_str_from_int(interp, value);
-        break;
-      case PARROT_ARG_PMC:
-        *(PMC **)ptr = get_integer_pmc(interp, value);
-        break;
-      default:
-        PARROT_FAILURE("Impossible type");
-    }
-}
-
-static void
-csr_fill_number(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, FLOATVAL value)
-{
-    ASSERT_ARGS(csr_fill_number)
-    void * const cell = csr_get_pointer_keyed_int(interp, self, key);
-    void * const ptr  = UNTAG_CELL(cell);
-
-    switch ((Call_bits_enum_t)CELL_TYPE_MASK(cell)) {
-      case PARROT_ARG_INTVAL:
-        *(INTVAL *)ptr = value;
-        break;
-      case PARROT_ARG_FLOATVAL:
-        *(FLOATVAL *)ptr = value;
-        break;
-      case PARROT_ARG_STRING:
-        *(STRING **)ptr = Parrot_str_from_num(interp, value);
-        break;
-      case PARROT_ARG_PMC:
-        *(PMC **)ptr = get_number_pmc(interp, value);
-        break;
-      default:
-        PARROT_FAILURE("Impossible type");
-    }
-}
-
-static void
-csr_fill_string(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(STRING *value))
-{
-    ASSERT_ARGS(csr_fill_string)
-    void * const cell = csr_get_pointer_keyed_int(interp, self, key);
-    void * const ptr  = UNTAG_CELL(cell);
-
-    switch ((Call_bits_enum_t)CELL_TYPE_MASK(cell)) {
-      case PARROT_ARG_INTVAL:
-        *(INTVAL *)ptr = Parrot_str_to_int(interp, value);
-        break;
-      case PARROT_ARG_FLOATVAL:
-        *(FLOATVAL *)ptr = Parrot_str_to_num(interp, value);
-        break;
-      case PARROT_ARG_STRING:
-        *(STRING **)ptr = value;
-        break;
-      case PARROT_ARG_PMC:
-        *(PMC **)ptr = STRING_IS_NULL(value) ?
-                PMCNULL :
-                get_string_pmc(interp, value);
-        break;
-      default:
-        PARROT_FAILURE("Impossible type");
-    }
-}
-
-static void
-csr_fill_pmc(PARROT_INTERP, ARGIN(PMC *self), INTVAL key, ARGIN_NULLOK(PMC *value))
-{
-    ASSERT_ARGS(csr_fill_pmc)
-    void * const cell = csr_get_pointer_keyed_int(interp, self, key);
-    void * const ptr  = UNTAG_CELL(cell);
-
-    switch ((Call_bits_enum_t)CELL_TYPE_MASK(cell)) {
-      case PARROT_ARG_INTVAL:
-        *(INTVAL *)ptr = VTABLE_get_integer(interp, value);
-        break;
-      case PARROT_ARG_FLOATVAL:
-        *(FLOATVAL *)ptr = VTABLE_get_number(interp, value);
-        break;
-      case PARROT_ARG_STRING:
-        *(STRING **)ptr = VTABLE_get_string(interp, value);
-        break;
-      case PARROT_ARG_PMC:
-        *(PMC **)ptr = value;
-        break;
-      default:
-        PARROT_FAILURE("Impossible type");
-    }
-}
-
-/*
-
-=item C<static STRING* csr_get_string_keyed_int(PARROT_INTERP, PMC *self, INTVAL
-key)>
-
-Gets raw pointer for result.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING*
-csr_get_string_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
-{
-    ASSERT_ARGS(csr_get_string_keyed_int)
-    void * const cell  = csr_get_pointer_keyed_int(interp, self, key);
-    void * const ptr   = UNTAG_CELL(cell);
-    return (STRING *)ptr;
-}
-
-
-/*
-
-=item C<static void* csr_get_pointer_keyed_int(PARROT_INTERP, PMC *self, INTVAL
-key)>
-
-Gets raw pointer for result.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static void*
-csr_get_pointer_keyed_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
-{
-    ASSERT_ARGS(csr_get_pointer_keyed_int)
-    void   **values;
-    INTVAL   size;
-
-    GETATTR_CallContext_returns_size(interp, self, size);
-    PARROT_ASSERT_MSG(key < size, "Wrong index");
-
-    GETATTR_CallContext_returns_values(interp, self, values);
-    return values[key];
-}
-
-/*
-
-=item C<void Parrot_pcc_append_result(PARROT_INTERP, PMC *sig_object, STRING
-*type, void *result)>
-
-Helper function between old and new style PCC to append return pointer to signature.
-
-To be removed with deprecated functions.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_pcc_append_result(PARROT_INTERP, ARGIN(PMC *sig_object), ARGIN(STRING *type),
-        ARGIN(void *result))
-{
-    ASSERT_ARGS(Parrot_pcc_append_result)
-    STRING *full_sig;
-    PMC    *return_flags;
-    INTVAL  return_flags_size;
-    INTVAL  int_type;
-
-    Parrot_String return_flags_name = Parrot_str_new_constant(interp, "return_flags");
-
-    full_sig = VTABLE_get_string(interp, sig_object);
-    /* Append ->[T] */
-    Parrot_str_concat(interp, full_sig, Parrot_str_new_constant(interp, "->"), 0);
-    Parrot_str_concat(interp, full_sig, type, 0);
-
-    /* Update returns_flag */
-    return_flags = VTABLE_get_attr_str(interp, sig_object, return_flags_name);
-    if (PMC_IS_NULL(return_flags)) {
-        /* Create return_flags for single element */
-        return_flags = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
-        return_flags_size = 0;
-        VTABLE_set_integer_native(interp, return_flags, 1);
-        VTABLE_set_attr_str(interp, sig_object, return_flags_name, return_flags);
-    }
-    else {
-        /* Extend return_flags by one element */
-        return_flags_size = VTABLE_elements(interp, return_flags);
-        VTABLE_set_integer_native(interp, return_flags, return_flags_size + 1);
-    }
-    switch (Parrot_str_indexed(interp, type, 0)) {
-      case 'I':
-        VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
-                    PARROT_ARG_INTVAL);
-        int_type = PARROT_ARG_INTVAL;
-        break;
-      case 'N':
-        VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
-                    PARROT_ARG_FLOATVAL);
-        int_type = PARROT_ARG_FLOATVAL;
-        break;
-      case 'S':
-        VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
-                    PARROT_ARG_STRING);
-        int_type = PARROT_ARG_STRING;
-        break;
-      case 'P':
-        VTABLE_set_integer_keyed_int(interp, return_flags, return_flags_size,
-                    PARROT_ARG_PMC);
-        int_type = PARROT_ARG_PMC;
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL,
-                EXCEPTION_INVALID_OPERATION,
-                "invalid signature string element!");
-    }
-
-    csr_push_pointer(interp, sig_object, result, int_type);
-}
-
-/*
-
 =back
 
 =head1 SEE ALSO

Modified: branches/ops_pct/src/call/context.c
==============================================================================
--- branches/ops_pct/src/call/context.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/call/context.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2009, Parrot Foundation.
+Copyright (C) 2009-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -79,10 +79,10 @@
     ARGIN(const UINTVAL *number_regs_used))
         __attribute__nonnull__(2);
 
-static void clear_regs(PARROT_INTERP, ARGMOD(PMC *pmcctx))
+static void clear_regs(PARROT_INTERP, ARGMOD(Parrot_Context *ctx))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pmcctx);
+        FUNC_MODIFIES(*ctx);
 
 PARROT_INLINE
 PARROT_CANNOT_RETURN_NULL
@@ -111,7 +111,7 @@
        PARROT_ASSERT_ARG(number_regs_used))
 #define ASSERT_ARGS_clear_regs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmcctx))
+    , PARROT_ASSERT_ARG(ctx))
 #define ASSERT_ARGS_get_context_struct_fast __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ctx))
@@ -242,7 +242,7 @@
 
 /*
 
-=item C<static void clear_regs(PARROT_INTERP, PMC *pmcctx)>
+=item C<static void clear_regs(PARROT_INTERP, Parrot_Context *ctx)>
 
 Clears all registers in a context.  PMC and STRING registers contain PMCNULL
 and NULL, respectively.  Integer and float registers contain negative flag
@@ -253,32 +253,31 @@
 */
 
 static void
-clear_regs(PARROT_INTERP, ARGMOD(PMC *pmcctx))
+clear_regs(PARROT_INTERP, ARGMOD(Parrot_Context *ctx))
 {
     ASSERT_ARGS(clear_regs)
     UINTVAL i;
-    Parrot_Context *ctx = get_context_struct_fast(interp, pmcctx);
 
     /* NULL out registers - P/S have to be NULL for GC
      *
      * if the architecture has 0x := NULL and 0.0 we could memset too
      */
 
-    for (i = 0; i < ctx->n_regs_used[REGNO_PMC]; i++) {
+    for (i = 0; i < ctx->n_regs_used[REGNO_PMC]; ++i) {
         ctx->bp_ps.regs_p[-1L - i] = PMCNULL;
     }
 
-    for (i = 0; i < ctx->n_regs_used[REGNO_STR]; i++) {
-        ctx->bp_ps.regs_s[i] = NULL;
+    for (i = 0; i < ctx->n_regs_used[REGNO_STR]; ++i) {
+        ctx->bp_ps.regs_s[i] = STRINGNULL;
     }
 
     if (Interp_debug_TEST(interp, PARROT_REG_DEBUG_FLAG)) {
         /* depending on -D40, set int and num to identifiable garbage values */
-        for (i = 0; i < ctx->n_regs_used[REGNO_INT]; i++) {
+        for (i = 0; i < ctx->n_regs_used[REGNO_INT]; ++i) {
             ctx->bp.regs_i[i] = -999;
         }
 
-        for (i = 0; i < ctx->n_regs_used[REGNO_NUM]; i++) {
+        for (i = 0; i < ctx->n_regs_used[REGNO_NUM]; ++i) {
             ctx->bp.regs_n[-1L - i] = -99.9;
         }
     }
@@ -315,14 +314,12 @@
     if (!PMC_IS_NULL(ctx->current_sub))
         return;
 
-    ctx->results_signature = NULL;
     ctx->lex_pad           = PMCNULL;
     ctx->outer_ctx         = NULL;
     ctx->current_cont      = NULL;
     ctx->current_object    = NULL;
     ctx->handlers          = PMCNULL;
     ctx->caller_ctx        = NULL;
-    ctx->pred_offset       = 0;
     ctx->current_sig       = PMCNULL;
     ctx->current_sub       = PMCNULL;
 
@@ -332,7 +329,6 @@
         ctx->warns             = old->warns;
         ctx->errors            = old->errors;
         ctx->trace_flags       = old->trace_flags;
-        ctx->pred_offset       = old->pred_offset;
         ctx->current_HLL       = old->current_HLL;
         ctx->current_namespace = old->current_namespace;
         /* end COW */
@@ -344,14 +340,13 @@
         ctx->warns             = 0;
         ctx->errors            = 0;
         ctx->trace_flags       = 0;
-        ctx->pred_offset       = 0;
         ctx->current_HLL       = 0;
         ctx->current_namespace = PMCNULL;
         ctx->recursion_depth   = 0;
     }
 
     /* other stuff is set inside Sub.invoke */
-    clear_regs(interp, pmcctx);
+    clear_regs(interp, ctx);
 }
 
 
@@ -489,7 +484,7 @@
     /* ctx.bp_ps points to S0, which has Px on the left */
     ctx->bp_ps.regs_s = (STRING **)((char *)ctx->registers + size_nip);
 
-    clear_regs(interp, pmcctx);
+    clear_regs(interp, ctx);
 }
 
 
@@ -528,18 +523,12 @@
 {
     ASSERT_ARGS(Parrot_pcc_free_registers)
     Parrot_CallContext_attributes * const ctx = PARROT_CALLCONTEXT(pmcctx);
-    size_t reg_size;
-
-    if (!ctx)
-        return;
-
-    reg_size = Parrot_pcc_calculate_registers_size(interp, ctx->n_regs_used);
-    if (!reg_size)
-        return;
 
-    /* Free registers */
-    Parrot_gc_free_fixed_size_storage(interp, reg_size, ctx->registers);
+    const size_t reg_size =
+        Parrot_pcc_calculate_registers_size(interp, ctx->n_regs_used);
 
+    if (reg_size)
+        Parrot_gc_free_fixed_size_storage(interp, reg_size, ctx->registers);
 }
 
 

Modified: branches/ops_pct/src/call/context_accessors.c
==============================================================================
--- branches/ops_pct/src/call/context_accessors.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/call/context_accessors.c	Wed May  5 08:45:29 2010	(r46302)
@@ -471,72 +471,6 @@
 
 /*
 
-=item C<PMC* Parrot_pcc_get_results_signature_func(PARROT_INTERP, PMC *ctx)>
-
-=item C<void Parrot_pcc_set_results_signature_func(PARROT_INTERP, PMC *ctx, PMC
-*sig)>
-
-Get/set ptr into code with get_results opcode.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CAN_RETURN_NULL
-PMC*
-Parrot_pcc_get_results_signature_func(PARROT_INTERP, ARGIN(PMC *ctx))
-{
-    ASSERT_ARGS(Parrot_pcc_get_results_signature_func)
-    Parrot_Context const *c = get_context_struct_fast(interp, ctx);
-    return c->results_signature;
-}
-
-PARROT_EXPORT
-void
-Parrot_pcc_set_results_signature_func(PARROT_INTERP, ARGIN(PMC *ctx), ARGIN_NULLOK(PMC *sig))
-{
-    ASSERT_ARGS(Parrot_pcc_set_results_signature_func)
-    Parrot_Context *c = get_context_struct_fast(interp, ctx);
-    PARROT_ASSERT(PMC_IS_NULL(sig) || PObj_is_PMC_TEST(sig));
-    c->results_signature = sig;
-}
-
-
-/*
-
-=item C<size_t Parrot_pcc_get_pred_offset_func(PARROT_INTERP, PMC *ctx)>
-
-=item C<void Parrot_pcc_set_pred_offset_func(PARROT_INTERP, PMC *ctx, size_t
-pred_offset)>
-
-Get/set pred_offset
-
-=cut
-
-*/
-
-PARROT_EXPORT
-size_t
-Parrot_pcc_get_pred_offset_func(PARROT_INTERP, ARGIN(PMC *ctx))
-{
-    ASSERT_ARGS(Parrot_pcc_get_pred_offset_func)
-    Parrot_Context const *c = get_context_struct_fast(interp, ctx);
-    return c->pred_offset;
-}
-
-PARROT_EXPORT
-void
-Parrot_pcc_set_pred_offset_func(PARROT_INTERP, ARGIN(PMC *ctx), size_t pred_offset)
-{
-    ASSERT_ARGS(Parrot_pcc_set_pred_offset_func)
-    Parrot_Context *c = get_context_struct_fast(interp, ctx);
-    c->pred_offset = pred_offset;
-}
-
-
-/*
-
 =item C<UINTVAL Parrot_pcc_warnings_on_func(PARROT_INTERP, PMC *ctx, UINTVAL
 flags)>
 
@@ -746,6 +680,7 @@
 {
     ASSERT_ARGS(Parrot_pcc_get_int_constant_func)
     Parrot_Context const * c = get_context_struct_fast(interp, ctx);
+    PARROT_ASSERT(c->constants[idx]->type == 'i');
     return c->constants[idx]->u.integer;
 }
 
@@ -756,6 +691,7 @@
 {
     ASSERT_ARGS(Parrot_pcc_get_num_constant_func)
     Parrot_Context const * c = get_context_struct_fast(interp, ctx);
+    PARROT_ASSERT(c->constants[idx]->type == 'n');
     return c->constants[idx]->u.number;
 }
 
@@ -766,6 +702,7 @@
 {
     ASSERT_ARGS(Parrot_pcc_get_string_constant_func)
     Parrot_Context const * c = get_context_struct_fast(interp, ctx);
+    PARROT_ASSERT(c->constants[idx]->type == 's');
     return c->constants[idx]->u.string;
 }
 
@@ -776,6 +713,8 @@
 {
     ASSERT_ARGS(Parrot_pcc_get_pmc_constant_func)
     Parrot_Context const * c = get_context_struct_fast(interp, ctx);
+    PARROT_ASSERT((c->constants[idx]->type == 'k')
+            || (c->constants[idx]->type == 'p'));
     return c->constants[idx]->u.key;
 }
 

Modified: branches/ops_pct/src/call/ops.c
==============================================================================
--- branches/ops_pct/src/call/ops.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/call/ops.c	Wed May  5 08:45:29 2010	(r46302)
@@ -22,6 +22,7 @@
 #include "parrot/parrot.h"
 #include "parrot/oplib/ops.h"
 #include "pmc/pmc_continuation.h"
+#include "parrot/runcore_api.h"
 
 /* HEADERIZER HFILE: include/parrot/call.h */
 

Modified: branches/ops_pct/src/call/pcc.c
==============================================================================
--- branches/ops_pct/src/call/pcc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/call/pcc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -35,16 +35,24 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+static void Parrot_pcc_add_invocant(PARROT_INTERP,
+    ARGIN(PMC *call_obj),
+    ARGIN(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
 #define ASSERT_ARGS_do_run_ops __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_obj))
+#define ASSERT_ARGS_Parrot_pcc_add_invocant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(call_obj) \
+    , PARROT_ASSERT_ARG(pmc))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
 
-/* Make sure we don't conflict with any other MAX() macros defined elsewhere */
-#define PARROT_MAX(a, b) (((a)) > (b) ? (a) : (b))
-
 /*
 
 =item C<void Parrot_pcc_invoke_sub_from_c_args(PARROT_INTERP, PMC *sub_obj,
@@ -64,15 +72,24 @@
         ARGIN(const char *sig), ...)
 {
     ASSERT_ARGS(Parrot_pcc_invoke_sub_from_c_args)
-    PMC    *sig_obj;
-    va_list args;
+    PMC         *call_obj;
+    va_list      args;
+    const char  *arg_sig, *ret_sig;
+    PMC         * const old_call_obj =
+        Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_split_signature_string(sig, &arg_sig, &ret_sig);
 
     va_start(args, sig);
-    sig_obj = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL,
-         sig, args);
+    call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL,
+         arg_sig, &args);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_obj);
+    Parrot_pcc_invoke_from_sig_object(interp, sub_obj, call_obj);
+    call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+    Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
     va_end(args);
-
-    Parrot_pcc_invoke_from_sig_object(interp, sub_obj, sig_obj);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_call_obj);
 }
 
 
@@ -156,10 +173,32 @@
              "Method '%Ss' not found", method_name);
 
     /* Invoke the subroutine object with the given CallSignature object */
-    interp->current_object = pmc;
     Parrot_pcc_invoke_from_sig_object(interp, sub_obj, sig_obj);
 }
 
+
+/*
+
+=item C<static void Parrot_pcc_add_invocant(PARROT_INTERP, PMC *call_obj, PMC
+*pmc)>
+
+Adds the given PMC as an invocant to the given CallContext PMC.  You should
+never have to use this, and it should go away with interp->current_object.
+
+*/
+
+static void
+Parrot_pcc_add_invocant(PARROT_INTERP, ARGIN(PMC *call_obj), ARGIN(PMC *pmc))
+{
+    ASSERT_ARGS(Parrot_pcc_add_invocant)
+    PMC *arg_flags;
+    GETATTR_CallContext_arg_flags(interp, call_obj, arg_flags);
+
+    VTABLE_unshift_integer(interp, arg_flags,
+          PARROT_ARG_PMC | PARROT_ARG_INVOCANT);
+          VTABLE_unshift_pmc(interp, call_obj, pmc);
+}
+
 /*
 
 =item C<void Parrot_pcc_invoke_method_from_c_args(PARROT_INTERP, PMC* pmc,
@@ -183,27 +222,38 @@
         ARGIN(const char *signature), ...)
 {
     ASSERT_ARGS(Parrot_pcc_invoke_method_from_c_args)
-    PMC    *sig_obj;
-    PMC    *sub_obj;
-    va_list args;
+    PMC        *call_obj;
+    PMC        *sub_obj;
+    va_list     args;
+    const char *arg_sig, *ret_sig;
+    PMC        * const old_call_obj =
+        Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+
+    Parrot_pcc_split_signature_string(signature, &arg_sig, &ret_sig);
 
     va_start(args, signature);
-    sig_obj = Parrot_pcc_build_sig_object_from_varargs(interp, pmc,
-                 signature, args);
-    va_end(args);
+    call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args);
+    Parrot_pcc_add_invocant(interp, call_obj, pmc);
+
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_obj);
 
     /* Find the subroutine object as a named method on pmc */
     sub_obj = VTABLE_find_method(interp, pmc, method_name);
 
     if (PMC_IS_NULL(sub_obj))
-         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_METHOD_NOT_FOUND,
-             "Method '%Ss' not found", method_name);
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_METHOD_NOT_FOUND,
+            "Method '%Ss' not found", method_name);
 
-    /* Invoke the subroutine object with the given CallSignature object */
-    interp->current_object = pmc;
-    Parrot_pcc_invoke_from_sig_object(interp, sub_obj, sig_obj);
+    /* Invoke the subroutine object with the given CallContext object */
+    Parrot_pcc_invoke_from_sig_object(interp, sub_obj, call_obj);
+    call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+    Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
+    va_end(args);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_call_obj);
 }
 
+
 /*
 
 =item C<static int is_invokable(PARROT_INTERP, PMC *sub_obj)>
@@ -240,8 +290,6 @@
 do_run_ops(PARROT_INTERP, ARGIN(PMC *sub_obj))
 {
     ASSERT_ARGS(do_run_ops)
-    if (!PMC_IS_NULL(interp->current_object))
-        return 0;
 
     if (sub_obj->vtable->base_type < enum_class_core_max)
         return sub_obj->vtable->base_type == enum_class_Sub
@@ -292,7 +340,7 @@
     opcode_t    *dest;
     UINTVAL      n_regs_used[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
     PMC         *ctx  = Parrot_push_context(interp, n_regs_used);
-    PMC * const  ret_cont = new_ret_continuation_pmc(interp, NULL);
+    PMC * const  ret_cont = pmc_new(interp, enum_class_Continuation);
 
     Parrot_pcc_set_signature(interp, ctx, call_object);
     Parrot_pcc_set_continuation(interp, ctx, ret_cont);
@@ -308,14 +356,12 @@
         Parrot_runcore_t *old_core = interp->run_core;
         const opcode_t offset = dest - interp->code->base.data;
 
-        if (PARROT_RUNCORE_PREDEREF_OPS_TEST(interp->run_core))
-            Parrot_runcore_switch(interp, CONST_STRING(interp, "slow"));
-
         runops(interp, offset);
         Interp_core_SET(interp, old_core);
     }
-    Parrot_pcc_set_signature(interp, ctx, NULL);
     Parrot_pop_context(interp);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp),
+            Parrot_pcc_get_signature(interp, ctx));
 }
 
 /*

Modified: branches/ops_pct/src/datatypes.c
==============================================================================
--- branches/ops_pct/src/datatypes.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/datatypes.c	Wed May  5 08:45:29 2010	(r46302)
@@ -44,7 +44,7 @@
     char * const type = Parrot_str_to_cstring(interp, type_name);
     int i;
 
-    for (i = enum_first_type; i < enum_last_type; i++) {
+    for (i = enum_first_type; i < enum_last_type; ++i) {
         if (STREQ(data_types[i - enum_first_type].name, type)) {
             Parrot_str_free_cstring(type);
             return i;

Modified: branches/ops_pct/src/debug.c
==============================================================================
--- branches/ops_pct/src/debug.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/debug.c	Wed May  5 08:45:29 2010	(r46302)
@@ -863,7 +863,7 @@
 
 PARROT_EXPORT
 void
-Parrot_debugger_start(PARROT_INTERP, ARGIN(opcode_t * cur_opcode))
+Parrot_debugger_start(PARROT_INTERP, ARGIN_NULLOK(opcode_t * cur_opcode))
 {
     ASSERT_ARGS(Parrot_debugger_start)
     TRACEDEB_MSG("Parrot_debugger_start");
@@ -966,8 +966,6 @@
 PDB_get_command(PARROT_INTERP)
 {
     ASSERT_ARGS(PDB_get_command)
-    unsigned int  i;
-    int           ch;
     char         *c;
     PDB_t        * const pdb = interp->pdb;
 
@@ -987,7 +985,7 @@
     PARROT_ASSERT(pdb->cur_command);
 
     if (interp->pdb->script_file) {
-        FILE *fd = interp->pdb->script_file;
+        FILE * const fd = interp->pdb->script_file;
         char buf[DEBUG_CMD_BUFFER_LENGTH+1];
         const char *ptr;
 
@@ -1022,29 +1020,25 @@
         if (pdb->cur_command[0] != '\0')
             strcpy(pdb->last_command, pdb->cur_command);
 
-        i = 0;
-
         c = pdb->cur_command;
 
         Parrot_io_eprintf(pdb->debugger, "\n");
 
         {
-            Interp *interpdeb = interp->pdb->debugger;
-            STRING *readline  = CONST_STRING(interpdeb, "readline_interactive");
-            STRING *prompt    = CONST_STRING(interpdeb, "(pdb) ");
-            STRING *s         = Parrot_str_new(interpdeb, NULL, 0);
-            PMC    *tmp_stdin = Parrot_io_stdhandle(interpdeb, 0, NULL);
+            Interp * const interpdeb = interp->pdb->debugger;
+            STRING * const readline  = CONST_STRING(interpdeb, "readline_interactive");
+            STRING * const prompt    = CONST_STRING(interpdeb, "(pdb) ");
+            STRING * const s         = Parrot_str_new(interpdeb, NULL, 0);
+            PMC    * const tmp_stdin = Parrot_io_stdhandle(interpdeb, 0, NULL);
 
             Parrot_pcc_invoke_method_from_c_args(interpdeb,
                 tmp_stdin, readline,
-                "S->S", prompt, & s);
+                "S->S", prompt, &s);
             {
                 char * const aux = Parrot_str_to_cstring(interpdeb, s);
                 strcpy(c, aux);
                 Parrot_str_free_cstring(aux);
             }
-
-            ch = '\n';
         }
     }
 }
@@ -1163,22 +1157,6 @@
     /* Erase the stopped flag */
     pdb->state &= ~PDB_STOPPED;
 
-    /* Testing use of the debugger runloop */
-    #if 0
-
-    /* Execute */
-    for (; n && pdb->cur_opcode; n--)
-        DO_OP(pdb->cur_opcode, pdb->debugee);
-
-    /* Set the stopped flag */
-    pdb->state |= PDB_STOPPED;
-
-    /* If program ended */
-
-    if (!pdb->cur_opcode)
-        (void)PDB_program_end(interp);
-    #endif
-
     debugee     = pdb->debugee;
 
     new_runloop_jump_point(debugee);
@@ -1302,7 +1280,6 @@
     char             str[DEBUG_CMD_BUFFER_LENGTH + 1];
     unsigned short   cond_argleft;
     unsigned short   cond_type;
-    unsigned char    regleft;
     int              i, reg_number;
 
     TRACEDEB_MSG("PDB_cond");
@@ -1321,8 +1298,9 @@
     cond_argleft = condition_regtype(command);
 
     /* get the register number */
-    auxcmd = ++command;
-    regleft = (unsigned char)get_uint(&command, 0);
+    auxcmd     = ++command;
+    reg_number = get_uint(&command, 0);
+
     if (auxcmd == command) {
         Parrot_io_eprintf(interp->pdb->debugger, "Invalid register\n");
             return NULL;
@@ -1372,7 +1350,7 @@
     if (*(command + 1) == '=')
         command += 2;
     else
-        command++;
+        ++command;
 
     command = skip_whitespace(command);
 
@@ -1431,7 +1409,7 @@
             condition->type               |= PDB_cond_const;
         }
         else if (condition->type & PDB_cond_str) {
-            for (i = 1; ((command[i] != '"') && (i < DEBUG_CMD_BUFFER_LENGTH)); i++)
+            for (i = 1; ((command[i] != '"') && (i < DEBUG_CMD_BUFFER_LENGTH)); ++i)
                 str[i - 1] = command[i];
             str[i - 1] = '\0';
 #if TRACE_DEBUGGER
@@ -1519,7 +1497,7 @@
             /* Move to the line where we will set the break point */
             line = pdb->file->line;
 
-            for (i = 1; ((i < ln) && (line->next)); i++)
+            for (i = 1; ((i < ln) && (line->next)); ++i)
                 line = line->next;
 
             /* Abort if the line number provided doesn't exist */
@@ -1690,27 +1668,6 @@
         PDB_skip_breakpoint(interp, ln);
     }
 
-    /* Run while no break point is reached */
-    /*
-    while (!PDB_break(interp))
-        DO_OP(pdb->cur_opcode, pdb->debugee);
-    */
-
-    #if 0
-    pdb->tracing           = 0;
-    Parrot_runcore_switch(pdb->debugee, CONST_STRING(interp, "debugger"));
-
-    new_internal_exception(pdb->debugee);
-    if (setjmp(pdb->debugee->exceptions->destination)) {
-        Parrot_io_eprintf(pdb->debugee, "Unhandled exception while debugging: %Ss\n",
-            pdb->debugee->exceptions->msg);
-        pdb->state |= PDB_STOPPED;
-        return;
-    }
-    runops_int(pdb->debugee, pdb->debugee->code->base.data - pdb->cur_opcode);
-    if (!pdb->cur_opcode)
-        (void)PDB_program_end(interp);
-    #endif
     pdb->state |= PDB_RUNNING;
     pdb->state &= ~PDB_BREAK;
     pdb->state &= ~PDB_STOPPED;
@@ -1953,7 +1910,7 @@
 PDB_check_condition(PARROT_INTERP, ARGIN(const PDB_condition_t *condition))
 {
     ASSERT_ARGS(PDB_check_condition)
-    PMC *ctx = CURRENT_CONTEXT(interp);
+    PMC * const ctx = CURRENT_CONTEXT(interp);
 
     TRACEDEB_MSG("PDB_check_condition");
 
@@ -2121,7 +2078,7 @@
         /* If we have to skip breakpoints, do so. */
         if (pdb->breakpoint_skip) {
             TRACEDEB_MSG("PDB_break skipping");
-            pdb->breakpoint_skip--;
+            --pdb->breakpoint_skip;
             return 0;
         }
 
@@ -2174,7 +2131,7 @@
 
     fill = _new = mem_gc_allocate_n_typed(interp, length * 2 + 1, char);
 
-    for (; string < end; string++) {
+    for (; string < end; ++string) {
         switch (*string) {
           case '\0':
             *(fill++) = '\\';
@@ -2205,7 +2162,14 @@
             *(fill++) = '"';
             break;
           default:
-            *(fill++) = *string;
+            /* Hide non-ascii chars that may come from utf8 or latin-1
+             * strings in constant strings.
+             * Workaround for TT #1557
+             */
+            if ((unsigned char)*string > 127)
+                *(fill++) = '?';
+            else
+                *(fill++) = *string;
             break;
         }
     }
@@ -2231,8 +2195,8 @@
     ASSERT_ARGS(PDB_unescape)
     int l = 0;
 
-    for (; *string; string++) {
-        l++;
+    for (; *string; ++string) {
+        ++l;
 
         if (*string == '\\') {
             char *fill;
@@ -2260,7 +2224,7 @@
 
             fill = string;
 
-            for (i = 1; fill[i + 1]; i++)
+            for (i = 1; fill[i + 1]; ++i)
                 fill[i] = fill[i + 1];
 
             fill[i] = '\0';
@@ -2306,7 +2270,7 @@
     dest[size++] = ' ';
 
     /* Concat the arguments */
-    for (j = 1; j < info->op_count; j++) {
+    for (j = 1; j < info->op_count; ++j) {
         char      buf[256];
         INTVAL    i = 0;
 
@@ -2525,7 +2489,7 @@
         /* Register decoding.  It would be good to abstract this, too. */
         PARROT_OBSERVER static const char regs[] = "ISPN";
 
-        for (j = 0; j < n_values; j++) {
+        for (j = 0; j < n_values; ++j) {
             size_t idx = 0;
             const int sig_value = VTABLE_get_integer_keyed_int(interp, sig, j);
 
@@ -2811,7 +2775,7 @@
     /* Get the name of the file */
     for (j = 0; command[j] == ' '; ++j)
         continue;
-    for (i = 0; command[j]; i++, j++)
+    for (i = 0; command[j]; ++i, ++j)
         f[i] = command[j];
 
     f[i] = '\0';
@@ -2844,7 +2808,7 @@
         }
         pfile->source[pfile->size] = (char)c;
 
-        pfile->size++;
+        ++pfile->size;
 
         if (c == '\n') {
             /* If the line has an opcode move to the next one,
@@ -2909,7 +2873,7 @@
             h = 0;
         }
 
-        c++;
+        ++c;
     }
 
     return h;
@@ -2962,7 +2926,7 @@
         return;
     }
     reg_type_id = (unsigned char) toupper((unsigned char) command[0]);
-    command++;
+    ++command;
     register_num = get_ulong(&command, 0);
 
     switch (reg_type_id) {
@@ -3045,7 +3009,7 @@
 
     line = pdb->file->line;
 
-    for (i = 0; i < pdb->file->list_line && line->next; i++)
+    for (i = 0; i < pdb->file->list_line && line->next; ++i)
         line = line->next;
 
     i = 1;
@@ -3416,7 +3380,7 @@
     TRACEDEB_MSG("GDB_P");
     /* Skip leading whitespace. */
     while (isspace((unsigned char)*s))
-        s++;
+        ++s;
 
     reg_type = (unsigned char) toupper((unsigned char)*s);
 
@@ -3432,7 +3396,7 @@
         const int max_reg = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), t);
         int n;
 
-        for (n = 0; n < max_reg; n++) {
+        for (n = 0; n < max_reg; ++n) {
             /* this must be done in two chunks because PMC's print directly. */
             Parrot_io_eprintf(interp, "\n  %c%d = ", reg_type, n);
             Parrot_io_eprintf(interp, "%Ss", GDB_print_reg(interp, t, n));

Modified: branches/ops_pct/src/dynext.c
==============================================================================
--- branches/ops_pct/src/dynext.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynext.c	Wed May  5 08:45:29 2010	(r46302)
@@ -42,20 +42,23 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-static void * dlopen_string(PARROT_INTERP, ARGIN(STRING *path))
+static void * dlopen_string(PARROT_INTERP,
+    Parrot_dlopen_flags flags,
+    ARGIN(STRING *path))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static STRING * get_path(PARROT_INTERP,
     ARGMOD_NULLOK(STRING *lib),
+    Parrot_dlopen_flags flags,
     ARGOUT(void **handle),
     ARGIN(STRING *wo_ext),
     ARGIN_NULLOK(STRING *ext))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(3)
         __attribute__nonnull__(4)
+        __attribute__nonnull__(5)
         FUNC_MODIFIES(*lib)
         FUNC_MODIFIES(*handle);
 
@@ -218,9 +221,11 @@
 
 /*
 
-=item C<static void * dlopen_string(PARROT_INTERP, STRING *path)>
+=item C<static void * dlopen_string(PARROT_INTERP, Parrot_dlopen_flags flags,
+STRING *path)>
 
-Call Parrot_dlopen with the Parrot String argument converted to C string.
+Call Parrot_dlopen with the Parrot String argument converted to C string.  The
+flags argument will be converted into native form and used if applicable.
 
 =cut
 
@@ -229,20 +234,20 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static void *
-dlopen_string(PARROT_INTERP, ARGIN(STRING *path))
+dlopen_string(PARROT_INTERP, Parrot_dlopen_flags flags, ARGIN(STRING *path))
 {
     ASSERT_ARGS(dlopen_string)
 
     char * const pathstr = Parrot_str_to_cstring(interp, path);
-    void *       handle  = Parrot_dlopen(pathstr);
+    void *       handle  = Parrot_dlopen(pathstr, flags);
     Parrot_str_free_cstring(pathstr);
     return handle;
 }
 
 /*
 
-=item C<static STRING * get_path(PARROT_INTERP, STRING *lib, void **handle,
-STRING *wo_ext, STRING *ext)>
+=item C<static STRING * get_path(PARROT_INTERP, STRING *lib, Parrot_dlopen_flags
+flags, void **handle, STRING *wo_ext, STRING *ext)>
 
 Return path and handle of a dynamic lib, setting lib_name to just the filestem
 (i.e. without path or extension) as a freshly-allocated C string.
@@ -254,8 +259,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static STRING *
-get_path(PARROT_INTERP, ARGMOD_NULLOK(STRING *lib), ARGOUT(void **handle),
-        ARGIN(STRING *wo_ext), ARGIN_NULLOK(STRING *ext))
+get_path(PARROT_INTERP, ARGMOD_NULLOK(STRING *lib), Parrot_dlopen_flags flags,
+        ARGOUT(void **handle), ARGIN(STRING *wo_ext),
+        ARGIN_NULLOK(STRING *ext))
 {
     ASSERT_ARGS(get_path)
     STRING *path, *full_name;
@@ -268,7 +274,7 @@
                                                      PARROT_LIB_DYN_EXTS);
 
     if (lib == NULL) {
-        *handle = Parrot_dlopen((char *)NULL);
+        *handle = Parrot_dlopen((char *)NULL, flags);
         if (*handle) {
             return string_from_literal(interp, "");
         }
@@ -288,11 +294,11 @@
 
         for (i = 0; i < n; ++i) {
             ext = VTABLE_get_string_keyed_int(interp, share_ext, i);
-            full_name = Parrot_str_concat(interp, wo_ext, ext, 0);
+            full_name = Parrot_str_concat(interp, wo_ext, ext);
             path = Parrot_locate_runtime_file_str(interp, full_name,
                     PARROT_RUNTIME_FT_DYNEXT);
             if (path) {
-                *handle = dlopen_string(interp, path);
+                *handle = dlopen_string(interp, flags, path);
                 if (*handle) {
                     return path;
                 }
@@ -307,7 +313,7 @@
              * File with extension and prefix was not found,
              * so try file.extension w/o prefix
              */
-            *handle = dlopen_string(interp, full_name);
+            *handle = dlopen_string(interp, flags, full_name);
             if (*handle) {
                 return full_name;
             }
@@ -322,7 +328,7 @@
     full_name = Parrot_locate_runtime_file_str(interp, lib,
             PARROT_RUNTIME_FT_DYNEXT);
     if (full_name) {
-        *handle = dlopen_string(interp, full_name);
+        *handle = dlopen_string(interp, flags, full_name);
         if (*handle) {
             return full_name;
         }
@@ -333,9 +339,9 @@
      */
 #ifdef WIN32
     if (!STRING_IS_EMPTY(lib) && memcmp(lib->strstart, "lib", 3) == 0) {
-        *handle = Parrot_dlopen((char *)lib->strstart + 3);
+        *handle = Parrot_dlopen((char *)lib->strstart + 3, 0);
         if (*handle) {
-            path = Parrot_str_substr(interp, lib, 3, lib->strlen - 3, NULL, 0);
+            path = Parrot_str_substr(interp, lib, 3, lib->strlen - 3);
             return path;
         }
     }
@@ -344,10 +350,10 @@
     /* And on cygwin replace a leading "lib" by "cyg". */
 #ifdef __CYGWIN__
     if (!STRING_IS_EMPTY(lib) && memcmp(lib->strstart, "lib", 3) == 0) {
-        path = Parrot_str_append(interp, CONST_STRING(interp, "cyg"),
-            Parrot_str_substr(interp, lib, 3, lib->strlen - 3, NULL, 0));
+        path = Parrot_str_concat(interp, CONST_STRING(interp, "cyg"),
+            Parrot_str_substr(interp, lib, 3, lib->strlen - 3));
 
-        *handle = dlopen_string(interp, path);
+        *handle = dlopen_string(interp, flags, path);
 
         if (*handle)
             return path;
@@ -356,7 +362,7 @@
 
     /* And after-finally,  let the OS use his own search */
     if (!STRING_IS_EMPTY(lib)) {
-        *handle = dlopen_string(interp, lib);
+        *handle = dlopen_string(interp, flags, lib);
         if (*handle)
             return lib;
     }
@@ -606,11 +612,13 @@
 
 /*
 
-=item C<PMC * Parrot_load_lib(PARROT_INTERP, STRING *lib, PMC *initializer)>
+=item C<PMC * Parrot_load_lib(PARROT_INTERP, STRING *lib, PMC *parameters)>
 
 Dynamic library loader.
 
-C<initializer> is currently unused.
+C<parameters>, if not null, points to something which controls library
+loading and initialization.  Currently just its integer value is used,
+interpreted as C<Parrot_dlopen_flags>.
 
 Calls C<Parrot_lib_%s_load()> which performs the registration of the lib
 once C<Parrot_lib_%s_init()> gets called (if exists) to perform thread
@@ -633,7 +641,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_load_lib(PARROT_INTERP, ARGIN_NULLOK(STRING *lib), SHIM(PMC *initializer))
+Parrot_load_lib(PARROT_INTERP, ARGIN_NULLOK(STRING *lib), ARGIN_NULLOK(PMC *parameters))
 {
     ASSERT_ARGS(Parrot_load_lib)
     void   *handle;
@@ -641,6 +649,7 @@
     STRING *path;
     STRING *lib_name, *wo_ext, *ext;    /* library stem without path
                                          * or extension.  */
+    int flags = 0;
     /* Find the pure library name, without path or extension.  */
     /*
      * TODO move the class_count_mutex here
@@ -662,7 +671,11 @@
         return lib_pmc;
     }
 
-    path = get_path(interp, lib, &handle, wo_ext, ext);
+    if (!PMC_IS_NULL(parameters)) {
+        flags = VTABLE_get_integer(interp, parameters);
+    }
+
+    path = get_path(interp, lib, (Parrot_dlopen_flags)flags, &handle, wo_ext, ext);
     if (!path || !handle) {
         /*
          * XXX Parrot_ex_throw_from_c_args? return PMCNULL?
@@ -682,10 +695,6 @@
 
 F<include/parrot/dynext.h> and F<src/pmc/parrotlibrary.pmc>.
 
-=head1 HISTORY
-
-Initial rev by leo 2003.08.06.
-
 =cut
 
 */

Modified: branches/ops_pct/src/dynoplibs/Defines.in
==============================================================================
--- branches/ops_pct/src/dynoplibs/Defines.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynoplibs/Defines.in	Wed May  5 08:45:29 2010	(r46302)
@@ -1,12 +1,6 @@
 DYNOPLIBS_TARGETS = \
-#IF(cg_flag):    $(DYNEXT_DIR)/obscure_ops_cg$(LOAD_EXT) \
-#IF(cg_flag):    $(DYNEXT_DIR)/obscure_ops_cgp$(LOAD_EXT) \
     $(DYNEXT_DIR)/obscure_ops$(LOAD_EXT) \
-    $(DYNEXT_DIR)/obscure_ops_switch$(LOAD_EXT) \
-#IF(cg_flag):    $(DYNEXT_DIR)/math_ops_cg$(LOAD_EXT) \
-#IF(cg_flag):    $(DYNEXT_DIR)/math_ops_cgp$(LOAD_EXT) \
     $(DYNEXT_DIR)/math_ops$(LOAD_EXT) \
-    $(DYNEXT_DIR)/math_ops_switch$(LOAD_EXT)
 
 DYNOPLIBS_CLEANUPS = \
     src/dynoplibs/*.c \

Modified: branches/ops_pct/src/dynoplibs/Rules.in
==============================================================================
--- branches/ops_pct/src/dynoplibs/Rules.in	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynoplibs/Rules.in	Wed May  5 08:45:29 2010	(r46302)
@@ -14,42 +14,6 @@
 src/dynoplibs/obscure_ops.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/obscure.ops
 
-$(DYNEXT_DIR)/obscure_ops_switch$(LOAD_EXT): src/dynoplibs/obscure_ops_switch$(O) $(LIBPARROT)
-	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops_switch$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):	$(CHMOD) 0775 $@
-
-src/dynoplibs/obscure_ops_switch$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_switch.c $(PARROT_H_HEADERS)
-
-src/dynoplibs/obscure_ops_switch.h: src/dynoplibs/obscure_ops_switch.c
-
-src/dynoplibs/obscure_ops_switch.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --dynamic src/dynoplibs/obscure.ops
-
-$(DYNEXT_DIR)/obscure_ops_cg$(LOAD_EXT): src/dynoplibs/obscure_ops_cg$(O) $(LIBPARROT)
-	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops_cg$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):	$(CHMOD) 0775 $@
-
-src/dynoplibs/obscure_ops_cg$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_cg.c $(PARROT_H_HEADERS)
-
-src/dynoplibs/obscure_ops_cg.h: src/dynoplibs/obscure_ops_cg.c
-
-src/dynoplibs/obscure_ops_cg.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --dynamic src/dynoplibs/obscure.ops
-
-$(DYNEXT_DIR)/obscure_ops_cgp$(LOAD_EXT): src/dynoplibs/obscure_ops_cgp$(O) $(LIBPARROT)
-	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops_cgp$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):	$(CHMOD) 0775 $@
-
-src/dynoplibs/obscure_ops_cgp$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_cgp.c $(PARROT_H_HEADERS)
-
-src/dynoplibs/obscure_ops_cgp.h: src/dynoplibs/obscure_ops_cgp.c
-
-src/dynoplibs/obscure_ops_cgp.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --dynamic src/dynoplibs/obscure.ops
-
 $(DYNEXT_DIR)/math_ops$(LOAD_EXT): src/dynoplibs/math_ops$(O) $(LIBPARROT)
 	$(LD) @ld_out@$@ src/dynoplibs/math_ops$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -62,38 +26,3 @@
 
 src/dynoplibs/math_ops.h: src/dynoplibs/math_ops.c
 
-$(DYNEXT_DIR)/math_ops_switch$(LOAD_EXT): src/dynoplibs/math_ops_switch$(O) $(LIBPARROT)
-	$(LD) @ld_out@$@ src/dynoplibs/math_ops_switch$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):	$(CHMOD) 0775 $@
-
-src/dynoplibs/math_ops_switch$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_switch.c $(PARROT_H_HEADERS)
-
-src/dynoplibs/math_ops_switch.h: src/dynoplibs/math_ops_switch.c
-
-src/dynoplibs/math_ops_switch.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --dynamic src/dynoplibs/math.ops
-
-$(DYNEXT_DIR)/math_ops_cg$(LOAD_EXT): src/dynoplibs/math_ops_cg$(O) $(LIBPARROT)
-	$(LD) @ld_out@$@ src/dynoplibs/math_ops_cg$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):	$(CHMOD) 0775 $@
-
-src/dynoplibs/math_ops_cg$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_cg.c $(PARROT_H_HEADERS)
-
-src/dynoplibs/math_ops_cg.h: src/dynoplibs/math_ops_cg.c
-
-src/dynoplibs/math_ops_cg.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --dynamic src/dynoplibs/math.ops
-
-$(DYNEXT_DIR)/math_ops_cgp$(LOAD_EXT): src/dynoplibs/math_ops_cgp$(O) $(LIBPARROT)
-	$(LD) @ld_out@$@ src/dynoplibs/math_ops_cgp$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):	$(CHMOD) 0775 $@
-
-src/dynoplibs/math_ops_cgp$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_cgp.c $(PARROT_H_HEADERS)
-
-src/dynoplibs/math_ops_cgp.h: src/dynoplibs/math_ops_cgp.c
-
-src/dynoplibs/math_ops_cgp.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --dynamic src/dynoplibs/math.ops

Copied: branches/ops_pct/src/dynpmc/Defines.in (from r46301, trunk/src/dynpmc/Defines.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/dynpmc/Defines.in	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/dynpmc/Defines.in)
@@ -0,0 +1,103 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+DYNPMC_TARGETS = \
+#IF(has_zlib):    $(DYNEXT_DIR)/gziphandle$(LOAD_EXT) \
+    $(DYNEXT_DIR)/dynlexpad$(LOAD_EXT) \
+    $(DYNEXT_DIR)/file$(LOAD_EXT) \
+    $(DYNEXT_DIR)/foo_group$(LOAD_EXT) \
+    $(DYNEXT_DIR)/os$(LOAD_EXT) \
+    $(DYNEXT_DIR)/pccmethod_test$(LOAD_EXT) \
+    $(DYNEXT_DIR)/rotest$(LOAD_EXT) \
+    $(DYNEXT_DIR)/rational$(LOAD_EXT) \
+    $(DYNEXT_DIR)/subproxy$(LOAD_EXT)
+
+DYNPMC_FOO = \
+    src/dynpmc/foo.pmc \
+    src/dynpmc/foo2.pmc
+
+DYNPMC_FOO_OBJS = \
+    src/dynpmc/foo$(O) \
+    src/dynpmc/foo2$(O)
+
+DYNPMC_H_FILES = \
+    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 \
+    include/parrot/core_pmcs.h \
+    include/parrot/core_types.h \
+    include/parrot/datatypes.h \
+    include/parrot/debugger.h \
+    include/parrot/dynext.h \
+    include/parrot/encoding.h \
+    include/parrot/enums.h \
+    include/parrot/exceptions.h \
+    include/parrot/exit.h \
+    include/parrot/extend.h \
+    include/parrot/extend_vtable.h \
+    include/parrot/feature.h \
+    include/parrot/gc_api.h \
+    include/parrot/global.h \
+    include/parrot/global_setup.h \
+    include/parrot/has_header.h \
+    include/parrot/hash.h \
+    include/parrot/hll.h \
+    include/parrot/interpreter.h \
+    include/parrot/io.h \
+    include/parrot/key.h \
+    include/parrot/library.h \
+    include/parrot/longopt.h \
+    include/parrot/memory.h \
+    include/parrot/misc.h \
+    include/parrot/multidispatch.h \
+    include/parrot/nci.h \
+    include/parrot/oo.h \
+    include/parrot/op.h \
+    include/parrot/oplib.h \
+    include/parrot/packfile.h \
+    include/parrot/parrot.h \
+    include/parrot/pbcversion.h \
+    include/parrot/platform.h \
+    include/parrot/platform_interface.h \
+    include/parrot/platform_limits.h \
+    include/parrot/pmc.h \
+    include/parrot/pmc_freeze.h \
+    include/parrot/pobj.h \
+    include/parrot/scheduler.h \
+    include/parrot/settings.h \
+    include/parrot/stat.h \
+    include/parrot/string.h \
+    include/parrot/string_funcs.h \
+    include/parrot/string_primitives.h \
+    include/parrot/sub.h \
+    include/parrot/thread.h \
+    include/parrot/vtable.h \
+    include/parrot/vtables.h \
+    include/parrot/warnings.h \
+    include/pmc/pmc_callcontext.h \
+    include/pmc/pmc_continuation.h \
+    include/pmc/pmc_default.h
+
+#IF(win32 and cc==gcc):LIB_ZLIB = -lz
+#ELSIF(win32):LIB_ZLIB = zlib.lib
+#ELSE:LIB_ZLIB = -lz
+
+DYNPMC_CLEANUPS = \
+    $(DYNPMC_TARGETS) \
+    $(DYNPMC_FOO_OBJS) \
+    src/dynpmc/*.dump \
+    src/dynpmc/pmc_*.h \
+    src/dynpmc/*_group.h \
+    src/dynpmc/*.c \
+#IF(o):    src/dynpmc/*$(O) \
+#IF(win32):    src/dynpmc/*.lib" \
+#IF(win32):    src/dynpmc/*.pdb" \
+#IF(win32):    src/dynpmc/*.ilk" \
+#IF(win32):    src/dynpmc/*.exp" \
+#IF(win32):    src/dynpmc/*.def" \
+#IF(win32):    src/dynpmc/*.manifest" \
+#IF(load_ext):    src/dynpmc/*@load_ext@

Copied: branches/ops_pct/src/dynpmc/Rules.in (from r46301, trunk/src/dynpmc/Rules.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/dynpmc/Rules.in	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/dynpmc/Rules.in)
@@ -0,0 +1,149 @@
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+$(DYNEXT_DIR)/dynlexpad$(LOAD_EXT): src/dynpmc/dynlexpad$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/dynlexpad$(LOAD_EXT) src/dynpmc/dynlexpad$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/dynlexpad$(O): src/dynpmc/dynlexpad.c $(DYNPMC_H_FILES)
+
+src/dynpmc/dynlexpad.c: src/dynpmc/dynlexpad.dump
+	$(PMC2CC) src/dynpmc/dynlexpad.pmc
+
+src/dynpmc/dynlexpad.dump: src/dynpmc/dynlexpad.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/dynlexpad.pmc
+
+
+
+$(DYNEXT_DIR)/file$(LOAD_EXT): src/dynpmc/file$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/file$(LOAD_EXT) src/dynpmc/file$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/file$(O): src/dynpmc/file.c $(DYNPMC_H_FILES)
+
+src/dynpmc/file.c: src/dynpmc/file.dump
+	$(PMC2CC) src/dynpmc/file.pmc
+
+src/dynpmc/file.dump: src/dynpmc/file.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/file.pmc
+
+
+
+$(DYNEXT_DIR)/foo_group$(LOAD_EXT): $(DYNPMC_FOO_OBJS) src/dynpmc/foo_group$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/foo_group$(LOAD_EXT) src/dynpmc/foo_group$(O) $(DYNPMC_FOO_OBJS) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/foo_group$(O): src/dynpmc/foo.c src/dynpmc/foo2.c $(DYNPMC_H_FILES)
+
+src/dynpmc/foo_group.c: $(DYNPMC_FOO_OBJS)
+	$(PMC2C) --library foo_group --c $(DYNPMC_FOO)
+	$(MV) foo_group.c src/dynpmc/foo_group.c
+	$(MV) foo_group.h src/dynpmc/foo_group.h
+
+src/dynpmc/foo$(O): src/dynpmc/foo.c $(DYNPMC_H_FILES)
+
+src/dynpmc/foo.c: src/dynpmc/foo.dump
+	$(PMC2CC) src/dynpmc/foo.pmc
+
+src/dynpmc/foo.dump: src/dynpmc/foo.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/foo.pmc
+
+src/dynpmc/foo2$(O): src/dynpmc/foo2.c $(DYNPMC_H_FILES)
+
+src/dynpmc/foo2.c: src/dynpmc/foo2.dump src/dynpmc/foo.pmc
+	$(PMC2CC) src/dynpmc/foo2.pmc
+
+src/dynpmc/foo2.dump: src/dynpmc/foo2.pmc src/dynpmc/foo.dump vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/foo2.pmc
+
+
+
+$(DYNEXT_DIR)/gziphandle$(LOAD_EXT): src/dynpmc/gziphandle$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/gziphandle$(LOAD_EXT) src/dynpmc/gziphandle$(O) $(LINKARGS) $(LIB_ZLIB)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/gziphandle$(O): src/dynpmc/gziphandle.c $(DYNPMC_H_FILES)
+
+src/dynpmc/gziphandle.c: src/dynpmc/gziphandle.dump
+	$(PMC2CC) src/dynpmc/gziphandle.pmc
+
+src/dynpmc/gziphandle.dump: src/dynpmc/gziphandle.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/gziphandle.pmc
+
+
+
+$(DYNEXT_DIR)/os$(LOAD_EXT): src/dynpmc/os$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/os$(LOAD_EXT) src/dynpmc/os$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/os$(O): src/dynpmc/os.c $(DYNPMC_H_FILES)
+
+src/dynpmc/os.c: src/dynpmc/os.dump
+	$(PMC2CC) src/dynpmc/os.pmc
+
+src/dynpmc/os.dump: src/dynpmc/os.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/os.pmc
+
+
+
+$(DYNEXT_DIR)/pccmethod_test$(LOAD_EXT): src/dynpmc/pccmethod_test$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/pccmethod_test$(LOAD_EXT) src/dynpmc/pccmethod_test$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+
+src/dynpmc/pccmethod_test$(O): src/dynpmc/pccmethod_test.c $(DYNPMC_H_FILES)
+
+src/dynpmc/pccmethod_test.c: src/dynpmc/pccmethod_test.dump
+	$(PMC2CC) src/dynpmc/pccmethod_test.pmc
+
+src/dynpmc/pccmethod_test.dump: src/dynpmc/pccmethod_test.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/pccmethod_test.pmc
+
+
+
+$(DYNEXT_DIR)/rotest$(LOAD_EXT): src/dynpmc/rotest$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/rotest$(LOAD_EXT) src/dynpmc/rotest$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/rotest$(O): src/dynpmc/rotest.c $(DYNPMC_H_FILES)
+
+src/dynpmc/rotest.c: src/dynpmc/rotest.dump
+	$(PMC2CC) src/dynpmc/rotest.pmc
+
+src/dynpmc/rotest.dump: src/dynpmc/rotest.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/rotest.pmc
+
+
+
+$(DYNEXT_DIR)/rational$(LOAD_EXT): src/dynpmc/rational$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/rational$(LOAD_EXT) src/dynpmc/rational$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/rational$(O): src/dynpmc/rational.c $(DYNPMC_H_FILES)
+
+src/dynpmc/rational.c: src/dynpmc/rational.dump
+	$(PMC2CC) src/dynpmc/rational.pmc
+
+src/dynpmc/rational.dump: src/dynpmc/rational.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/rational.pmc
+
+
+
+$(DYNEXT_DIR)/subproxy$(LOAD_EXT): src/dynpmc/subproxy$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/subproxy$(LOAD_EXT) src/dynpmc/subproxy$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/subproxy$(O): src/dynpmc/subproxy.c $(DYNPMC_H_FILES)
+
+src/dynpmc/subproxy.c: src/dynpmc/subproxy.dump
+	$(PMC2CC) src/dynpmc/subproxy.pmc
+
+src/dynpmc/subproxy.dump: src/dynpmc/subproxy.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/subproxy.pmc

Modified: branches/ops_pct/src/dynpmc/dynlexpad.pmc
==============================================================================
--- branches/ops_pct/src/dynpmc/dynlexpad.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynpmc/dynlexpad.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -24,7 +24,7 @@
     ATTR PMC  *init; /* the PMC used to initialize this DynLexPad */
 
     VTABLE void init() {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "don't create me like this");
     }
 
@@ -44,8 +44,8 @@
         Parrot_DynLexPad_attributes *attrs =
             (Parrot_DynLexPad_attributes *) PMC_data(SELF);
 
-        if (VTABLE_elements(interp, lexinfo)) {
-            attrs->init = Parrot_pmc_new_init(interp, enum_class_LexPad, lexinfo);
+        if (VTABLE_elements(INTERP, lexinfo)) {
+            attrs->init = Parrot_pmc_new_init(INTERP, enum_class_LexPad, lexinfo);
         }
         else
             attrs->init = NULL;
@@ -68,7 +68,7 @@
     VTABLE void set_pointer(void* ctx) {
         PMC *std_pad = PARROT_DYNLEXPAD(SELF)->init;
         if (std_pad)
-            VTABLE_set_pointer(interp, std_pad, ctx);
+            VTABLE_set_pointer(INTERP, std_pad, ctx);
     }
 
 /*
@@ -81,7 +81,7 @@
 
 */
     VTABLE INTVAL elements() {
-        return parrot_hash_size(interp, PARROT_DYNLEXPAD(SELF)->hash);
+        return parrot_hash_size(INTERP, PARROT_DYNLEXPAD(SELF)->hash);
     }
 
 /*
@@ -97,17 +97,17 @@
 */
 
     VTABLE INTVAL exists_keyed(PMC* name) {
-        STRING *s = VTABLE_get_string(interp, name);
+        STRING *s = VTABLE_get_string(INTERP, name);
         return SELF.exists_keyed_str(s);
     }
 
     VTABLE INTVAL exists_keyed_str(STRING* name) {
         PMC *std_pad;
-        if (parrot_hash_exists(interp, PARROT_DYNLEXPAD(SELF)->hash, name))
+        if (parrot_hash_exists(INTERP, PARROT_DYNLEXPAD(SELF)->hash, name))
             return 1;
         std_pad = PARROT_DYNLEXPAD(SELF)->init;
         if (std_pad)
-            return VTABLE_exists_keyed_str(interp, std_pad, name);
+            return VTABLE_exists_keyed_str(INTERP, std_pad, name);
         return 0;
     }
 
@@ -124,14 +124,14 @@
 
 */
     VTABLE PMC* get_pmc_keyed_str(STRING* name) {
-        HashBucket *b = parrot_hash_get_bucket(interp,
+        HashBucket *b = parrot_hash_get_bucket(INTERP,
             PARROT_DYNLEXPAD(SELF)->hash, name);
 
         if (!b) {
             PMC *std_pad = PARROT_DYNLEXPAD(SELF)->init;
 
             if (std_pad)
-                return VTABLE_get_pmc_keyed_str(interp, std_pad, name);
+                return VTABLE_get_pmc_keyed_str(INTERP, std_pad, name);
 
             return PMCNULL;
         }
@@ -140,7 +140,7 @@
     }
 
     VTABLE PMC* get_pmc_keyed(PMC* name) {
-        STRING *s = VTABLE_get_string(interp, name);
+        STRING *s = VTABLE_get_string(INTERP, name);
         return SELF.get_pmc_keyed_str(s);
     }
 
@@ -159,17 +159,17 @@
 */
 
     VTABLE void set_pmc_keyed(PMC* name, PMC* value) {
-        STRING *s = VTABLE_get_string(interp, name);
+        STRING *s = VTABLE_get_string(INTERP, name);
         SELF.set_pmc_keyed_str(s, value);
     }
 
     VTABLE void set_pmc_keyed_str(STRING* name, PMC* value) {
         PMC *std_pad = PARROT_DYNLEXPAD(SELF)->init;
 
-        if (std_pad && VTABLE_exists_keyed_str(interp, std_pad, name))
-            VTABLE_set_pmc_keyed_str(interp, std_pad, name, value);
+        if (std_pad && VTABLE_exists_keyed_str(INTERP, std_pad, name))
+            VTABLE_set_pmc_keyed_str(INTERP, std_pad, name, value);
 
-        parrot_hash_put(interp, PARROT_DYNLEXPAD(SELF)->hash, name, value);
+        parrot_hash_put(INTERP, PARROT_DYNLEXPAD(SELF)->hash, name, value);
     }
 
 /*
@@ -184,7 +184,7 @@
 
     VTABLE void destroy() {
         if (PARROT_DYNLEXPAD(SELF)->hash) {
-            parrot_hash_destroy(interp, PARROT_DYNLEXPAD(SELF)->hash);
+            parrot_hash_destroy(INTERP, PARROT_DYNLEXPAD(SELF)->hash);
             PARROT_DYNLEXPAD(SELF)->hash = NULL;
         }
     }
@@ -202,7 +202,7 @@
         PMC *std_pad = PARROT_DYNLEXPAD(SELF)->init;
         Parrot_gc_mark_PMC_alive(INTERP, std_pad);
         if (PARROT_DYNLEXPAD(SELF)->hash)
-            parrot_mark_hash(interp, PARROT_DYNLEXPAD(SELF)->hash);
+            parrot_mark_hash(INTERP, PARROT_DYNLEXPAD(SELF)->hash);
     }
 
 

Copied: branches/ops_pct/src/dynpmc/file.pmc (from r46301, trunk/src/dynpmc/file.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/dynpmc/file.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/dynpmc/file.pmc)
@@ -0,0 +1,287 @@
+/*
+Copyright (C) 2001-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/file.pmc - File PMC
+
+=head1 DESCRIPTION
+
+C<File> is a singleton class which provides access to File functions.
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+#ifdef WIN32
+#  include <direct.h>
+#endif
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+/* TT #1050 apparently, strerror_r is thread-safe and should be used instead.*/
+
+static PMC *File_PMC;
+pmclass File dynpmc singleton {
+
+/*
+
+=item C<void *get_pointer()>
+
+=item C<void set_pointer(void *ptr)>
+
+These two functions are part of the singleton creation interface. For more
+information see F<src/pmc.c>.
+
+=cut
+
+*/
+    void class_init() {
+        File_PMC = NULL;
+    }
+
+    VTABLE void *get_pointer() {
+        return File_PMC;
+    }
+
+    VTABLE void set_pointer(void *ptr) {
+        File_PMC = (PMC *)ptr;
+    }
+
+/*
+
+=item C<INTVAL exists(STRING *file)>
+
+Returns a true value (1) if the supplied file or directory exists.
+
+=cut
+
+*/
+
+    METHOD exists(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef WIN32
+        const int error = stat(cpath, &info);
+#else
+        const int error = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error)
+            RETURN(INTVAL 0);
+
+        RETURN(INTVAL 1);
+    }
+
+/*
+
+=item C<INTVAL is_dir(STRING *path)>
+
+Returns a true value (1) if the supplied path is a directory.
+
+=cut
+
+*/
+
+    METHOD is_dir(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef WIN32
+        const int error = stat(cpath, &info);
+#else
+        const int error = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISDIR(info.st_mode))
+            RETURN(INTVAL 1);
+        else
+            RETURN(INTVAL 0);
+    }
+
+/*
+
+=item C<INTVAL is_file(STRING *path)>
+
+Returns a true value (1) if the supplied path is a plain file.
+
+=cut
+
+*/
+
+    METHOD is_file(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef WIN32
+        int error   = stat(cpath, &info);
+#else
+        int error   = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISREG(info.st_mode))
+            RETURN(INTVAL 1);
+        else
+            RETURN(INTVAL 0);
+    }
+
+/*
+
+=item C<INTVAL is_link(STRING *path)>
+
+Returns a true value (1) if the supplied path is a link.
+
+=cut
+
+*/
+
+    METHOD is_link(STRING *path) {
+#ifdef WIN32
+        /* I love win32 implementations */
+        RETURN(INTVAL 0);
+#else
+        struct stat info;
+
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        const int    error = lstat(cpath, &info);
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISLNK(info.st_mode))
+            RETURN(INTVAL 1);
+        else
+            RETURN(INTVAL 0);
+#endif
+    }
+
+/*
+
+=item C<void copy(STRING *from, STRING *to)>
+
+Copy the contents from file represented by path C<from> to the path
+C<to>.
+
+Uses the "work everywhere method". It is good enough to start with.
+
+NOTE: I'm sure that there should be more efficient ways to do this. Be
+free to change or give me hints on how to change it. -- ambs
+
+=cut
+
+*/
+
+    METHOD copy(STRING *from, STRING *to) {
+#define CHUNK_SIZE 1024
+
+        char * const cfrom  = Parrot_str_to_cstring(INTERP, from);
+        FILE * const source = fopen(cfrom, "rb");
+
+        Parrot_str_free_cstring(cfrom);
+
+        if (source) {
+            char * const cto    = Parrot_str_to_cstring(INTERP, to);
+            FILE * const target = fopen(cto, "w+b");
+
+            Parrot_str_free_cstring(cto);
+
+            if (target) {
+                while (!feof(source)) {
+                    char buf[CHUNK_SIZE];
+                    const size_t bytes_read = fread(buf, 1, CHUNK_SIZE, source);
+
+                    if (bytes_read) {
+                        const size_t bytes_written = fwrite(buf, 1, bytes_read, target);
+                        if (bytes_read != bytes_written) {
+                            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                                EXCEPTION_EXTERNAL_ERROR, "Error writing file");
+                            break;
+                        }
+                    }
+                }
+                fclose(target);
+            }
+            else {
+                const char * const errmsg = strerror(errno);
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                    errmsg);
+            }
+            fclose(source);
+        }
+        else {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+#undef CHUNK_SIZE
+    }
+
+/*
+
+=item C<void rename(STRING *from, STRING *to)>
+
+Rename a file C<from> to the path C<to>.
+
+=cut
+
+*/
+
+    METHOD rename(STRING *from, STRING *to) {
+        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
+        char * const   cto = Parrot_str_to_cstring(INTERP, to);
+        const int    error = rename(cfrom, cto);
+
+        Parrot_str_free_cstring(cfrom);
+        Parrot_str_free_cstring(cto);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+}
+
+/*
+
+=back
+
+=head1 SEE ALS0
+
+   stat(2), rename(2)
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/src/dynpmc/foo.pmc
==============================================================================
--- branches/ops_pct/src/dynpmc/foo.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynpmc/foo.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -16,15 +16,15 @@
 
     MULTI PMC* subtract(Integer value, PMC *dest) {
         if (!dest)
-            dest = Parrot_pmc_new(interp, SELF->vtable->base_type);
-        VTABLE_set_integer_native(interp, dest, 144);
+            dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        VTABLE_set_integer_native(INTERP, dest, 144);
         return dest;
     }
 
     MULTI PMC* subtract(DEFAULT value, PMC *dest) {
         if (!dest)
-            dest = Parrot_pmc_new(interp, SELF->vtable->base_type);
-        VTABLE_set_integer_native(interp, dest, 244);
+            dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        VTABLE_set_integer_native(INTERP, dest, 244);
         return dest;
     }
 }

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

Copied: branches/ops_pct/src/dynpmc/gziphandle.pmc (from r46301, trunk/src/dynpmc/gziphandle.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/dynpmc/gziphandle.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/dynpmc/gziphandle.pmc)
@@ -0,0 +1,314 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/dynpmc/gziphandle.pmc - GzipHandle PMC
+
+=head1 DESCRIPTION
+
+The GzipHandle PMC performs I/O operations on a source or destination file.
+
+This PMC wraps the zlib.
+
+=head2 Vtable Functions
+
+=over 4
+
+=cut
+
+*/
+
+#include <zlib.h>
+#include "parrot/extend.h"
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+pmclass GzipHandle provides Handle dynpmc auto_attrs {
+    ATTR void *file;
+
+/*
+
+=item C<void init()>
+
+Initializes a newly created FileHandle object.
+
+=cut
+
+*/
+    VTABLE void init() {
+        PARROT_GZIPHANDLE(SELF)->file = NULL;
+    }
+
+/*
+
+=item C<INTVAL get_bool()>
+
+Returns whether the GzipHandle has reached the end of the file.
+
+=cut
+
+*/
+    VTABLE INTVAL get_bool() {
+        gzFile file;
+        GET_ATTR_file(INTERP, SELF, file);
+        return !gzeof(file);
+    }
+
+/*
+
+=back
+
+=head2 Stream-Oriented Methods
+
+=over 4
+
+=item C<METHOD open(STRING *filename, STRING *mode :optional)>
+
+Opens the file at the given filename (including path) with the given mode. The
+invocant is modified and becomes an open filehandle.
+
+=cut
+
+*/
+    METHOD open(STRING *filename, STRING *mode :optional,
+                               INTVAL has_mode :opt_flag) {
+        char * const path  = Parrot_str_to_cstring(INTERP, filename);
+        gzFile file;
+
+        if (has_mode) {
+            char * const mod = Parrot_str_to_cstring(INTERP, mode);
+            file      = gzopen(path, mod);
+            Parrot_str_free_cstring(mod);
+        }
+        else
+            file = gzopen(path, "rb");
+
+        Parrot_str_free_cstring(path);
+
+        if (!file)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,
+                "gzopen fails");
+
+        SET_ATTR_file(INTERP, SELF, file);
+        RETURN(PMC SELF);
+    }
+
+/*
+
+=item C<METHOD close()>
+
+Close the gziphandle.
+
+=cut
+
+*/
+    METHOD close() {
+        INTVAL status;
+        gzFile file;
+        GET_ATTR_file(INTERP, SELF, file);
+        status = gzclose(file);
+        RETURN(INTVAL status);
+    }
+
+/*
+
+=item C<METHOD eof()>
+
+Returns true if the filehandle is at end-of-file, returns false otherwise.
+
+=cut
+
+*/
+    METHOD eof() {
+        INTVAL status;
+        gzFile file;
+        GET_ATTR_file(INTERP, SELF, file);
+        status = gzeof(file);
+        RETURN(INTVAL status);
+    }
+
+/*
+
+=item C<METHOD flush()>
+
+Flushes the gziphandle.
+
+=cut
+
+*/
+    METHOD flush() {
+        INTVAL status;
+        gzFile file;
+        GET_ATTR_file(INTERP, SELF, file);
+        status = gzflush(file, Z_SYNC_FLUSH);
+        RETURN(INTVAL status);
+    }
+
+/*
+
+=item C<METHOD print([INTVAL|FLOATVAL|STRING *|PMC*] value)>
+
+Print the passed in integer, number, string, or PMC to the gziphandle.
+(Integers, numbers, and strings are auto-boxed as PMCs.)
+
+=cut
+
+*/
+    METHOD print(PMC *value) {
+        gzFile file;
+        STRING * const str = VTABLE_get_string(INTERP, value);
+        char   * const buf = Parrot_str_to_cstring(INTERP, str);
+        const UINTVAL  len =  Parrot_str_byte_length(INTERP, str);
+
+        GET_ATTR_file(INTERP, SELF, file);
+        (void)gzwrite(file, buf, len);
+        Parrot_str_free_cstring(buf);
+    }
+
+
+/*
+
+=item C<METHOD puts(STRING *value)>
+
+Print the string to the gziphandle.
+
+=cut
+
+*/
+    METHOD puts(STRING *value) {
+        INTVAL status;
+        gzFile file;
+        char * const  buf = Parrot_str_to_cstring(INTERP, value);
+        const UINTVAL len =  Parrot_str_byte_length(INTERP, value);
+
+        GET_ATTR_file(INTERP, SELF, file);
+        status =  gzwrite(file, buf, len);
+        Parrot_str_free_cstring(buf);
+        RETURN(INTVAL status);
+    }
+
+/*
+
+=item C<METHOD read(INTVAL bytes)>
+
+Read the given number of bytes from the gziphandle and return them in a string.
+
+=cut
+
+*/
+    METHOD read(INTVAL length) {
+        int result;
+        gzFile file;
+        STRING *str = STRINGNULL;
+        char * const buf = mem_allocate_n_zeroed_typed(length, char);
+        GET_ATTR_file(INTERP, SELF, file);
+        result = gzread(file, buf, length);
+        if (result > 0) {
+            str = Parrot_str_new(INTERP, buf, result);
+        }
+        mem_sys_free(buf);
+        RETURN(STRING *str);
+    }
+
+/*
+
+=item C<METHOD is_tty()>
+
+GzipHandles are never tty's, returns false.
+
+=cut
+
+*/
+    METHOD is_tty() {
+        RETURN(INTVAL 0);
+    }
+
+/*
+
+=back
+
+=head2 Basic Methods
+
+=over 4
+
+=item C<METHOD version()>
+
+Returns a string with the zlib version.
+
+*/
+    METHOD version() {
+        STRING *version = Parrot_str_new_constant(INTERP, zlibVersion());
+        RETURN(STRING *version);
+    }
+
+    METHOD compress(STRING *str) {
+        int rc;
+        char *buf;
+        STRING *dst = NULL;
+        UINTVAL srcLen, bufSize, dstLen;
+        char * const src = Parrot_str_to_cstring(INTERP, str);
+
+        if (!src)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,
+                "failed to allocate");
+
+        srcLen  = Parrot_str_byte_length(INTERP, str);
+        bufSize = 12 + srcLen + srcLen / 1000;
+        buf     = mem_allocate_n_zeroed_typed(bufSize, char);
+
+        if (!buf) {
+            Parrot_str_free_cstring(src);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,
+                "failed to allocate");
+        }
+
+        rc = compress((Bytef *)buf, &dstLen, (const Bytef *)src, srcLen);
+        Parrot_str_free_cstring(src);
+
+        switch (rc) {
+          case Z_OK:
+            dst = Parrot_str_new(INTERP, buf, dstLen);
+            mem_sys_free(buf);
+            break;
+
+          case Z_MEM_ERROR:
+            mem_sys_free(buf);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,
+                "not enough memory");
+            break;
+
+          case Z_BUF_ERROR:
+            mem_sys_free(buf);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,
+                "output buffer error");
+            break;
+
+          default:
+            /* these are the only three documented return values */
+            break;
+        }
+
+        RETURN(STRING *dst);
+    }
+
+/*
+
+=back
+
+=cut
+
+*/
+
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+

Copied: branches/ops_pct/src/dynpmc/os.pmc (from r46301, trunk/src/dynpmc/os.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/dynpmc/os.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/dynpmc/os.pmc)
@@ -0,0 +1,610 @@
+/*
+Copyright (C) 2001-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/os.pmc - Files and Directories PMC
+
+=head1 DESCRIPTION
+
+C<OS> is a singleton class which provides access to the filesystem
+files and directories.
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+#if defined(_MSC_VER)
+#  include <direct.h>
+#  include <io.h>
+#  include <tchar.h>
+#  include <windows.h>
+#elif defined(__BORLANDC__)
+#  include <dir.h>
+#  include <dirent.h>
+#else
+#  include <dirent.h>
+#endif
+
+/* XXX Check if we need to deallocate strerror strings */
+/* XXX apparently, strerror_r is thread-safe and should be used instead.*/
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+static PMC *OS_PMC;
+pmclass OS dynpmc singleton {
+
+/*
+
+=item C<void *get_pointer()>
+
+=item C<void set_pointer(void *ptr)>
+
+These two functions are part of the singleton creation interface. For more
+information see F<src/pmc.c>.
+
+=cut
+
+*/
+
+    void class_init() {
+        OS_PMC = NULL;
+    }
+
+    VTABLE void *get_pointer() {
+        return OS_PMC;
+    }
+
+    VTABLE void set_pointer(void *ptr) {
+        OS_PMC = (PMC *)ptr;
+    }
+
+
+/*
+
+=item C<STRING *cwd()>
+
+Returns the current working directory.
+
+=cut
+
+*/
+
+    METHOD cwd() {
+        char *cwd;
+#ifdef _MSC_VER
+        cwd = _getcwd(NULL, 0);
+        /* capitalize the drive letter */
+        cwd[0] = (char)toupper((unsigned char)cwd[0]);
+#else
+#  ifdef PATH_MAX
+        cwd = getcwd(NULL, PATH_MAX+1);
+#  else
+        cwd = getcwd(NULL, 0);
+#  endif
+#endif
+        if (cwd) {
+            STRING * const scwd = Parrot_str_new(INTERP, cwd, strlen(cwd));
+            free(cwd);
+            RETURN(STRING *scwd);
+        }
+        else {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+/*
+
+=item C<void chdir(STRING *path)>
+
+Changes the current working directory to the one specified by C<path>.
+
+=cut
+
+*/
+
+    METHOD chdir(STRING *path) {
+        int error;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef _MSC_VER
+        error = _chdir(cpath);
+#else
+        error = chdir(cpath);
+#endif
+        Parrot_str_free_cstring(cpath);
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+/*
+
+=item C<void rm(STRING *path)>
+
+Calls C<remove> to remove the file or empty directory specified by
+C<path>.
+
+=cut
+
+*/
+
+    METHOD rm(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        int          error = stat(cpath, &info);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_str_free_cstring(cpath);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISDIR(info.st_mode)) {
+#ifdef _MSC_VER
+            error = _rmdir(cpath);
+#else
+            error = rmdir(cpath);
+#endif
+            Parrot_str_free_cstring(cpath);
+            if (error) {
+                const char * const errmsg = strerror(errno);
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                    errmsg);
+            }
+        }
+        else {
+            error = remove(cpath);
+            Parrot_str_free_cstring(cpath);
+            if (error) {
+                const char * const errmsg = strerror(errno);
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                    errmsg);
+            }
+        }
+    }
+
+/*
+
+=item C<void mkdir(STRING *path, STRING *mode)>
+
+Creates a directory specified by C<path> with mode C<mode>.
+
+=cut
+
+*/
+
+    METHOD mkdir(STRING *path, INTVAL mode) {
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        /* should we validate mode? */
+#ifdef WIN32
+        const int error = _mkdir(cpath);
+#else
+        const int error = mkdir(cpath, (mode_t)mode);
+#endif
+        Parrot_str_free_cstring(cpath);
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+/*
+
+=item C<fixedpmcarray *stat(STRING *path)>
+
+Stats a file, and returns a 13 position array as in Perl:
+
+     0 dev      device number of filesystem
+     1 ino      inode number
+     2 mode     file mode  (type and permissions)
+     3 nlink    number of (hard) links to the file
+     4 uid      numeric user ID of file's owner
+     5 gid      numeric group ID of file's owner
+     6 rdev     the device identifier (special files only)
+     7 size     total size of file, in bytes
+     8 atime    last access time in seconds since the epoch
+     9 mtime    last modify time in seconds since the epoch
+    10 ctime    inode change time in seconds since the epoch (*)
+    11 blksize  preferred block size for file system I/O
+    12 blocks   actual number of blocks allocated
+
+11 and 12 are not available under Windows.
+
+=cut
+
+TT #849:  Provide a mechanism for setting 'mtime' and 'atime':
+https://trac.parrot.org/parrot/ticket/849
+
+*/
+
+    METHOD stat(STRING *path) {
+        struct stat   info;
+        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
+        const int     error = stat(cpath, &info);
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+        else {
+            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+            VTABLE_set_integer_native(INTERP, array, 13);
+
+            VTABLE_set_integer_keyed_int(INTERP, array,  0,
+                    (INTVAL)info.st_dev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  1,
+                    (INTVAL)info.st_ino);
+            VTABLE_set_integer_keyed_int(INTERP, array,  2,
+                    (INTVAL)info.st_mode);
+            VTABLE_set_integer_keyed_int(INTERP, array,  3,
+                    (INTVAL)info.st_nlink);
+            VTABLE_set_integer_keyed_int(INTERP, array,  4,
+                    (INTVAL)info.st_uid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  5,
+                    (INTVAL)info.st_gid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  6,
+                    (INTVAL)info.st_rdev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  7,
+                    (INTVAL)info.st_size);
+            VTABLE_set_integer_keyed_int(INTERP, array,  8,
+                    (INTVAL)info.st_atime);
+            VTABLE_set_integer_keyed_int(INTERP, array,  9,
+                    (INTVAL)info.st_mtime);
+            VTABLE_set_integer_keyed_int(INTERP, array, 10,
+                    (INTVAL)info.st_ctime);
+#ifndef WIN32
+            VTABLE_set_integer_keyed_int(INTERP, array, 11,
+                    (INTVAL)info.st_blksize);
+            VTABLE_set_integer_keyed_int(INTERP, array, 12,
+                    (INTVAL)info.st_blocks);
+#endif
+            RETURN(PMC *array);
+        }
+    }
+
+/*
+
+=item C<fixedpmcarray *lstat(STRING *path)>
+
+Stats a file, and returns a 13 position array as in Perl:
+
+     0 dev      device number of filesystem
+     1 ino      inode number
+     2 mode     file mode  (type and permissions)
+     3 nlink    number of (hard) links to the file
+     4 uid      numeric user ID of file's owner
+     5 gid      numeric group ID of file's owner
+     6 rdev     the device identifier (special files only)
+     7 size     total size of file, in bytes
+     8 atime    last access time in seconds since the epoch
+     9 mtime    last modify time in seconds since the epoch
+    10 ctime    inode change time in seconds since the epoch (*)
+    11 blksize  preferred block size for file system I/O
+    12 blocks   actual number of blocks allocated
+
+11 and 12 are not available under Windows.
+
+=cut
+
+*/
+
+    METHOD lstat(STRING *path) {
+        struct stat info;
+
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef WIN32
+        const int error = stat(cpath, &info);
+#else
+        const int error = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+        else {
+            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+            VTABLE_set_integer_native(INTERP, array, 13);
+
+            VTABLE_set_integer_keyed_int(INTERP, array,  0,
+                    (INTVAL)info.st_dev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  1,
+                    (INTVAL)info.st_ino);
+            VTABLE_set_integer_keyed_int(INTERP, array,  2,
+                    (INTVAL)info.st_mode);
+            VTABLE_set_integer_keyed_int(INTERP, array,  3,
+                    (INTVAL)info.st_nlink);
+            VTABLE_set_integer_keyed_int(INTERP, array,  4,
+                    (INTVAL)info.st_uid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  5,
+                    (INTVAL)info.st_gid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  6,
+                    (INTVAL)info.st_rdev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  7,
+                    (INTVAL)info.st_size);
+            VTABLE_set_integer_keyed_int(INTERP, array,  8,
+                    (INTVAL)info.st_atime);
+            VTABLE_set_integer_keyed_int(INTERP, array,  9,
+                    (INTVAL)info.st_mtime);
+            VTABLE_set_integer_keyed_int(INTERP, array, 10,
+                    (INTVAL)info.st_ctime);
+#ifndef WIN32
+            VTABLE_set_integer_keyed_int(INTERP, array, 11,
+                    (INTVAL)info.st_blksize);
+            VTABLE_set_integer_keyed_int(INTERP, array, 12,
+                    (INTVAL)info.st_blocks);
+#endif
+            RETURN(PMC *array);
+        }
+    }
+
+/*
+
+=item C<void symlink(STRING *from, STRING *to)>
+
+Creates a symlink, where available
+
+=cut
+
+*/
+
+    METHOD symlink(STRING *from, STRING *to) {
+#ifndef WIN32
+        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
+        char * const cto   = Parrot_str_to_cstring(INTERP, to);
+        const int error    = symlink(cfrom, cto);
+
+        Parrot_str_free_cstring(cfrom);
+        Parrot_str_free_cstring(cto);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
+                "Win32 does not support symlinks!");
+#endif
+    }
+
+/*
+
+=item C<void link(STRING *from, STRING *to)>
+
+Creates a hard link, where available(?)
+
+=cut
+
+*/
+
+    METHOD link(STRING *from, STRING *to) {
+#ifndef WIN32
+        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
+        char * const cto   = Parrot_str_to_cstring(INTERP, to);
+        const int    error = link(cfrom, cto);
+
+        Parrot_str_free_cstring(cfrom);
+        Parrot_str_free_cstring(cto);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "link() failed for OS PMC: %s\n", errmsg);
+        }
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
+                "Win32 is not POSIX. Need win32 developer!");
+#endif
+    }
+
+/*
+
+=item C<INTVAL umask(INTVAL mask)>
+
+umask sets the process's file mode creation mask (and returns the
+previous one).
+
+=cut
+
+*/
+
+    METHOD umask(INTVAL mask) {
+#ifndef _MSC_VER
+        const INTVAL old = umask((mode_t)mask);
+        RETURN(INTVAL old);
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL,
+            EXCEPTION_UNIMPLEMENTED,
+            "Win32 is not POSIX. Need Win32 developer!");
+#endif
+    }
+
+/*
+
+=item C<INTVAL chroot(STRING *path)>
+
+it makes the named directory the new root directory for all further
+pathnames that begin with a "/" by your process and all its children.
+
+B<NOTE>: perl restricts this operation to superusers. It might be a good
+idea to do the same with parrot.
+
+=cut
+
+*/
+
+    METHOD chroot(STRING *path) {
+#ifndef WIN32
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        const int    error = chroot(cpath);
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
+                "Win32 is not POSIX. Need Win32 developer!");
+#endif
+    }
+
+
+/*
+
+=item C<PMC *readdir(STRING *path)>
+
+reads entries from a directory.
+
+=cut
+
+*/
+    METHOD readdir(STRING *path) {
+        PMC   * array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
+#ifndef _MSC_VER
+        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
+        DIR   * const   dir = opendir(cpath);
+        struct dirent *dirent;
+
+        Parrot_str_free_cstring(cpath);
+
+        if (!dir) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        while ((dirent = readdir(dir)) != NULL) {
+            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP, dirent->d_name, 0));
+        }
+
+        closedir(dir);
+#else
+        WIN32_FIND_DATA file_find_data;
+        char * cpath;
+        HANDLE hFind = INVALID_HANDLE_VALUE;
+
+        /* Add \* to the directory name and start search. */
+        STRING *last_char = Parrot_str_substr(INTERP, path,
+                                              Parrot_str_length(INTERP, path) - 1, 1, NULL, 0);
+        int trailing_slash = Parrot_str_equal(INTERP, last_char, string_from_literal(INTERP, "\\"))
+                             ||
+                             Parrot_str_equal(INTERP, last_char, string_from_literal(INTERP, "/"));
+        cpath = Parrot_str_to_cstring(INTERP, Parrot_str_concat(INTERP,
+                path, string_from_literal(INTERP, trailing_slash ? "*" : "\\*"), 0));
+        hFind = FindFirstFile(cpath, &file_find_data);
+        Parrot_str_free_cstring(cpath);
+        if (hFind == INVALID_HANDLE_VALUE)
+        {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "Unable to readdir");
+        }
+
+        /* Loop over all directories and add to result array. */
+        do
+        {
+            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP,
+                    file_find_data.cFileName, 0));
+        }
+        while (FindNextFile(hFind, &file_find_data) != 0);
+        if (GetLastError() != ERROR_NO_MORE_FILES)
+        {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "Error during readdir");
+        }
+        FindClose(hFind);
+#endif
+        RETURN(PMC *array);
+    }
+/*
+=item C<rename(STRING *oldpath, STRING *newpath)>
+
+This method is a wrapper for rename(2). On error a SystemError exception is
+thrown.
+
+=cut
+
+*/
+    METHOD rename(STRING *oldpath, STRING *newpath) {
+        char * const coldpath = Parrot_str_to_cstring(INTERP, oldpath);
+        char * const cnewpath = Parrot_str_to_cstring(INTERP, newpath);
+        const int    ret      = rename(coldpath, cnewpath);
+
+        Parrot_str_free_cstring(coldpath);
+        Parrot_str_free_cstring(cnewpath);
+
+        if (ret < 0) {
+            const char * const errmsg = strerror(errno) ;
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "%s", errmsg);
+        }
+    }
+
+/*
+
+=item C<chmod(STRING *path, INTVAL mode)>
+
+=cut
+
+*/
+
+    METHOD chmod(STRING *path, INTVAL mode) {
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+
+#ifndef WIN32
+        const int    error = chmod(cpath, mode);
+#else
+        const int    error = _chmod(cpath, mode);
+#endif
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+}
+
+/*
+
+=back
+
+=head1 SEE ALS0
+
+   chdir(2), getcwd(3), unlink(2), mkdir(2), stat(2), lstat(2),
+   symlink(2), link(2), umask(2), chroot(2)
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/src/dynpmc/pccmethod_test.pmc
==============================================================================
--- branches/ops_pct/src/dynpmc/pccmethod_test.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynpmc/pccmethod_test.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,32 +20,32 @@
     METHOD test_method()
     {
         UNUSED(SELF);
-        Parrot_io_printf(interp, "test_method\n");
+        Parrot_io_printf(INTERP, "test_method\n");
     }
 
     METHOD test_method0(int a1)
     {
         UNUSED(SELF);
-        Parrot_io_printf(interp, "test_method0\n");
-        Parrot_io_printf(interp, "%d\n", a1);
+        Parrot_io_printf(INTERP, "test_method0\n");
+        Parrot_io_printf(INTERP, "%d\n", a1);
     }
 
     METHOD test_method1(int a1, int a2, int a3, int a4, int a5, int a6)
     {
         UNUSED(SELF);
-        Parrot_io_printf(interp, "test_method1\n");
-        Parrot_io_printf(interp, "%d,%d,%d,%d,%d,%d\n", a1, a2, a3, a4, a5, a6);
+        Parrot_io_printf(INTERP, "test_method1\n");
+        Parrot_io_printf(INTERP, "%d,%d,%d,%d,%d,%d\n", a1, a2, a3, a4, a5, a6);
     }
 
     METHOD test_method2(int a1 :optional, int a1o :opt_flag,
                            PMC *slurpy_pos :slurpy)
     {
-        STRING *kevin = CONST_STRING(interp, "KEVIN");
+        STRING *kevin = CONST_STRING(INTERP, "KEVIN");
         UNUSED(SELF);
-        Parrot_io_printf(interp, "test_method2\n");
-        Parrot_io_printf(interp, "%d, %d, %Ss %Ss\n", a1, a1o,
-            VTABLE_name(interp, slurpy_pos),
-            VTABLE_get_repr(interp, slurpy_pos));
+        Parrot_io_printf(INTERP, "test_method2\n");
+        Parrot_io_printf(INTERP, "%d, %d, %Ss %Ss\n", a1, a1o,
+            VTABLE_name(INTERP, slurpy_pos),
+            VTABLE_get_repr(INTERP, slurpy_pos));
 
         RETURN(int 1000, STRING *kevin);
     }
@@ -53,8 +53,8 @@
     METHOD test_method3(PMC *a1 :named("a1name"), PMC *a2  :named("a2name"))
     {
         UNUSED(SELF);
-        Parrot_io_printf(interp, "test_method3\n");
-        Parrot_io_printf(interp, "%Ps, %Ps\n", a1, a2);
+        Parrot_io_printf(INTERP, "test_method3\n");
+        Parrot_io_printf(INTERP, "%Ps, %Ps\n", a1, a2);
     }
 
     METHOD test_method4(int george :optional, int g_f :opt_flag,
@@ -65,7 +65,7 @@
         UNUSED(g_f);
         UNUSED(slurpy_pos);
         UNUSED(slurpy_named);
-        Parrot_io_printf(interp, "test_method4\n");
+        Parrot_io_printf(INTERP, "test_method4\n");
     }
 }
 

Modified: branches/ops_pct/src/dynpmc/rational.pmc
==============================================================================
--- branches/ops_pct/src/dynpmc/rational.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynpmc/rational.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1028,7 +1028,7 @@
         mpq_init(t);
         mpq_set_ui(t, VTABLE_get_integer(INTERP, value), 1);
 
-        eq = (INTVAL) mpq_equal(RT(SELF), RT(value));
+        eq = (INTVAL) mpq_equal(RT(SELF), t);
         mpq_clear(t);
 
         return eq;

Modified: branches/ops_pct/src/dynpmc/subproxy.pmc
==============================================================================
--- branches/ops_pct/src/dynpmc/subproxy.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/dynpmc/subproxy.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -34,22 +34,22 @@
             Parrot_Sub_attributes  *rsub,     *my_sub;
 
             if (!key)
-                Parrot_ex_throw_from_c_args(interp, NULL, 1, "SubProxy: no key");
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 1, "SubProxy: no key");
 
-            file = VTABLE_get_string(interp, key);
+            file = VTABLE_get_string(INTERP, key);
             if (!file)
-                Parrot_ex_throw_from_c_args(interp, NULL, 1, "SubProxy: no file");
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 1, "SubProxy: no file");
 
-            sub_pmc = key_next(interp, key);
+            sub_pmc = key_next(INTERP, key);
             if (!sub_pmc)
-                Parrot_ex_throw_from_c_args(interp, NULL, 1, "SubProxy: no sub");
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 1, "SubProxy: no sub");
 
-            Parrot_load_bytecode(interp, file);
-            rsub_pmc = VTABLE_get_pmc_keyed(interp,
-                    interp->root_namespace, sub_pmc);
+            Parrot_load_bytecode(INTERP, file);
+            rsub_pmc = VTABLE_get_pmc_keyed(INTERP,
+                    INTERP->root_namespace, sub_pmc);
 
-            if (!VTABLE_defined(interp, rsub_pmc))
-                Parrot_ex_throw_from_c_args(interp, NULL, 1,
+            if (!VTABLE_defined(INTERP, rsub_pmc))
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                     "SubProxy: sub not found");
 
             PObj_get_FLAGS(SELF) &= ~PObj_private0_FLAG;

Modified: branches/ops_pct/src/embed.c
==============================================================================
--- branches/ops_pct/src/embed.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/embed.c	Wed May  5 08:45:29 2010	(r46302)
@@ -44,7 +44,7 @@
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static PMC* setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
+static PMC* setup_argv(PARROT_INTERP, int argc, ARGIN(const char **argv))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
@@ -122,9 +122,6 @@
 Flag                    Effect
 C<PARROT_BOUNDS_FLAG>   enable bounds checking
 C<PARROT_PROFILE_FLAG>  enable profiling,
-C<PARROT_THR_TYPE_1>    disable variable sharing and thread communication
-C<PARROT_THR_TYPE_2>    disable variable sharing but enable thread communication
-C<PARROT_THR_TYPE_3>    enable variable sharing.
 
 =cut
 
@@ -336,15 +333,6 @@
       case PARROT_FAST_CORE:
         Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "fast"));
         break;
-      case PARROT_SWITCH_CORE:
-        Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "switch"));
-        break;
-      case PARROT_CGP_CORE:
-        Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "cgp"));
-        break;
-      case PARROT_CGOTO_CORE:
-        Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "cgoto"));
-        break;
       case PARROT_EXEC_CORE:
         Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "exec"));
         break;
@@ -586,7 +574,7 @@
 
 PARROT_EXPORT
 void
-Parrot_pbc_load(PARROT_INTERP, NOTNULL(PackFile *pf))
+Parrot_pbc_load(PARROT_INTERP, ARGIN(PackFile *pf))
 {
     if (!pf) {
         Parrot_io_eprintf(interp, "Invalid packfile\n");
@@ -618,7 +606,7 @@
 
 /*
 
-=item C<static PMC* setup_argv(PARROT_INTERP, int argc, char **argv)>
+=item C<static PMC* setup_argv(PARROT_INTERP, int argc, const char **argv)>
 
 Creates and returns C<ARGS> array PMC.
 
@@ -628,7 +616,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static PMC*
-setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
+setup_argv(PARROT_INTERP, int argc, ARGIN(const char **argv))
 {
     ASSERT_ARGS(setup_argv)
     PMC   * const userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
@@ -644,7 +632,7 @@
     VTABLE_set_pmc_keyed_int(interp, interp->iglobals,
             (INTVAL)IGLOBALS_ARGV_LIST, userargv);
 
-    for (i = 0; i < argc; i++) {
+    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",
@@ -702,7 +690,7 @@
 set_current_sub(PARROT_INTERP)
 {
     ASSERT_ARGS(set_current_sub)
-    PMC *sub_pmc;
+    PMC *new_sub_pmc;
 
     PackFile_ByteCode   * const cur_cs = interp->code;
     PackFile_FixupTable * const ft     = cur_cs->fixups;
@@ -715,9 +703,9 @@
      * entry point with the address at our resume_offset.
      */
 
-    for (i = 0; i < ft->fixup_count; i++) {
-        if (ft->fixups[i]->type == enum_fixup_sub) {
-            const opcode_t ci      = ft->fixups[i]->offset;
+    for (i = 0; i < ft->fixup_count; ++i) {
+        if (ft->fixups[i].type == enum_fixup_sub) {
+            const opcode_t ci      = ft->fixups[i].offset;
             PMC    * const sub_pmc = ct->constants[ci]->u.key;
             Parrot_Sub_attributes *sub;
 
@@ -739,16 +727,16 @@
     /* If we didn't find anything, put a dummy PMC into current_sub.
        The default values set by SUb.init are appropiate for the
        dummy, don't need additional settings. */
-    sub_pmc                      = Parrot_pmc_new(interp, enum_class_Sub);
-    Parrot_pcc_set_sub(interp, CURRENT_CONTEXT(interp), sub_pmc);
+    new_sub_pmc = Parrot_pmc_new(interp, enum_class_Sub);
+    Parrot_pcc_set_sub(interp, CURRENT_CONTEXT(interp), new_sub_pmc);
 
-    return sub_pmc;
+    return new_sub_pmc;
 }
 
 
 /*
 
-=item C<void Parrot_runcode(PARROT_INTERP, int argc, char **argv)>
+=item C<void Parrot_runcode(PARROT_INTERP, int argc, const char **argv)>
 
 Sets up C<ARGV> and runs the ops.
 
@@ -758,7 +746,7 @@
 
 PARROT_EXPORT
 void
-Parrot_runcode(PARROT_INTERP, int argc, ARGIN(char **argv))
+Parrot_runcode(PARROT_INTERP, int argc, ARGIN(const char **argv))
 {
     PMC *userargv, *main_sub;
 
@@ -803,7 +791,7 @@
 /*
 
 =item C<opcode_t * Parrot_debug(PARROT_INTERP, Parrot_Interp debugger, opcode_t
-* pc)>
+*pc)>
 
 Runs the interpreter's bytecode in debugging mode.
 
@@ -814,7 +802,7 @@
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
 opcode_t *
-Parrot_debug(PARROT_INTERP, NOTNULL(Parrot_Interp debugger), opcode_t * pc)
+Parrot_debug(PARROT_INTERP, ARGIN(Parrot_Interp debugger), ARGIN(opcode_t *pc))
 {
     PDB_t      * const pdb = debugger->pdb;
 
@@ -894,13 +882,13 @@
                   case enum_class_FixedIntegerArray:
                     {
                         const INTVAL n = VTABLE_elements(interp, c->u.key);
-                        INTVAL i;
+                        INTVAL j;
                         Parrot_io_fprintf(interp, output, "[");
 
-                        for (i = 0; i < n; ++i) {
-                            const INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
+                        for (j = 0; j < n; ++j) {
+                            const INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, j);
                             Parrot_io_fprintf(interp, output, "%d", val);
-                            if (i < n - 1)
+                            if (j < n - 1)
                                 Parrot_io_fprintf(interp, output, ",");
                         }
                         Parrot_io_fprintf(interp, output, "]");
@@ -957,7 +945,7 @@
 Parrot_disassemble(PARROT_INTERP, ARGIN(const char *outfile), Parrot_disassemble_options options)
 {
     PDB_line_t *line;
-    PDB_t * const pdb   = mem_gc_allocate_typed(interp, PDB_t);
+    PDB_t * const pdb   = mem_gc_allocate_zeroed_typed(interp, PDB_t);
     int num_mappings    = 0;
     int curr_mapping    = 0;
     int op_code_seq_num = 0;
@@ -1001,15 +989,15 @@
 
         /* Parrot_io_fprintf(interp, output, "%i < %i %i == %i \n", curr_mapping,
          * num_mappings, op_code_seq_num,
-         * interp->code->debugs->mappings[curr_mapping]->offset); */
+         * interp->code->debugs->mappings[curr_mapping].offset); */
 
         if (debugs && curr_mapping < num_mappings) {
-            if (op_code_seq_num == interp->code->debugs->mappings[curr_mapping]->offset) {
+            if (op_code_seq_num == interp->code->debugs->mappings[curr_mapping].offset) {
                 const int filename_const_offset =
-                    interp->code->debugs->mappings[curr_mapping]->filename;
+                    interp->code->debugs->mappings[curr_mapping].filename;
                 Parrot_io_fprintf(interp, output, "# Current Source Filename '%Ss'\n",
                         interp->code->const_table->constants[filename_const_offset]->u.string);
-                curr_mapping++;
+                ++curr_mapping;
             }
         }
 
@@ -1034,7 +1022,7 @@
 
         Parrot_io_fprintf(interp, output, "\n");
         line = line->next;
-        op_code_seq_num++;
+        ++op_code_seq_num;
     }
     if (outfile != NULL)
         Parrot_io_close(interp, output);
@@ -1105,7 +1093,8 @@
 
     if (!interp->initial_pf) {
         /* SIDE EFFECT: PackFile_new_dummy sets interp->initial_pf */
-        PackFile_new_dummy(interp, Parrot_str_new_constant(interp, "compile_string"));
+        interp->initial_pf = PackFile_new_dummy(interp,
+            Parrot_str_new_constant(interp, "compile_string"));
         /* Assumption: there is no valid reason to fail to create it.
          * If the assumption changes, replace the assertion with a
          * runtime check */

Modified: branches/ops_pct/src/exceptions.c
==============================================================================
--- branches/ops_pct/src/exceptions.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/exceptions.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -89,6 +89,7 @@
 */
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 die_from_exception(PARROT_INTERP, ARGIN(PMC *exception))
 {
@@ -261,7 +262,7 @@
     PMC     *sig_obj;
 
     va_start(args, sig);
-    sig_obj = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL, sig, args);
+    sig_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, sig, &args);
     va_end(args);
 
     CALLSIGNATURE_is_exception_SET(sig_obj);
@@ -326,6 +327,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_ex_throw_from_c(PARROT_INTERP, ARGIN(PMC *exception))
 {
@@ -423,6 +425,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_ex_throw_from_c_args(PARROT_INTERP, SHIM(void *ret_addr),
         int exitcode, ARGIN(const char *format), ...)
@@ -476,6 +479,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_ex_rethrow_from_c(PARROT_INTERP, ARGIN(PMC *exception))
 {
@@ -511,8 +515,8 @@
 
 =over 4
 
-=item C<PARROT_DOES_NOT_RETURN_WHEN_FALSE void Parrot_assert(INTVAL condition,
-const char *condition_string, const char *file, unsigned int line)>
+=item C<void Parrot_assert(INTVAL condition, const char *condition_string, const
+char *file, unsigned int line)>
 
 A better version of assert() that gives a backtrace.
 
@@ -544,6 +548,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_confess(ARGIN(const char *cond), ARGIN(const char *file), unsigned int line)
 {
@@ -584,7 +589,7 @@
             "Backtrace - Obtained %d stack frames (max trace depth is %d).\n",
             size, BACKTRACE_DEPTH);
 #  ifndef BACKTRACE_VERBOSE
-    for (i = 0; i < size; i++) {
+    for (i = 0; i < size; ++i) {
         Dl_info   frameInfo;
         const int found  = dladdr(array[i], &frameInfo);
 
@@ -603,7 +608,7 @@
     { /* Scope for strings */
         char ** strings = backtrace_symbols(array, size);
         if (strings) {
-            for (i = 0; i < size; i++)
+            for (i = 0; i < size; ++i)
                 fprintf(stderr, "%s\n", strings[i]);
             /* backtrace_symbols gets memory using malloc */
             free(strings);
@@ -637,6 +642,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 exit_fatal(int exitcode, ARGIN(const char *format), ...)
 {
@@ -675,6 +681,7 @@
 */
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 do_panic(NULLOK_INTERP, ARGIN_NULLOK(const char *message),
          ARGIN_NULLOK(const char *file), unsigned int line)

Modified: branches/ops_pct/src/exit.c
==============================================================================
--- branches/ops_pct/src/exit.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/exit.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -38,7 +38,7 @@
 
 PARROT_EXPORT
 void
-Parrot_on_exit(PARROT_INTERP, NOTNULL(exit_handler_f function), ARGIN_NULLOK(void *arg))
+Parrot_on_exit(PARROT_INTERP, ARGIN(exit_handler_f function), ARGIN_NULLOK(void *arg))
 {
     ASSERT_ARGS(Parrot_on_exit)
 
@@ -62,6 +62,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void
 Parrot_exit(PARROT_INTERP, int status)
 {
@@ -103,10 +104,6 @@
 
 F<include/parrot/exit.h> and F<t/src/exit.t>.
 
-=head1 HISTORY
-
-Initial version by Josh Wilmes.
-
 =cut
 
 */

Modified: branches/ops_pct/src/extend.c
==============================================================================
--- branches/ops_pct/src/extend.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/extend.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2007, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -417,10 +417,10 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char *
-Parrot_PMC_get_cstring_intkey(PARROT_INTERP,
-        Parrot_PMC pmc, Parrot_Int key)
+Parrot_PMC_get_cstring_intkey(PARROT_INTERP, Parrot_PMC pmc, Parrot_Int key)
 {
     ASSERT_ARGS(Parrot_PMC_get_cstring_intkey)
     STRING *intermediate;
@@ -448,7 +448,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 char *
 Parrot_PMC_get_cstring(PARROT_INTERP, Parrot_PMC pmc)
 {
@@ -482,10 +483,10 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char *
-Parrot_PMC_get_cstringn(PARROT_INTERP, ARGIN(Parrot_PMC pmc),
-        ARGOUT(Parrot_Int *length))
+Parrot_PMC_get_cstringn(PARROT_INTERP, ARGIN(Parrot_PMC pmc), ARGOUT(Parrot_Int *length))
 {
     ASSERT_ARGS(Parrot_PMC_get_cstringn)
     char *retval;
@@ -516,7 +517,8 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
-PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 char *
 Parrot_PMC_get_cstringn_intkey(PARROT_INTERP, ARGIN(Parrot_PMC pmc),
         ARGOUT(Parrot_Int *length), Parrot_Int key)
@@ -832,8 +834,7 @@
 
 PARROT_EXPORT
 void
-Parrot_PMC_push_intval(PARROT_INTERP,
-        Parrot_PMC pmc, Parrot_Int value)
+Parrot_PMC_push_intval(PARROT_INTERP, Parrot_PMC pmc, Parrot_Int value)
 {
     ASSERT_ARGS(Parrot_PMC_push_intval)
     PARROT_CALLIN_START(interp);
@@ -1003,7 +1004,7 @@
 
 PARROT_EXPORT
 void
-Parrot_free_cstring(ARGIN_NULLOK(char *string))
+Parrot_free_cstring(ARGFREE(char *string))
 {
     ASSERT_ARGS(Parrot_free_cstring)
     Parrot_str_free_cstring(string);
@@ -1047,15 +1048,26 @@
 {
     ASSERT_ARGS(Parrot_ext_call)
     va_list args;
-    PMC  *sig_object;
+    PMC  *call_obj;
+    const char *arg_sig, *ret_sig;
+
+    PMC  * const old_call_obj = Parrot_pcc_get_signature(interp,
+        CURRENT_CONTEXT(interp));
+    Parrot_pcc_split_signature_string(signature, &arg_sig, &ret_sig);
 
     va_start(args, signature);
-    sig_object = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL, signature, args);
-    va_end(args);
+    call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL,
+        arg_sig, &args);
 
-    Parrot_pcc_invoke_from_sig_object(interp, sub_pmc, sig_object);
+    Parrot_pcc_invoke_from_sig_object(interp, sub_pmc, call_obj);
+    call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+    Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
+    va_end(args);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_call_obj);
 }
 
+
 /*
 
 =item C<Parrot_Int Parrot_get_intreg(PARROT_INTERP, Parrot_Int regnum)>

Modified: branches/ops_pct/src/frame_builder.c
==============================================================================
--- branches/ops_pct/src/frame_builder.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/frame_builder.c	Wed May  5 08:45:29 2010	(r46302)
@@ -259,7 +259,7 @@
     while (*sig) {
         switch (*sig) {
           case 't':
-            (*strings)++;
+            ++(*strings);
             stack_size +=4;
             break;
           case 'd':
@@ -269,7 +269,7 @@
             stack_size +=4;
             break;
         }
-        sig++;
+        ++sig;
     }
     return stack_size;
 
@@ -299,7 +299,7 @@
     const int ST_SIZE_OF           = 124;
     const int JIT_ALLOC_SIZE       = 1024;
 
-    char      *signature_str      = Parrot_str_to_cstring(interp, signature);
+    char    * const signature_str  = Parrot_str_to_cstring(interp, signature);
     /* skip over the result */
     char      *sig                = signature_str + 1;
     size_t     stack_space_needed = calc_signature_needs(sig,
@@ -408,7 +408,7 @@
           case 'J':   /* interpreter */
             emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, 8);
             emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, args_offset);
-            arg_count--;
+            --arg_count;
             break;
           case 'p':   /* push pmc->data */
             /* FIXME (TT #1325) emitm_call_cfunc(pc, get_nci_p); */
@@ -461,8 +461,8 @@
             return NULL;
         }
         args_offset +=4;
-        arg_count++;
-        sig++;
+        ++arg_count;
+        ++sig;
     }
 
     /* prepare to call VTABLE_get_pointer, set up args */
@@ -608,7 +608,7 @@
 
     /* free temporary strings */
     strings_offset = st_offset + ST_SIZE_OF;
-    for (i=0; i<string_buffer_count; i++) {
+    for (i=0; i<string_buffer_count; ++i) {
         emitm_movl_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1, strings_offset);
         emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1, temp_calls_offset + 0);
         emitm_call_cfunc(pc, Parrot_str_free_cstring);

Modified: branches/ops_pct/src/gc/alloc_resources.c
==============================================================================
--- branches/ops_pct/src/gc/alloc_resources.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/alloc_resources.c	Wed May  5 08:45:29 2010	(r46302)
@@ -30,7 +30,7 @@
 #define RESOURCE_DEBUG 0
 #define RESOURCE_DEBUG_SIZE 1000000
 
-#define POOL_SIZE 65536 * 2
+#define POOL_SIZE (65536 * 2)
 
 typedef void (*compact_f) (Interp *, Memory_Pools * const, Variable_Size_Pool *);
 
@@ -39,35 +39,31 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void alloc_new_block(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+static void alloc_new_block(
+     ARGMOD(Memory_Pools *mem_pools),
     size_t size,
     ARGMOD(Variable_Size_Pool *pool),
     ARGIN(const char *why))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-static const char* buffer_location(PARROT_INTERP, ARGIN(const PObj *b))
+static const char * buffer_location(PARROT_INTERP, ARGIN(const Buffer *b))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void check_fixed_size_obj_pool(ARGMOD(Fixed_Size_Pool * pool))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(* pool);
+static void check_fixed_size_obj_pool(ARGIN(const Fixed_Size_Pool *pool))
+        __attribute__nonnull__(1);
 
-static void check_memory_system(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static void check_memory_system(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
-static void check_var_size_obj_pool(ARGMOD(Variable_Size_Pool *pool))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*pool);
+static void check_var_size_obj_pool(ARGIN(const Variable_Size_Pool *pool))
+        __attribute__nonnull__(1);
 
 static void debug_print_buf(PARROT_INTERP, ARGIN(const Buffer *b))
         __attribute__nonnull__(1)
@@ -75,57 +71,85 @@
 
 static void fix_pmc_syncs(
     ARGMOD(Interp *dest_interp),
-    ARGIN(Fixed_Size_Pool *pool))
+    ARGIN(const Fixed_Size_Pool *pool))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*dest_interp);
 
-static void free_memory_pool(Variable_Size_Pool *pool);
-static void free_pool(ARGMOD(Fixed_Size_Pool *pool))
+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)
-        FUNC_MODIFIES(*pool);
+        __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));
+    ARGIN_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,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *dest),
     ARGMOD(Fixed_Size_Pool *source))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*dest)
         FUNC_MODIFIES(*source);
 
 static int sweep_cb_buf(PARROT_INTERP,
     ARGIN(Memory_Pools *mem_pools),
-    ARGMOD(Fixed_Size_Pool *pool),
+    ARGFREE(Fixed_Size_Pool *pool),
     SHIM(int flag),
-    ARGIN(void *arg))
+    SHIM(void *arg))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*pool);
+        __attribute__nonnull__(2);
 
 static int sweep_cb_pmc(PARROT_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
     SHIM(int flag),
     SHIM(void *arg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
 #define ASSERT_ARGS_alloc_new_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
+       PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(why))
 #define ASSERT_ARGS_buffer_location __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -134,8 +158,7 @@
 #define ASSERT_ARGS_check_fixed_size_obj_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_check_memory_system __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_check_var_size_obj_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_debug_print_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -145,9 +168,21 @@
        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_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(pool))
+#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) \
@@ -155,9 +190,7 @@
     , PARROT_ASSERT_ARG(source))
 #define ASSERT_ARGS_sweep_cb_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
-    , PARROT_ASSERT_ARG(arg))
+    , PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_sweep_cb_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -168,8 +201,8 @@
 
 /*
 
-=item C<static void alloc_new_block(PARROT_INTERP, Memory_Pools * const
-mem_pools, size_t size, Variable_Size_Pool *pool, const char *why)>
+=item C<static void alloc_new_block( Memory_Pools *mem_pools, size_t size,
+Variable_Size_Pool *pool, const char *why)>
 
 Allocate a new memory block. We allocate either the requested size or the
 default size, whichever is larger. Add the new block to the given memory
@@ -180,9 +213,10 @@
 */
 
 static void
-alloc_new_block(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        size_t size, ARGMOD(Variable_Size_Pool *pool),
+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)
@@ -230,8 +264,8 @@
 
 /*
 
-=item C<void * mem_allocate(PARROT_INTERP, Memory_Pools * const mem_pools,
-size_t size, Variable_Size_Pool *pool)>
+=item C<void * mem_allocate(PARROT_INTERP, Memory_Pools *mem_pools, size_t size,
+Variable_Size_Pool *pool)>
 
 Allocates memory for headers.
 
@@ -249,15 +283,13 @@
 
 Buffer memory layout:
 
-                    +-----------------+
-                    |  ref_count   |f |    # GC header
-  obj->bufstart  -> +-----------------+
-                    |  data           |
-                    v                 v
-
- * if PObj_is_COWable is set, then we have
-   - a ref_count, {inc, dec}remented by 2 always
-   - the lo bit 'f' means 'is being forwarded" - what TAIL_flag was
+                    +-------------------+
+                    | flags # GC header |
+  obj->bufstart  -> +-------------------+
+                    |  data             |
+                    v                   v
+
+ * if PObj_is_COWable is set, then we have space for flags.
 
  * if PObj_align_FLAG is set, obj->bufstart is aligned like discussed above
  * obj->buflen is the usable length excluding the optional GC part.
@@ -270,8 +302,9 @@
 PARROT_CANNOT_RETURN_NULL
 void *
 mem_allocate(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        size_t size, ARGMOD(Variable_Size_Pool *pool))
+        ARGMOD(Memory_Pools *mem_pools),
+        size_t size,
+        ARGMOD(Variable_Size_Pool *pool))
 {
     ASSERT_ARGS(mem_allocate)
     void *return_val;
@@ -312,9 +345,9 @@
              * Mark the block as big block (it has just one item)
              * And don't set big blocks as the top_block.
              */
-            alloc_new_block(interp, mem_pools, size, pool, "compact failed");
+            alloc_new_block(mem_pools, size, pool, "compact failed");
 
-            mem_pools->mem_allocs_since_last_collect++;
+            ++mem_pools->mem_allocs_since_last_collect;
 
             if (pool->top_block->free < size) {
                 fprintf(stderr, "out of mem\n");
@@ -333,10 +366,10 @@
 
 /*
 
-=item C<static const char* buffer_location(PARROT_INTERP, const PObj *b)>
+=item C<static const char * buffer_location(PARROT_INTERP, const Buffer *b)>
 
 Recturns a constant string representing the location of the given
-PObj C<b> in one of the PMC registers. If the PMC is not located
+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<"???">.
 
@@ -347,19 +380,18 @@
 #if RESOURCE_DEBUG
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-static const char*
-buffer_location(PARROT_INTERP, ARGIN(const PObj *b))
+static const char *
+buffer_location(PARROT_INTERP, ARGIN(const Buffer *b))
 {
     ASSERT_ARGS(buffer_location)
-    int i;
+    Parrot_Context * const ctx = CONTEXT(interp);
     static char reg[10];
-
-    Parrot_Context* const ctx = CONTEXT(interp);
+    UINTVAL i;
 
     for (i = 0; i < ctx->n_regs_used[REGNO_STR]; ++i) {
-        PObj * const obj = (PObj *) CTX_REG_STR(interp, ctx, i);
-        if (obj == b) {
-            sprintf(reg, "S%d", 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;
         }
     }
@@ -394,7 +426,7 @@
 
 =over 4
 
-=item C<void compact_pool(PARROT_INTERP, Memory_Pools * const mem_pools,
+=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
@@ -406,7 +438,7 @@
 
 void
 compact_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Variable_Size_Pool *pool))
 {
     ASSERT_ARGS(compact_pool)
@@ -427,51 +459,12 @@
     /* We're collecting */
     mem_pools->mem_allocs_since_last_collect    = 0;
     mem_pools->header_allocs_since_last_collect = 0;
-    mem_pools->gc_collect_runs++;
-
-    /* total - reclaimable == currently used. Add a minimum block to the
-     * current amount, so we can avoid having to allocate it in the future. */
-    {
-        Memory_Block *cur_block = pool->top_block;
-
-        total_size = 0;
-
-        while (cur_block) {
-            /*
-             * TODO - Big blocks
-             *
-             * Currently all available blocks are compacted into on new
-             * block with total_size. This is more than 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 below to check liveness. OTOH if this
-             * compaction is running through all the buffer headers, there
-             * is no relation to the block.
-             *
-             *
-             * Moving the life bit into the buffer thus also solves this
-             * problem easily.
-             */
-            total_size += cur_block->size - cur_block->free;
-            cur_block   = cur_block->prev;
-        }
-    }
-    /*
-     * XXX for some reason the guarantee isn't correct
-     *     TODO check why
-     */
-
-    /* total_size -= pool->guaranteed_reclaimable; */
-
-    /* this makes for ever increasing allocations but fewer collect runs */
-#if WE_WANT_EVER_GROWING_ALLOCATIONS
-    total_size += pool->minimum_block_size;
-#endif
+    ++mem_pools->gc_collect_runs;
 
     /* Snag a block big enough for everything */
-    alloc_new_block(interp, mem_pools, total_size, pool, "inside compact");
+    total_size = pad_pool_size(pool);
+
+    alloc_new_block(mem_pools, total_size, pool, "inside compact");
 
     new_block = pool->top_block;
 
@@ -496,90 +489,14 @@
             const size_t objects_end = cur_buffer_arena->used;
 
             for (i = objects_end; i; --i) {
-                INTVAL *ref_count = NULL;
 
-                /* ! (on_free_list | constant | external | sysmem) */
                 if (Buffer_buflen(b) && PObj_is_movable_TESTALL(b)) {
-                    ptrdiff_t offset = 0;
-#if RESOURCE_DEBUG
-                    if (Buffer_buflen(b) >= RESOURCE_DEBUG_SIZE)
-                        debug_print_buf(interp, b);
-#endif
+                    Memory_Block *old_block = Buffer_pool(b);
 
-                    /* we can't perform the math all the time, because
-                     * strstart might be in unallocated memory */
-                    if (PObj_is_COWable_TEST(b)) {
-                        ref_count = Buffer_bufrefcountptr(b);
-
-                        if (PObj_is_string_TEST(b)) {
-                            offset = (ptrdiff_t)((STRING *)b)->strstart -
-                                (ptrdiff_t)Buffer_bufstart(b);
-                        }
-                    }
-
-                    /* buffer has already been moved; just change the header */
-                    if (PObj_COW_TEST(b) &&
-                        (ref_count && *ref_count & Buffer_moved_FLAG)) {
-                        /* Find out who else references our data */
-                        Buffer * const hdr = *((Buffer **)Buffer_bufstart(b));
-
-
-                        PARROT_ASSERT(PObj_is_COWable_TEST(b));
-
-                        /* Make sure they know that we own it too */
-                        PObj_COW_SET(hdr);
-
-                        /* TODO incr ref_count, after fixing string too
-                         * Now make sure we point to where the other guy does */
-                        Buffer_bufstart(b) = 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(b)) {
-                            ((STRING *)b)->strstart = (char *)Buffer_bufstart(b) +
-                                    offset;
-                        }
-                    }
-                    else {
-                        cur_spot = aligned_mem(b, cur_spot);
-
-                        if (PObj_is_COWable_TEST(b)) {
-                            INTVAL * const new_ref_count = ((INTVAL*) cur_spot) - 1;
-                            *new_ref_count        = 2;
-                        }
-
-                        /* Copy our memory to the new pool */
-                        memcpy(cur_spot, Buffer_bufstart(b), Buffer_buflen(b));
-
-                        /* If we're COW */
-                        if (PObj_COW_TEST(b)) {
-                            PARROT_ASSERT(PObj_is_COWable_TEST(b));
-
-                            /* Let the old buffer know how to find us */
-                            *((Buffer **)Buffer_bufstart(b)) = b;
-
-                            /* No guarantees that our data is still COW, so
-                             * assume not, and let the above code fix-up */
-                            PObj_COW_CLEAR(b);
-
-                            /* Finally, let the tail know that we've moved, so
-                             * that any other references can know to look for
-                             * us and not re-copy */
-                            if (ref_count)
-                                *ref_count |= Buffer_moved_FLAG;
-                        }
-
-                        Buffer_bufstart(b) = cur_spot;
-
-                        if (PObj_is_string_TEST(b)) {
-                            ((STRING *)b)->strstart = (char *)Buffer_bufstart(b) +
-                                    offset;
-                        }
-
-                        cur_spot += Buffer_buflen(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);
             }
         }
@@ -593,96 +510,281 @@
             (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 - (new_block->top - new_block->start);
+    new_block->free = new_block->size - (cur_spot - new_block->start);
+    mem_pools->memory_collected +=      (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)>
 
-    mem_pools->memory_collected += (new_block->top - new_block->start);
+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.
+
+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.
 
-    /* Now we're done. We're already on the pool's free list, so let us be the
-     * only one on the free list and free the rest */
-    {
-        Memory_Block *cur_block = new_block->prev;
+Moving the live bit into the buffer thus also solves this
+problem easily.
 
-        PARROT_ASSERT(new_block == pool->top_block);
+=cut
 
-        while (cur_block) {
-            Memory_Block * const next_block = cur_block->prev;
+*/
 
+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;
+
+    UINTVAL total_size   = 0;
+#if RESOURCE_DEBUG
+    size_t  total_blocks = 0;
+#endif
+
+    while (cur_block) {
+        total_size += cur_block->size - cur_block->freed - cur_block->free;
+        cur_block   = cur_block->prev;
+#if RESOURCE_DEBUG
+        ++total_blocks;
+#endif
+    }
+
+    /* 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_bufrefcountptr(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_bufrefcountptr(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;
+    size_t i;
+
+    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;
 
             /* 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;
-        }
+            cur_block        = next_block;
 
-        /* Set our new pool as the only pool */
-        new_block->prev       = NULL;
-        pool->total_allocated = total_size;
+            /* 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;
-
-    --mem_pools->gc_sweep_block_level;
 }
 
 /*
 
-=item C<char * aligned_mem(const Buffer *buffer, char *mem)>
+=item C<static int is_block_almost_full(const Memory_Block *block)>
 
-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.
+Tests if the block is almost full and should be skipped during compacting.
+
+Returns true if less that 20% of block is available
 
 =cut
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-char *
-aligned_mem(ARGIN(const Buffer *buffer), ARGIN(char *mem))
+static int
+is_block_almost_full(ARGIN(const Memory_Block *block))
 {
-    ASSERT_ARGS(aligned_mem)
-#if 0
-    This code causing assert in compact_pool. Looks like STRINGs have
-    aligned flag set, but allocated less memory.
-    See C<aligned_string_size>.
-    if (PObj_is_COWable_TEST(buffer))
-        mem += sizeof (void*);
-    if (PObj_aligned_TEST(buffer))
-        mem = (char*)(((unsigned long)(mem + BUFFER_ALIGN_1)) &
-                BUFFER_ALIGN_MASK);
-    else
-        mem = (char*)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
-#endif
-    mem += sizeof (void*);
-    mem = (char*)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
-
-    return mem;
+    ASSERT_ARGS(is_block_almost_full)
+    return (block->free + block->freed) < block->size * 0.2;
 }
 
 /*
 
-=item C<size_t aligned_string_size(size_t len)>
+=item C<char * aligned_mem(const Buffer *buffer, char *mem)>
 
-Determines the size of a string of length C<len> in RAM, accounting for
-alignment.
+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_CONST_FUNCTION
+PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-size_t
-aligned_string_size(size_t len)
+char *
+aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
 {
-    ASSERT_ARGS(aligned_string_size)
-    len += sizeof (void*);
-    len = (len + WORD_ALIGN_1) & WORD_ALIGN_MASK;
-    return len;
+    ASSERT_ARGS(aligned_mem)
+    mem += sizeof (void *);
+    mem  = (char *)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
+
+    return mem;
 }
 
 /*
@@ -703,10 +805,11 @@
 
 */
 
+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))
+new_memory_pool(size_t min_block, ARGIN_NULLOK(compact_f compact))
 {
     ASSERT_ARGS(new_memory_pool)
     Variable_Size_Pool * const pool = mem_internal_allocate_typed(Variable_Size_Pool);
@@ -724,8 +827,7 @@
 
 /*
 
-=item C<void initialize_var_size_pools(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=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
@@ -737,17 +839,16 @@
 */
 
 void
-initialize_var_size_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+initialize_var_size_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(initialize_var_size_pools)
 
     mem_pools->memory_pool   = new_memory_pool(POOL_SIZE, &compact_pool);
-    alloc_new_block(interp, mem_pools, POOL_SIZE, mem_pools->memory_pool, "init");
+    alloc_new_block(mem_pools, POOL_SIZE, mem_pools->memory_pool, "init");
 
     /* Constant strings - not compacted */
     mem_pools->constant_string_pool = new_memory_pool(POOL_SIZE, NULL);
-    alloc_new_block(interp, mem_pools, POOL_SIZE, mem_pools->constant_string_pool, "init");
+    alloc_new_block(mem_pools, POOL_SIZE, mem_pools->constant_string_pool, "init");
 }
 
 
@@ -797,8 +898,7 @@
 
 /*
 
-=item C<static void check_memory_system(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static void check_memory_system(const Memory_Pools *mem_pools)>
 
 Checks the memory system of parrot on any corruptions, including
 the string system.
@@ -808,8 +908,7 @@
 */
 
 static void
-check_memory_system(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+check_memory_system(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(check_memory_system)
     size_t i;
@@ -821,8 +920,8 @@
     check_fixed_size_obj_pool(mem_pools->string_header_pool);
     check_fixed_size_obj_pool(mem_pools->constant_string_header_pool);
 
-    for (i = 0; i < mem_pools->num_sized; i++) {
-        Fixed_Size_Pool * pool = mem_pools->sized_header_pools[i];
+    for (i = 0; i < mem_pools->num_sized; ++i) {
+        const Fixed_Size_Pool * const pool = mem_pools->sized_header_pools[i];
         if (pool != NULL && pool != mem_pools->string_header_pool)
             check_fixed_size_obj_pool(pool);
     }
@@ -830,7 +929,7 @@
 
 /*
 
-=item C<static void check_fixed_size_obj_pool(Fixed_Size_Pool * pool)>
+=item C<static void check_fixed_size_obj_pool(const Fixed_Size_Pool *pool)>
 
 Checks a small object pool, if it contains buffer it checks the buffers also.
 
@@ -839,15 +938,13 @@
 */
 
 static void
-check_fixed_size_obj_pool(ARGMOD(Fixed_Size_Pool * pool))
+check_fixed_size_obj_pool(ARGIN(const Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(check_fixed_size_obj_pool)
     size_t total_objects;
     size_t last_free_list_count;
     Fixed_Size_Arena * arena_walker;
     size_t free_objects;
-    PObj * object;
-    size_t i;
     size_t count;
     GC_MS_PObj_Wrapper * pobj_walker;
 
@@ -859,8 +956,12 @@
 
     arena_walker = pool->last_Arena;
     while (arena_walker != NULL) {
+        size_t i;
+        PObj * object;
+
         total_objects -= arena_walker->total_objects;
         object = (PObj*)arena_walker->start_objects;
+
         for (i = 0; i < arena_walker->total_objects; ++i) {
             if (PObj_on_free_list_TEST(object)) {
                 ++free_objects;
@@ -909,7 +1010,7 @@
 
 /*
 
-=item C<static void check_var_size_obj_pool(Variable_Size_Pool *pool)>
+=item C<static void check_var_size_obj_pool(const Variable_Size_Pool *pool)>
 
 Checks a memory pool, containing buffer data
 
@@ -918,7 +1019,7 @@
 */
 
 static void
-check_var_size_obj_pool(ARGMOD(Variable_Size_Pool *pool))
+check_var_size_obj_pool(ARGIN(const Variable_Size_Pool *pool))
 {
     ASSERT_ARGS(check_var_size_obj_pool)
     size_t count;
@@ -998,8 +1099,8 @@
 
 /*
 
-=item C<void Parrot_gc_destroy_header_pools(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<void Parrot_gc_destroy_header_pools(PARROT_INTERP, Memory_Pools
+*mem_pools)>
 
 Performs a garbage collection sweep on all pools, then frees them.  Calls
 C<header_pools_iterate_callback> to loop over all the pools, passing
@@ -1011,8 +1112,7 @@
 */
 
 void
-Parrot_gc_destroy_header_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+Parrot_gc_destroy_header_pools(PARROT_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(Parrot_gc_destroy_header_pools)
     INTVAL pass;
@@ -1028,16 +1128,16 @@
     header_pools_iterate_callback(interp, mem_pools, POOL_PMC | POOL_CONST, NULL,
             sweep_cb_pmc);
 
-    for (pass = start; pass <= 2; pass++) {
+    /* for (pass = start; pass <= 2; ++pass) { */ /* XXX it's unsed loop */
         header_pools_iterate_callback(interp, mem_pools, POOL_BUFFER | POOL_CONST,
-                (void *)pass, sweep_cb_buf);
-    }
+                (void *)start, sweep_cb_buf);
+    /* } */
 
     mem_internal_free(mem_pools->sized_header_pools);
 
     if (mem_pools->attrib_pools) {
         unsigned int i;
-        for (i = 0; i < mem_pools->num_attribs; i++) {
+        for (i = 0; i < mem_pools->num_attribs; ++i) {
             PMC_Attribute_Pool  *pool  = mem_pools->attrib_pools[i];
             PMC_Attribute_Arena *arena;
 
@@ -1076,7 +1176,7 @@
 
 static int
 sweep_cb_pmc(PARROT_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
         SHIM(int flag), SHIM(void *arg))
 {
@@ -1102,11 +1202,11 @@
 static int
 sweep_cb_buf(PARROT_INTERP,
         ARGIN(Memory_Pools *mem_pools),
-        ARGMOD(Fixed_Size_Pool *pool),
-        SHIM(int flag), ARGIN(void *arg))
+        ARGFREE(Fixed_Size_Pool *pool),
+        SHIM(int flag), SHIM(void *arg))
 {
     ASSERT_ARGS(sweep_cb_buf)
-    UNUSED(arg);
+
     Parrot_gc_sweep_pool(interp, mem_pools, pool);
     free_pool(pool);
 
@@ -1125,7 +1225,7 @@
 */
 
 static void
-free_pool(ARGMOD(Fixed_Size_Pool *pool))
+free_pool(ARGFREE(Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(free_pool)
     Fixed_Size_Arena *cur_arena;
@@ -1151,7 +1251,7 @@
 */
 
 static void
-free_memory_pool(Variable_Size_Pool *pool)
+free_memory_pool(ARGFREE(Variable_Size_Pool *pool))
 {
     ASSERT_ARGS(free_memory_pool)
 
@@ -1169,8 +1269,8 @@
 
 /*
 
-=item C<void Parrot_gc_destroy_memory_pools(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=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
@@ -1181,8 +1281,7 @@
 */
 
 void
-Parrot_gc_destroy_memory_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+Parrot_gc_destroy_memory_pools(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(Parrot_gc_destroy_memory_pools)
 
@@ -1192,8 +1291,8 @@
 
 /*
 
-=item C<void Parrot_gc_merge_memory_pools(Interp *dest_interp, Memory_Pools *
-const dest_arena, Memory_Pools * const source_arena)>
+=item C<void Parrot_gc_merge_memory_pools(Interp *dest_interp, Memory_Pools
+*dest_arena, const Memory_Pools *source_arena)>
 
 Merges the header pools of C<source_interp> into those of C<dest_interp>.
 (Used to deal with shared objects left after interpreter destruction.)
@@ -1204,8 +1303,8 @@
 
 void
 Parrot_gc_merge_memory_pools(ARGMOD(Interp *dest_interp),
-    ARGIN(Memory_Pools * const dest_arena),
-    ARGIN(Memory_Pools * const source_arena))
+    ARGMOD(Memory_Pools *dest_arena),
+    ARGIN(const Memory_Pools *source_arena))
 {
     ASSERT_ARGS(Parrot_gc_merge_memory_pools)
 
@@ -1244,8 +1343,8 @@
 
 /*
 
-=item C<static void Parrot_gc_merge_buffer_pools(PARROT_INTERP, Memory_Pools *
-const mem_pools, Fixed_Size_Pool *dest, Fixed_Size_Pool *source)>
+=item C<static void Parrot_gc_merge_buffer_pools(PARROT_INTERP, Memory_Pools
+*mem_pools, Fixed_Size_Pool *dest, Fixed_Size_Pool *source)>
 
 Merge pool C<source> into pool C<dest>. Combines the free lists directly,
 moves all arenas to the new pool, and remove the old pool. To merge, the
@@ -1258,12 +1357,11 @@
 
 static void
 Parrot_gc_merge_buffer_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *dest), ARGMOD(Fixed_Size_Pool *source))
 {
     ASSERT_ARGS(Parrot_gc_merge_buffer_pools)
     Fixed_Size_Arena  *cur_arena;
-    GC_MS_PObj_Wrapper  *free_list_end;
 
     PARROT_ASSERT(dest->object_size == source->object_size);
     PARROT_ASSERT((dest->name == NULL && source->name == NULL)
@@ -1273,11 +1371,10 @@
 
     /* append new free_list to old */
     /* XXX this won't work with, e.g., gc_gms */
-    free_list_end = dest->free_list;
-
-    if (free_list_end == NULL)
+    if (dest->free_list == NULL)
         dest->free_list = source->free_list;
     else {
+        GC_MS_PObj_Wrapper  *free_list_end = dest->free_list;
         while (free_list_end->next_ptr)
             free_list_end = free_list_end->next_ptr;
 
@@ -1313,7 +1410,8 @@
 
 /*
 
-=item C<static void fix_pmc_syncs(Interp *dest_interp, Fixed_Size_Pool *pool)>
+=item C<static void fix_pmc_syncs(Interp *dest_interp, const Fixed_Size_Pool
+*pool)>
 
 Walks through the given arena, looking for all live and shared PMCs,
 transferring their sync values to the destination interpreter.
@@ -1323,7 +1421,7 @@
 */
 
 static void
-fix_pmc_syncs(ARGMOD(Interp *dest_interp), ARGIN(Fixed_Size_Pool *pool))
+fix_pmc_syncs(ARGMOD(Interp *dest_interp), ARGIN(const Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(fix_pmc_syncs)
     Fixed_Size_Arena *cur_arena;
@@ -1333,16 +1431,13 @@
         PMC   *p = (PMC *)((char*)cur_arena->start_objects);
         size_t i;
 
-        for (i = 0; i < cur_arena->used; i++) {
+        for (i = 0; i < cur_arena->used; ++i) {
             if (!PObj_on_free_list_TEST(p) && PObj_is_PMC_TEST(p)) {
-                if (PObj_is_PMC_shared_TEST(p))
-                    PMC_sync(p)->owner = dest_interp;
-                else
-                    Parrot_ex_throw_from_c_args(dest_interp, NULL,
-                        EXCEPTION_INTERP_ERROR,
-                        "Unshared PMC still alive after interpreter"
-                        "destruction. address=%p, base_type=%d\n",
-                        p, p->vtable->base_type);
+                Parrot_ex_throw_from_c_args(dest_interp, NULL,
+                    EXCEPTION_INTERP_ERROR,
+                    "Unshared PMC still alive after interpreter"
+                    "destruction. address=%p, base_type=%d\n",
+                    p, p->vtable->base_type);
             }
 
             p = (PMC *)((char *)p + object_size);
@@ -1359,10 +1454,6 @@
 
 F<src/gc/memory.c>.
 
-=head1 HISTORY
-
-Initial version by Dan on 2001.10.2.
-
 =cut
 
 */

Modified: branches/ops_pct/src/gc/api.c
==============================================================================
--- branches/ops_pct/src/gc/api.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/api.c	Wed May  5 08:45:29 2010	(r46302)
@@ -177,13 +177,6 @@
         /* if object is a PMC and contains buffers or PMCs, then attach the PMC
          * to the chained mark list. */
         if (PObj_is_special_PMC_TEST(obj)) {
-            if (PObj_is_PMC_shared_TEST(obj)) {
-                Parrot_Interp i = PMC_sync(obj)->owner;
-
-                if (!i->mem_pools->gc_mark_ptr)
-                    i->mem_pools->gc_mark_ptr = obj;
-            }
-
             if (PObj_custom_mark_TEST(obj))
                 VTABLE_mark(interp, obj);
         }
@@ -205,7 +198,7 @@
 
 PARROT_EXPORT
 void
-Parrot_gc_mark_STRING_alive_fun(PARROT_INTERP, ARGMOD_NULLOK(STRING *obj))
+Parrot_gc_mark_STRING_alive_fun(SHIM_INTERP, ARGMOD_NULLOK(STRING *obj))
 {
     ASSERT_ARGS(Parrot_gc_mark_STRING_alive_fun)
     if (!STRING_IS_NULL(obj)) {
@@ -252,14 +245,12 @@
     };
 
     /* Assertions that GC subsystem has complete API */
-    PARROT_ASSERT(interp->gc_sys->finalize_gc_system);
-    PARROT_ASSERT(interp->gc_sys->destroy_child_interp);
-
     PARROT_ASSERT(interp->gc_sys->do_gc_mark);
     PARROT_ASSERT(interp->gc_sys->compact_string_pool);
 
-    PARROT_ASSERT(interp->gc_sys->mark_special);
-    PARROT_ASSERT(interp->gc_sys->pmc_needs_early_collection);
+    /* It should be mandatory. But there is abstraction leak in */
+    /* mark_foo_alive. */
+    /* PARROT_ASSERT(interp->gc_sys->mark_special); */
 
     PARROT_ASSERT(interp->gc_sys->allocate_pmc_header);
     PARROT_ASSERT(interp->gc_sys->free_pmc_header);
@@ -288,14 +279,6 @@
     PARROT_ASSERT(interp->gc_sys->reallocate_memory_chunk_with_interior_pointers);
     PARROT_ASSERT(interp->gc_sys->free_memory_chunk);
 
-    PARROT_ASSERT(interp->gc_sys->block_mark);
-    PARROT_ASSERT(interp->gc_sys->unblock_mark);
-    PARROT_ASSERT(interp->gc_sys->is_blocked_mark);
-
-    PARROT_ASSERT(interp->gc_sys->block_sweep);
-    PARROT_ASSERT(interp->gc_sys->unblock_sweep);
-    PARROT_ASSERT(interp->gc_sys->is_blocked_sweep);
-
     PARROT_ASSERT(interp->gc_sys->get_gc_info);
 }
 
@@ -346,12 +329,10 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ALLOCATION_ERROR,
             "Parrot VM: PMC allocation failed!\n");
 
-    if (flags & PObj_is_PMC_shared_FLAG)
-        Parrot_gc_add_pmc_sync(interp, pmc);
-
     PObj_get_FLAGS(pmc) = PObj_is_PMC_FLAG|flags;
     pmc->vtable         = NULL;
     PMC_data(pmc)       = NULL;
+    PMC_metadata(pmc)   = PMCNULL;
 
     return pmc;
 }
@@ -375,59 +356,6 @@
 
 /*
 
-=item C<void Parrot_gc_free_pmc_sync(PARROT_INTERP, PMC *p)>
-
-Frees the PMC_sync field of the PMC, if one exists.
-
-=cut
-
-*/
-
-void
-Parrot_gc_free_pmc_sync(PARROT_INTERP, ARGMOD(PMC *p))
-{
-    ASSERT_ARGS(Parrot_gc_free_pmc_sync)
-
-    if (PObj_is_PMC_shared_TEST(p) && PMC_sync(p)) {
-        MUTEX_DESTROY(PMC_sync(p)->pmc_lock);
-        mem_internal_free(PMC_sync(p));
-        PMC_sync(p) = NULL;
-    }
-}
-
-/*
-
-=item C<void Parrot_gc_add_pmc_sync(PARROT_INTERP, PMC *pmc)>
-
-Adds a C<Sync*> structure to the given C<PMC>. Initializes the PMC's owner
-field and the synchronization mutext. Throws an exception if Sync allocation
-fails.
-
-=cut
-
-*/
-
-void
-Parrot_gc_add_pmc_sync(PARROT_INTERP, ARGMOD(PMC *pmc))
-{
-    ASSERT_ARGS(Parrot_gc_add_pmc_sync)
-
-    /* This mutex already exists, leave it alone. */
-    if (PMC_sync(pmc))
-        return;
-
-    PMC_sync(pmc) = mem_gc_allocate_zeroed_typed(interp, Sync);
-
-    if (!PMC_sync(pmc))
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ALLOCATION_ERROR,
-            "Parrot VM: PMC Sync allocation failed!\n");
-
-    PMC_sync(pmc)->owner = interp;
-    MUTEX_INIT(PMC_sync(pmc)->pmc_lock);
-}
-
-/*
-
 =item C<STRING * Parrot_gc_new_string_header(PARROT_INTERP, UINTVAL flags)>
 
 Returns a new C<STRING> header from the string pool or the constant string
@@ -796,7 +724,8 @@
     ARGIN(Interp *source_interp))
 {
     ASSERT_ARGS(Parrot_gc_destroy_child_interp)
-    dest_interp->gc_sys->destroy_child_interp(dest_interp, source_interp);
+    if (dest_interp->gc_sys->destroy_child_interp)
+        dest_interp->gc_sys->destroy_child_interp(dest_interp, source_interp);
 }
 
 /*

Modified: branches/ops_pct/src/gc/gc_inf.c
==============================================================================
--- branches/ops_pct/src/gc/gc_inf.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/gc_inf.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -32,142 +32,145 @@
 #include "parrot/parrot.h"
 #include "gc_private.h"
 
+#define PANIC_OUT_OF_MEM(size) failed_allocation(__LINE__, (size))
+
 /* 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 gc_inf_allocate_buffer_storage(PARROT_INTERP,
+PARROT_DOES_NOT_RETURN
+static void failed_allocation(unsigned int line, unsigned long size);
+
+static void gc_inf_allocate_buffer_storage(SHIM_INTERP,
     ARGMOD(Buffer *buffer),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*buffer);
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static Buffer* gc_inf_allocate_bufferlike_header(PARROT_INTERP,
-    SHIM(size_t size))
-        __attribute__nonnull__(1);
+static Buffer* gc_inf_allocate_bufferlike_header(SHIM_INTERP,
+    SHIM(size_t size));
 
 PARROT_CAN_RETURN_NULL
-static void* gc_inf_allocate_fixed_size_storage(PARROT_INTERP, size_t size)
-        __attribute__nonnull__(1);
+static void* gc_inf_allocate_fixed_size_storage(SHIM_INTERP, size_t size);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_inf_allocate_memory_chunk(SHIM_INTERP, size_t size);
 
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_inf_allocate_memory_chunk_zeroed(SHIM_INTERP, size_t size);
+
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static void* gc_inf_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
+static void* gc_inf_allocate_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static PMC* gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
-        __attribute__nonnull__(1);
+static PMC* gc_inf_allocate_pmc_header(SHIM_INTERP, SHIM(UINTVAL flags));
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
-static STRING* gc_inf_allocate_string_header(PARROT_INTERP,
-    SHIM(UINTVAL flags))
-        __attribute__nonnull__(1);
+static STRING* gc_inf_allocate_string_header(SHIM_INTERP,
+    SHIM(UINTVAL flags));
 
-static void gc_inf_allocate_string_storage(PARROT_INTERP,
+static void gc_inf_allocate_string_storage(SHIM_INTERP,
     ARGMOD(STRING *str),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*str);
 
-static void gc_inf_compact_memory_pool(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-static void gc_inf_free_bufferlike_header(PARROT_INTERP,
-    ARGIN_NULLOK(Buffer *b),
-    SHIM(size_t size))
-        __attribute__nonnull__(1);
+static void gc_inf_compact_memory_pool(SHIM_INTERP);
+static void gc_inf_free_bufferlike_header(SHIM_INTERP,
+    ARGFREE(Buffer *b),
+    SHIM(size_t size));
 
-static void gc_inf_free_fixed_size_storage(PARROT_INTERP,
+static void gc_inf_free_fixed_size_storage(SHIM_INTERP,
     SHIM(size_t size),
     ARGMOD(void *data))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*data);
 
-static void gc_inf_free_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
+static void gc_inf_free_memory_chunk(SHIM_INTERP, ARGFREE(void *data));
+static void gc_inf_free_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
-static void gc_inf_free_pmc_header(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
-        __attribute__nonnull__(1);
-
-static void gc_inf_free_string_header(PARROT_INTERP,
-    ARGIN_NULLOK(STRING *s))
-        __attribute__nonnull__(1);
-
-static size_t gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
-        __attribute__nonnull__(1);
-
+static void gc_inf_free_pmc_header(SHIM_INTERP, ARGFREE(PMC *pmc));
+static void gc_inf_free_string_header(SHIM_INTERP, ARGFREE(STRING *s));
+static size_t gc_inf_get_gc_info(SHIM_INTERP, SHIM(Interpinfo_enum what));
 static void gc_inf_mark_and_sweep(SHIM_INTERP, UINTVAL flags);
-static void gc_inf_reallocate_buffer_storage(PARROT_INTERP,
+static void gc_inf_reallocate_buffer_storage(SHIM_INTERP,
     ARGMOD(Buffer *buffer),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*buffer);
 
-static void gc_inf_reallocate_string_storage(PARROT_INTERP,
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_inf_reallocate_memory_chunk(SHIM_INTERP,
+    ARGFREE(void *from),
+    size_t size);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_inf_reallocate_memory_chunk_zeroed(SHIM_INTERP,
+    ARGFREE(void *data),
+    size_t newsize,
+    size_t oldsize);
+
+static void gc_inf_reallocate_string_storage(SHIM_INTERP,
     ARGMOD(STRING *str),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*str);
 
+#define ASSERT_ARGS_failed_allocation __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_buffer_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(buffer))
+       PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_gc_inf_allocate_bufferlike_header \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_fixed_size_storage \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_allocate_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_allocate_memory_chunk_zeroed \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_pmc_attributes \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_gc_inf_allocate_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_allocate_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_gc_inf_allocate_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_allocate_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_allocate_string_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_gc_inf_compact_memory_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_free_bufferlike_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_gc_inf_compact_memory_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_free_bufferlike_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_free_fixed_size_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(data))
+       PARROT_ASSERT_ARG(data))
+#define ASSERT_ARGS_gc_inf_free_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_free_pmc_attributes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_gc_inf_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_get_gc_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_gc_inf_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_get_gc_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_mark_and_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_reallocate_buffer_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(buffer))
+       PARROT_ASSERT_ARG(buffer))
+#define ASSERT_ARGS_gc_inf_reallocate_memory_chunk \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_inf_reallocate_memory_chunk_zeroed \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_inf_reallocate_string_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str))
+       PARROT_ASSERT_ARG(str))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -211,7 +214,7 @@
 
 */
 static void
-gc_inf_compact_memory_pool(PARROT_INTERP)
+gc_inf_compact_memory_pool(SHIM_INTERP)
 {
     ASSERT_ARGS(gc_inf_compact_memory_pool)
 }
@@ -259,57 +262,61 @@
 
 */
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static PMC*
-gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
+gc_inf_allocate_pmc_header(SHIM_INTERP, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(gc_inf_allocate_pmc_header)
     return (PMC*)calloc(sizeof (PMC), 1);
 }
 
 static void
-gc_inf_free_pmc_header(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
+gc_inf_free_pmc_header(SHIM_INTERP, ARGFREE(PMC *pmc))
 {
     ASSERT_ARGS(gc_inf_free_pmc_header)
     if (pmc)
         free(pmc);
 }
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static STRING*
-gc_inf_allocate_string_header(PARROT_INTERP, SHIM(UINTVAL flags))
+gc_inf_allocate_string_header(SHIM_INTERP, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(gc_inf_allocate_string_header)
     return (STRING*)calloc(sizeof (STRING), 1);
 }
 
 static void
-gc_inf_free_string_header(PARROT_INTERP, ARGIN_NULLOK(STRING *s))
+gc_inf_free_string_header(SHIM_INTERP, ARGFREE(STRING *s))
 {
     ASSERT_ARGS(gc_inf_free_string_header)
     if (s)
         free(s);
 }
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static Buffer*
-gc_inf_allocate_bufferlike_header(PARROT_INTERP, SHIM(size_t size))
+gc_inf_allocate_bufferlike_header(SHIM_INTERP, SHIM(size_t size))
 {
     ASSERT_ARGS(gc_inf_allocate_bufferlike_header)
     return (Buffer*)calloc(sizeof (Buffer), 1);
 }
 
 static void
-gc_inf_free_bufferlike_header(PARROT_INTERP, ARGIN_NULLOK(Buffer *b), SHIM(size_t size))
+gc_inf_free_bufferlike_header(SHIM_INTERP, ARGFREE(Buffer *b), SHIM(size_t size))
 {
     ASSERT_ARGS(gc_inf_free_bufferlike_header)
     if (b)
         free(b);
 }
 
+PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static void*
-gc_inf_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
+gc_inf_allocate_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(gc_inf_allocate_pmc_attributes)
     const size_t attr_size = pmc->vtable->attr_size;
@@ -318,7 +325,7 @@
 }
 
 static void
-gc_inf_free_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
+gc_inf_free_pmc_attributes(SHIM_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(gc_inf_free_pmc_attributes)
     if (PMC_data(pmc))
@@ -327,30 +334,27 @@
 
 
 static void
-gc_inf_allocate_string_storage(PARROT_INTERP, ARGMOD(STRING *str), size_t size)
+gc_inf_allocate_string_storage(SHIM_INTERP, ARGMOD(STRING *str), size_t size)
 {
     ASSERT_ARGS(gc_inf_allocate_string_storage)
-    char *mem;
 
-    Buffer_buflen(str)   = 0;
-    Buffer_bufstart(str) = NULL;
-
-    if (size == 0)
-        return;
+    Buffer_buflen(str)   = size;
 
-    mem      = (char *)mem_internal_allocate(size);
+    if (size > 0) {
+        char * const mem = (char *)mem_internal_allocate(size);
 
-    Buffer_bufstart(str) = str->strstart = mem;
-    Buffer_buflen(str)   = size;
+        Buffer_bufstart(str) = str->strstart = mem;
+    }
+    else {
+        Buffer_bufstart(str) = NULL;
+    }
 }
 
 static void
-gc_inf_reallocate_string_storage(PARROT_INTERP, ARGMOD(STRING *str), size_t size)
+gc_inf_reallocate_string_storage(SHIM_INTERP, ARGMOD(STRING *str), size_t size)
 {
     ASSERT_ARGS(gc_inf_reallocate_string_storage)
-    char *mem;
-
-    mem      = (char *)mem_internal_realloc(Buffer_bufstart(str), size);
+    char * const mem     = (char *)mem_internal_realloc(Buffer_bufstart(str), size);
 
     Buffer_bufstart(str) = str->strstart = mem;
     Buffer_buflen(str)   = size;
@@ -358,7 +362,7 @@
 
 
 static void
-gc_inf_allocate_buffer_storage(PARROT_INTERP, ARGMOD(Buffer *buffer), size_t size)
+gc_inf_allocate_buffer_storage(SHIM_INTERP, ARGMOD(Buffer *buffer), size_t size)
 {
     ASSERT_ARGS(gc_inf_allocate_buffer_storage)
     char *mem;
@@ -376,12 +380,10 @@
 }
 
 static void
-gc_inf_reallocate_buffer_storage(PARROT_INTERP, ARGMOD(Buffer *buffer), size_t size)
+gc_inf_reallocate_buffer_storage(SHIM_INTERP, ARGMOD(Buffer *buffer), size_t size)
 {
     ASSERT_ARGS(gc_inf_reallocate_buffer_storage)
-    char *mem;
-
-    mem = (char *)mem_internal_realloc(Buffer_bufstart(buffer), size);
+    char * const mem = (char *)mem_internal_realloc(Buffer_bufstart(buffer), size);
 
     Buffer_bufstart(buffer) = mem;
     Buffer_buflen(buffer)   = size;
@@ -389,14 +391,14 @@
 
 PARROT_CAN_RETURN_NULL
 static void*
-gc_inf_allocate_fixed_size_storage(PARROT_INTERP, size_t size)
+gc_inf_allocate_fixed_size_storage(SHIM_INTERP, size_t size)
 {
     ASSERT_ARGS(gc_inf_allocate_fixed_size_storage)
     return calloc(size, 1);
 }
 
 static void
-gc_inf_free_fixed_size_storage(PARROT_INTERP, SHIM(size_t size), ARGMOD(void *data))
+gc_inf_free_fixed_size_storage(SHIM_INTERP, SHIM(size_t size), ARGMOD(void *data))
 {
     ASSERT_ARGS(gc_inf_free_fixed_size_storage)
     if (data)
@@ -413,7 +415,7 @@
 
 */
 static size_t
-gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
+gc_inf_get_gc_info(SHIM_INTERP, SHIM(Interpinfo_enum what))
 {
     ASSERT_ARGS(gc_inf_get_gc_info)
     return 0;
@@ -472,10 +474,126 @@
     interp->gc_sys->allocate_fixed_size_storage = gc_inf_allocate_fixed_size_storage;
     interp->gc_sys->free_fixed_size_storage     = gc_inf_free_fixed_size_storage;
 
+    /* We don't distinguish between chunk and chunk_with_pointers */
+    interp->gc_sys->allocate_memory_chunk   = gc_inf_allocate_memory_chunk;
+    interp->gc_sys->reallocate_memory_chunk = gc_inf_reallocate_memory_chunk;
+    interp->gc_sys->allocate_memory_chunk_with_interior_pointers
+                = gc_inf_allocate_memory_chunk_zeroed;
+    interp->gc_sys->reallocate_memory_chunk_with_interior_pointers
+                = gc_inf_reallocate_memory_chunk_zeroed;
+    interp->gc_sys->free_memory_chunk       = gc_inf_free_memory_chunk;
+
     interp->gc_sys->get_gc_info      = gc_inf_get_gc_info;
 
 }
 
+/*
+
+=item C<static void * gc_inf_allocate_memory_chunk(PARROT_INTERP, size_t size)>
+
+=item C<static void * gc_inf_reallocate_memory_chunk(PARROT_INTERP, void *from,
+size_t size)>
+
+=item C<static void * gc_inf_allocate_memory_chunk_zeroed(PARROT_INTERP, size_t
+size)>
+
+=item C<static void * gc_inf_reallocate_memory_chunk_zeroed(PARROT_INTERP, void
+*data, size_t newsize, size_t oldsize)>
+
+=item C<static void gc_inf_free_memory_chunk(PARROT_INTERP, void *data)>
+
+=item C<static void failed_allocation(unsigned int line, unsigned long size)>
+
+TODO Write docu.
+
+*/
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void *
+gc_inf_allocate_memory_chunk(SHIM_INTERP, size_t size)
+{
+    ASSERT_ARGS(gc_inf_allocate_memory_chunk)
+    void * const ptr = malloc(size);
+#ifdef DETAIL_MEMORY_DEBUG
+    fprintf(stderr, "Allocated %i at %p\n", size, ptr);
+#endif
+    if (!ptr)
+        PANIC_OUT_OF_MEM(size);
+    return ptr;
+}
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void *
+gc_inf_reallocate_memory_chunk(SHIM_INTERP, ARGFREE(void *from), size_t size)
+{
+    ASSERT_ARGS(gc_inf_reallocate_memory_chunk)
+    void *ptr;
+#ifdef DETAIL_MEMORY_DEBUG
+    fprintf(stderr, "Freed %p (realloc -- %i bytes)\n", from, size);
+#endif
+    if (from)
+        ptr = realloc(from, size);
+    else
+        ptr = calloc(1, size);
+#ifdef DETAIL_MEMORY_DEBUG
+    fprintf(stderr, "Allocated %i at %p\n", size, ptr);
+#endif
+    if (!ptr)
+        PANIC_OUT_OF_MEM(size);
+    return ptr;
+}
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void *
+gc_inf_allocate_memory_chunk_zeroed(SHIM_INTERP, size_t size)
+{
+    ASSERT_ARGS(gc_inf_allocate_memory_chunk_zeroed)
+    void * const ptr = calloc(1, (size_t)size);
+#ifdef DETAIL_MEMORY_DEBUG
+    fprintf(stderr, "Allocated %i at %p\n", size, ptr);
+#endif
+    if (!ptr)
+        PANIC_OUT_OF_MEM(size);
+    return ptr;
+}
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void *
+gc_inf_reallocate_memory_chunk_zeroed(SHIM_INTERP, ARGFREE(void *data),
+        size_t newsize, size_t oldsize)
+{
+    ASSERT_ARGS(gc_inf_reallocate_memory_chunk_zeroed)
+    void * const ptr = realloc(data, newsize);
+    if (newsize > oldsize)
+        memset((char*)ptr + oldsize, 0, newsize - oldsize);
+    return ptr;
+}
+
+static void
+gc_inf_free_memory_chunk(SHIM_INTERP, ARGFREE(void *data))
+{
+    ASSERT_ARGS(gc_inf_free_memory_chunk)
+#ifdef DETAIL_MEMORY_DEBUG
+    fprintf(stderr, "Freed %p\n", data);
+#endif
+    if (data)
+        free(data);
+}
+
+PARROT_DOES_NOT_RETURN
+static void
+failed_allocation(unsigned int line, unsigned long size)
+{
+    ASSERT_ARGS(failed_allocation)
+    fprintf(stderr, "Failed allocation of %lu bytes\n", size);
+    do_panic(NULL, "Out of mem", __FILE__, line);
+}
+
+
 
 /*
 

Modified: branches/ops_pct/src/gc/gc_ms.c
==============================================================================
--- branches/ops_pct/src/gc/gc_ms.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/gc_ms.c	Wed May  5 08:45:29 2010	(r46302)
@@ -31,16 +31,13 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static int gc_ms_active_sized_buffers(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static int gc_ms_active_sized_buffers(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 static void gc_ms_add_free_object(SHIM_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
+    SHIM(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
     ARGIN(void *to_add))
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*pool);
@@ -65,11 +62,19 @@
 static Buffer * gc_ms_allocate_bufferlike_header(PARROT_INTERP, size_t size)
         __attribute__nonnull__(1);
 
-static void * gc_ms_allocate_memory_chunk(PARROT_INTERP, size_t size)
-        __attribute__nonnull__(1);
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_ms_allocate_memory_chunk(SHIM_INTERP, size_t size);
 
-static void * gc_ms_allocate_memory_chunk_zeroed(PARROT_INTERP, size_t size)
-        __attribute__nonnull__(1);
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_ms_allocate_memory_chunk_zeroed(SHIM_INTERP, size_t size);
+
+PARROT_CANNOT_RETURN_NULL
+static void * gc_ms_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
 
 PARROT_CAN_RETURN_NULL
 static PMC* gc_ms_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
@@ -100,12 +105,11 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void gc_ms_free_attributes_from_pool(PARROT_INTERP,
+static void gc_ms_free_attributes_from_pool(
     ARGMOD(PMC_Attribute_Pool *pool),
     ARGMOD(void *data))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*data);
 
@@ -116,9 +120,7 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*obj);
 
-static void gc_ms_free_memory_chunk(PARROT_INTERP, ARGFREE(void *data))
-        __attribute__nonnull__(1);
-
+static void gc_ms_free_memory_chunk(SHIM_INTERP, ARGFREE(void *data));
 static void gc_ms_free_pmc_header(PARROT_INTERP, ARGMOD(PMC *pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -174,16 +176,18 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*buffer);
 
-static void * gc_ms_reallocate_memory_chunk(PARROT_INTERP,
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_ms_reallocate_memory_chunk(SHIM_INTERP,
     ARGFREE(void *from),
-    size_t size)
-        __attribute__nonnull__(1);
+    size_t size);
 
-static void * gc_ms_reallocate_memory_chunk_zeroed(PARROT_INTERP,
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+static void * gc_ms_reallocate_memory_chunk_zeroed(SHIM_INTERP,
     ARGFREE(void *data),
     size_t newsize,
-    size_t oldsize)
-        __attribute__nonnull__(1);
+    size_t oldsize);
 
 static void gc_ms_reallocate_string_storage(PARROT_INTERP,
     ARGMOD(STRING *str),
@@ -204,10 +208,8 @@
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*arg);
 
-static int gc_ms_total_sized_buffers(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static int gc_ms_total_sized_buffers(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 static int gc_ms_trace_active_PMCs(PARROT_INTERP,
     Parrot_gc_trace_type trace)
@@ -219,12 +221,39 @@
 static void gc_ms_unblock_GC_sweep(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+static void Parrot_gc_allocate_new_attributes_arena(
+    ARGMOD(PMC_Attribute_Pool *pool))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*pool);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_MALLOC
+static PMC_Attribute_Pool * Parrot_gc_create_attrib_pool(size_t attrib_idx);
+
+PARROT_CANNOT_RETURN_NULL
+static PMC_Attribute_Pool * Parrot_gc_get_attribute_pool(SHIM_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
+    size_t attrib_size)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
+
+PARROT_CANNOT_RETURN_NULL
+static void * Parrot_gc_get_attributes_from_pool(PARROT_INTERP,
+    ARGMOD(PMC_Attribute_Pool * pool))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(* pool);
+
+static void Parrot_gc_initialize_fixed_size_pools(SHIM_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
+    size_t init_num_pools)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
+
 #define ASSERT_ARGS_gc_ms_active_sized_buffers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_gc_ms_add_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(to_add))
 #define ASSERT_ARGS_gc_ms_alloc_objects __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -236,11 +265,12 @@
 #define ASSERT_ARGS_gc_ms_allocate_bufferlike_header \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_ms_allocate_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_allocate_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_ms_allocate_memory_chunk_zeroed \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_gc_ms_allocate_pmc_attributes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_gc_ms_allocate_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_allocate_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -259,14 +289,12 @@
     , PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_gc_ms_free_attributes_from_pool \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(data))
 #define ASSERT_ARGS_gc_ms_free_bufferlike_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(obj))
-#define ASSERT_ARGS_gc_ms_free_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_free_memory_chunk __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_gc_ms_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
@@ -298,11 +326,9 @@
      __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 = (\
-       PARROT_ASSERT_ARG(interp))
+#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 = (\
-       PARROT_ASSERT_ARG(interp))
+     __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) \
@@ -313,14 +339,26 @@
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_gc_ms_total_sized_buffers __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_gc_ms_trace_active_PMCs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_unblock_GC_mark __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_unblock_GC_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_Parrot_gc_allocate_new_attributes_arena \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pool))
+#define ASSERT_ARGS_Parrot_gc_create_attrib_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_gc_get_attribute_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(mem_pools))
+#define ASSERT_ARGS_Parrot_gc_get_attributes_from_pool \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pool))
+#define ASSERT_ARGS_Parrot_gc_initialize_fixed_size_pools \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(mem_pools))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -493,9 +531,6 @@
     pt_gc_start_mark(interp);
     Parrot_gc_run_init(interp, interp->mem_pools);
 
-    /* compact STRING pools to collect free headers and allocated buffers */
-    Parrot_gc_compact_memory_pool(interp);
-
     /* Now go trace the PMCs. returning true means we did a complete trace.
        false means it was a lazy trace. */
     if (gc_ms_trace_active_PMCs(interp, (flags & GC_trace_stack_FLAG)
@@ -506,8 +541,8 @@
 
         /* We've done the mark, now do the sweep. Pass the sweep callback
            function to the PMC pool and all the sized pools. */
-        header_pools_iterate_callback(interp, interp->mem_pools, POOL_BUFFER | POOL_PMC,
-            (void*)&total_free, gc_ms_sweep_cb);
+       header_pools_iterate_callback(interp, interp->mem_pools,
+            POOL_BUFFER | POOL_PMC, (void *)&total_free, gc_ms_sweep_cb);
 
     }
     else {
@@ -516,10 +551,13 @@
         Parrot_gc_clear_live_bits(interp, mem_pools->pmc_pool);
     }
 
+    /* compact STRING pools to collect free headers and allocated buffers */
+    Parrot_gc_compact_memory_pool(interp);
+
     pt_gc_stop_mark(interp);
 
     /* Note it */
-    mem_pools->gc_mark_runs++;
+    ++mem_pools->gc_mark_runs;
     --mem_pools->gc_mark_block_level;
     mem_pools->header_allocs_since_last_collect = 0;
 
@@ -628,7 +666,7 @@
             ? interp->mem_pools->constant_pmc_pool
             : interp->mem_pools->pmc_pool;
 
-    return (PMC*)pool->get_free_object(interp, interp->mem_pools, pool);
+    return (PMC *)pool->get_free_object(interp, interp->mem_pools, pool);
 }
 
 /*
@@ -651,7 +689,7 @@
 
     PObj_flags_SETTO((PObj *)pmc, PObj_on_free_list_FLAG);
     pool->add_free_object(interp, interp->mem_pools, pool, (PObj *)pmc);
-    pool->num_free_objects++;
+    ++pool->num_free_objects;
 }
 
 /*
@@ -674,7 +712,9 @@
             ? interp->mem_pools->constant_string_header_pool
             : interp->mem_pools->string_header_pool;
 
-    return (STRING*)pool->get_free_object(interp, interp->mem_pools, pool);
+    STRING *s = (STRING *)pool->get_free_object(interp, interp->mem_pools, pool);
+    memset(s, 0, sizeof (STRING));
+    return s;
 }
 
 
@@ -695,7 +735,7 @@
         Fixed_Size_Pool * const pool = interp->mem_pools->string_header_pool;
         PObj_flags_SETTO((PObj *)s, PObj_on_free_list_FLAG);
         pool->add_free_object(interp, interp->mem_pools, pool, s);
-        pool->num_free_objects++;
+        ++pool->num_free_objects;
     }
 }
 
@@ -748,7 +788,190 @@
 
 /*
 
-=item C<void * gc_ms_allocate_pmc_attributes(PARROT_INTERP, PMC *pmc)>
+=over 4
+
+=item C<static void * Parrot_gc_get_attributes_from_pool(PARROT_INTERP,
+PMC_Attribute_Pool * pool)>
+
+Get a new fixed-size storage space from the given pool. The pool contains
+information on the size of the item to allocate already.
+
+=item C<static void Parrot_gc_allocate_new_attributes_arena(PMC_Attribute_Pool
+*pool)>
+
+Allocate a new arena of fixed-sized data structures for the given pool.
+
+=item C<static void Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP,
+Memory_Pools *mem_pools, size_t init_num_pools)>
+
+Initialize the pools (zeroize)
+
+=item C<static PMC_Attribute_Pool * Parrot_gc_get_attribute_pool(PARROT_INTERP,
+Memory_Pools *mem_pools, size_t attrib_size)>
+
+Find a fixed-sized data structure pool given the size of the object to
+allocate. If the pool does not exist, create it.
+
+=item C<static PMC_Attribute_Pool * Parrot_gc_create_attrib_pool(size_t
+attrib_idx)>
+
+Create a new pool for fixed-sized data items with the given C<attrib_size>.
+
+=back
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static void *
+Parrot_gc_get_attributes_from_pool(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool * pool))
+{
+    ASSERT_ARGS(Parrot_gc_get_attributes_from_pool)
+    PMC_Attribute_Free_List *item;
+
+#if GC_USE_LAZY_ALLOCATOR
+    if (pool->free_list) {
+        item            = pool->free_list;
+        pool->free_list = item->next;
+    }
+    else if (pool->newfree) {
+        item          = pool->newfree;
+        pool->newfree = (PMC_Attribute_Free_List *)
+                        ((char *)(pool->newfree) + pool->attr_size);
+        if (pool->newfree >= pool->newlast)
+            pool->newfree = NULL;
+    }
+    else {
+        Parrot_gc_allocate_new_attributes_arena(pool);
+        return Parrot_gc_get_attributes_from_pool(interp, pool);
+    }
+#else
+    if (pool->free_list == NULL)
+        Parrot_gc_allocate_new_attributes_arena(pool);
+    item            = pool->free_list;
+    pool->free_list = item->next;
+#endif
+
+    --pool->num_free_objects;
+    return (void *)item;
+}
+
+
+static void
+Parrot_gc_allocate_new_attributes_arena(ARGMOD(PMC_Attribute_Pool *pool))
+{
+    ASSERT_ARGS(Parrot_gc_allocate_new_attributes_arena)
+    PMC_Attribute_Free_List *next;
+
+    const size_t num_items  = pool->objects_per_alloc;
+    const size_t item_size  = pool->attr_size;
+    const size_t item_space = item_size * num_items;
+    const size_t total_size = sizeof (PMC_Attribute_Arena) + item_space;
+
+    PMC_Attribute_Arena * const new_arena = (PMC_Attribute_Arena *)mem_internal_allocate(
+        total_size);
+
+    new_arena->prev = NULL;
+    new_arena->next = pool->top_arena;
+    pool->top_arena = new_arena;
+    next            = (PMC_Attribute_Free_List *)(new_arena + 1);
+
+#if GC_USE_LAZY_ALLOCATOR
+    pool->newfree   = next;
+    pool->newlast   = (PMC_Attribute_Free_List *)((char *)next + item_space);
+#else
+    pool->free_list = next;
+    for (i = 0; i < num_items; ++i) {
+        list        = next;
+        list->next  = (PMC_Attribute_Free_List *)((char *)list + item_size);
+        next        = list->next;
+    }
+    list->next      = pool->free_list;
+#endif
+
+    pool->num_free_objects += num_items;
+    pool->total_objects    += num_items;
+}
+
+static void
+Parrot_gc_initialize_fixed_size_pools(SHIM_INTERP,
+        ARGMOD(Memory_Pools *mem_pools),
+        size_t init_num_pools)
+{
+    ASSERT_ARGS(Parrot_gc_initialize_fixed_size_pools)
+    PMC_Attribute_Pool **pools;
+    const size_t total_size = (init_num_pools + 1) * sizeof (void *);
+
+    pools = (PMC_Attribute_Pool **)mem_internal_allocate(total_size);
+    memset(pools, 0, total_size);
+
+    mem_pools->attrib_pools = pools;
+    mem_pools->num_attribs = init_num_pools;
+}
+
+
+PARROT_CANNOT_RETURN_NULL
+static PMC_Attribute_Pool *
+Parrot_gc_get_attribute_pool(SHIM_INTERP,
+        ARGMOD(Memory_Pools *mem_pools),
+        size_t attrib_size)
+{
+    ASSERT_ARGS(Parrot_gc_get_attribute_pool)
+
+    PMC_Attribute_Pool **pools = mem_pools->attrib_pools;
+    const size_t         idx   = (attrib_size < sizeof (void *))
+                               ? 0
+                               : attrib_size - sizeof (void *);
+
+    if (mem_pools->num_attribs <= idx) {
+        const size_t total_length = idx + GC_ATTRIB_POOLS_HEADROOM;
+        const size_t total_size   = total_length * sizeof (void *);
+        const size_t current_size = mem_pools->num_attribs;
+        const size_t diff         = total_length - current_size;
+
+        pools = (PMC_Attribute_Pool **)mem_internal_realloc(pools, total_size);
+        memset(pools + current_size, 0, diff * sizeof (void *));
+        mem_pools->attrib_pools = pools;
+        mem_pools->num_attribs = total_length;
+    }
+
+    if (!pools[idx]) {
+        PMC_Attribute_Pool * const pool = Parrot_gc_create_attrib_pool(idx);
+        /* Create the first arena now, so we don't have to check for it later */
+        Parrot_gc_allocate_new_attributes_arena(pool);
+        pools[idx] = pool;
+    }
+
+    return pools[idx];
+}
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_MALLOC
+static PMC_Attribute_Pool *
+Parrot_gc_create_attrib_pool(size_t attrib_idx)
+{
+    ASSERT_ARGS(Parrot_gc_create_attrib_pool)
+    const size_t attrib_size = attrib_idx + sizeof (void *);
+    const size_t num_objs_raw =
+        (GC_FIXED_SIZE_POOL_SIZE - sizeof (PMC_Attribute_Arena)) / attrib_size;
+    const size_t num_objs = (num_objs_raw == 0)?(1):(num_objs_raw);
+    PMC_Attribute_Pool * const newpool = mem_internal_allocate_typed(PMC_Attribute_Pool);
+
+    newpool->attr_size         = attrib_size;
+    newpool->total_objects     = 0;
+    newpool->objects_per_alloc = num_objs;
+    newpool->num_free_objects  = 0;
+    newpool->free_list         = NULL;
+    newpool->top_arena         = NULL;
+
+    return newpool;
+}
+
+
+/*
+
+=item C<static void * gc_ms_allocate_pmc_attributes(PARROT_INTERP, PMC *pmc)>
 
 Allocates a new attribute structure for a PMC if it has the auto_attrs flag
 set.
@@ -758,7 +981,7 @@
 */
 
 PARROT_CANNOT_RETURN_NULL
-void *
+static void *
 gc_ms_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
 {
     ASSERT_ARGS(gc_ms_allocate_pmc_attributes)
@@ -799,9 +1022,9 @@
         const size_t item_size = attr_size < sizeof (void *) ? sizeof (void *) : attr_size;
         PMC_Attribute_Pool ** const pools = interp->mem_pools->attrib_pools;
         const size_t idx = item_size - sizeof (void *);
-        gc_ms_free_attributes_from_pool(interp, pools[idx], data);
+        gc_ms_free_attributes_from_pool(pools[idx], data);
 #else
-        gc_ms_free_memory_chunk(PMC_data(pmc));
+        gc_ms_free_memory_chunk(intepr, PMC_data(pmc));
         PMC_data(pmc) = NULL;
 #endif
     }
@@ -809,8 +1032,8 @@
 
 /*
 
-=item C<static void gc_ms_free_attributes_from_pool(PARROT_INTERP,
-PMC_Attribute_Pool *pool, void *data)>
+=item C<static void gc_ms_free_attributes_from_pool(PMC_Attribute_Pool *pool,
+void *data)>
 
 Frees a fixed-size data item back to the pool for later reallocation.  Private
 to this file.
@@ -818,9 +1041,7 @@
 */
 
 static void
-gc_ms_free_attributes_from_pool(PARROT_INTERP,
-    ARGMOD(PMC_Attribute_Pool *pool),
-    ARGMOD(void *data))
+gc_ms_free_attributes_from_pool(ARGMOD(PMC_Attribute_Pool *pool), ARGMOD(void *data))
 {
     ASSERT_ARGS(gc_ms_free_attributes_from_pool)
     PMC_Attribute_Free_List * const item = (PMC_Attribute_Free_List *)data;
@@ -828,7 +1049,7 @@
     item->next      = pool->free_list;
     pool->free_list = item;
 
-    pool->num_free_objects++;
+    ++pool->num_free_objects;
 }
 
 /*
@@ -849,18 +1070,16 @@
     ARGOUT(Buffer *buffer), size_t size)
 {
     ASSERT_ARGS(gc_ms_allocate_buffer_storage)
-    size_t new_size;
-    char *mem;
+    const size_t new_size   = ALIGNED_STRING_SIZE(size);
 
-    Buffer_buflen(buffer) = 0;
-    Buffer_bufstart(buffer) = NULL;
-    new_size = aligned_string_size(size);
-    mem = (char *)mem_allocate(interp, interp->mem_pools, new_size,
-        interp->mem_pools->memory_pool);
-    mem = aligned_mem(buffer, mem);
-    Buffer_bufstart(buffer) = mem;
-    new_size -= sizeof (void*);
-    Buffer_buflen(buffer) = new_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 *);
 }
 
 /*
@@ -888,9 +1107,7 @@
     Variable_Size_Pool * const pool = interp->mem_pools->memory_pool;
     size_t new_size, needed, old_size;
 
-    /*
-     * we don't shrink buffers
-     */
+    /* we don't shrink buffers */
     if (newsize <= Buffer_buflen(buffer))
         return;
 
@@ -902,25 +1119,20 @@
      * 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));
+    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;
-        Buffer_buflen(buffer) = newsize;
+        Buffer_buflen(buffer)  = newsize;
         return;
     }
 
     copysize = Buffer_buflen(buffer);
 
-    if (!PObj_COW_TEST(buffer))
-        pool->guaranteed_reclaimable += copysize;
-    else
-        pool->possibly_reclaimable   += copysize;
-
     mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
     mem = aligned_mem(buffer, mem);
 
@@ -934,6 +1146,9 @@
     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;
 }
 
 /*
@@ -969,12 +1184,15 @@
                 ? interp->mem_pools->constant_string_pool
                 : interp->mem_pools->memory_pool;
 
-    new_size = aligned_string_size(size);
+    new_size = ALIGNED_STRING_SIZE(size);
     mem      = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
-    mem     += sizeof (void*);
+    mem     += sizeof (void *);
 
     Buffer_bufstart(str) = str->strstart = mem;
-    Buffer_buflen(str)   = new_size - sizeof (void*);
+    Buffer_buflen(str)   = new_size - sizeof (void *);
+
+    /* Save pool used to allocate into buffer header */
+    *Buffer_poolptr(str) = pool->top_block;
 }
 
 /*
@@ -1013,15 +1231,15 @@
      * - 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));
+    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;
-        Buffer_buflen(str) = new_size - sizeof (void*);
+        Buffer_buflen(str) = new_size - sizeof (void *);
         return;
     }
 
@@ -1030,11 +1248,6 @@
     /* only copy used memory, not total string buffer */
     copysize = str->bufused;
 
-    if (!PObj_COW_TEST(str))
-        pool->guaranteed_reclaimable += Buffer_buflen(str);
-    else
-        pool->possibly_reclaimable   += Buffer_buflen(str);
-
     mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
     mem += sizeof (void *);
 
@@ -1042,12 +1255,15 @@
     oldmem             = str->strstart;
     Buffer_bufstart(str) = (void *)mem;
     str->strstart      = mem;
-    Buffer_buflen(str)   = new_size - sizeof (void*);
+    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;
 }
 
 /*
@@ -1095,7 +1311,7 @@
 
     const size_t idx   = size - sizeof (void *);
     PMC_Attribute_Pool ** const pools = interp->mem_pools->attrib_pools;
-    gc_ms_free_attributes_from_pool(interp, pools[idx], data);
+    gc_ms_free_attributes_from_pool(pools[idx], data);
 }
 
 /*
@@ -1117,8 +1333,10 @@
 
 */
 
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
 static void *
-gc_ms_allocate_memory_chunk(PARROT_INTERP, size_t size)
+gc_ms_allocate_memory_chunk(SHIM_INTERP, size_t size)
 {
     ASSERT_ARGS(gc_ms_allocate_memory_chunk)
     void * const ptr = malloc(size);
@@ -1130,8 +1348,10 @@
     return ptr;
 }
 
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
 static void *
-gc_ms_reallocate_memory_chunk(PARROT_INTERP, ARGFREE(void *from), size_t size)
+gc_ms_reallocate_memory_chunk(SHIM_INTERP, ARGFREE(void *from), size_t size)
 {
     ASSERT_ARGS(gc_ms_reallocate_memory_chunk)
     void *ptr;
@@ -1150,8 +1370,10 @@
     return ptr;
 }
 
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
 static void *
-gc_ms_allocate_memory_chunk_zeroed(PARROT_INTERP, size_t size)
+gc_ms_allocate_memory_chunk_zeroed(SHIM_INTERP, size_t size)
 {
     ASSERT_ARGS(gc_ms_allocate_memory_chunk_zeroed)
     void * const ptr = calloc(1, (size_t)size);
@@ -1163,8 +1385,10 @@
     return ptr;
 }
 
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
 static void *
-gc_ms_reallocate_memory_chunk_zeroed(PARROT_INTERP, ARGFREE(void *data),
+gc_ms_reallocate_memory_chunk_zeroed(SHIM_INTERP, ARGFREE(void *data),
         size_t newsize, size_t oldsize)
 {
     ASSERT_ARGS(gc_ms_reallocate_memory_chunk_zeroed)
@@ -1175,7 +1399,7 @@
 }
 
 static void
-gc_ms_free_memory_chunk(PARROT_INTERP, ARGFREE(void *data))
+gc_ms_free_memory_chunk(SHIM_INTERP, ARGFREE(void *data))
 {
     ASSERT_ARGS(gc_ms_free_memory_chunk)
 #ifdef DETAIL_MEMORY_DEBUG
@@ -1322,7 +1546,7 @@
 
 static void
 gc_ms_add_free_object(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
+        SHIM(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
         ARGIN(void *to_add))
 {
@@ -1361,26 +1585,28 @@
     PObj *free_list = (PObj *)pool->free_list;
 
 #if GC_USE_LAZY_ALLOCATOR
-    if (!free_list && !pool->newfree) {
-        (*pool->more_objects)(interp, mem_pools, pool);
-        free_list = (PObj *)pool->free_list;
-    }
 
+  HAVE_FREE:
     if (free_list) {
         ptr             = free_list;
         pool->free_list = ((GC_MS_PObj_Wrapper *)ptr)->next_ptr;
     }
-    else {
+    else if (pool->newfree) {
         Fixed_Size_Arena * const arena = pool->last_Arena;
         ptr           = (PObj *)pool->newfree;
         pool->newfree = (void *)((char *)pool->newfree + pool->object_size);
-        arena->used++;
+        ++arena->used;
 
         if (pool->newfree >= pool->newlast)
             pool->newfree = NULL;
 
         PARROT_ASSERT(ptr < (PObj *)pool->newlast);
     }
+    else {
+        (*pool->more_objects)(interp, mem_pools, pool);
+        free_list = (PObj *)pool->free_list;
+        goto HAVE_FREE;
+    }
 #else
     /* if we don't have any objects */
     if (!free_list) {
@@ -1392,9 +1618,6 @@
     pool->free_list = ((GC_MS_PObj_Wrapper*)ptr)->next_ptr;
 #endif
 
-    /* PObj_flags_SETTO(ptr, 0); */
-    memset(ptr, 0, pool->object_size);
-
     --pool->num_free_objects;
 
     return ptr;
@@ -1438,18 +1661,10 @@
     Parrot_add_to_free_list(interp, pool, new_arena);
 
     /* Allocate more next time */
-    if (GC_DEBUG(interp)) {
-        pool->objects_per_alloc *= GC_DEBUG_UNITS_PER_ALLOC_GROWTH_FACTOR;
-        pool->replenish_level =
-                (size_t)(pool->total_objects *
-                GC_DEBUG_REPLENISH_LEVEL_FACTOR);
-    }
-    else {
-        pool->objects_per_alloc = (size_t)(pool->objects_per_alloc *
-            UNITS_PER_ALLOC_GROWTH_FACTOR);
-        pool->replenish_level   =
-                (size_t)(pool->total_objects * REPLENISH_LEVEL_FACTOR);
-    }
+    pool->objects_per_alloc *= GC_DEBUG_UNITS_PER_ALLOC_GROWTH_FACTOR;
+    pool->replenish_level =
+            (size_t)(pool->total_objects *
+            GC_DEBUG_REPLENISH_LEVEL_FACTOR);
 
     /* check alloc size against maximum */
     alloc_size = pool->object_size * pool->objects_per_alloc;
@@ -1496,7 +1711,7 @@
 gc_ms_block_GC_mark(PARROT_INTERP)
 {
     ASSERT_ARGS(gc_ms_block_GC_mark)
-    interp->mem_pools->gc_mark_block_level++;
+    ++interp->mem_pools->gc_mark_block_level;
     Parrot_shared_gc_block(interp);
 }
 
@@ -1505,7 +1720,7 @@
 {
     ASSERT_ARGS(gc_ms_unblock_GC_mark)
     if (interp->mem_pools->gc_mark_block_level) {
-        interp->mem_pools->gc_mark_block_level--;
+        --interp->mem_pools->gc_mark_block_level;
         Parrot_shared_gc_unblock(interp);
     }
 }
@@ -1514,7 +1729,7 @@
 gc_ms_block_GC_sweep(PARROT_INTERP)
 {
     ASSERT_ARGS(gc_ms_block_GC_sweep)
-    interp->mem_pools->gc_sweep_block_level++;
+    ++interp->mem_pools->gc_sweep_block_level;
 }
 
 static void
@@ -1522,7 +1737,7 @@
 {
     ASSERT_ARGS(gc_ms_unblock_GC_sweep)
     if (interp->mem_pools->gc_sweep_block_level)
-        interp->mem_pools->gc_sweep_block_level--;
+        --interp->mem_pools->gc_sweep_block_level;
 }
 
 static unsigned int
@@ -1566,11 +1781,11 @@
             return mem_pools->pmc_pool->total_objects -
                    mem_pools->pmc_pool->num_free_objects;
         case ACTIVE_BUFFERS:
-            return gc_ms_active_sized_buffers(interp, mem_pools);
+            return gc_ms_active_sized_buffers(mem_pools);
         case TOTAL_PMCS:
             return mem_pools->pmc_pool->total_objects;
         case TOTAL_BUFFERS:
-            return gc_ms_total_sized_buffers(interp, mem_pools);
+            return gc_ms_total_sized_buffers(mem_pools);
         case HEADER_ALLOCS_SINCE_COLLECT:
             return mem_pools->header_allocs_since_last_collect;
         case MEM_ALLOCS_SINCE_COLLECT:
@@ -1590,8 +1805,7 @@
 
 /*
 
-=item C<static int gc_ms_active_sized_buffers(PARROT_INTERP, Memory_Pools *
-const mem_pools)>
+=item C<static int gc_ms_active_sized_buffers(const Memory_Pools *mem_pools)>
 
 Returns the number of actively used sized buffers.
 
@@ -1600,12 +1814,11 @@
 */
 
 static int
-gc_ms_active_sized_buffers(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+gc_ms_active_sized_buffers(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(gc_ms_active_sized_buffers)
     int j, ret = 0;
-    for (j = 0; j < (INTVAL)mem_pools->num_sized; j++) {
+    for (j = 0; j < (INTVAL)mem_pools->num_sized; ++j) {
         Fixed_Size_Pool * const header_pool =
             mem_pools->sized_header_pools[j];
         if (header_pool)
@@ -1617,8 +1830,7 @@
 
 /*
 
-=item C<static int gc_ms_total_sized_buffers(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static int gc_ms_total_sized_buffers(const Memory_Pools *mem_pools)>
 
 Returns the total number of sized buffers that we are managing.
 
@@ -1627,12 +1839,11 @@
 */
 
 static int
-gc_ms_total_sized_buffers(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+gc_ms_total_sized_buffers(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(gc_ms_total_sized_buffers)
     int j, ret = 0;
-    for (j = 0; j < (INTVAL)mem_pools->num_sized; j++) {
+    for (j = 0; j < (INTVAL)mem_pools->num_sized; ++j) {
         Fixed_Size_Pool * const header_pool =
             mem_pools->sized_header_pools[j];
         if (header_pool)

Modified: branches/ops_pct/src/gc/gc_private.h
==============================================================================
--- branches/ops_pct/src/gc/gc_private.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/gc_private.h	Wed May  5 08:45:29 2010	(r46302)
@@ -171,11 +171,14 @@
     struct Memory_Block *next;
     char *start;
     char *top;
+
+    /* Amount of freed memory. Used in compact_pool */
+    size_t freed;
 } Memory_Block;
 
 typedef struct Variable_Size_Pool {
     Memory_Block *top_block;
-    void (*compact)(PARROT_INTERP, struct Memory_Pools *const, struct Variable_Size_Pool *);
+    void (*compact)(PARROT_INTERP, struct Memory_Pools *, struct Variable_Size_Pool *);
     size_t minimum_block_size;
     size_t total_allocated; /* total bytes allocated to this pool */
     size_t guaranteed_reclaimable;     /* bytes that can definitely be reclaimed*/
@@ -314,8 +317,7 @@
 /* HEADERIZER BEGIN: src/gc/system.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-void trace_system_areas(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
+void trace_system_areas(PARROT_INTERP, ARGIN(const Memory_Pools *mem_pools))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -329,112 +331,93 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_WARN_UNUSED_RESULT
-INTVAL contained_in_pool(PARROT_INTERP,
+INTVAL contained_in_pool(
     ARGIN(const Fixed_Size_Pool *pool),
     ARGIN(const void *ptr))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 Fixed_Size_Pool * get_bufferlike_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     size_t buffer_size)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
 PARROT_IGNORABLE_RESULT
 int /*@alt void@*/
 header_pools_iterate_callback(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     int flag,
     ARGIN_NULLOK(void *arg),
-    NOTNULL(pool_iter_fn func))
+    ARGIN(pool_iter_fn func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(5);
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*mem_pools);
 
 void initialize_fixed_size_pools(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
+    ARGMOD(Memory_Pools *mem_pools))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
 void mark_special(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     ARGIN(PMC *obj))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*mem_pools);
 
-void Parrot_add_to_free_list(PARROT_INTERP,
+void Parrot_add_to_free_list(SHIM_INTERP,
     ARGMOD(Fixed_Size_Pool *pool),
     ARGMOD(Fixed_Size_Arena *arena))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*arena);
 
-void Parrot_append_arena_in_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+void Parrot_append_arena_in_pool(SHIM_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
     ARGMOD(Fixed_Size_Arena *new_arena),
     size_t size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*new_arena);
 
-void Parrot_gc_clear_live_bits(PARROT_INTERP,
+void Parrot_gc_clear_live_bits(SHIM_INTERP,
     ARGIN(const Fixed_Size_Pool *pool))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
-PMC_Attribute_Pool * Parrot_gc_get_attribute_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
-    size_t attrib_size)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-void * Parrot_gc_get_attributes_from_pool(PARROT_INTERP,
-    ARGMOD(PMC_Attribute_Pool * pool))
-        __attribute__nonnull__(1)
+void Parrot_gc_run_init(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(* pool);
-
-void Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
-    size_t init_num_pools)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-void Parrot_gc_run_init(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        FUNC_MODIFIES(*mem_pools);
 
 void Parrot_gc_sweep_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        FUNC_MODIFIES(*mem_pools)
         FUNC_MODIFIES(*pool);
 
 int Parrot_gc_trace_root(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     Parrot_gc_trace_type trace)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
 #define ASSERT_ARGS_contained_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(ptr))
 #define ASSERT_ARGS_get_bufferlike_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -451,31 +434,16 @@
     , PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(obj))
 #define ASSERT_ARGS_Parrot_add_to_free_list __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(arena))
 #define ASSERT_ARGS_Parrot_append_arena_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
+       PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(new_arena))
 #define ASSERT_ARGS_Parrot_gc_clear_live_bits __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_Parrot_gc_get_attribute_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
-#define ASSERT_ARGS_Parrot_gc_get_attributes_from_pool \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_Parrot_gc_initialize_fixed_size_pools \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_Parrot_gc_run_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_sweep_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -492,14 +460,9 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-char * aligned_mem(ARGIN(const Buffer *buffer), ARGIN(char *mem))
-        __attribute__nonnull__(1)
+char * aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
         __attribute__nonnull__(2);
 
-PARROT_CONST_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-size_t aligned_string_size(size_t len);
-
 void check_buffer_ptr(
     ARGMOD(Buffer * pobj),
     ARGMOD(Variable_Size_Pool * pool))
@@ -509,27 +472,28 @@
         FUNC_MODIFIES(* pool);
 
 void compact_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    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(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+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,
-    ARGIN(Memory_Pools * const mem_pools),
+    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(
@@ -541,28 +505,28 @@
         FUNC_MODIFIES(*source);
 
 void Parrot_gc_destroy_header_pools(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
+    ARGMOD(Memory_Pools *mem_pools))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
-void Parrot_gc_destroy_memory_pools(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+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),
-    ARGIN(Memory_Pools * const dest_arena),
-    ARGIN(Memory_Pools * const source_arena))
+    ARGMOD(Memory_Pools *dest_arena),
+    ARGIN(const Memory_Pools *source_arena))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dest_interp);
+        FUNC_MODIFIES(*dest_interp)
+        FUNC_MODIFIES(*dest_arena);
 
 #define ASSERT_ARGS_aligned_mem __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(buffer) \
-    , PARROT_ASSERT_ARG(mem))
-#define ASSERT_ARGS_aligned_string_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+       PARROT_ASSERT_ARG(mem))
 #define ASSERT_ARGS_check_buffer_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pobj) \
     , PARROT_ASSERT_ARG(pool))
@@ -571,8 +535,7 @@
     , PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_initialize_var_size_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_mem_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -586,8 +549,7 @@
     , PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_destroy_memory_pools \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_merge_memory_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest_interp) \
     , PARROT_ASSERT_ARG(dest_arena) \
@@ -603,12 +565,6 @@
 void * gc_ms_allocate_fixed_size_storage(PARROT_INTERP, size_t size)
         __attribute__nonnull__(1);
 
-PARROT_CANNOT_RETURN_NULL
-void * gc_ms_allocate_pmc_attributes(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pmc);
-
 void gc_ms_allocate_string_storage(PARROT_INTERP,
     ARGOUT(STRING *str),
     size_t size)
@@ -642,9 +598,6 @@
 #define ASSERT_ARGS_gc_ms_allocate_fixed_size_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_ms_allocate_pmc_attributes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_gc_ms_allocate_string_storage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(str))

Modified: branches/ops_pct/src/gc/malloc.c
==============================================================================
--- branches/ops_pct/src/gc/malloc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/malloc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1768,7 +1768,7 @@
     case 4:           *mzp++ = 0;                                             \
     case 3:           *mzp++ = 0;                                             \
     case 2:           *mzp++ = 0;                                             \
-    case 1:           *mzp++ = 0; if (mcn <= 0) break; mcn--; }                \
+    case 1:           *mzp++ = 0; if (mcn <= 0) break; --mcn; }                \
   }                                                                           \
 } while (0)
 
@@ -1787,7 +1787,7 @@
     case 4:           *mcdst++ = *mcsrc++;                                    \
     case 3:           *mcdst++ = *mcsrc++;                                    \
     case 2:           *mcdst++ = *mcsrc++;                                    \
-    case 1:           *mcdst++ = *mcsrc++; if (mcn <= 0) break; mcn--; }       \
+    case 1:           *mcdst++ = *mcsrc++; if (mcn <= 0) break; --mcn; }       \
   }                                                                           \
 } while (0)
 
@@ -3857,7 +3857,7 @@
 #if HAVE_MMAP
             int ret;
             INTERNAL_SIZE_T offset = p->prev_size;
-            av->n_mmaps--;
+            --av->n_mmaps;
             av->mmapped_mem -= (size + offset);
             ret = munmap((char*)p - offset, size + offset);
             /* munmap returns non-zero on failure */
@@ -4913,7 +4913,7 @@
           }
           / / save ptrs so they can be freed during cleanup
           our_os_pools[next_os_pool] = ptr;
-          next_os_pool++;
+          ++next_os_pool;
           ptr = (void *) ((((CHUNK_SIZE_T) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK);
           sbrk_top = (char *) ptr + size;
           return ptr;

Modified: branches/ops_pct/src/gc/malloc_trace.c
==============================================================================
--- branches/ops_pct/src/gc/malloc_trace.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/malloc_trace.c	Wed May  5 08:45:29 2010	(r46302)
@@ -76,9 +76,9 @@
     if (fd2>=0 && (count = read(fd2, cmdline, 127)) > 0) {
         close(fd2);
         cmdline[count] = 0;
-        for (s=cmdline; *s++;); s--;
+        for (s=cmdline; ++*s;); --s;
         while (--s>cmdline && *s!='/');
-        if (*s == '/') s++;
+        if (*s == '/') ++s;
         sprintf(name, LOG_NAME ".%.12s.%d", s, pid);
     }
         else {
@@ -116,7 +116,7 @@
     buffer[buffer_i].size = t.tv_sec;
     buffer[buffer_i].ptr = (void *)t.tv_usec;
     buffer[buffer_i].ptr2 = NULL;
-    buffer_i++;
+    ++buffer_i;
     if (fd < 0) open_log_file();
     if (getpid() != pid) { /* Oops, must have forked... */
         if (fd >= 0) close(fd);
@@ -176,7 +176,7 @@
         buffer[buffer_i].size = t.tv_sec;
         buffer[buffer_i].ptr = (void *)t.tv_usec;
         buffer[buffer_i].ptr2 = NULL;
-        buffer_i++;
+        ++buffer_i;
     }
     buffer[buffer_i].code = code;
     buffer[buffer_i].size = size;

Modified: branches/ops_pct/src/gc/mark_sweep.c
==============================================================================
--- branches/ops_pct/src/gc/mark_sweep.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/mark_sweep.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -32,10 +32,9 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 static void free_buffer(SHIM_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
+    SHIM(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
     ARGMOD(Buffer *b))
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*pool)
@@ -53,7 +52,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Fixed_Size_Pool * new_bufferlike_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGIN(const Memory_Pools *mem_pools),
     size_t actual_buffer_size)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -72,25 +71,14 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Fixed_Size_Pool * new_string_pool(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGMOD(Memory_Pools *mem_pools),
     INTVAL constant)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP,
-    ARGMOD(PMC_Attribute_Pool *pool))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pool);
-
-PARROT_CANNOT_RETURN_NULL
-static PMC_Attribute_Pool * Parrot_gc_create_attrib_pool(PARROT_INTERP,
-    size_t attrib_idx)
-        __attribute__nonnull__(1);
+        FUNC_MODIFIES(*mem_pools);
 
 #define ASSERT_ARGS_free_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
+       PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_free_pmc_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -105,12 +93,6 @@
 #define ASSERT_ARGS_new_string_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools))
-#define ASSERT_ARGS_Parrot_gc_allocate_new_attributes_arena \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_Parrot_gc_create_attrib_pool __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 */
 
@@ -119,7 +101,7 @@
 
 /*
 
-=item C<void Parrot_gc_run_init(PARROT_INTERP, Memory_Pools * const mem_pools)>
+=item C<void Parrot_gc_run_init(PARROT_INTERP, Memory_Pools *mem_pools)>
 
 Prepares the collector for a mark & sweep GC run. Initializes the various
 fields in the Memory_Pools structure that need to be zeroed out prior to the
@@ -130,8 +112,7 @@
 */
 
 void
-Parrot_gc_run_init(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+Parrot_gc_run_init(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(Parrot_gc_run_init)
 
@@ -142,7 +123,7 @@
 
 /*
 
-=item C<int Parrot_gc_trace_root(PARROT_INTERP, Memory_Pools * const mem_pools,
+=item C<int Parrot_gc_trace_root(PARROT_INTERP, Memory_Pools *mem_pools,
 Parrot_gc_trace_type trace)>
 
 Traces the root set with behavior that's dependent on the flags passed.
@@ -173,7 +154,7 @@
 
 int
 Parrot_gc_trace_root(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         Parrot_gc_trace_type trace)
 {
     ASSERT_ARGS(Parrot_gc_trace_root)
@@ -257,7 +238,7 @@
 
 /*
 
-=item C<void Parrot_gc_sweep_pool(PARROT_INTERP, Memory_Pools * const mem_pools,
+=item C<void Parrot_gc_sweep_pool(PARROT_INTERP, Memory_Pools *mem_pools,
 Fixed_Size_Pool *pool)>
 
 Puts any buffers/PMCs that are marked as "dead" or "black" onto the pool
@@ -269,7 +250,7 @@
 
 void
 Parrot_gc_sweep_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(Parrot_gc_sweep_pool)
@@ -287,12 +268,12 @@
         b = (PObj *)cur_arena->start_objects;
 
         /* loop only while there are objects in the arena */
-        for (i = objects_end; i; i--) {
+        for (i = objects_end; i; --i) {
 
             /* if it's on free list, do nothing */
 
             if (PObj_live_TEST(b)) {
-                total_used++;
+                ++total_used;
                 PObj_live_CLEAR(b);
                 PObj_get_FLAGS(b) &= ~PObj_custom_GC_FLAG;
             }
@@ -329,8 +310,7 @@
 
 /*
 
-=item C<INTVAL contained_in_pool(PARROT_INTERP, const Fixed_Size_Pool *pool,
-const void *ptr)>
+=item C<INTVAL contained_in_pool(const Fixed_Size_Pool *pool, const void *ptr)>
 
 Returns whether the given C<*ptr> points to a location in C<pool>.
 
@@ -340,7 +320,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-contained_in_pool(PARROT_INTERP, ARGIN(const Fixed_Size_Pool *pool), ARGIN(const void *ptr))
+contained_in_pool(ARGIN(const Fixed_Size_Pool *pool), ARGIN(const void *ptr))
 {
     ASSERT_ARGS(contained_in_pool)
     const Fixed_Size_Arena *arena;
@@ -361,8 +341,7 @@
 
 /*
 
-=item C<void mark_special(PARROT_INTERP, Memory_Pools * const mem_pools, PMC
-*obj)>
+=item C<void mark_special(PARROT_INTERP, Memory_Pools *mem_pools, PMC *obj)>
 
 Handles marking a PMC. Specifically, calls the VTABLE_mark for that PMC
 if one is present. Also handles marking shared PMCs.
@@ -372,31 +351,10 @@
 */
 
 void
-mark_special(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        ARGIN(PMC *obj))
+mark_special(PARROT_INTERP, ARGMOD(Memory_Pools *mem_pools), ARGIN(PMC *obj))
 {
     ASSERT_ARGS(mark_special)
 
-    /*
-     * If the object is shared, we have to use the arena and gc
-     * pointers of the originating interpreter.
-     *
-     * We are possibly changing another interpreter's data here, so
-     * the mark phase of GC must run only on one interpreter of a pool
-     * at a time. However, freeing unused objects can occur in parallel.
-     * And: to be sure that a shared object is dead, we have to finish
-     * the mark phase of all interpreters in a pool that might reference
-     * the object.
-     */
-    if (PObj_is_PMC_shared_TEST(obj)) {
-        interp = PMC_sync(obj)->owner;
-        PARROT_ASSERT(interp);
-
-        if (!mem_pools->gc_mark_ptr)
-            mem_pools->gc_mark_ptr = obj;
-    }
-
     PObj_get_FLAGS(obj) |= PObj_custom_GC_FLAG;
 
     /* clearing the flag is much more expensive then testing */
@@ -427,7 +385,7 @@
 */
 
 void
-Parrot_gc_clear_live_bits(PARROT_INTERP, ARGIN(const Fixed_Size_Pool *pool))
+Parrot_gc_clear_live_bits(SHIM_INTERP, ARGIN(const Fixed_Size_Pool *pool))
 {
     ASSERT_ARGS(Parrot_gc_clear_live_bits)
     Fixed_Size_Arena *arena;
@@ -437,7 +395,7 @@
         Buffer *b = (Buffer *)arena->start_objects;
         UINTVAL i;
 
-        for (i = 0; i < arena->used; i++) {
+        for (i = 0; i < arena->used; ++i) {
             PObj_live_CLEAR(b);
             b = (Buffer *)((char *)b + object_size);
         }
@@ -457,7 +415,7 @@
 */
 
 void
-Parrot_add_to_free_list(PARROT_INTERP,
+Parrot_add_to_free_list(SHIM_INTERP,
         ARGMOD(Fixed_Size_Pool  *pool),
         ARGMOD(Fixed_Size_Arena *arena))
 {
@@ -479,7 +437,7 @@
 #else
     /* Move all the new objects into the free list */
     arena->used          = num_objects;
-    for (i = 0; i < num_objects; i++) {
+    for (i = 0; i < num_objects; ++i) {
         pool->add_free_object(interp, pool, object);
         object = (void *)((char *)object + pool->object_size);
     }
@@ -490,8 +448,8 @@
 
 /*
 
-=item C<void Parrot_append_arena_in_pool(PARROT_INTERP, Memory_Pools * const
-mem_pools, Fixed_Size_Pool *pool, Fixed_Size_Arena *new_arena, size_t size)>
+=item C<void Parrot_append_arena_in_pool(PARROT_INTERP, Memory_Pools *mem_pools,
+Fixed_Size_Pool *pool, Fixed_Size_Arena *new_arena, size_t size)>
 
 Insert the new arena into the pool's structure. Arenas are stored in a
 linked list, so add the new arena to the list. Set information in the
@@ -502,8 +460,8 @@
 */
 
 void
-Parrot_append_arena_in_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+Parrot_append_arena_in_pool(SHIM_INTERP,
+        ARGMOD(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
         ARGMOD(Fixed_Size_Arena *new_arena), size_t size)
 {
@@ -595,8 +553,8 @@
 
 /*
 
-=item C<static Fixed_Size_Pool * new_bufferlike_pool(PARROT_INTERP, Memory_Pools
-* const mem_pools, size_t actual_buffer_size)>
+=item C<static Fixed_Size_Pool * new_bufferlike_pool(PARROT_INTERP, const
+Memory_Pools *mem_pools, size_t actual_buffer_size)>
 
 Creates a new pool for buffer-like structures. This is called from
 C<get_bufferlike_pool()>, and should probably not be called directly.
@@ -609,7 +567,7 @@
 PARROT_CANNOT_RETURN_NULL
 static Fixed_Size_Pool *
 new_bufferlike_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGIN(const Memory_Pools *mem_pools),
         size_t actual_buffer_size)
 {
     ASSERT_ARGS(new_bufferlike_pool)
@@ -663,8 +621,8 @@
 
 /*
 
-=item C<static Fixed_Size_Pool * new_string_pool(PARROT_INTERP, Memory_Pools *
-const mem_pools, INTVAL constant)>
+=item C<static Fixed_Size_Pool * new_string_pool(PARROT_INTERP, Memory_Pools
+*mem_pools, INTVAL constant)>
 
 Creates a new pool for C<STRING>s and returns it. This calls
 C<get_bufferlike_pool> internally, which in turn calls C<new_bufferlike_pool>.
@@ -676,9 +634,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Fixed_Size_Pool *
-new_string_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        INTVAL constant)
+new_string_pool(PARROT_INTERP, ARGMOD(Memory_Pools *mem_pools), INTVAL constant)
 {
     ASSERT_ARGS(new_string_pool)
     Fixed_Size_Pool *pool;
@@ -709,20 +665,35 @@
 
 static void
 free_buffer(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
+        SHIM(Memory_Pools *mem_pools),
         ARGMOD(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) {
-        if (!PObj_COW_TEST(b))
-            mem_pool->guaranteed_reclaimable += Buffer_buflen(b);
-        else
-            mem_pool->possibly_reclaimable   += Buffer_buflen(b);
+        /* Update Memory_Block usage */
+        if (PObj_is_movable_TESTALL(b)) {
+            INTVAL *buffer_flags = Buffer_bufrefcountptr(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;
@@ -731,8 +702,8 @@
 
 /*
 
-=item C<Fixed_Size_Pool * get_bufferlike_pool(PARROT_INTERP, Memory_Pools *
-const mem_pools, size_t buffer_size)>
+=item C<Fixed_Size_Pool * get_bufferlike_pool(PARROT_INTERP, Memory_Pools
+*mem_pools, size_t buffer_size)>
 
 Makes and return a bufferlike header pool for objects of a given size. If a
 pool for objects of that size already exists, no new pool will be created and
@@ -746,7 +717,7 @@
 PARROT_CANNOT_RETURN_NULL
 Fixed_Size_Pool *
 get_bufferlike_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         size_t buffer_size)
 {
     ASSERT_ARGS(get_bufferlike_pool)
@@ -777,8 +748,8 @@
 
 /*
 
-=item C<void initialize_fixed_size_pools(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<void initialize_fixed_size_pools(PARROT_INTERP, Memory_Pools
+*mem_pools)>
 
 The initialization routine for the interpreter's header pools. Initializes
 pools for string headers, constant string headers, buffers, PMCs and
@@ -792,8 +763,7 @@
 */
 
 void
-initialize_fixed_size_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+initialize_fixed_size_pools(PARROT_INTERP, ARGMOD(Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(initialize_fixed_size_pools)
 
@@ -827,8 +797,8 @@
 
 /*
 
-=item C<int header_pools_iterate_callback(PARROT_INTERP, Memory_Pools * const
-mem_pools, int flag, void *arg, pool_iter_fn func)>
+=item C<int header_pools_iterate_callback(PARROT_INTERP, Memory_Pools
+*mem_pools, int flag, void *arg, pool_iter_fn func)>
 
 Iterates through header pools, invoking the given callback function on each
 pool in the list matching the given criteria. Determines which pools to iterate
@@ -868,14 +838,14 @@
 PARROT_IGNORABLE_RESULT
 int
 header_pools_iterate_callback(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGMOD(Memory_Pools *mem_pools),
         int flag, ARGIN_NULLOK(void *arg),
-        NOTNULL(pool_iter_fn func))
+        ARGIN(pool_iter_fn func))
 {
     ASSERT_ARGS(header_pools_iterate_callback)
 
     if (flag & POOL_PMC) {
-        Fixed_Size_Pool *pool = flag & POOL_CONST
+        Fixed_Size_Pool * const pool = flag & POOL_CONST
             ? mem_pools->constant_pmc_pool
             : mem_pools->pmc_pool;
 
@@ -912,187 +882,6 @@
     return 0;
 }
 
-/*
-
-=over 4
-
-=item C<void * Parrot_gc_get_attributes_from_pool(PARROT_INTERP,
-PMC_Attribute_Pool * pool)>
-
-Get a new fixed-size storage space from the given pool. The pool contains
-information on the size of the item to allocate already.
-
-=item C<static void Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP,
-PMC_Attribute_Pool *pool)>
-
-Allocate a new arena of fixed-sized data structures for the given pool.
-
-=item C<void Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP, Memory_Pools *
-const mem_pools, size_t init_num_pools)>
-
-Initialize the pools (zeroize)
-
-=item C<PMC_Attribute_Pool * Parrot_gc_get_attribute_pool(PARROT_INTERP,
-Memory_Pools * const mem_pools, size_t attrib_size)>
-
-Find a fixed-sized data structure pool given the size of the object to
-allocate. If the pool does not exist, create it.
-
-=item C<static PMC_Attribute_Pool * Parrot_gc_create_attrib_pool(PARROT_INTERP,
-size_t attrib_idx)>
-
-Create a new pool for fixed-sized data items with the given C<attrib_size>.
-
-=back
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-void *
-Parrot_gc_get_attributes_from_pool(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool * pool))
-{
-    ASSERT_ARGS(Parrot_gc_get_attributes_from_pool)
-    PMC_Attribute_Free_List *item;
-
-#if GC_USE_LAZY_ALLOCATOR
-    if (pool->free_list) {
-        item            = pool->free_list;
-        pool->free_list = item->next;
-    }
-    else if (pool->newfree) {
-        item          = pool->newfree;
-        pool->newfree = (PMC_Attribute_Free_List *)
-                        ((char *)(pool->newfree) + pool->attr_size);
-        if (pool->newfree >= pool->newlast)
-            pool->newfree = NULL;
-    }
-    else {
-        Parrot_gc_allocate_new_attributes_arena(interp, pool);
-        return Parrot_gc_get_attributes_from_pool(interp, pool);
-    }
-#else
-    if (pool->free_list == NULL)
-        Parrot_gc_allocate_new_attributes_arena(interp, pool);
-    item            = pool->free_list;
-    pool->free_list = item->next;
-#endif
-
-    pool->num_free_objects--;
-    return (void *)item;
-}
-
-
-static void
-Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool *pool))
-{
-    ASSERT_ARGS(Parrot_gc_allocate_new_attributes_arena)
-    PMC_Attribute_Free_List *next;
-
-    const size_t num_items  = pool->objects_per_alloc;
-    const size_t item_size  = pool->attr_size;
-    const size_t item_space = item_size * num_items;
-    const size_t total_size = sizeof (PMC_Attribute_Arena) + item_space;
-
-    PMC_Attribute_Arena * const new_arena = (PMC_Attribute_Arena *)mem_internal_allocate(
-        total_size);
-
-    new_arena->prev = NULL;
-    new_arena->next = pool->top_arena;
-    pool->top_arena = new_arena;
-    next            = (PMC_Attribute_Free_List *)(new_arena + 1);
-
-#if GC_USE_LAZY_ALLOCATOR
-    pool->newfree   = next;
-    pool->newlast   = (PMC_Attribute_Free_List *)((char *)next + item_space);
-#else
-    pool->free_list = next;
-    for (i = 0; i < num_items; i++) {
-        list        = next;
-        list->next  = (PMC_Attribute_Free_List *)((char *)list + item_size);
-        next        = list->next;
-    }
-    list->next      = pool->free_list;
-#endif
-
-    pool->num_free_objects += num_items;
-    pool->total_objects    += num_items;
-}
-
-void
-Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        size_t init_num_pools)
-{
-    ASSERT_ARGS(Parrot_gc_initialize_fixed_size_pools)
-    PMC_Attribute_Pool **pools;
-    const size_t total_size = (init_num_pools + 1) * sizeof (void *);
-
-    pools = (PMC_Attribute_Pool **)mem_internal_allocate(total_size);
-    memset(pools, 0, total_size);
-
-    mem_pools->attrib_pools = pools;
-    mem_pools->num_attribs = init_num_pools;
-}
-
-
-PARROT_CANNOT_RETURN_NULL
-PMC_Attribute_Pool *
-Parrot_gc_get_attribute_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        size_t attrib_size)
-{
-    ASSERT_ARGS(Parrot_gc_get_attribute_pool)
-
-    PMC_Attribute_Pool **pools = mem_pools->attrib_pools;
-    const size_t         idx   = (attrib_size < sizeof (void *))
-                               ? 0
-                               : attrib_size - sizeof (void *);
-
-    if (mem_pools->num_attribs <= idx) {
-        const size_t total_length = idx + GC_ATTRIB_POOLS_HEADROOM;
-        const size_t total_size   = total_length * sizeof (void *);
-        const size_t current_size = mem_pools->num_attribs;
-        const size_t diff         = total_length - current_size;
-
-        pools = (PMC_Attribute_Pool **)mem_internal_realloc(pools, total_size);
-        memset(pools + current_size, 0, diff * sizeof (void *));
-        mem_pools->attrib_pools = pools;
-        mem_pools->num_attribs = total_length;
-    }
-
-    if (!pools[idx]) {
-        PMC_Attribute_Pool * const pool = Parrot_gc_create_attrib_pool(interp, idx);
-        /* Create the first arena now, so we don't have to check for it later */
-        Parrot_gc_allocate_new_attributes_arena(interp, pool);
-        pools[idx] = pool;
-    }
-
-    return pools[idx];
-}
-
-PARROT_CANNOT_RETURN_NULL
-static PMC_Attribute_Pool *
-Parrot_gc_create_attrib_pool(PARROT_INTERP, size_t attrib_idx)
-{
-    ASSERT_ARGS(Parrot_gc_create_attrib_pool)
-    const size_t attrib_size = attrib_idx + sizeof (void *);
-    const size_t num_objs_raw =
-        (GC_FIXED_SIZE_POOL_SIZE - sizeof (PMC_Attribute_Arena)) / attrib_size;
-    const size_t num_objs = (num_objs_raw == 0)?(1):(num_objs_raw);
-    PMC_Attribute_Pool * const newpool = mem_internal_allocate_typed(PMC_Attribute_Pool);
-
-    newpool->attr_size         = attrib_size;
-    newpool->total_objects     = 0;
-    newpool->objects_per_alloc = num_objs;
-    newpool->num_free_objects  = 0;
-    newpool->free_list         = NULL;
-    newpool->top_arena         = NULL;
-
-    return newpool;
-}
-
 
 /*
 

Modified: branches/ops_pct/src/gc/system.c
==============================================================================
--- branches/ops_pct/src/gc/system.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/gc/system.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -39,78 +39,62 @@
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
-static size_t get_max_buffer_address(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static size_t get_max_buffer_address(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
-static size_t get_max_pmc_address(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static size_t get_max_pmc_address(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
-static size_t get_min_buffer_address(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static size_t get_min_buffer_address(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
-static size_t get_min_pmc_address(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+static size_t get_min_pmc_address(ARGIN(const Memory_Pools *mem_pools))
+        __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
-static int is_buffer_ptr(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+static int is_buffer_ptr(
+    ARGIN(const Memory_Pools *mem_pools),
     ARGIN(const void *ptr))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static int is_pmc_ptr(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+static int is_pmc_ptr(
+    ARGIN(const Memory_Pools *mem_pools),
     ARGIN(const void *ptr))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2);
 
 static void trace_mem_block(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+    ARGIN(const Memory_Pools *mem_pools),
     size_t lo_var_ptr,
     size_t hi_var_ptr)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 static void trace_system_stack(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
+    ARGIN(const Memory_Pools *mem_pools))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 #define ASSERT_ARGS_find_common_mask __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_max_buffer_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_get_max_pmc_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_get_min_buffer_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_get_min_pmc_address __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_is_buffer_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
+       PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(ptr))
 #define ASSERT_ARGS_is_pmc_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools) \
+       PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(ptr))
 #define ASSERT_ARGS_trace_mem_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -123,7 +107,7 @@
 
 /*
 
-=item C<void trace_system_areas(PARROT_INTERP, Memory_Pools * const mem_pools)>
+=item C<void trace_system_areas(PARROT_INTERP, const Memory_Pools *mem_pools)>
 
 Initiates a trace of the system stack, looking for pointers which are being
 used by functions in the call chain, but which might not be marked as alive
@@ -136,8 +120,7 @@
 */
 
 void
-trace_system_areas(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+trace_system_areas(PARROT_INTERP, ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(trace_system_areas)
     {
@@ -245,8 +228,8 @@
 
 /*
 
-=item C<static void trace_system_stack(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static void trace_system_stack(PARROT_INTERP, const Memory_Pools
+*mem_pools)>
 
 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
@@ -258,8 +241,7 @@
 */
 
 static void
-trace_system_stack(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+trace_system_stack(PARROT_INTERP, ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(trace_system_stack)
     /* Create a local variable on the system stack. This represents the
@@ -275,8 +257,7 @@
 
 /*
 
-=item C<static size_t get_max_buffer_address(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static size_t get_max_buffer_address(const Memory_Pools *mem_pools)>
 
 Calculates the maximum buffer address and returns it. This is done by looping
 through all the sized pools, and finding the pool whose C<end_arena_memory>
@@ -290,14 +271,13 @@
 
 PARROT_WARN_UNUSED_RESULT
 static size_t
-get_max_buffer_address(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+get_max_buffer_address(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(get_max_buffer_address)
     size_t         max        = 0;
     UINTVAL        i;
 
-    for (i = 0; i < mem_pools->num_sized; i++) {
+    for (i = 0; i < mem_pools->num_sized; ++i) {
         if (mem_pools->sized_header_pools[i]) {
             if (mem_pools->sized_header_pools[i]->end_arena_memory > max)
                 max = mem_pools->sized_header_pools[i]->end_arena_memory;
@@ -310,8 +290,7 @@
 
 /*
 
-=item C<static size_t get_min_buffer_address(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static size_t get_min_buffer_address(const Memory_Pools *mem_pools)>
 
 Calculates the minimum buffer address and returns it. Loops through all sized
 pools, and finds the one with the smallest C<start_arena_memory> field. Notice
@@ -326,18 +305,17 @@
 
 PARROT_WARN_UNUSED_RESULT
 static size_t
-get_min_buffer_address(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+get_min_buffer_address(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(get_min_buffer_address)
     size_t         min        = (size_t) -1;
     UINTVAL        i;
 
-    for (i = 0; i < mem_pools->num_sized; i++) {
-        if (mem_pools->sized_header_pools[i]
-        &&  mem_pools->sized_header_pools[i]->start_arena_memory) {
-            if (mem_pools->sized_header_pools[i]->start_arena_memory < min)
-                min = mem_pools->sized_header_pools[i]->start_arena_memory;
+    for (i = 0; i < mem_pools->num_sized; ++i) {
+        const Fixed_Size_Pool * const pool = mem_pools->sized_header_pools[i];
+        if (pool && pool->start_arena_memory) {
+            if (pool->start_arena_memory < min)
+                min = pool->start_arena_memory;
         }
     }
 
@@ -347,8 +325,7 @@
 
 /*
 
-=item C<static size_t get_max_pmc_address(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static size_t get_max_pmc_address(const Memory_Pools *mem_pools)>
 
 Returns the maximum memory address used by the C<pmc_pool>.
 
@@ -358,8 +335,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static size_t
-get_max_pmc_address(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+get_max_pmc_address(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(get_max_pmc_address)
     return mem_pools->pmc_pool->end_arena_memory;
@@ -368,8 +344,7 @@
 
 /*
 
-=item C<static size_t get_min_pmc_address(PARROT_INTERP, Memory_Pools * const
-mem_pools)>
+=item C<static size_t get_min_pmc_address(const Memory_Pools *mem_pools)>
 
 Returns the minimum memory address used by the C<pmc_pool>. Notice that the
 memory region between C<get_min_pmc_address> and C<get_max_pmc_address> may be
@@ -381,8 +356,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static size_t
-get_min_pmc_address(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools))
+get_min_pmc_address(ARGIN(const Memory_Pools *mem_pools))
 {
     ASSERT_ARGS(get_min_pmc_address)
     return mem_pools->pmc_pool->start_arena_memory;
@@ -413,7 +387,7 @@
     /* Shifting a value by its size (in bits) or larger is undefined behaviour.
        So need an explicit check to return 0 if there is no prefix, rather than
        attempting to rely on (say) 0xFFFFFFFF << 32 being 0.  */
-    for (i = 0; i < bound; i++) {
+    for (i = 0; i < bound; ++i) {
         if (val1 == val2)
             return ~(size_t)0 << i;
 
@@ -432,8 +406,8 @@
 
 /*
 
-=item C<static void trace_mem_block(PARROT_INTERP, Memory_Pools * const
-mem_pools, size_t lo_var_ptr, size_t hi_var_ptr)>
+=item C<static void trace_mem_block(PARROT_INTERP, const Memory_Pools
+*mem_pools, size_t lo_var_ptr, size_t hi_var_ptr)>
 
 Traces the memory block between C<lo_var_ptr> and C<hi_var_ptr>.
 Attempt to find pointers to PObjs or buffers, and mark them as "alive"
@@ -446,17 +420,17 @@
 
 static void
 trace_mem_block(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+        ARGIN(const Memory_Pools *mem_pools),
         size_t lo_var_ptr, size_t hi_var_ptr)
 {
     ASSERT_ARGS(trace_mem_block)
     size_t    prefix;
     ptrdiff_t cur_var_ptr;
 
-    const size_t buffer_min = get_min_buffer_address(interp, mem_pools);
-    const size_t buffer_max = get_max_buffer_address(interp, mem_pools);
-    const size_t pmc_min    = get_min_pmc_address(interp, mem_pools);
-    const size_t pmc_max    = get_max_pmc_address(interp, mem_pools);
+    const size_t buffer_min = get_min_buffer_address(mem_pools);
+    const size_t buffer_max = get_max_buffer_address(mem_pools);
+    const size_t pmc_min    = get_min_pmc_address(mem_pools);
+    const size_t pmc_max    = get_max_pmc_address(mem_pools);
 
     const size_t mask       =
         find_common_mask(interp,
@@ -486,12 +460,11 @@
              * 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(interp, mem_pools, (void *)ptr)) {
+            if ((pmc_min <= ptr) && (ptr < pmc_max) && is_pmc_ptr(mem_pools, (void *)ptr)) {
                 Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr);
             }
-            else if (buffer_min <= ptr && ptr < buffer_max &&
-                    is_buffer_ptr(interp, mem_pools, (void *)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);
@@ -504,8 +477,8 @@
 
 /*
 
-=item C<static int is_buffer_ptr(PARROT_INTERP, Memory_Pools * const mem_pools,
-const void *ptr)>
+=item C<static int is_buffer_ptr(const Memory_Pools *mem_pools, const void
+*ptr)>
 
 Checks whether the given C<ptr> is located within one of the sized
 header pools. Returns C<1> if it is, and C<0> if not.
@@ -516,16 +489,14 @@
 
 PARROT_WARN_UNUSED_RESULT
 static int
-is_buffer_ptr(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        ARGIN(const void *ptr))
+is_buffer_ptr(ARGIN(const Memory_Pools *mem_pools), ARGIN(const void *ptr))
 {
     ASSERT_ARGS(is_buffer_ptr)
     UINTVAL        i;
 
-    for (i = 0; i < mem_pools->num_sized; i++) {
+    for (i = 0; i < mem_pools->num_sized; ++i) {
         if (mem_pools->sized_header_pools[i]
-            &&  contained_in_pool(interp, mem_pools->sized_header_pools[i], ptr))
+            &&  contained_in_pool(mem_pools->sized_header_pools[i], ptr))
             return 1;
     }
 
@@ -534,8 +505,7 @@
 
 /*
 
-=item C<static int is_pmc_ptr(PARROT_INTERP, Memory_Pools * const mem_pools,
-const void *ptr)>
+=item C<static int is_pmc_ptr(const Memory_Pools *mem_pools, const void *ptr)>
 
 Checks that C<ptr> is actually a PMC pointer. Returns C<1> if it is, C<0>
 otherwise.
@@ -546,12 +516,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 static int
-is_pmc_ptr(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
-        ARGIN(const void *ptr))
+is_pmc_ptr(ARGIN(const Memory_Pools *mem_pools), ARGIN(const void *ptr))
 {
     ASSERT_ARGS(is_pmc_ptr)
-        return contained_in_pool(interp, mem_pools->pmc_pool, ptr);
+        return contained_in_pool(mem_pools->pmc_pool, ptr);
 }
 
 

Modified: branches/ops_pct/src/global.c
==============================================================================
--- branches/ops_pct/src/global.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/global.c	Wed May  5 08:45:29 2010	(r46302)
@@ -648,7 +648,7 @@
     ASSERT_ARGS(Parrot_find_global_op)
     PMC *res;
 
-    if (!globalname)
+    if (STRING_IS_NULL(globalname))
         Parrot_ex_throw_from_c_args(interp, next, EXCEPTION_GLOBAL_NOT_FOUND,
             "Tried to get null global");
 

Modified: branches/ops_pct/src/global_setup.c
==============================================================================
--- branches/ops_pct/src/global_setup.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/global_setup.c	Wed May  5 08:45:29 2010	(r46302)
@@ -211,8 +211,7 @@
 parrot_global_setup_2(PARROT_INTERP)
 {
     ASSERT_ARGS(parrot_global_setup_2)
-    PMC *classname_hash, *iglobals;
-    int  i;
+    PMC *classname_hash;
 
     create_initial_context(interp);
 
@@ -228,13 +227,8 @@
     Parrot_register_core_pmcs(interp, classname_hash);
 
     /* init the interpreter globals array */
-    iglobals         = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    interp->iglobals = iglobals;
-    VTABLE_set_integer_native(interp, iglobals, (INTVAL)IGLOBALS_SIZE);
-
-    /* clear the array */
-    for (i = 0; i < (INTVAL)IGLOBALS_SIZE; i++)
-        VTABLE_set_pmc_keyed_int(interp, iglobals, i, NULL);
+    interp->iglobals = Parrot_pmc_new_init_int(interp,
+            enum_class_FixedPMCArray, (INTVAL)IGLOBALS_SIZE);
 }
 
 /*

Modified: branches/ops_pct/src/hash.c
==============================================================================
--- branches/ops_pct/src/hash.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/hash.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -54,7 +54,7 @@
         FUNC_MODIFIES(*hash);
 
 static void hash_freeze(PARROT_INTERP,
-    ARGIN(const Hash * const hash),
+    ARGIN(const Hash *hash),
     ARGMOD(PMC *info))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -76,7 +76,7 @@
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 static size_t key_hash_pointer(SHIM_INTERP,
     ARGIN(const void *value),
     size_t seed)
@@ -94,6 +94,12 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static int pointer_compare(SHIM_INTERP,
+    ARGIN_NULLOK(const void *a),
+    ARGIN_NULLOK(const void *b));
+
 #define ASSERT_ARGS_cstring_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(a) \
     , PARROT_ASSERT_ARG(b))
@@ -121,6 +127,7 @@
 #define ASSERT_ARGS_parrot_mark_hash_values __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(hash))
+#define ASSERT_ARGS_pointer_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -176,7 +183,8 @@
         return 1;
 
     /* COWed strings */
-    if (Buffer_bufstart(s1) == Buffer_bufstart(s2) && s1->bufused == s2->bufused)
+    if (Buffer_bufstart(s1) == Buffer_bufstart(s2)
+    &&  s1->bufused == s2->bufused)
         return 0;
 
     return CHARSET_COMPARE(interp, s1, s2);
@@ -185,7 +193,7 @@
 
 /*
 
-=item C<int pointer_compare(PARROT_INTERP, const void *a, const void *b)>
+=item C<static int pointer_compare(PARROT_INTERP, const void *a, const void *b)>
 
 Compares the two pointers, returning 0 if they are identical
 
@@ -194,8 +202,8 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-int
+PARROT_CONST_FUNCTION
+static int
 pointer_compare(SHIM_INTERP, ARGIN_NULLOK(const void *a), ARGIN_NULLOK(const void *b))
 {
     ASSERT_ARGS(pointer_compare)
@@ -215,7 +223,7 @@
 */
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
+PARROT_CONST_FUNCTION
 static size_t
 key_hash_pointer(SHIM_INTERP, ARGIN(const void *value), size_t seed)
 {
@@ -312,7 +320,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_PURE_FUNCTION
 int
-PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN_NULLOK(PMC *b))
+PMC_compare(PARROT_INTERP, ARGIN(PMC *a), ARGIN(PMC *b))
 {
     ASSERT_ARGS(PMC_compare)
 
@@ -399,7 +407,7 @@
 
 PARROT_EXPORT
 void
-parrot_mark_hash(PARROT_INTERP, ARGIN(Hash *hash))
+parrot_mark_hash(PARROT_INTERP, ARGMOD(Hash *hash))
 {
     ASSERT_ARGS(parrot_mark_hash)
     int mark_key   = 0;
@@ -564,18 +572,24 @@
         HashBucket *b;
 
         switch (hash->key_type) {
+          case Hash_key_type_int:
+            {
+                const INTVAL i_key = VTABLE_shift_integer(interp, info);
+                b = parrot_hash_put(interp, hash, (void*)i_key, NULL);
+            }
+            break;
           case Hash_key_type_STRING:
             {
                 STRING * const s_key = VTABLE_shift_string(interp, info);
                 b = parrot_hash_put(interp, hash, s_key, NULL);
             }
             break;
-          case Hash_key_type_int:
+          case Hash_key_type_PMC:
             {
-                const INTVAL i_key = VTABLE_shift_integer(interp, info);
-                b = parrot_hash_put(interp, hash, (void*)i_key, NULL);
+                PMC * const p_key = VTABLE_shift_pmc(interp, info);
+                b = parrot_hash_put(interp, hash, p_key, NULL);
+                break;
             }
-            break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented key type");
@@ -583,18 +597,24 @@
         }
 
         switch (hash->entry_type) {
-          case enum_hash_pmc:
-            {
-                PMC *p   = VTABLE_shift_pmc(interp, info);
-                b->value = (void *)p;
-                break;
-            }
           case enum_hash_int:
             {
                 const INTVAL i = VTABLE_shift_integer(interp, info);
                 b->value       = (void *)i;
                 break;
             }
+          case enum_hash_string:
+            {
+                STRING * const s = VTABLE_shift_string(interp, info);
+                b->value = (void *)s;
+                break;
+            }
+          case enum_hash_pmc:
+            {
+                PMC * const p = VTABLE_shift_pmc(interp, info);
+                b->value = (void *)p;
+                break;
+            }
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented value type");
@@ -606,8 +626,7 @@
 
 /*
 
-=item C<static void hash_freeze(PARROT_INTERP, const Hash * const hash, PMC
-*info)>
+=item C<static void hash_freeze(PARROT_INTERP, const Hash *hash, PMC *info)>
 
 Freezes hash into a string.
 
@@ -621,20 +640,23 @@
 */
 
 static void
-hash_freeze(PARROT_INTERP, ARGIN(const Hash * const hash), ARGMOD(PMC *info))
+hash_freeze(PARROT_INTERP, ARGIN(const Hash *hash), ARGMOD(PMC *info))
 {
     ASSERT_ARGS(hash_freeze)
     size_t           i;
 
-    for (i = 0; i < hash->entries; i++) {
+    for (i = 0; i < hash->entries; ++i) {
         HashBucket * const b = hash->bs+i;
 
         switch (hash->key_type) {
+          case Hash_key_type_int:
+            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+            break;
           case Hash_key_type_STRING:
             VTABLE_push_string(interp, info, (STRING *)b->key);
             break;
-          case Hash_key_type_int:
-            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+          case Hash_key_type_PMC:
+            VTABLE_push_pmc(interp, info, (PMC *)b->key);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -643,12 +665,15 @@
         }
 
         switch (hash->entry_type) {
-          case enum_hash_pmc:
-            VTABLE_push_pmc(interp, info, (PMC *)b->value);
-            break;
           case enum_hash_int:
             VTABLE_push_integer(interp, info, (INTVAL)b->value);
             break;
+          case enum_hash_string:
+            VTABLE_push_string(interp, info, (STRING *)b->value);
+            break;
+          case enum_hash_pmc:
+            VTABLE_push_pmc(interp, info, (PMC *)b->value);
+            break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented value type");
@@ -728,13 +753,13 @@
     ASSERT_ARGS(expand_hash)
     HashBucket  **old_bi, **new_bi;
     HashBucket   *bs, *b, *new_mem;
-    HashBucket   *old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
+    HashBucket * const old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
 
     void * const  old_mem    = hash->bs;
     const UINTVAL old_size   = hash->mask + 1;
     const UINTVAL new_size   = old_size << 1;
     const UINTVAL old_nb     = N_BUCKETS(old_size);
-    size_t        offset, i, new_loc;
+    size_t        offset, i;
 
     /*
        allocate some less buckets
@@ -792,8 +817,9 @@
      * as expand_hash is only called for that case).
      */
     if (offset) {
-        for (i = 0; i < old_size; ++i) {
-            HashBucket **next_p = new_bi + i;
+        size_t j;
+        for (j = 0; j < old_size; ++j) {
+            HashBucket **next_p = new_bi + j;
             while (*next_p) {
                 *next_p = (HashBucket *)((char *)*next_p + offset);
                 b       = *next_p;
@@ -805,11 +831,11 @@
     /* recalc bucket index */
     for (i = 0; i < old_size; ++i) {
         HashBucket **next_p = new_bi + i;
-        while (*next_p) {
-            b = *next_p;
+
+        while ((b = *next_p) != NULL) {
             /* rehash the bucket */
-            new_loc = (hash->hash_val)(interp, b->key, hash->seed) &
-                (new_size - 1);
+            const size_t new_loc =
+                (hash->hash_val)(interp, b->key, hash->seed) & (new_size - 1);
 
             if (i != new_loc) {
                 *next_p         = b->next;
@@ -988,14 +1014,9 @@
 
     for (i = 0, --bp; i < N_BUCKETS(INITIAL_BUCKETS); ++i, --bp) {
         bp->next        = hash->free_list;
-        bp->key         = NULL;
-        bp->value       = NULL;
         hash->free_list = bp;
     }
 
-    for (i = 0; i < INITIAL_BUCKETS; ++i)
-        hash->bi[i] = NULL;
-
     return hash;
 }
 
@@ -1007,16 +1028,18 @@
 Frees the memory allocated to the specified hash and its bucket store.  Used by
 parrot_chash_destroy.
 
+Unlike the C library function free(), the hash function must not be NULL.
+
 =cut
 
 */
 
 PARROT_EXPORT
 void
-parrot_hash_destroy(PARROT_INTERP, ARGMOD(Hash *hash))
+parrot_hash_destroy(PARROT_INTERP, ARGFREE_NOTNULL(Hash *hash))
 {
     ASSERT_ARGS(parrot_hash_destroy)
-    HashBucket *bp = (HashBucket*)((char*)hash + sizeof (Hash));
+    HashBucket * const bp = (HashBucket*)((char*)hash + sizeof (Hash));
     if (bp != hash->bs)
         mem_gc_free(interp, hash->bs);
     mem_gc_free(interp, hash);
@@ -1040,7 +1063,7 @@
     ASSERT_ARGS(parrot_chash_destroy)
     UINTVAL i;
 
-    for (i = 0; i <= hash->mask; i++) {
+    for (i = 0; i <= hash->mask; ++i) {
         HashBucket *bucket = hash->bi[i];
         while (bucket) {
             mem_gc_free(interp, bucket->key);
@@ -1075,7 +1098,7 @@
     ASSERT_ARGS(parrot_chash_destroy_values)
     UINTVAL i;
 
-    for (i = 0; i <= hash->mask; i++) {
+    for (i = 0; i <= hash->mask; ++i) {
         HashBucket *bucket = hash->bi[i];
         while (bucket) {
             mem_gc_free(interp, bucket->key);
@@ -1203,8 +1226,8 @@
         const UINTVAL  entries = hash->entries;
         UINTVAL        i;
 
-        for (i = 0; i < entries; i++) {
-            HashBucket *bucket = hash->bs + i;
+        for (i = 0; i < entries; ++i) {
+            HashBucket * const bucket = hash->bs + i;
 
             /* the hash->compare cost is too high for this fast path */
             if (bucket->key == key)
@@ -1234,7 +1257,8 @@
 
 /*
 
-=item C<void * parrot_hash_get(PARROT_INTERP, Hash *hash, const void *key)>
+=item C<void * parrot_hash_get(PARROT_INTERP, const Hash *hash, const void
+*key)>
 
 Returns the value keyed by C<key>, or C<NULL> if no bucket is found.
 
@@ -1246,7 +1270,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 void *
-parrot_hash_get(PARROT_INTERP, ARGIN(Hash *hash), ARGIN(const void *key))
+parrot_hash_get(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(const void *key))
 {
     ASSERT_ARGS(parrot_hash_get)
     const HashBucket * const bucket = parrot_hash_get_bucket(interp, hash, key);
@@ -1256,7 +1280,7 @@
 
 /*
 
-=item C<INTVAL parrot_hash_exists(PARROT_INTERP, Hash *hash, void *key)>
+=item C<INTVAL parrot_hash_exists(PARROT_INTERP, const Hash *hash, void *key)>
 
 Returns whether the key exists in the hash.
 
@@ -1267,7 +1291,7 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-parrot_hash_exists(PARROT_INTERP, ARGIN(Hash *hash), ARGIN(void *key))
+parrot_hash_exists(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(void *key))
 {
     ASSERT_ARGS(parrot_hash_exists)
     const HashBucket * const bucket = parrot_hash_get_bucket(interp, hash, key);
@@ -1300,13 +1324,14 @@
     /* When the hash is constant, check that the key and value are also
      * constant. */
     if (!PMC_IS_NULL(hash->container)
-            && PObj_constant_TEST(hash->container)) {
+    &&   PObj_constant_TEST(hash->container)) {
         if (hash->key_type == Hash_key_type_STRING
-                && !PObj_constant_TEST((PObj *)key))
+        && !PObj_constant_TEST((PObj *)key))
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
                 "Used non-constant key in constant hash.");
-        if (((hash->entry_type == enum_type_PMC) || (hash->entry_type == enum_type_STRING))
-                && !PObj_constant_TEST((PObj *)value))
+            if (((hash->entry_type == enum_type_PMC)
+            ||   (hash->entry_type == enum_type_STRING))
+            &&   !PObj_constant_TEST((PObj *)value))
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
                 "Used non-constant value in constant hash.");
     }
@@ -1321,7 +1346,6 @@
     if (bucket)
         bucket->value = value;
     else {
-
         bucket = hash->free_list;
 
         if (!bucket) {
@@ -1329,7 +1353,7 @@
             bucket = hash->free_list;
         }
 
-        hash->entries++;
+        ++hash->entries;
         hash->free_list                = bucket->next;
         bucket->key                    = key;
         bucket->value                  = value;
@@ -1368,7 +1392,7 @@
             else
                 hash->bi[hashval] = bucket->next;
 
-            hash->entries--;
+            --hash->entries;
             bucket->next    = hash->free_list;
             bucket->key     = NULL;
             hash->free_list = bucket;
@@ -1399,7 +1423,7 @@
     UINTVAL entries = hash->entries;
     UINTVAL i;
 
-    for (i = 0; i < entries; i++) {
+    for (i = 0; i < entries; ++i) {
         void         *valtmp;
         HashBucket   *b   = hash->bs+i;
         void * const  key = b->key;
@@ -1412,7 +1436,7 @@
             break;
 
           case enum_type_STRING:
-            valtmp = (void *)Parrot_str_copy(interp, (STRING *)b->value);
+            valtmp = b->value;
             break;
 
           case enum_type_PMC:
@@ -1428,9 +1452,8 @@
                     "hash corruption: type = %d\n", hash->entry_type);
         };
 
-        if (key){
+        if (key)
             parrot_hash_put(interp, dest, key, valtmp);
-        }
     }
 }
 
@@ -1512,8 +1535,7 @@
 
 /*
 
-=item C<void* hash_key_from_int(PARROT_INTERP, const Hash * const hash, INTVAL
-key)>
+=item C<void* hash_key_from_int(PARROT_INTERP, const Hash *hash, INTVAL key)>
 
 Cast INTVAL to hash key.
 
@@ -1523,7 +1545,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_key_from_int(PARROT_INTERP, ARGIN(const Hash * const hash), INTVAL key)
+hash_key_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL key)
 {
     ASSERT_ARGS(hash_key_from_int)
     void *ret;
@@ -1547,8 +1569,8 @@
 
 /*
 
-=item C<void* hash_key_from_string(PARROT_INTERP, const Hash * const hash,
-STRING *key)>
+=item C<void* hash_key_from_string(PARROT_INTERP, const Hash *hash, STRING
+*key)>
 
 Cast STRING to hash key.
 
@@ -1558,7 +1580,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_key_from_string(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN(STRING *key))
+hash_key_from_string(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(STRING *key))
 {
     ASSERT_ARGS(hash_key_from_string)
     void *ret;
@@ -1588,8 +1610,7 @@
 
 /*
 
-=item C<void* hash_key_from_pmc(PARROT_INTERP, const Hash * const hash, PMC
-*key)>
+=item C<void* hash_key_from_pmc(PARROT_INTERP, const Hash *hash, PMC *key)>
 
 Cast PMC* to hash key.
 
@@ -1599,7 +1620,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_key_from_pmc(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN(PMC *key))
+hash_key_from_pmc(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN(PMC *key))
 {
     ASSERT_ARGS(hash_key_from_pmc)
     void *ret;
@@ -1641,7 +1662,7 @@
       case Hash_key_type_STRING:
         {
             STRING * const tmp = VTABLE_get_string(interp, key);
-            if (!tmp)
+            if (STRING_IS_NULL(tmp))
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
                             "hash: can't use null as key");
             ret = (void *)tmp;
@@ -1656,8 +1677,7 @@
 
 /*
 
-=item C<INTVAL hash_key_to_int(PARROT_INTERP, const Hash * const hash, void
-*key)>
+=item C<INTVAL hash_key_to_int(PARROT_INTERP, const Hash *hash, void *key)>
 
 Cast hash key to INTVAL.
 
@@ -1666,7 +1686,7 @@
 */
 
 INTVAL
-hash_key_to_int(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *key))
+hash_key_to_int(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *key))
 {
     ASSERT_ARGS(hash_key_to_int)
     INTVAL ret;
@@ -1689,8 +1709,7 @@
 
 /*
 
-=item C<STRING* hash_key_to_string(PARROT_INTERP, const Hash * const hash, void
-*key)>
+=item C<STRING* hash_key_to_string(PARROT_INTERP, const Hash *hash, void *key)>
 
 Cast hash key to STRING.
 
@@ -1700,7 +1719,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING*
-hash_key_to_string(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *key))
+hash_key_to_string(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *key))
 {
     ASSERT_ARGS(hash_key_to_string)
     STRING *ret;
@@ -1762,7 +1781,7 @@
 
 /*
 
-=item C<void* hash_value_from_int(PARROT_INTERP, const Hash * const hash, INTVAL
+=item C<void* hash_value_from_int(PARROT_INTERP, const Hash *hash, INTVAL
 value)>
 
 Cast INTVAL to hash value.
@@ -1773,7 +1792,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_int(PARROT_INTERP, ARGIN(const Hash * const hash), INTVAL value)
+hash_value_from_int(PARROT_INTERP, ARGIN(const Hash *hash), INTVAL value)
 {
     ASSERT_ARGS(hash_value_from_int)
     void *ret;
@@ -1799,8 +1818,8 @@
 
 /*
 
-=item C<void* hash_value_from_string(PARROT_INTERP, const Hash * const hash,
-STRING *value)>
+=item C<void* hash_value_from_string(PARROT_INTERP, const Hash *hash, STRING
+*value)>
 
 Cast STRING to hash value.
 
@@ -1810,7 +1829,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_string(PARROT_INTERP, ARGIN(const Hash * const hash),
+hash_value_from_string(PARROT_INTERP, ARGIN(const Hash *hash),
         ARGIN_NULLOK(STRING *value))
 {
     ASSERT_ARGS(hash_value_from_string)
@@ -1842,8 +1861,7 @@
 
 /*
 
-=item C<void* hash_value_from_pmc(PARROT_INTERP, const Hash * const hash, PMC
-*value)>
+=item C<void* hash_value_from_pmc(PARROT_INTERP, const Hash *hash, PMC *value)>
 
 Cast PMC to hash value.
 
@@ -1853,7 +1871,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_pmc(PARROT_INTERP, ARGIN(const Hash * const hash),
+hash_value_from_pmc(PARROT_INTERP, ARGIN(const Hash *hash),
     ARGIN_NULLOK(PMC *value))
 {
     ASSERT_ARGS(hash_value_from_pmc)
@@ -1882,8 +1900,8 @@
 
 /*
 
-=item C<void* hash_value_from_number(PARROT_INTERP, const Hash * const hash,
-FLOATVAL value)>
+=item C<void* hash_value_from_number(PARROT_INTERP, const Hash *hash, FLOATVAL
+value)>
 
 Cast FLOATVAL to hash value.
 
@@ -1893,7 +1911,7 @@
 
 PARROT_CAN_RETURN_NULL
 void*
-hash_value_from_number(PARROT_INTERP, ARGIN(const Hash * const hash), FLOATVAL value)
+hash_value_from_number(PARROT_INTERP, ARGIN(const Hash *hash), FLOATVAL value)
 {
     ASSERT_ARGS(hash_value_from_number)
     void *ret;
@@ -1922,8 +1940,7 @@
 
 /*
 
-=item C<INTVAL hash_value_to_int(PARROT_INTERP, const Hash * const hash, void
-*value)>
+=item C<INTVAL hash_value_to_int(PARROT_INTERP, const Hash *hash, void *value)>
 
 Cast hash value to INTVAL.
 
@@ -1932,7 +1949,7 @@
 */
 
 INTVAL
-hash_value_to_int(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_int(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_int)
     INTVAL ret;
@@ -1956,8 +1973,8 @@
 
 /*
 
-=item C<STRING* hash_value_to_string(PARROT_INTERP, const Hash * const hash,
-void *value)>
+=item C<STRING* hash_value_to_string(PARROT_INTERP, const Hash *hash, void
+*value)>
 
 Cast hash value to STRING.
 
@@ -1967,7 +1984,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING*
-hash_value_to_string(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_string(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_string)
     STRING *ret;
@@ -1990,8 +2007,7 @@
 
 /*
 
-=item C<PMC* hash_value_to_pmc(PARROT_INTERP, const Hash * const hash, void
-*value)>
+=item C<PMC* hash_value_to_pmc(PARROT_INTERP, const Hash *hash, void *value)>
 
 Cast hash value to PMC.
 
@@ -2001,7 +2017,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 PMC*
-hash_value_to_pmc(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_pmc(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_pmc)
     PMC *ret;
@@ -2024,8 +2040,8 @@
 
 /*
 
-=item C<FLOATVAL hash_value_to_number(PARROT_INTERP, const Hash * const hash,
-void *value)>
+=item C<FLOATVAL hash_value_to_number(PARROT_INTERP, const Hash *hash, void
+*value)>
 
 Cast hash value to FLOATVAL.
 
@@ -2034,7 +2050,7 @@
 */
 
 FLOATVAL
-hash_value_to_number(PARROT_INTERP, ARGIN(const Hash * const hash), ARGIN_NULLOK(void *value))
+hash_value_to_number(PARROT_INTERP, ARGIN(const Hash *hash), ARGIN_NULLOK(void *value))
 {
     ASSERT_ARGS(hash_value_to_number)
     FLOATVAL ret;

Modified: branches/ops_pct/src/hll.c
==============================================================================
--- branches/ops_pct/src/hll.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/hll.c	Wed May  5 08:45:29 2010	(r46302)
@@ -52,16 +52,6 @@
 /* for shared HLL data, do COW stuff */
 #define START_READ_HLL_INFO(interp, hll_info)
 #define END_READ_HLL_INFO(interp, hll_info)
-#define START_WRITE_HLL_INFO(interp, hll_info) \
-    do { \
-        if (PObj_is_PMC_shared_TEST(hll_info) && PMC_sync((interp)->HLL_info)) { \
-            (hll_info) = (interp)->HLL_info = \
-                Parrot_clone((interp), (interp)->HLL_info); \
-            if (PMC_sync((interp)->HLL_info)) \
-                mem_internal_free(PMC_sync((interp)->HLL_info)); \
-        } \
-    } while (0)
-#define END_WRITE_HLL_INFO(interp, hll_info)
 
 
 /*
@@ -88,7 +78,8 @@
 
     PMC *entry_id;
 
-    PMC * const entry = Parrot_pmc_new_constant(interp, enum_class_FixedPMCArray);
+    PMC * const entry = Parrot_pmc_new_constant_init_int(interp,
+            enum_class_FixedPMCArray, e_HLL_MAX);
 
     if (entry_name && !STRING_IS_EMPTY(entry_name)) {
         VTABLE_set_pmc_keyed_str(interp, hll_info, entry_name, entry);
@@ -96,10 +87,7 @@
     else
         VTABLE_push_pmc(interp, hll_info, entry);
 
-    VTABLE_set_integer_native(interp, entry, e_HLL_MAX);
-
-    entry_id = Parrot_pmc_new_constant(interp, enum_class_Integer);
-    VTABLE_set_integer_native(interp, entry_id, id);
+    entry_id = Parrot_pmc_new_constant_init_int(interp, enum_class_Integer, id);
     VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_id, entry_id);
 
     return entry;
@@ -162,8 +150,6 @@
 
     hll_info = interp->HLL_info;
 
-    START_WRITE_HLL_INFO(interp, hll_info);
-
     idx      = VTABLE_elements(interp, hll_info);
     entry    = new_hll_entry(interp, hll_name);
 
@@ -192,9 +178,6 @@
     VTABLE_set_pointer(interp, type_hash, parrot_new_intval_hash(interp));
     VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_typemap, type_hash);
 
-    /* UNLOCK */
-    END_WRITE_HLL_INFO(interp, hll_info);
-
     return idx;
 }
 
@@ -217,11 +200,8 @@
 {
     ASSERT_ARGS(Parrot_register_HLL_lib)
     PMC   *hll_info = interp->HLL_info;
-    PMC   *entry, *name;
     INTVAL nelements, i;
 
-    START_WRITE_HLL_INFO(interp, hll_info);
-
     nelements = VTABLE_elements(interp, hll_info);
 
     for (i = 0; i < nelements; ++i) {
@@ -229,28 +209,28 @@
         PMC * const lib_name = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_lib);
 
         if (!PMC_IS_NULL(lib_name)) {
-            const STRING * const name = VTABLE_get_string(interp, lib_name);
-            if (Parrot_str_equal(interp, name, hll_lib))
+            const STRING * const lib_name_str = VTABLE_get_string(interp, lib_name);
+            if (Parrot_str_equal(interp, lib_name_str, hll_lib))
                 break;
         }
     }
 
     if (i < nelements)
         return i;
+    else {
+        PMC * const new_entry = new_hll_entry(interp, NULL);
+        PMC *name;
 
-    entry    = new_hll_entry(interp, NULL);
-
-    VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_name, PMCNULL);
-
-    /* register dynlib */
-    name    = Parrot_pmc_new_constant(interp, enum_class_String);
+        VTABLE_set_pmc_keyed_int(interp, new_entry, e_HLL_name, PMCNULL);
 
-    VTABLE_set_string_native(interp, name, hll_lib);
-    VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_lib, name);
+        /* register dynlib */
+        name    = Parrot_pmc_new_constant(interp, enum_class_String);
 
-    END_WRITE_HLL_INFO(interp, hll_info);
+        VTABLE_set_string_native(interp, name, hll_lib);
+        VTABLE_set_pmc_keyed_int(interp, new_entry, e_HLL_lib, name);
 
-    return 0;
+        return 0;
+    }
 }
 
 /*
@@ -271,15 +251,18 @@
 Parrot_get_HLL_id(PARROT_INTERP, ARGIN_NULLOK(STRING *hll_name))
 {
     ASSERT_ARGS(Parrot_get_HLL_id)
+    PMC *       entry;
     PMC * const hll_info = interp->HLL_info;
-    INTVAL      i;
+    INTVAL      i        = -1;
+
+    if (!hll_name)
+        return i;
 
     START_READ_HLL_INFO(interp, hll_info);
 
-    if (!hll_name || !VTABLE_exists_keyed_str(interp, hll_info, hll_name))
-        i = -1;
-    else {
-        PMC * const entry    = VTABLE_get_pmc_keyed_str(interp, hll_info, hll_name);
+    entry = VTABLE_get_pmc_keyed_str(interp, hll_info, hll_name);
+
+    if (!PMC_IS_NULL(entry)) {
         PMC * const entry_id = VTABLE_get_pmc_keyed_int(interp, entry, e_HLL_id);
         i = VTABLE_get_integer(interp, entry_id);
     }
@@ -355,15 +338,6 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
             "no such HLL ID (%vd)", hll_id);
 
-    /* the type might already be registered in a non-conflicting way, in which
-     * ca se we can avoid copying */
-    if (PObj_is_PMC_shared_TEST(hll_info) && PMC_sync(hll_info)) {
-        if (hll_type == Parrot_get_HLL_type(interp, hll_id, core_type))
-            return;
-    }
-
-    START_WRITE_HLL_INFO(interp, hll_info);
-
     entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
     PARROT_ASSERT(!PMC_IS_NULL(entry));
 
@@ -371,8 +345,6 @@
     PARROT_ASSERT(!PMC_IS_NULL(type_hash));
 
     VTABLE_set_integer_keyed_int(interp, type_hash, core_type, hll_type);
-
-    END_WRITE_HLL_INFO(interp, hll_info);
 }
 
 /*
@@ -518,11 +490,11 @@
         if (PMC_IS_NULL(ns_hash) ||
                 ns_hash->vtable->base_type == enum_class_Undef)
         {
-            STRING * const hll_name = Parrot_get_HLL_name(interp, hll_id);
+            STRING * hll_name = Parrot_get_HLL_name(interp, hll_id);
             if (!hll_name)
                 continue;
 
-            Parrot_str_downcase_inplace(interp, hll_name);
+            hll_name = Parrot_str_downcase(interp, hll_name);
 
             /* XXX as in Parrot_register_HLL() this needs to be fixed to use
              * the correct type of namespace. It's relatively easy to do that

Modified: branches/ops_pct/src/interp/inter_cb.c
==============================================================================
--- branches/ops_pct/src/interp/inter_cb.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/interp/inter_cb.c	Wed May  5 08:45:29 2010	(r46302)
@@ -314,11 +314,6 @@
       case 'v':
         pasm_sig[1] = 'v';
         break;
-#if 0
-      case '2':
-      case '3':
-      case '4':
-#endif
       case 'l':
         i_param = (INTVAL)(long) external_data;
         goto case_I;
@@ -334,14 +329,6 @@
         pasm_sig[1] = 'I';
         param = (void*) i_param;
         break;
-#if 0
-      case 'f':
-      case 'd':
-        /* these types don't fit into a pointer, they will not
-         * work
-         */
-        break;
-#endif
       case 'p':
         /* created a UnManagedStruct */
         p_param = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
@@ -349,11 +336,6 @@
         pasm_sig[1] = 'P';
         param = (void*) p_param;
         break;
-#if 0
-      case 'P':
-        pasm_sig[1] = 'P';
-        break;
-#endif
       case 't':
         pasm_sig[1] = 'S';
         param = Parrot_str_new(interp, external_data, 0);

Modified: branches/ops_pct/src/interp/inter_create.c
==============================================================================
--- branches/ops_pct/src/interp/inter_create.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/interp/inter_create.c	Wed May  5 08:45:29 2010	(r46302)
@@ -131,7 +131,11 @@
         interp->parent_interpreter = parent;
     else {
         interp->parent_interpreter = NULL;
+
+#if PARROT_CATCH_NULL
         PMCNULL                    = NULL;
+#endif
+
         /*
          * we need a global mutex to protect the interpreter array
          */
@@ -237,11 +241,6 @@
     /* param count mismatch is an error by default */
     PARROT_ERRORS_on(interp, PARROT_ERRORS_PARAM_COUNT_FLAG);
 
-#if 0
-    /* TODO not yet - too many test failures */
-    PARROT_ERRORS_on(interp, PARROT_ERRORS_RESULT_COUNT_FLAG);
-#endif
-
     create_initial_context(interp);
 
     /* clear context introspection vars */
@@ -369,6 +368,15 @@
      */
     Parrot_gc_completely_unblock(interp);
 
+    /* Set non buffered mode in standard out and err handles, flushing
+     * the buffers and avoiding pending output gets confused or lost in
+     * case of errors during destruction.
+     */
+    Parrot_io_setbuf(interp,
+            Parrot_io_stdhandle(interp, PIO_STDOUT_FILENO, NULL), PIOCTL_NONBUF);
+    Parrot_io_setbuf(interp,
+            Parrot_io_stdhandle(interp, PIO_STDERR_FILENO, NULL), PIOCTL_NONBUF);
+
     if (Interp_trace_TEST(interp, ~0)) {
         Parrot_io_eprintf(interp, "FileHandle objects (like stdout and stderr)"
             "are about to be closed, so clearing trace flags.\n");

Modified: branches/ops_pct/src/interp/inter_misc.c
==============================================================================
--- branches/ops_pct/src/interp/inter_misc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/interp/inter_misc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -111,10 +111,9 @@
 {
     ASSERT_ARGS(Parrot_mark_method_writes)
     STRING *const str_name = Parrot_str_new_constant(interp, name);
-    PMC    *const pmc_true = Parrot_pmc_new(interp, enum_class_Integer);
+    PMC    *const pmc_true = Parrot_pmc_new_init_int(interp, enum_class_Integer, 1);
     PMC    *const method   = VTABLE_get_pmc_keyed_str(
         interp, interp->vtables[type]->_namespace, str_name);
-    VTABLE_set_integer_native(interp, pmc_true, 1);
     VTABLE_setprop(interp, method, CONST_STRING(interp, "write"), pmc_true);
 }
 
@@ -131,17 +130,16 @@
 
 PARROT_EXPORT
 void
-Parrot_compreg(PARROT_INTERP, ARGIN(STRING *type),
-                    NOTNULL(Parrot_compiler_func_t func))
+Parrot_compreg(PARROT_INTERP, ARGIN(STRING *type), ARGIN(Parrot_compiler_func_t func))
 {
     ASSERT_ARGS(Parrot_compreg)
-    PMC* const iglobals = interp->iglobals;
-    PMC        *nci     = Parrot_pmc_new(interp, enum_class_NCI);
-    STRING     *sc      = CONST_STRING(interp, "PJt");
-    PMC        *hash    = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
+    PMC    * const iglobals = interp->iglobals;
+    PMC    * const nci      = Parrot_pmc_new(interp, enum_class_NCI);
+    STRING * const sc       = CONST_STRING(interp, "PJt");
+    PMC    * hash           = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
                               IGLOBALS_COMPREG_HASH);
 
-    if (!hash) {
+    if (PMC_IS_NULL(hash)) {
         hash = Parrot_pmc_new_noinit(interp, enum_class_Hash);
         VTABLE_init(interp, hash);
         VTABLE_set_pmc_keyed_int(interp, iglobals,
@@ -238,12 +236,6 @@
             else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "fast")))
                 return PARROT_FAST_CORE;
             else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "switch")))
-                return PARROT_SWITCH_CORE;
-            else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "cgp")))
-                return PARROT_CGP_CORE;
-            else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "cgoto")))
-                return PARROT_CGOTO_CORE;
-            else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "exec")))
                 return PARROT_EXEC_CORE;
             else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "gc_debug")))
                 return PARROT_GC_DEBUG_CORE;
@@ -273,30 +265,33 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PMC*
 interpinfo_p(PARROT_INTERP, INTVAL what)
 {
     ASSERT_ARGS(interpinfo_p)
+
+    PMC *result;
     switch (what) {
       case CURRENT_SUB:
-        return Parrot_pcc_get_sub(interp, CURRENT_CONTEXT(interp));
+        result = Parrot_pcc_get_sub(interp, CURRENT_CONTEXT(interp));
+        break;
       case CURRENT_CONT:
-        {
-            PMC * const cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
-            if (!PMC_IS_NULL(cont) && cont->vtable->base_type ==
-                    enum_class_RetContinuation)
-                return VTABLE_clone(interp, cont);
-            return cont;
-        }
+        result = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
+        break;
       case CURRENT_OBJECT:
-        return Parrot_pcc_get_object(interp, CURRENT_CONTEXT(interp));
+        result = Parrot_pcc_get_object(interp, CURRENT_CONTEXT(interp));
+        break;
       case CURRENT_LEXPAD:
-        return Parrot_pcc_get_lex_pad(interp, CURRENT_CONTEXT(interp));
+        result = Parrot_pcc_get_lex_pad(interp, CURRENT_CONTEXT(interp));
+        break;
       default:        /* or a warning only? */
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
                 "illegal argument in interpinfo");
     }
+
+    /* Don't send NULL values to P registers */
+    return result ? result : PMCNULL;
 }
 
 /*
@@ -323,15 +318,14 @@
     ASSERT_ARGS(interpinfo_s)
     switch (what) {
         case EXECUTABLE_FULLNAME: {
-            PMC *exe_name = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
+            PMC * const exe_name = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
                     IGLOBALS_EXECUTABLE);
             if (PMC_IS_NULL(exe_name))
                 return string_from_literal(interp, "");
             return VTABLE_get_string(interp, exe_name);
         }
         case EXECUTABLE_BASENAME: {
-            STRING *basename;
-            PMC    *exe_name = VTABLE_get_pmc_keyed_int(interp,
+            PMC    * const exe_name = VTABLE_get_pmc_keyed_int(interp,
                                 interp->iglobals, IGLOBALS_EXECUTABLE);
 
             if (PMC_IS_NULL(exe_name))
@@ -339,17 +333,18 @@
 
             else {
                 /* Need to strip back to what follows the final / or \. */
-                STRING *       fullname   = VTABLE_get_string(interp, exe_name);
+                STRING * const fullname   = VTABLE_get_string(interp, exe_name);
                 char   * const fullname_c = Parrot_str_to_cstring(interp, fullname);
                 int            pos        = strlen(fullname_c) - 1;
+                STRING *basename;
 
                 while (pos              >  0
                 &&     fullname_c[pos] != '/'
                 &&     fullname_c[pos] != '\\')
-                    pos--;
+                    --pos;
 
                 if (pos > 0)
-                    pos++;
+                    ++pos;
 
                 basename = Parrot_str_new(interp, fullname_c + pos, 0);
                 Parrot_str_free_cstring(fullname_c);

Modified: branches/ops_pct/src/io/api.c
==============================================================================
--- branches/ops_pct/src/io/api.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/api.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -28,6 +28,7 @@
 */
 
 #include "parrot/parrot.h"
+#include "parrot/extend.h"
 #include "io_private.h"
 #include "api.str"
 #include "pmc/pmc_filehandle.h"
@@ -122,25 +123,24 @@
     ASSERT_ARGS(Parrot_io_open)
     PMC *new_filehandle, *filehandle;
     INTVAL flags;
+    const INTVAL typenum = Parrot_get_ctx_HLL_type(interp,
+                                                   Parrot_PMC_typenum(interp, "FileHandle"));
     if (PMC_IS_NULL(pmc)) {
-        /* TODO: We should look up the HLL mapped type, instead of always
-           using FileHandle here */
-        new_filehandle = Parrot_pmc_new(interp, enum_class_FileHandle);
-        PARROT_ASSERT(new_filehandle->vtable->base_type == enum_class_FileHandle);
+        new_filehandle = Parrot_pmc_new(interp, typenum);
     }
     else
         new_filehandle = pmc;
 
     flags = Parrot_io_parse_open_flags(interp, mode);
-    if (new_filehandle->vtable->base_type == enum_class_FileHandle) {
+    if (new_filehandle->vtable->base_type == typenum) {
         /* TODO: StringHandle may have a null path, but a filehandle really
            shouldn't allow that. */
-        PARROT_ASSERT(new_filehandle->vtable->base_type == enum_class_FileHandle);
+        PARROT_ASSERT(new_filehandle->vtable->base_type == typenum);
         filehandle = PIO_OPEN(interp, new_filehandle, path, flags);
         if (PMC_IS_NULL(filehandle))
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Unable to open filehandle from path '%S'", path);
-        PARROT_ASSERT(filehandle->vtable->base_type == enum_class_FileHandle);
+        PARROT_ASSERT(filehandle->vtable->base_type == typenum);
         SETATTR_FileHandle_flags(interp, new_filehandle, flags);
         SETATTR_FileHandle_filename(interp, new_filehandle, path);
         SETATTR_FileHandle_mode(interp, new_filehandle, mode);
@@ -179,9 +179,8 @@
 {
     ASSERT_ARGS(Parrot_io_fdopen)
     PMC *new_filehandle;
-    INTVAL flags;
+    const INTVAL flags = Parrot_io_parse_open_flags(interp, sflags);
 
-    flags = Parrot_io_parse_open_flags(interp, sflags);
     if (!flags)
         return PMCNULL;
 
@@ -349,7 +348,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot read from a closed or non-readable filehandle");
 
-        result = Parrot_io_make_string(interp, &result, length);
+        result = Parrot_str_new_noinit(interp, enum_stringrep_one, length);
         result->bufused = length;
 
         if (Parrot_io_is_encoding(interp, pmc, CONST_STRING(interp, "utf8")))
@@ -367,11 +366,10 @@
                 "Cannot read from a closed filehandle");
 
         if (length == 0)
-            result = Parrot_str_copy(interp, string_orig);
+            result = string_orig;
         else {
-            INTVAL orig_length, read_length;
-            read_length = length;
-            orig_length = Parrot_str_byte_length(interp, string_orig);
+            INTVAL read_length = length;
+            const INTVAL orig_length = Parrot_str_byte_length(interp, string_orig);
 
             GETATTR_StringHandle_read_offset(interp, pmc, offset);
 
@@ -379,8 +377,7 @@
             if (offset + read_length > orig_length)
                 read_length = orig_length - offset;
 
-            result = Parrot_str_substr(interp, string_orig, offset,
-                    read_length, NULL, 0);
+            result = Parrot_str_substr(interp, string_orig, offset, read_length);
             SETATTR_StringHandle_read_offset(interp, pmc, offset + read_length);
         }
     }
@@ -438,8 +435,7 @@
         else
             read_length = newline_pos - offset + 1; /* +1 to include the newline */
 
-        result = Parrot_str_substr(interp, result, offset,
-                read_length, NULL, 0);
+        result = Parrot_str_substr(interp, result, offset, read_length);
         SETATTR_StringHandle_read_offset(interp, pmc, newline_pos + 1);
     }
     else
@@ -464,14 +460,13 @@
 Parrot_io_write(PARROT_INTERP, ARGMOD(PMC *pmc), ARGIN(const void *buffer), size_t length)
 {
     ASSERT_ARGS(Parrot_io_write)
-    DECL_CONST_CAST;
     INTVAL result;
     STRING *s;
 
     if (PMC_IS_NULL(pmc))
         return -1;
 
-    s = Parrot_str_new(interp, (char *) PARROT_const_cast(void *, buffer), length);
+    s = Parrot_str_new(interp, (const char *)buffer, length);
 
     result = Parrot_io_putps(interp, pmc, s);
     return result;
@@ -905,7 +900,7 @@
 
 =item C<PIOOFF_T Parrot_io_make_offset_pmc(PARROT_INTERP, PMC *pmc)>
 
-Returns the return value of the C<get_integer> vtable method on C<*pmc>.
+Returns the return value of the C<get_integer> vtable on C<*pmc>.
 
 =cut
 

Modified: branches/ops_pct/src/io/buffer.c
==============================================================================
--- branches/ops_pct/src/io/buffer.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/buffer.c	Wed May  5 08:45:29 2010	(r46302)
@@ -228,14 +228,13 @@
 Parrot_io_fill_readbuf(PARROT_INTERP, ARGMOD(PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_fill_readbuf)
-    size_t   got;
-    STRING   fake;
-    STRING  *s    = &fake;
     PIOOFF_T pos  = Parrot_io_get_file_position(interp, filehandle);
-
-    Buffer_bufstart(s) = Parrot_io_get_buffer_start(interp, filehandle);
-    fake.bufused       = Parrot_io_get_buffer_size(interp, filehandle);
-    got                = PIO_READ(interp, filehandle, &s);
+    char    *buf  = (char *) Parrot_io_get_buffer_start(interp, filehandle);
+    size_t   size = Parrot_io_get_buffer_size(interp, filehandle);
+    STRING  *s    = Parrot_str_new_init(interp, buf, size,
+                        PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                        PObj_external_FLAG);
+    size_t   got  = PIO_READ(interp, filehandle, &s);
 
     /* buffer-filling does not change fileposition */
     Parrot_io_set_file_position(interp, filehandle, pos);
@@ -267,9 +266,10 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 size_t
 Parrot_io_read_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle),
-              ARGIN(STRING **buf))
+              ARGMOD(STRING **buf))
 {
     ASSERT_ARGS(Parrot_io_read_buffer)
     unsigned char *out_buf, *buffer_start, *buffer_next, *buffer_end;
@@ -292,17 +292,11 @@
     if (Parrot_io_get_flags(interp, filehandle) & PIO_F_LINEBUF)
         return Parrot_io_readline_buffer(interp, filehandle, buf);
 
-    if (*buf == NULL) {
-        *buf = Parrot_gc_new_string_header(interp, 0);
-        (*buf)->bufused = len = 2048;
-    }
-
-    s   = *buf;
-    len = s->bufused;
-
-    if (!s->strstart)
-        Parrot_gc_allocate_string_storage(interp, s, len);
+    if (*buf == NULL)
+        *buf = Parrot_str_new_noinit(interp, enum_stringrep_one, 2048);
 
+    s       = *buf;
+    len     = s->bufused;
     out_buf = (unsigned char *)s->strstart;
 
     /* read Data from buffer */
@@ -343,11 +337,9 @@
         size_t got;
 
         if (len >= Parrot_io_get_buffer_size(interp, filehandle)) {
-            STRING     fake;
-            STRING    *sf = &fake;
-
-            Buffer_bufstart(sf) = (char *)out_buf;
-            fake.bufused        = len;
+            STRING *sf = Parrot_str_new_init(interp, (char *)out_buf, len,
+                PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                PObj_external_FLAG);
             got                 = PIO_READ(interp, filehandle, &sf);
             s->strlen           = s->bufused = current + got;
 
@@ -357,11 +349,6 @@
         }
 
         got = Parrot_io_fill_readbuf(interp, filehandle);
-
-        /* got is never < 0, but C's type system can't tell */
-        if (got < 0)
-            got = 0;
-
         len = (len < got) ? len : got;
     }
 
@@ -461,6 +448,7 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 size_t
 Parrot_io_readline_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle), ARGOUT(STRING **buf))
 {
@@ -493,7 +481,7 @@
     buf_start = buffer_next;
 
     for (l = 0; buffer_next < buffer_end;) {
-        l++;
+        ++l;
         if (io_is_end_of_line((char *)buffer_next)) {
             Parrot_io_set_buffer_next(interp, filehandle, ++buffer_next);
             break;
@@ -555,8 +543,8 @@
 
 /*
 
-=item C<size_t Parrot_io_write_buffer(PARROT_INTERP, PMC *filehandle, STRING
-*s)>
+=item C<size_t Parrot_io_write_buffer(PARROT_INTERP, PMC *filehandle, const
+STRING *s)>
 
 The buffer layer's C<Write> function.
 
@@ -565,7 +553,7 @@
 */
 
 size_t
-Parrot_io_write_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle), ARGIN(STRING *s))
+Parrot_io_write_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle), ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_io_write_buffer)
     unsigned char * const buffer_start = Parrot_io_get_buffer_start(interp, filehandle);

Modified: branches/ops_pct/src/io/core.c
==============================================================================
--- branches/ops_pct/src/io/core.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/core.c	Wed May  5 08:45:29 2010	(r46302)
@@ -124,7 +124,7 @@
     /* this was i < PIO_NR_OPEN, but only standard handles 0..2 need
      * to be kept alive AFAIK -leo
      */
-    for (i = 0; i < 3; i++) {
+    for (i = 0; i < 3; ++i) {
         Parrot_gc_mark_PMC_alive(interp, table[i]);
     }
 }

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

Modified: branches/ops_pct/src/io/portable.c
==============================================================================
--- branches/ops_pct/src/io/portable.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/portable.c	Wed May  5 08:45:29 2010	(r46302)
@@ -349,7 +349,7 @@
 */
 
 INTVAL
-Parrot_io_flush_portable(SHIM_INTERP, SHIM(PMC *filehandle))
+Parrot_io_flush_portable(SHIM_INTERP, ARGIN(PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_flush_portable)
     return fflush((FILE *)Parrot_io_get_os_handle(interp, filehandle));
@@ -369,7 +369,7 @@
 */
 
 size_t
-Parrot_io_read_portable(PARROT_INTERP, SHIM(PMC *filehandle),
+Parrot_io_read_portable(PARROT_INTERP, ARGIN(PMC *filehandle),
               ARGIN(STRING **buf))
 {
     ASSERT_ARGS(Parrot_io_read_portable)
@@ -393,8 +393,8 @@
 
 /*
 
-=item C<size_t Parrot_io_write_portable(PARROT_INTERP, PMC *filehandle, STRING
-*s)>
+=item C<size_t Parrot_io_write_portable(PARROT_INTERP, PMC *filehandle, const
+STRING *s)>
 
 Writes the given STRING to the provided IO PMC.
 
@@ -403,10 +403,10 @@
 */
 
 size_t
-Parrot_io_write_portable(PARROT_INTERP, ARGIN(PMC *filehandle), ARGMOD(STRING *s))
+Parrot_io_write_portable(PARROT_INTERP, ARGIN(PMC *filehandle), ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_io_write_portable)
-    void * const buffer = s->strstart;
+    const void * const buffer = s->strstart;
     return fwrite(buffer, 1, s->bufused,
                   (FILE *)Parrot_io_get_os_handle(interp, filehandle));
 }
@@ -424,15 +424,15 @@
 */
 
 PIOOFF_T
-Parrot_io_seek_portable(PARROT_INTERP, ARGMOD(PMC *filehandle),
-              PIOOFF_T offset, INTVAL whence)
+Parrot_io_seek_portable(PARROT_INTERP, ARGMOD(PMC *filehandle), PIOOFF_T offset, INTVAL whence)
 {
     ASSERT_ARGS(Parrot_io_seek_portable)
-    PIOOFF_T pos;
     errno = 0;
 
-    if ((pos = fseek((FILE *)Parrot_io_get_os_handle(interp, filehandle),
-                    (long)offset, whence)) >= 0)
+    const PIOOFF_T pos = fseek(
+            (FILE *)Parrot_io_get_os_handle(interp, filehandle), (long)offset, whence);
+
+    if (pos >= 0)
         Parrot_io_set_file_position(interp, filehandle, pos);
 
     /* Seek clears EOF */

Modified: branches/ops_pct/src/io/socket_api.c
==============================================================================
--- branches/ops_pct/src/io/socket_api.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/socket_api.c	Wed May  5 08:45:29 2010	(r46302)
@@ -190,6 +190,7 @@
                 PIO_F_SOCKET|PIO_F_READ|PIO_F_WRITE);
     else
         new_socket = socket;
+    /* XXX new_socket is assigned, but never used. Probably a bug? */
 
     return PIO_SOCKET(interp, socket, fam, type, proto);
 }

Modified: branches/ops_pct/src/io/socket_unix.c
==============================================================================
--- branches/ops_pct/src/io/socket_unix.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/socket_unix.c	Wed May  5 08:45:29 2010	(r46302)
@@ -395,7 +395,7 @@
 This is not equivalent to any specific POSIX or BSD socket call, but
 it is a useful, common primitive.
 
-Not at all usefule --leo.
+Not at all useful --leo.
 
 Also, a buffering layer above this may choose to reimplement by checking
 the read buffer.

Modified: branches/ops_pct/src/io/socket_win32.c
==============================================================================
--- branches/ops_pct/src/io/socket_win32.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/socket_win32.c	Wed May  5 08:45:29 2010	(r46302)
@@ -77,9 +77,10 @@
 Parrot_io_socket_win32(PARROT_INTERP, ARGIN(PMC * s), int fam, int type, int proto)
 {
     ASSERT_ARGS(Parrot_io_socket_win32)
-    int       i    = 1;
+
     const int sock = socket(fam, type, proto);
     if (sock >= 0) {
+        int       i    = 1;
         setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&i, sizeof (i));
         Parrot_io_set_os_handle(interp, s, sock);
         SOCKADDR_REMOTE(s)->sin_family = fam;
@@ -102,7 +103,7 @@
 Parrot_io_connect_win32(PARROT_INTERP, ARGMOD(PMC *socket), ARGIN(PMC *r))
 {
     ASSERT_ARGS(Parrot_io_connect_win32)
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
 
     if (!r)
         return -1;
@@ -141,7 +142,7 @@
 Parrot_io_bind_win32(PARROT_INTERP, ARGMOD(PMC *socket), ARGMOD(PMC *sockaddr))
 {
     ASSERT_ARGS(Parrot_io_bind_win32)
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
     struct sockaddr_in * saddr;
 
     if (!sockaddr)
@@ -174,7 +175,7 @@
 Parrot_io_listen_win32(SHIM_INTERP, ARGMOD(PMC *socket), INTVAL sec)
 {
     ASSERT_ARGS(Parrot_io_listen_win32)
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
     if ((listen((int)io->os_handle, sec)) == -1) {
         return -1;
     }
@@ -197,7 +198,7 @@
 Parrot_io_accept_win32(PARROT_INTERP, ARGMOD(PMC *socket))
 {
     ASSERT_ARGS(Parrot_io_accept_win32)
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
     PMC * newio   = Parrot_io_new_socket_pmc(interp,
             PIO_F_SOCKET | PIO_F_READ|PIO_F_WRITE);
     Parrot_Socklen_t    addrlen = sizeof (struct sockaddr_in);
@@ -240,7 +241,7 @@
 {
     ASSERT_ARGS(Parrot_io_send_win32)
     int error, bytes, byteswrote;
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
 
     bytes = s->bufused;
     byteswrote = 0;
@@ -295,7 +296,7 @@
     int error;
     unsigned int bytesread = 0;
     char buf[2048];
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
 
 AGAIN:
     if ((error = recv((int)io->os_handle, buf, 2048, 0)) >= 0) {
@@ -342,7 +343,7 @@
 This is not equivalent to any specific POSIX or BSD socket call, but
 it is a useful, common primitive.
 
-Not at all usefule --leo.
+Not at all useful --leo.
 
 Also, a buffering layer above this may choose to reimplement by checking
 the read buffer.
@@ -359,7 +360,7 @@
     int n;
     fd_set r, w, e;
     struct timeval t;
-    Parrot_Socket_attributes * io = PARROT_SOCKET(socket);
+    const Parrot_Socket_attributes * const io = PARROT_SOCKET(socket);
 
     t.tv_sec = sec;
     t.tv_usec = usec;

Modified: branches/ops_pct/src/io/unix.c
==============================================================================
--- branches/ops_pct/src/io/unix.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/unix.c	Wed May  5 08:45:29 2010	(r46302)
@@ -305,7 +305,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_io_fdopen_unix(PARROT_INTERP, ARGMOD(PMC *filehandle), PIOHANDLE fd, INTVAL flags)
+Parrot_io_fdopen_unix(PARROT_INTERP, ARGMOD_NULLOK(PMC *filehandle), PIOHANDLE fd, INTVAL flags)
 {
     ASSERT_ARGS(Parrot_io_fdopen_unix)
     if (io_is_tty_unix(fd))
@@ -388,7 +388,7 @@
 
 /*
 
-=item C<INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, PMC *filehandle)>
+=item C<INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, const PMC *filehandle)>
 
 Test whether the filehandle has been closed.
 
@@ -397,7 +397,7 @@
 */
 
 INTVAL
-Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_is_closed_unix)
     if (Parrot_io_get_os_handle(interp, filehandle) == -1)
@@ -541,7 +541,8 @@
 
 /*
 
-=item C<size_t Parrot_io_write_unix(PARROT_INTERP, PMC *filehandle, STRING *s)>
+=item C<size_t Parrot_io_write_unix(PARROT_INTERP, PMC *filehandle, const STRING
+*s)>
 
 Calls C<write()> to write C<len> bytes from the memory starting at
 C<buffer> to the file descriptor in C<*io>.
@@ -551,7 +552,7 @@
 */
 
 size_t
-Parrot_io_write_unix(PARROT_INTERP, ARGIN(PMC *filehandle), ARGMOD(STRING *s))
+Parrot_io_write_unix(PARROT_INTERP, ARGIN(PMC *filehandle), ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_io_write_unix)
     const PIOHANDLE file_descriptor = Parrot_io_get_os_handle(interp, filehandle);
@@ -815,8 +816,9 @@
 Parrot_io_pipe_unix(SHIM_INTERP, ARGMOD(PIOHANDLE *reader), ARGMOD(PIOHANDLE *writer))
 {
     ASSERT_ARGS(Parrot_io_pipe_unix)
-    int fds[2], rv;
-    rv = pipe(fds);
+    int fds[2];
+    const int rv = pipe(fds);
+
     if (rv >= 0) {
         *reader = fds[0];
         *writer = fds[1];

Modified: branches/ops_pct/src/io/utf8.c
==============================================================================
--- branches/ops_pct/src/io/utf8.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/utf8.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -73,19 +73,20 @@
                     goto ok;
 
                 /* need len - 1 more chars */
-                len2--;
-                s2           = NULL;
-                s2           = Parrot_io_make_string(interp, &s2, len2);
+                --len2;
+                s2 = Parrot_str_new_init(interp, NULL, len2, Parrot_utf8_encoding_ptr,
+                                         Parrot_unicode_charset_ptr, 0);
                 s2->bufused  = len2;
-                s2->charset  = Parrot_unicode_charset_ptr;
-                s2->encoding = Parrot_utf8_encoding_ptr;
 
                 /* TT #1257: need to check the amount read here? */
                 read = Parrot_io_read_buffer(interp, filehandle, &s2);
                 UNUSED(read);
 
                 s->strlen    = iter.charpos;
-                s            = Parrot_str_append(interp, s, s2);
+                s            = Parrot_str_concat(interp, s, s2);
+                /* String is updated. Poke into iterator to replace old string */
+                iter.str     = s;
+                *buf         = s;
                 len         += len2 + 1;
 
                 /* check last char */
@@ -100,7 +101,8 @@
 
 /*
 
-=item C<size_t Parrot_io_write_utf8(PARROT_INTERP, PMC *filehandle, STRING *s)>
+=item C<size_t Parrot_io_write_utf8(PARROT_INTERP, PMC *filehandle, const STRING
+*s)>
 
 Write a Parrot string to a filehandle in UTF-8 format.
 
@@ -109,8 +111,7 @@
 */
 
 size_t
-Parrot_io_write_utf8(PARROT_INTERP, ARGMOD(PMC *filehandle),
-        ARGMOD(STRING *s))
+Parrot_io_write_utf8(PARROT_INTERP, ARGMOD(PMC *filehandle), ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_io_write_utf8)
     STRING *dest;
@@ -118,8 +119,7 @@
     if (s->encoding == Parrot_utf8_encoding_ptr)
         return Parrot_io_write_buffer(interp, filehandle, s);
 
-    dest = Parrot_utf8_encoding_ptr->to_encoding(interp, s,
-            Parrot_gc_new_string_header(interp, 0));
+    dest = Parrot_utf8_encoding_ptr->to_encoding(interp, s);
     return Parrot_io_write_buffer(interp, filehandle, dest);
 }
 
@@ -134,10 +134,6 @@
 F<src/io/io_layers.c>,
 F<src/io/io_private.h>.
 
-=head1 HISTORY
-
-Initially written by Leo.
-
 =cut
 
 */

Modified: branches/ops_pct/src/io/win32.c
==============================================================================
--- branches/ops_pct/src/io/win32.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/io/win32.c	Wed May  5 08:45:29 2010	(r46302)
@@ -472,7 +472,8 @@
 
 /*
 
-=item C<size_t Parrot_io_write_win32(PARROT_INTERP, PMC *filehandle, STRING *s)>
+=item C<size_t Parrot_io_write_win32(PARROT_INTERP, PMC *filehandle, const
+STRING *s)>
 
 Calls C<WriteFile()> to write C<len> bytes from the memory starting at
 C<buffer> to C<*io>'s file descriptor. Returns C<(size_t)-1> on
@@ -483,9 +484,7 @@
 */
 
 size_t
-Parrot_io_write_win32(PARROT_INTERP,
-        ARGIN(PMC *filehandle),
-        ARGIN(STRING *s))
+Parrot_io_write_win32(PARROT_INTERP, ARGIN(PMC *filehandle), ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_io_write_win32)
     DWORD countwrote = 0;
@@ -660,8 +659,8 @@
     if (comspec == NULL)
         comspec = "cmd";
     auxcomm = Parrot_str_new(interp, comspec, 0);
-    auxcomm = Parrot_str_append(interp, auxcomm, Parrot_str_new(interp, " /c ", 0));
-    auxcomm = Parrot_str_append(interp, auxcomm, command);
+    auxcomm = Parrot_str_concat(interp, auxcomm, Parrot_str_new(interp, " /c ", 0));
+    auxcomm = Parrot_str_concat(interp, auxcomm, command);
     cmd = Parrot_str_to_cstring(interp, auxcomm);
     start.cb = sizeof start;
     GetStartupInfo(&start);

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

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

Modified: branches/ops_pct/src/longopt.c
==============================================================================
--- branches/ops_pct/src/longopt.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/longopt.c	Wed May  5 08:45:29 2010	(r46302)
@@ -145,13 +145,13 @@
     const struct longopt_opt_decl* dptr;
 
     while (argv[dex][optlen] != '\0' && argv[dex][optlen] != '=') {
-        optlen++;
+        ++optlen;
     }
 
-    for (dptr = options; dptr->opt_id; dptr++) {
+    for (dptr = options; dptr->opt_id; ++dptr) {
         int sptr;
         /* For each listed long option... */
-        for (sptr = 0; dptr->opt_long[sptr]; sptr++) {
+        for (sptr = 0; dptr->opt_long[sptr]; ++sptr) {
             if (strncmp(dptr->opt_long[sptr], argv[dex], optlen) == 0
              && dptr->opt_long[sptr][optlen] == '\0') {
                 /* Found it */
@@ -246,7 +246,7 @@
         info_buf->_shortopt_pos = &argv[dex][1];
     pos = info_buf->_shortopt_pos;
 
-    for (dptr = options; dptr->opt_id; dptr++) {
+    for (dptr = options; dptr->opt_id; ++dptr) {
         if (dptr->opt_short == *pos) {
             /* Found it */
             info_buf->opt_id = dptr->opt_id;

Modified: branches/ops_pct/src/main.c
==============================================================================
--- branches/ops_pct/src/main.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/main.c	Wed May  5 08:45:29 2010	(r46302)
@@ -42,22 +42,26 @@
 static int is_all_hex_digits(ARGIN(const char *s))
         __attribute__nonnull__(1);
 
-static void Parrot_version(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
+static void Parrot_version(void);
 PARROT_CAN_RETURN_NULL
 static const char * parseflags(PARROT_INTERP,
-    ARGIN(int *argc),
-    ARGIN(char **argv[]),
-    ARGIN(Parrot_Run_core_t *core),
-    ARGIN(Parrot_trace_flags *trace))
+    ARGMOD(int *argc),
+    ARGMOD(const char **argv[]),
+    ARGMOD(Parrot_Run_core_t *core),
+    ARGMOD(Parrot_trace_flags *trace))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5);
-
-static void parseflags_minimal(PARROT_INTERP, int argc, ARGIN(char *argv[]))
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*argc)
+        FUNC_MODIFIES(*argv[])
+        FUNC_MODIFIES(*core)
+        FUNC_MODIFIES(*trace);
+
+static void parseflags_minimal(PARROT_INTERP,
+    int argc,
+    ARGIN(const char *argv[]))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
@@ -69,8 +73,7 @@
 #define ASSERT_ARGS_help_debug __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #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 = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_Parrot_version __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_parseflags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(argc) \
@@ -87,7 +90,7 @@
 
 /*
 
-=item C<int main(int argc, char * argv[])>
+=item C<int main(int argc, const char *argv[])>
 
 The entry point from the command line into Parrot.
 
@@ -96,7 +99,7 @@
 */
 
 int
-main(int argc, char * argv[])
+main(int argc, const char *argv[])
 {
     int         stacktop;
     const char *sourcefile;
@@ -128,18 +131,6 @@
     initialize_interpreter(interp, (void*)&stacktop);
     imcc_initialize(interp);
 
-    { /* EXPERIMENTAL: add library and include paths from environment */
-        PMC *env = Parrot_pmc_new(interp, enum_class_Env);
-        STRING *path = VTABLE_get_string_keyed_str(interp, env,
-                Parrot_str_new_constant(interp, "PARROT_LIBRARY"));
-        if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
-            Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_LIBRARY);
-        path = VTABLE_get_string_keyed_str(interp, env,
-                Parrot_str_new_constant(interp, "PARROT_INCLUDE"));
-        if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
-            Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_INCLUDE);
-    }
-
     /* Parse flags */
     sourcefile = parseflags(interp, &argc, &argv, &core, &trace);
 
@@ -160,6 +151,7 @@
 #define OPT_HELP_DEBUG     130
 #define OPT_PBC_OUTPUT     131
 #define OPT_RUNTIME_PREFIX 132
+#define OPT_HASH_SEED      133
 
 #define SET_FLAG(flag)   Parrot_set_flag(interp, (flag))
 #define SET_DEBUG(flag)  Parrot_set_debug(interp, (flag))
@@ -170,7 +162,7 @@
     { 'D', 'D', OPTION_optional_FLAG, { "--parrot-debug" } },
     { 'E', 'E', (OPTION_flags)0, { "--pre-process-only" } },
     { 'G', 'G', (OPTION_flags)0, { "--no-gc" } },
-    { 'H', 'H', OPTION_required_FLAG, { "--hash-seed" } },
+    { '\0', OPT_HASH_SEED, OPTION_required_FLAG, { "--hash-seed" } },
     { 'I', 'I', OPTION_required_FLAG, { "--include" } },
     { 'L', 'L', OPTION_required_FLAG, { "--library" } },
     { 'O', 'O', OPTION_optional_FLAG, { "--optimize" } },
@@ -214,7 +206,7 @@
 is_all_hex_digits(ARGIN(const char *s))
 {
     ASSERT_ARGS(is_all_hex_digits)
-    for (; *s; s++)
+    for (; *s; ++s)
         if (!isxdigit(*s))
             return 0;
     return 1;
@@ -306,11 +298,11 @@
     "    -V --version\n"
     "    -I --include add path to include search\n"
     "    -L --library add path to library search\n"
-    "    -H --hash-seed F00F  specify hex value to use as hash seed\n"
+    "       --hash-seed F00F  specify hex value to use as hash seed\n"
     "    -X --dynext add path to dynamic extension search\n"
     "   <Run core options>\n"
-    "    -R --runcore slow|bounds|fast|cgoto|cgp\n"
-    "    -R --runcore switch|trace|profiling|gcdebug\n"
+    "    -R --runcore slow|bounds|fast\n"
+    "    -R --runcore trace|profiling|gcdebug\n"
     "    -t --trace [flags]\n"
     "   <VM options>\n"
     "    -D --parrot-debug[=HEXFLAGS]\n"
@@ -341,7 +333,7 @@
 
 /*
 
-=item C<static void Parrot_version(PARROT_INTERP)>
+=item C<static void Parrot_version(void)>
 
 Print out parrot version number.
 
@@ -350,7 +342,7 @@
 */
 
 static void
-Parrot_version(PARROT_INTERP)
+Parrot_version(void)
 {
     ASSERT_ARGS(Parrot_version)
     printf("This is Parrot version " PARROT_VERSION);
@@ -368,7 +360,8 @@
 
 /*
 
-=item C<static void parseflags_minimal(PARROT_INTERP, int argc, char *argv[])>
+=item C<static void parseflags_minimal(PARROT_INTERP, int argc, const char
+*argv[])>
 
 Parse minimal subset of args required for initializing interpreter.
 
@@ -376,14 +369,15 @@
 
 */
 static void
-parseflags_minimal(PARROT_INTERP, int argc, ARGIN(char *argv[]))
+parseflags_minimal(PARROT_INTERP, int argc, ARGIN(const char *argv[]))
 {
     ASSERT_ARGS(parseflags_minimal)
 
     int pos = 0;
-    const char *arg;
+
     while (pos < argc) {
-        arg = argv[pos];
+        const char *arg = argv[pos];
+
         if (STREQ(arg, "--gc")) {
             ++pos;
             if (pos == argc) {
@@ -405,12 +399,23 @@
             }
             break;
         }
-        else if (STREQ(arg, "--hash-seed")) {
-            ++pos;
-            arg = argv[pos];
+        else if (!strncmp(arg, "--hash-seed", 11)) {
+
+            if ((arg = strrchr(arg, '=')))
+                ++arg;
+            else
+                arg = argv[++pos];
+
             if (is_all_hex_digits(arg)) {
                 interp->hash_seed = strtoul(arg, NULL, 16);
             }
+            else {
+                fprintf(stderr, "error: invalid hash seed specified:"
+                        "'%s'\n", arg);
+                exit(EXIT_FAILURE);
+            }
+            ++pos;
+            arg = argv[pos];
         }
         ++pos;
     }
@@ -418,8 +423,8 @@
 
 /*
 
-=item C<static const char * parseflags(PARROT_INTERP, int *argc, char **argv[],
-Parrot_Run_core_t *core, Parrot_trace_flags *trace)>
+=item C<static const char * parseflags(PARROT_INTERP, int *argc, const char
+**argv[], Parrot_Run_core_t *core, Parrot_trace_flags *trace)>
 
 Parse Parrot's command line for options and set appropriate flags.
 
@@ -430,8 +435,8 @@
 PARROT_CAN_RETURN_NULL
 static const char *
 parseflags(PARROT_INTERP,
-        ARGIN(int *argc), ARGIN(char **argv[]),
-        ARGIN(Parrot_Run_core_t *core), ARGIN(Parrot_trace_flags *trace))
+        ARGMOD(int *argc), ARGMOD(const char **argv[]),
+        ARGMOD(Parrot_Run_core_t *core), ARGMOD(Parrot_trace_flags *trace))
 {
     ASSERT_ARGS(parseflags)
     struct longopt_opt_info opt  = LONGOPT_OPT_INFO_INIT;
@@ -449,26 +454,15 @@
 
     imcc_start_handling_flags(interp);
 
-    while ((status = longopt_get(interp, *argc, _tempargv, options,
-            &opt)) > 0) {
+    while ((status = longopt_get(interp, *argc, _tempargv, options, &opt)) > 0) {
         switch (opt.opt_id) {
           case 'R':
             if (STREQ(opt.opt_arg, "slow") || STREQ(opt.opt_arg, "bounds"))
                 *core = PARROT_SLOW_CORE;
             else if (STREQ(opt.opt_arg, "fast") || STREQ(opt.opt_arg, "function"))
                 *core = PARROT_FAST_CORE;
-            else if (STREQ(opt.opt_arg, "switch"))
-                *core = PARROT_SWITCH_CORE;
-            else if (STREQ(opt.opt_arg, "cgp"))
-                *core = PARROT_CGP_CORE;
-            else if (STREQ(opt.opt_arg, "cgoto"))
-                *core = PARROT_CGOTO_CORE;
             else if (STREQ(opt.opt_arg, "jit"))
                 *core = PARROT_FAST_CORE;
-            else if (STREQ(opt.opt_arg, "cgp-jit"))
-                *core = PARROT_CGP_CORE;
-            else if (STREQ(opt.opt_arg, "switch-jit"))
-                *core = PARROT_SWITCH_CORE;
             else if (STREQ(opt.opt_arg, "exec"))
                 *core = PARROT_EXEC_CORE;
             else if (STREQ(opt.opt_arg, "trace"))
@@ -512,7 +506,7 @@
             help();
             exit(EXIT_FAILURE);
             break;
-          case 'H':
+          case OPT_HASH_SEED:
             /* handled in parseflags_minimal */
             break;
           case OPT_HELP_DEBUG:
@@ -524,7 +518,7 @@
                     Parrot_get_runtime_path(interp));
             exit(EXIT_SUCCESS);
           case 'V':
-            Parrot_version(interp);
+            Parrot_version();
             break;
 
           case OPT_GC_DEBUG:

Modified: branches/ops_pct/src/misc.c
==============================================================================
--- branches/ops_pct/src/misc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/misc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -82,6 +82,7 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING *
 Parrot_vsprintf_c(PARROT_INTERP, ARGIN(const char *pat), va_list args)
 {
@@ -112,17 +113,16 @@
                  size_t len, ARGIN(const char *pat), va_list args)
 {
     ASSERT_ARGS(Parrot_vsnprintf)
-    char   *str_ret;
-    size_t  str_len;
+
     if (len == 0)
         return;
-    len--;
+    --len;
     if (len) {
         const STRING * const ret = Parrot_vsprintf_c(interp, pat, args);
         /* string_transcode(interp, ret, NULL, NULL, &ret); */
 
-        str_ret = Parrot_str_to_cstring(interp, ret);
-        str_len = strlen(str_ret);
+        char     * const str_ret = Parrot_str_to_cstring(interp, ret);
+        const    size_t  str_len = strlen(str_ret);
         if (len > str_len) {
             len = str_len;
         }
@@ -256,6 +256,7 @@
 
 
 PARROT_EXPORT
+PARROT_IGNORABLE_RESULT
 int
 Parrot_secret_snprintf(ARGOUT(char *buffer), SHIM(const size_t len),
         ARGIN(const char *format), ...)

Modified: branches/ops_pct/src/multidispatch.c
==============================================================================
--- branches/ops_pct/src/multidispatch.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/multidispatch.c	Wed May  5 08:45:29 2010	(r46302)
@@ -264,24 +264,26 @@
         ARGIN(const char *name), ARGIN(const char *sig), ...)
 {
     ASSERT_ARGS(Parrot_mmd_multi_dispatch_from_c_args)
-    PMC *sig_object, *sub;
-
+    PMC *call_obj, *sub;
     va_list args;
+    const char *arg_sig, *ret_sig;
+
+    Parrot_pcc_split_signature_string(sig, &arg_sig, &ret_sig);
+
     va_start(args, sig);
-    sig_object = Parrot_pcc_build_sig_object_from_varargs(interp, PMCNULL, sig, args);
-    va_end(args);
+    call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args);
 
     /* Check the cache. */
     sub = Parrot_mmd_cache_lookup_by_types(interp, interp->op_mmd_cache, name,
-            VTABLE_get_pmc(interp, sig_object));
+            VTABLE_get_pmc(interp, call_obj));
 
     if (PMC_IS_NULL(sub)) {
         sub = Parrot_mmd_find_multi_from_sig_obj(interp,
-            Parrot_str_new_constant(interp, name), sig_object);
+            Parrot_str_new_constant(interp, name), call_obj);
 
         if (!PMC_IS_NULL(sub))
             Parrot_mmd_cache_store_by_types(interp, interp->op_mmd_cache, name,
-                    VTABLE_get_pmc(interp, sig_object), sub);
+                    VTABLE_get_pmc(interp, call_obj), sub);
     }
 
     if (PMC_IS_NULL(sub))
@@ -296,7 +298,11 @@
             VTABLE_name(interp, sub));
 #endif
 
-    Parrot_pcc_invoke_from_sig_object(interp, sub, sig_object);
+    Parrot_pcc_invoke_from_sig_object(interp, sub, call_obj);
+    call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
+    Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
+    va_end(args);
 }
 
 
@@ -385,13 +391,12 @@
 mmd_build_type_tuple_from_type_list(PARROT_INTERP, ARGIN(PMC *type_list))
 {
     ASSERT_ARGS(mmd_build_type_tuple_from_type_list)
-    PMC   *multi_sig   = Parrot_pmc_new_constant(interp, enum_class_FixedIntegerArray);
     INTVAL param_count = VTABLE_elements(interp, type_list);
+    PMC   *multi_sig   = Parrot_pmc_new_constant_init_int(interp,
+            enum_class_FixedIntegerArray, param_count);
     INTVAL i;
 
-    VTABLE_set_integer_native(interp, multi_sig, param_count);
-
-    for (i = 0; i < param_count; i++) {
+    for (i = 0; i < param_count; ++i) {
         STRING *type_name = VTABLE_get_string_keyed_int(interp, type_list, i);
         INTVAL  type;
 
@@ -512,10 +517,8 @@
             type = Parrot_pmc_get_type(interp, sig_elem);
 
         /* create destination PMC only as necessary */
-        if (PMC_IS_NULL(ar)) {
-            ar = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
-            VTABLE_set_integer_native(interp, ar, n);
-        }
+        if (PMC_IS_NULL(ar))
+            ar = Parrot_pmc_new_init_int(interp, enum_class_FixedIntegerArray, n);
 
         VTABLE_set_integer_keyed_int(interp, ar, i, type);
     }
@@ -628,21 +631,40 @@
     /* now go through args */
     for (i = 0; i < n; ++i) {
         const INTVAL type_sig  = VTABLE_get_integer_keyed_int(interp, multi_sig, i);
-        const INTVAL type_call = VTABLE_get_integer_keyed_int(interp, arg_tuple, i);
+        INTVAL type_call = VTABLE_get_integer_keyed_int(interp, arg_tuple, i);
         if (type_sig == type_call)
             continue;
 
         /* promote primitives to their PMC equivalents, as PCC will autobox
-         * the distance penalty makes primitive variants look cheaper */
+         * them. If it's a direct autobox, int->Integer, str->String, or
+         * num->Num, the distance is 1 and we move to the next arg. If it's
+         * autoboxing to "any" PMC type, we increment the distance and continue
+         * weighing other things. A direct autobox should be cheaper than an
+         * autobox plus type conversion or implicit type acceptance. */
         switch (type_call) {
           case enum_type_INTVAL:
             if (type_sig == enum_class_Integer) { dist++; continue; }
+            if (type_sig == enum_type_PMC ||
+                (type_sig >= enum_class_default && type_sig < enum_class_core_max)) {
+                ++dist;
+                type_call = enum_class_Integer;
+            }
             break;
           case enum_type_FLOATVAL:
             if (type_sig == enum_class_Float)   { dist++; continue; }
+            if (type_sig == enum_type_PMC ||
+                (type_sig >= enum_class_default && type_sig < enum_class_core_max)) {
+                ++dist;
+                type_call = enum_class_Float;
+            }
             break;
           case enum_type_STRING:
             if (type_sig == enum_class_String)  { dist++; continue; }
+            if (type_sig == enum_type_PMC ||
+                (type_sig >= enum_class_default && type_sig < enum_class_core_max)) {
+                ++dist;
+                type_call = enum_class_String;
+            }
             break;
           default:
             break;
@@ -653,7 +675,7 @@
          * which matches any PMC
          */
         if (type_call <= 0 && type_sig == enum_type_PMC) {
-            dist++;
+            ++dist;
             continue;
         }
 
@@ -1100,7 +1122,7 @@
     STRING *key;
     INTVAL  i;
 
-    for (i = 0; i < num_values; i++) {
+    for (i = 0; i < num_values; ++i) {
         const INTVAL id = VTABLE_type(interp, VTABLE_get_pmc_keyed_int(interp, values, i));
         if (id == 0) {
             mem_gc_free(interp, type_ids);
@@ -1201,7 +1223,7 @@
     STRING *key;
     INTVAL  i;
 
-    for (i = 0; i < num_types; i++) {
+    for (i = 0; i < num_types; ++i) {
         const INTVAL id = VTABLE_get_integer_keyed_int(interp, types, i);
 
         if (id == 0) {

Modified: branches/ops_pct/src/nci/api.c
==============================================================================
--- branches/ops_pct/src/nci/api.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/nci/api.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,30 +1,49 @@
 /* nci.c
- *  Copyright (C) 2001-2009, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     Native Call Interface routines. The code needed to build a
- *     parrot to C call frame is in here
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
+Copyright (C) 2001-2009, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/nci/api.c - Native Call Interface routines
+
+=head1 DESCRIPTION
+
+This file implements the interface to the Parrot Native Call Interface system,
+which builds parrot to C call frames.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+*/
 
 #include "parrot/parrot.h"
 #include "parrot/nci.h"
 #include "api.str"
 
 /* HEADERIZER HFILE: include/parrot/nci.h */
-/* HEADERIZER STOP */
 
-/* This function serves a single purpose. It takes the function
-   signature for a C function we want to call and returns a pointer
-   to a function that can call it. */
-
-void *
-build_call_func(PARROT_INTERP, SHIM(PMC *pmc_nci), NOTNULL(STRING *signature), SHIM(int *jitted)) {
-    PMC *iglobals;
+/*
+
+=item C<PMC * build_call_func(PARROT_INTERP, STRING *signature)>
+
+This function serves a single purpose. It takes the function signature for a
+C function we want to call and returns a PMC with a pointer to a function
+that can call it.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+PMC *
+build_call_func(PARROT_INTERP, ARGIN(STRING *signature))
+{
+    ASSERT_ARGS(build_call_func)
+
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *thunk;
 
@@ -32,7 +51,6 @@
     if (STRING_IS_EMPTY(signature))
         signature = CONST_STRING(interp, "v");
 
-    iglobals = interp->iglobals;
     if (PMC_IS_NULL(iglobals))
         PANIC(interp, "iglobals isn't created yet");
 
@@ -42,32 +60,39 @@
 
     thunk = VTABLE_get_pmc_keyed_str(interp, nci_funcs, signature);
 
-    PARROT_ASSERT(PMC_IS_NULL(thunk) || thunk->vtable);
-
-    if ((!PMC_IS_NULL(thunk)) && thunk->vtable->base_type == enum_class_UnManagedStruct)
-        return F2DPTR(VTABLE_get_pointer(interp, thunk));
+    if (PMC_IS_NULL(thunk)) {
+        /* try to dynamically build a thunk */
+        PMC *nci_fb_cb = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FB_CB);
+        if (!PMC_IS_NULL(nci_fb_cb)) {
+            void *cb_ptr = VTABLE_get_pointer(interp, nci_fb_cb);
+            nci_fb_func_t cb = (nci_fb_func_t)D2FPTR(cb_ptr);
+            if (cb_ptr) {
+                PMC *nci_fb_ud = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FB_UD);
+                thunk = cb(nci_fb_ud, signature);
+            }
+        }
+    }
 
-    /*
-      These lines have been added to aid debugging. I want to be able to
-      see which signature has an unknown type. I am sure someone can come up
-      with a neater way to do this.
-     */
-    {
-        STRING *ns = CONST_STRING(interp, " is an unknown signature type");
-        STRING *message = Parrot_str_concat(interp, signature, ns, 0);
-
-        ns = CONST_STRING(interp, ".\nCAN_BUILD_CALL_FRAMES is disabled, add the signature to src/nci/extra_thunks.nci");
-        message = Parrot_str_concat(interp, message, ns, 0);
-
-        /*
-         * I think there may be memory issues with this but if we get to here we are
-         * aborting.
-         */
-        PANIC(interp, Parrot_str_to_cstring(interp, message));
+    if (!PMC_IS_NULL(thunk)) {
+        PARROT_ASSERT(thunk->vtable);
+        PARROT_ASSERT(thunk->vtable->base_type == enum_class_UnManagedStruct);
+        return thunk;
     }
+
+    Parrot_ex_throw_from_c_args(interp, NULL,
+        EXCEPTION_UNIMPLEMENTED,
+        "No NCI thunk available for signature '%S'", signature);
 }
 
 /*
+
+=back
+
+=cut
+
+*/
+
+/*
  * Local variables:
  *   c-file-style: "parrot"
  * End:

Modified: branches/ops_pct/src/nci/core_thunks.c
==============================================================================
--- branches/ops_pct/src/nci/core_thunks.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/nci/core_thunks.c	Wed May  5 08:45:29 2010	(r46302)
@@ -40,149 +40,163 @@
 
 
 static void
-pcf_d_JOd(PARROT_INTERP, PMC *self)
+pcf_d_JOd(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef double(* func_t)(PARROT_INTERP, PMC *, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiN", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (double)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 
 }
 static void
-pcf_I_JOS(PARROT_INTERP, PMC *self)
+pcf_I_JOS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_P_JOl(PARROT_INTERP, PMC *self)
+pcf_P_JOl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 }
 static void
-pcf_P_Jt(PARROT_INTERP, PMC *self)
+pcf_P_Jt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_S_JOS(PARROT_INTERP, PMC *self)
+pcf_S_JOS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
 }
 static void
-pcf_I_JI(PARROT_INTERP, PMC *self)
+pcf_I_JI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_v_JOSP(PARROT_INTERP, PMC *self)
+pcf_v_JOSP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -192,20 +206,22 @@
 
 }
 static void
-pcf_v_JOS(PARROT_INTERP, PMC *self)
+pcf_v_JOS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -214,112 +230,122 @@
 
 }
 static void
-pcf_P_JOS(PARROT_INTERP, PMC *self)
+pcf_P_JOS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 }
 static void
-pcf_I_JOI(PARROT_INTERP, PMC *self)
+pcf_I_JOI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_P_JOP(PARROT_INTERP, PMC *self)
+pcf_P_JOP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 }
 static void
-pcf_P_JOPS(PARROT_INTERP, PMC *self)
+pcf_P_JOPS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     STRING * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPS", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_v_JOPSP(PARROT_INTERP, PMC *self)
+pcf_v_JOPSP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     STRING * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPSP", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3, t_4);
     
@@ -330,21 +356,23 @@
 
 }
 static void
-pcf_v_JPPP(PARROT_INTERP, PMC *self)
+pcf_v_JPPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -354,21 +382,23 @@
 
 }
 static void
-pcf_v_JPIP(PARROT_INTERP, PMC *self)
+pcf_v_JPIP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -378,21 +408,23 @@
 
 }
 static void
-pcf_v_JPSP(PARROT_INTERP, PMC *self)
+pcf_v_JPSP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -402,21 +434,23 @@
 
 }
 static void
-pcf_v_JPNP(PARROT_INTERP, PMC *self)
+pcf_v_JPNP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PNP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -426,20 +460,22 @@
 
 }
 static void
-pcf_v_JPP(PARROT_INTERP, PMC *self)
+pcf_v_JPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -448,20 +484,22 @@
 
 }
 static void
-pcf_v_JPI(PARROT_INTERP, PMC *self)
+pcf_v_JPI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -470,20 +508,22 @@
 
 }
 static void
-pcf_v_JPS(PARROT_INTERP, PMC *self)
+pcf_v_JPS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -492,20 +532,22 @@
 
 }
 static void
-pcf_v_JPN(PARROT_INTERP, PMC *self)
+pcf_v_JPN(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PN", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -514,201 +556,219 @@
 
 }
 static void
-pcf_P_JPPP(PARROT_INTERP, PMC *self)
+pcf_P_JPPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_P_JPIP(PARROT_INTERP, PMC *self)
+pcf_P_JPIP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_P_JPSP(PARROT_INTERP, PMC *self)
+pcf_P_JPSP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_P_JPNP(PARROT_INTERP, PMC *self)
+pcf_P_JPNP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, FLOATVAL, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PNP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_I_JPP(PARROT_INTERP, PMC *self)
+pcf_I_JPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_I_JPS(PARROT_INTERP, PMC *self)
+pcf_I_JPS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_I_JPN(PARROT_INTERP, PMC *self)
+pcf_I_JPN(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PN", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_JP(PARROT_INTERP, PMC *self)
+pcf_i_JP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_v_JP(PARROT_INTERP, PMC *self)
+pcf_v_JP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1);
     
@@ -716,71 +776,77 @@
 
 }
 static void
-pcf_i_JPi(PARROT_INTERP, PMC *self)
+pcf_i_JPi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_JPii(PARROT_INTERP, PMC *self)
+pcf_i_JPii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_JPiii(PARROT_INTERP, PMC *self)
+pcf_i_JPiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIII", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -788,47 +854,51 @@
 
 }
 static void
-pcf_i_JPt(PARROT_INTERP, PMC *self)
+pcf_i_JPt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_P_JOSSS(PARROT_INTERP, PMC *self)
+pcf_P_JOSSS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, STRING *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
     STRING * t_3;
     STRING * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSSS", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -836,21 +906,23 @@
 
 }
 static void
-pcf_v_JOSS(PARROT_INTERP, PMC *self)
+pcf_v_JOSS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     STRING * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSS", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -860,42 +932,46 @@
 
 }
 static void
-pcf_S_JOI(PARROT_INTERP, PMC *self)
+pcf_S_JOI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
 }
 static void
-pcf_v_JOb(PARROT_INTERP, PMC *self)
+pcf_v_JOb(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, Buffer_bufstart(t_2));
     
@@ -904,73 +980,79 @@
 
 }
 static void
-pcf_i_JOPxAT_(PARROT_INTERP, PMC *self)
+pcf_i_JOPxAT_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPs", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_I_JOPxAT_(PARROT_INTERP, PMC *self)
+pcf_I_JOPxAT_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPs", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_I_JOIPxAT_(PARROT_INTERP, PMC *self)
+pcf_I_JOIPxAT_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, INTVAL, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiIPPs", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -978,40 +1060,44 @@
 
 }
 static void
-pcf_P_JO(PARROT_INTERP, PMC *self)
+pcf_P_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
 static void
-pcf_v_JOP(PARROT_INTERP, PMC *self)
+pcf_v_JOP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -1020,41 +1106,38 @@
 
 }
 static void
-pcf_P_Ji(PARROT_INTERP, PMC *self)
+pcf_P_Ji(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
 
  void
 Parrot_nci_load_core_thunks(PARROT_INTERP)
-;
- void
-Parrot_nci_load_core_thunks(PARROT_INTERP)
  {
-    PMC *iglobals;
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *temp_pmc;
 
-    iglobals = interp->iglobals;
     PARROT_ASSERT(!(PMC_IS_NULL(iglobals)));
 
-    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals,
-            IGLOBALS_NCI_FUNCS);
+    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FUNCS);
     PARROT_ASSERT(!(PMC_IS_NULL(nci_funcs)));
 
     temp_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);

Modified: branches/ops_pct/src/nci/extra_thunks.c
==============================================================================
--- branches/ops_pct/src/nci/extra_thunks.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/nci/extra_thunks.c	Wed May  5 08:45:29 2010	(r46302)
@@ -40,330 +40,360 @@
 
 
 static void
-pcf_v_J(PARROT_INTERP, PMC *self)
+pcf_v_J(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "");
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp);
     
     
 }
 static void
-pcf_i_ip(PARROT_INTERP, PMC *self)
+pcf_i_ip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_JPip(PARROT_INTERP, PMC *self)
+pcf_i_JPip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_JpP(PARROT_INTERP, PMC *self)
+pcf_i_JpP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, void *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_Jpii(PARROT_INTERP, PMC *self)
+pcf_i_Jpii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_p(PARROT_INTERP, PMC *self)
+pcf_i_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_tp(PARROT_INTERP, PMC *self)
+pcf_i_tp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(char *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SP", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 }
 static void
-pcf_p_J(PARROT_INTERP, PMC *self)
+pcf_p_J(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "");
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
-pcf_p_Jp(PARROT_INTERP, PMC *self)
+pcf_p_Jp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
 static void
-pcf_t_J(PARROT_INTERP, PMC *self)
+pcf_t_J(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(PARROT_INTERP);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     ;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "");
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(interp);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
-pcf_t_Jpti(PARROT_INTERP, PMC *self)
+pcf_t_Jpti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(PARROT_INTERP, void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_1, &ts_2, &t_3);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 
 }
 static void
-pcf_t_p(PARROT_INTERP, PMC *self)
+pcf_t_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
-pcf_t_pt(PARROT_INTERP, PMC *self)
+pcf_t_pt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_v_p(PARROT_INTERP, PMC *self)
+pcf_v_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
     
     
 }
 static void
-pcf_v_pit(PARROT_INTERP, PMC *self)
+pcf_v_pit(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     
@@ -372,21 +402,23 @@
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_v_ptt(PARROT_INTERP, PMC *self)
+pcf_v_ptt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSS", &t_0, &ts_1, &ts_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     
@@ -395,13 +427,14 @@
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_v_Jtiiipt(PARROT_INTERP, PMC *self)
+pcf_v_Jtiiipt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, char *, int, int, int, void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     char *t_1; STRING *ts_1;
@@ -410,9 +443,10 @@
     INTVAL t_4;
     PMC *t_5;
     char *t_6; STRING *ts_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIIIPS", &ts_1, &t_2, &t_3, &t_4, &t_5, &ts_6);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*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);
     
@@ -425,13 +459,14 @@
 if (t_6) Parrot_str_free_cstring(t_6);
 }
 static void
-pcf_p_JttPP(PARROT_INTERP, PMC *self)
+pcf_p_JttPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP, char *, char *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -439,16 +474,17 @@
     char *t_2; STRING *ts_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SSPP", &ts_1, &ts_2, &t_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -456,70 +492,76 @@
 
 }
 static void
-pcf_P_Jtpi(PARROT_INTERP, PMC *self)
+pcf_P_Jtpi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, char *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     char *t_1; STRING *ts_1;
     PMC *t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SPI", &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 
 }
 static void
-pcf_i_Vppp(PARROT_INTERP, PMC *self)
+pcf_i_Vppp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void **, void *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; void *v_0;
     PMC *t_1;
     PMC *t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     v_0 = VTABLE_get_pointer(interp, t_0);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&v_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_pointer(interp, t_0, v_0);
 
 
 
 }
 static void
-pcf_v_JpPP(PARROT_INTERP, PMC *self)
+pcf_v_JpPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, void *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
     
@@ -529,20 +571,22 @@
 
 }
 static void
-pcf_v_pt(PARROT_INTERP, PMC *self)
+pcf_v_pt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     
@@ -550,20 +594,22 @@
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_v_Jpt(PARROT_INTERP, PMC *self)
+pcf_v_Jpt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
     
@@ -572,39 +618,43 @@
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_v_(PARROT_INTERP, PMC *self)
+pcf_v_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)();
     
     
 }
 static void
-pcf_v_Jiiip(PARROT_INTERP, PMC *self)
+pcf_v_Jiiip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, int, int, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIP", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3, PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4));
     
@@ -615,39 +665,43 @@
 
 }
 static void
-pcf_v_i(PARROT_INTERP, PMC *self)
+pcf_v_i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0);
     
     
 }
 static void
-pcf_v_ii(PARROT_INTERP, PMC *self)
+pcf_v_ii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0, t_1);
     
@@ -655,13 +709,14 @@
 
 }
 static void
-pcf_v_illllllll(PARROT_INTERP, PMC *self)
+pcf_v_illllllll(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(int, long, long, long, long, long, long, long, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
@@ -673,9 +728,10 @@
     INTVAL t_6;
     INTVAL t_7;
     INTVAL t_8;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7, t_8);
     
@@ -690,41 +746,45 @@
 
 }
 static void
-pcf_v_l(PARROT_INTERP, PMC *self)
+pcf_v_l(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0);
     
     
 }
 static void
-pcf_v_pbip(PARROT_INTERP, PMC *self)
+pcf_v_pbip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     STRING *t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIP", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), Buffer_bufstart(t_1), t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
     
@@ -734,20 +794,22 @@
 
 }
 static void
-pcf_v_pi(PARROT_INTERP, PMC *self)
+pcf_v_pi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     
@@ -755,13 +817,14 @@
 
 }
 static void
-pcf_v_piiii(PARROT_INTERP, PMC *self)
+pcf_v_piiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
@@ -769,9 +832,10 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
     
@@ -782,20 +846,22 @@
 
 }
 static void
-pcf_v_pl(PARROT_INTERP, PMC *self)
+pcf_v_pl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     
@@ -803,20 +869,22 @@
 
 }
 static void
-pcf_v_pp(PARROT_INTERP, PMC *self)
+pcf_v_pp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
     
@@ -824,172 +892,188 @@
 
 }
 static void
-pcf_i_JPP(PARROT_INTERP, PMC *self)
+pcf_i_JPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_P_JP(PARROT_INTERP, PMC *self)
+pcf_P_JP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
 static void
-pcf_P_JPP(PARROT_INTERP, PMC *self)
+pcf_P_JPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 }
 static void
-pcf_P_JO(PARROT_INTERP, PMC *self)
+pcf_P_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 }
 static void
-pcf_S_JO(PARROT_INTERP, PMC *self)
+pcf_S_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 }
 static void
-pcf_i_P(PARROT_INTERP, PMC *self)
+pcf_i_P(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_P_JOPP(PARROT_INTERP, PMC *self)
+pcf_P_JOPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_P_JOPPP(PARROT_INTERP, PMC *self)
+pcf_P_JOPPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPP", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -997,21 +1081,23 @@
 
 }
 static void
-pcf_v_JOPP(PARROT_INTERP, PMC *self)
+pcf_v_JOPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -1021,22 +1107,24 @@
 
 }
 static void
-pcf_v_JOPPP(PARROT_INTERP, PMC *self)
+pcf_v_JOPPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     PMC * t_2;
     PMC * t_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPP", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3, t_4);
     
@@ -1047,13 +1135,14 @@
 
 }
 static void
-pcf_P_JOPPPP(PARROT_INTERP, PMC *self)
+pcf_P_JOPPPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
@@ -1061,12 +1150,13 @@
     PMC * t_3;
     PMC * t_4;
     PMC * t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPPP", &t_1, &t_2, &t_3, &t_4, &t_5);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4, t_5);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1075,13 +1165,14 @@
 
 }
 static void
-pcf_P_JOPPPPP(PARROT_INTERP, PMC *self)
+pcf_P_JOPPPPP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, PMC *, PMC *, PMC *, PMC *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
@@ -1090,12 +1181,13 @@
     PMC * t_4;
     PMC * t_5;
     PMC * t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiPPPPP", &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4, t_5, t_6);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1105,49 +1197,53 @@
 
 }
 static void
-pcf_I_JOSI(PARROT_INTERP, PMC *self)
+pcf_I_JOSI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, STRING *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     STRING * t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSI", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_P_JOSII(PARROT_INTERP, PMC *self)
+pcf_P_JOSII(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, STRING *, INTVAL, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     STRING * t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSII", &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
@@ -1155,157 +1251,170 @@
 
 }
 static void
-pcf_t_p3(PARROT_INTERP, PMC *self)
+pcf_t_p3(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     PMC *t_1; int i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
-pcf_i_pp3p(PARROT_INTERP, PMC *self)
+pcf_i_pp3p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2; int i_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), &i_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
 
 }
 static void
-pcf_i_pp3(PARROT_INTERP, PMC *self)
+pcf_i_pp3(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2; int i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), &i_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
 }
 static void
-pcf_i_ppd(PARROT_INTERP, PMC *self)
+pcf_i_ppd(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPN", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_ptii(PARROT_INTERP, PMC *self)
+pcf_i_ptii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSII", &t_0, &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 
 }
 static void
-pcf_i_pipi(PARROT_INTERP, PMC *self)
+pcf_i_pipi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIPI", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_t_ptti(PARROT_INTERP, PMC *self)
+pcf_t_ptti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, char *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
@@ -1313,51 +1422,55 @@
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSI", &t_0, &ts_1, &ts_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
 
 }
 static void
-pcf_t_pti(PARROT_INTERP, PMC *self)
+pcf_t_pti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_t_pttti(PARROT_INTERP, PMC *self)
+pcf_t_pttti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, char *, char *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
@@ -1366,13 +1479,14 @@
     char *t_2; STRING *ts_2;
     char *t_3; STRING *ts_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSI", &t_0, &ts_1, &ts_2, &ts_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -1380,102 +1494,110 @@
 
 }
 static void
-pcf_p_Ji(PARROT_INTERP, PMC *self)
+pcf_p_Ji(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp, t_1);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
 static void
-pcf_p_Jipp(PARROT_INTERP, PMC *self)
+pcf_p_Jipp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP, int, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_1;
     PMC *t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
 
 }
 static void
-pcf_p_Jbip(PARROT_INTERP, PMC *self)
+pcf_p_Jbip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP, void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     STRING *t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp, Buffer_bufstart(t_1), t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
 
 }
 static void
-pcf_v_Jp(PARROT_INTERP, PMC *self)
+pcf_v_Jp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
     
@@ -1483,19 +1605,21 @@
 
 }
 static void
-pcf_v_JS(PARROT_INTERP, PMC *self)
+pcf_v_JS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     STRING * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1);
     
@@ -1503,66 +1627,72 @@
 
 }
 static void
-pcf_t_tt(PARROT_INTERP, PMC *self)
+pcf_t_tt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SS", &ts_0, &ts_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_I_JOt(PARROT_INTERP, PMC *self)
+pcf_I_JOt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_v_JOSI(PARROT_INTERP, PMC *self)
+pcf_v_JOSI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, STRING *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     STRING * t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSI", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2, t_3);
     
@@ -1572,42 +1702,46 @@
 
 }
 static void
-pcf_S_JOi(PARROT_INTERP, PMC *self)
+pcf_S_JOi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
 }
 static void
-pcf_v_JOi(PARROT_INTERP, PMC *self)
+pcf_v_JOi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -1616,60 +1750,66 @@
 
 }
 static void
-pcf_I_JO(PARROT_INTERP, PMC *self)
+pcf_I_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef INTVAL(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (INTVAL)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_N_JO(PARROT_INTERP, PMC *self)
+pcf_N_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef FLOATVAL(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (FLOATVAL)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 }
 static void
-pcf_v_JON(PARROT_INTERP, PMC *self)
+pcf_v_JON(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, FLOATVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiN", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -1678,42 +1818,46 @@
 
 }
 static void
-pcf_P_JOi(PARROT_INTERP, PMC *self)
+pcf_P_JOi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 }
 static void
-pcf_v_JOI(PARROT_INTERP, PMC *self)
+pcf_v_JOI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1, t_2);
     
@@ -1722,324 +1866,353 @@
 
 }
 static void
-pcf_P_JOI(PARROT_INTERP, PMC *self)
+pcf_P_JOI(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 }
 static void
-pcf_P_JOIS(PARROT_INTERP, PMC *self)
+pcf_P_JOIS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef PMC *(* func_t)(PARROT_INTERP, PMC *, INTVAL, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     PMC * return_data;
 
     PMC * t_1;
     INTVAL t_2;
     STRING * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiIS", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (PMC *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", return_data);
     
 
 
 
 }
 static void
-pcf_S_JOSP(PARROT_INTERP, PMC *self)
+pcf_S_JOSP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef STRING *(* func_t)(PARROT_INTERP, PMC *, STRING *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     PMC * t_1;
     STRING * t_2;
     PMC * t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiSP", &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(interp, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 
 
 
 }
 static void
-pcf_i_(PARROT_INTERP, PMC *self)
+pcf_i_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)();
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_i3i(PARROT_INTERP, PMC *self)
+pcf_i_i3i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; int i_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPI", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 
 }
 static void
-pcf_i_ibi(PARROT_INTERP, PMC *self)
+pcf_i_ibi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     STRING *t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "ISI", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, Buffer_bufstart(t_1), t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_l_lttl(PARROT_INTERP, PMC *self)
+pcf_l_lttl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(long, char *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "ISSI", &t_0, &ts_1, &ts_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
 
 }
 static void
-pcf_i_pip(PARROT_INTERP, PMC *self)
+pcf_i_pip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_piS(PARROT_INTERP, PMC *self)
+pcf_i_piS(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, STRING *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     STRING * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIS", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_S_i(PARROT_INTERP, PMC *self)
+pcf_S_i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef STRING *(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     STRING * return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (STRING *)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", return_data);
     
 }
 static void
-pcf_l_p(PARROT_INTERP, PMC *self)
+pcf_l_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_c_p(PARROT_INTERP, PMC *self)
+pcf_c_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_p_pi(PARROT_INTERP, PMC *self)
+pcf_p_pi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
 static void
-pcf_p_p(PARROT_INTERP, PMC *self)
+pcf_p_p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
-pcf_i_pttttt(PARROT_INTERP, PMC *self)
+pcf_i_pttttt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *, char *, char *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -2048,12 +2221,13 @@
     char *t_3; STRING *ts_3;
     char *t_4; STRING *ts_4;
     char *t_5; STRING *ts_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSSS", &t_0, &ts_1, &ts_2, &ts_3, &ts_4, &ts_5);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_5 = ts_5 ? Parrot_str_to_cstring(interp, ts_5) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2062,38 +2236,41 @@
 if (t_5) Parrot_str_free_cstring(t_5);
 }
 static void
-pcf_c_pttt(PARROT_INTERP, PMC *self)
+pcf_c_pttt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char(* func_t)(void *, char *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     char *t_3; STRING *ts_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSS", &t_0, &ts_1, &ts_2, &ts_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
 if (t_3) Parrot_str_free_cstring(t_3);
 }
 static void
-pcf_p_pttttiti(PARROT_INTERP, PMC *self)
+pcf_p_pttttiti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, char *, char *, char *, int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2105,16 +2282,17 @@
     INTVAL t_5;
     char *t_6; STRING *ts_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSSISI", &t_0, &ts_1, &ts_2, &ts_3, &ts_4, &t_5, &ts_6, &t_7);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, t_6, t_7);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2125,286 +2303,311 @@
 
 }
 static void
-pcf_i_pt(PARROT_INTERP, PMC *self)
+pcf_i_pt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_i_ptl(PARROT_INTERP, PMC *self)
+pcf_i_ptl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_i_pi(PARROT_INTERP, PMC *self)
+pcf_i_pi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_pl(PARROT_INTERP, PMC *self)
+pcf_i_pl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_l_(PARROT_INTERP, PMC *self)
+pcf_l_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)();
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_p_pt(PARROT_INTERP, PMC *self)
+pcf_p_pt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_p_ptt(PARROT_INTERP, PMC *self)
+pcf_p_ptt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSS", &t_0, &ts_1, &ts_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_i_pit(PARROT_INTERP, PMC *self)
+pcf_i_pit(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_p_pp(PARROT_INTERP, PMC *self)
+pcf_p_pp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
 static void
-pcf_l_ttl(PARROT_INTERP, PMC *self)
+pcf_l_ttl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(char *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SSI", &ts_0, &ts_1, &t_2);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_l_pttl(PARROT_INTERP, PMC *self)
+pcf_l_pttl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(void *, char *, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSI", &t_0, &ts_1, &ts_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
 
 }
 static void
-pcf_v_t(PARROT_INTERP, PMC *self)
+pcf_v_t(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0);
     
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
-pcf_p_pttttitl(PARROT_INTERP, PMC *self)
+pcf_p_pttttitl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, char *, char *, char *, int, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2416,16 +2619,17 @@
     INTVAL t_5;
     char *t_6; STRING *ts_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSSSISI", &t_0, &ts_1, &ts_2, &ts_3, &ts_4, &t_5, &ts_6, &t_7);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, t_6, t_7);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2436,13 +2640,14 @@
 
 }
 static void
-pcf_p_tiB3P(PARROT_INTERP, PMC *self)
+pcf_p_tiB3P(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char *, int, char **, int *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2451,16 +2656,17 @@
     char *t_2; STRING *ts_2;
     PMC *t_3; int i_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SISPP", &ts_0, &t_1, &ts_2, &t_3, &t_4);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *) NULL;i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, &t_2, &i_3, t_4);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2468,13 +2674,14 @@
 
 }
 static void
-pcf_p_tip3P(PARROT_INTERP, PMC *self)
+pcf_p_tip3P(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char *, int, void *, int *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2483,16 +2690,17 @@
     PMC *t_2;
     PMC *t_3; int i_3;
     PMC * t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIPPP", &ts_0, &t_1, &t_2, &t_3, &t_4);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), &i_3, t_4);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 
@@ -2500,13 +2708,14 @@
 
 }
 static void
-pcf_i_pPtiiipi(PARROT_INTERP, PMC *self)
+pcf_i_pPtiiipi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, PMC *, char *, int, int, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -2517,12 +2726,13 @@
     INTVAL t_5;
     PMC *t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPSIIIPI", &t_0, &t_1, &ts_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, PMC_IS_NULL((PMC*)t_6) ? (void *)NULL : VTABLE_get_pointer(interp, t_6), t_7);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2533,13 +2743,14 @@
 
 }
 static void
-pcf_i_tpiibi(PARROT_INTERP, PMC *self)
+pcf_i_tpiibi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(char *, void *, int, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
@@ -2548,12 +2759,13 @@
     INTVAL t_3;
     STRING *t_4;
     INTVAL t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SPIISI", &ts_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, Buffer_bufstart(t_4), t_5);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 
@@ -2562,13 +2774,14 @@
 
 }
 static void
-pcf_p_ptippppi(PARROT_INTERP, PMC *self)
+pcf_p_ptippppi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, int, void *, void *, void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2580,16 +2793,17 @@
     PMC *t_5;
     PMC *t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIPPPPI", &t_0, &ts_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3), PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4), PMC_IS_NULL((PMC*)t_5) ? (void *)NULL : VTABLE_get_pointer(interp, t_5), PMC_IS_NULL((PMC*)t_6) ? (void *)NULL : VTABLE_get_pointer(interp, t_6), t_7);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2600,13 +2814,14 @@
 
 }
 static void
-pcf_p_pi33ipi(PARROT_INTERP, PMC *self)
+pcf_p_pi33ipi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, int, int *, int *, int, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2617,16 +2832,17 @@
     INTVAL t_4;
     PMC *t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIPPIPI", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, &i_2, &i_3, t_4, PMC_IS_NULL((PMC*)t_5) ? (void *)NULL : VTABLE_get_pointer(interp, t_5), t_6);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -2636,13 +2852,14 @@
 
 }
 static void
-pcf_p_pttip(PARROT_INTERP, PMC *self)
+pcf_p_pttip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, char *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2651,16 +2868,17 @@
     char *t_2; STRING *ts_2;
     INTVAL t_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSSIP", &t_0, &ts_1, &ts_2, &t_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -2668,13 +2886,14 @@
 
 }
 static void
-pcf_p_ptipppi(PARROT_INTERP, PMC *self)
+pcf_p_ptipppi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, int, void *, void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2685,16 +2904,17 @@
     PMC *t_4;
     PMC *t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIPPPI", &t_0, &ts_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3), PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4), PMC_IS_NULL((PMC*)t_5) ? (void *)NULL : VTABLE_get_pointer(interp, t_5), t_6);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -2704,41 +2924,44 @@
 
 }
 static void
-pcf_p_ppP(PARROT_INTERP, PMC *self)
+pcf_p_ppP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, void *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     PMC *t_1;
     PMC * t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
 }
 static void
-pcf_p_iiil(PARROT_INTERP, PMC *self)
+pcf_p_iiil(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int, int, int, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2746,60 +2969,65 @@
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, t_2, t_3);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
 
 }
 static void
-pcf_i_ppl(PARROT_INTERP, PMC *self)
+pcf_i_ppl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_v_pip(PARROT_INTERP, PMC *self)
+pcf_v_pip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
     
@@ -2808,64 +3036,69 @@
 
 }
 static void
-pcf_p_pti(PARROT_INTERP, PMC *self)
+pcf_p_pti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_i_ppp(PARROT_INTERP, PMC *self)
+pcf_i_ppp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_p_ptii(PARROT_INTERP, PMC *self)
+pcf_p_ptii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -2873,392 +3106,428 @@
     char *t_1; STRING *ts_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSII", &t_0, &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 
 }
 static void
-pcf_p_ti(PARROT_INTERP, PMC *self)
+pcf_p_ti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SI", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 }
 static void
-pcf_p_ptp(PARROT_INTERP, PMC *self)
+pcf_p_ptp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, char *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSP", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_i_pt33(PARROT_INTERP, PMC *self)
+pcf_i_pt33(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     PMC *t_2; int i_2;
     PMC *t_3; int i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSPP", &t_0, &ts_1, &t_2, &t_3);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, &i_2, &i_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 VTABLE_set_integer_native(interp, t_3, i_3);
 }
 static void
-pcf_c_(PARROT_INTERP, PMC *self)
+pcf_c_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)();
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_c_pi(PARROT_INTERP, PMC *self)
+pcf_c_pi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_d_(PARROT_INTERP, PMC *self)
+pcf_d_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef double(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (double)(*fn_pointer)();
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 }
 static void
-pcf_d_d(PARROT_INTERP, PMC *self)
+pcf_d_d(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef double(* func_t)(double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     FLOATVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "N", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (double)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 }
 static void
-pcf_f_(PARROT_INTERP, PMC *self)
+pcf_f_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef float(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (float)(*fn_pointer)();
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 }
 static void
-pcf_f_ff(PARROT_INTERP, PMC *self)
+pcf_f_ff(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef float(* func_t)(float, float);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     FLOATVAL t_0;
     FLOATVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "NN", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (float)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 }
 static void
-pcf_f_is(PARROT_INTERP, PMC *self)
+pcf_f_is(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef float(* func_t)(int, short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     FLOATVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (float)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "N", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "N", return_data);
     
 
 }
 static void
-pcf_i_b(PARROT_INTERP, PMC *self)
+pcf_i_b(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     STRING *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(Buffer_bufstart(t_0));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_d(PARROT_INTERP, PMC *self)
+pcf_i_d(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     FLOATVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "N", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_i(PARROT_INTERP, PMC *self)
+pcf_i_i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_ii(PARROT_INTERP, PMC *self)
+pcf_i_ii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_ii4(PARROT_INTERP, PMC *self)
+pcf_i_ii4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2; long i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIP", &t_0, &t_1, &t_2);
     i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, &i_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
 }
 static void
-pcf_i_ii4i(PARROT_INTERP, PMC *self)
+pcf_i_ii4i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2; long i_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIPI", &t_0, &t_1, &t_2, &t_3);
     i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, &i_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 VTABLE_set_integer_native(interp, t_2, i_2);
 
 }
 static void
-pcf_i_iiii(PARROT_INTERP, PMC *self)
+pcf_i_iiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_iiilsp(PARROT_INTERP, PMC *self)
+pcf_i_iiilsp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
@@ -3267,12 +3536,13 @@
     INTVAL t_3;
     INTVAL t_4;
     PMC *t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIIP", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3, t_4, PMC_IS_NULL((PMC*)t_5) ? (void *)NULL : VTABLE_get_pointer(interp, t_5));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3281,312 +3551,339 @@
 
 }
 static void
-pcf_i_iil(PARROT_INTERP, PMC *self)
+pcf_i_iil(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_iili(PARROT_INTERP, PMC *self)
+pcf_i_iili(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_iip(PARROT_INTERP, PMC *self)
+pcf_i_iip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_iit(PARROT_INTERP, PMC *self)
+pcf_i_iit(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_i_iiti(PARROT_INTERP, PMC *self)
+pcf_i_iiti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IISI", &t_0, &t_1, &ts_2, &t_3);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 
 }
 static void
-pcf_i_ilsp(PARROT_INTERP, PMC *self)
+pcf_i_ilsp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIP", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_iti(PARROT_INTERP, PMC *self)
+pcf_i_iti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "ISI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_i_l(PARROT_INTERP, PMC *self)
+pcf_i_l(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_li(PARROT_INTERP, PMC *self)
+pcf_i_li(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_lp(PARROT_INTERP, PMC *self)
+pcf_i_lp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_lsp(PARROT_INTERP, PMC *self)
+pcf_i_lsp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_p33(PARROT_INTERP, PMC *self)
+pcf_i_p33(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; int i_1;
     PMC *t_2; int i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 }
 static void
-pcf_i_p333(PARROT_INTERP, PMC *self)
+pcf_i_p333(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; int i_1;
     PMC *t_2; int i_2;
     PMC *t_3; int i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, &i_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 VTABLE_set_integer_native(interp, t_3, i_3);
 }
 static void
-pcf_i_p333333(PARROT_INTERP, PMC *self)
+pcf_i_p333333(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int *, int *, int *, int *, int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3596,12 +3893,13 @@
     PMC *t_4; int i_4;
     PMC *t_5; int i_5;
     PMC *t_6; int i_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPPPPP", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);i_4 = VTABLE_get_integer(interp, t_4);i_5 = VTABLE_get_integer(interp, t_5);i_6 = VTABLE_get_integer(interp, t_6);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, &i_3, &i_4, &i_5, &i_6);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
@@ -3611,151 +3909,164 @@
 VTABLE_set_integer_native(interp, t_6, i_6);
 }
 static void
-pcf_i_p4(PARROT_INTERP, PMC *self)
+pcf_i_p4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; long i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
-pcf_i_p42p(PARROT_INTERP, PMC *self)
+pcf_i_p42p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long *, short *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; long i_1;
     PMC *t_2; short i_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 
 }
 static void
-pcf_i_p4i(PARROT_INTERP, PMC *self)
+pcf_i_p4i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; long i_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 
 }
 static void
-pcf_i_pb(PARROT_INTERP, PMC *self)
+pcf_i_pb(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     STRING *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), Buffer_bufstart(t_1));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_pii(PARROT_INTERP, PMC *self)
+pcf_i_pii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_pii4(PARROT_INTERP, PMC *self)
+pcf_i_pii4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     PMC *t_3; long i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIP", &t_0, &t_1, &t_2, &t_3);
     i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, &i_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 VTABLE_set_integer_native(interp, t_3, i_3);
 }
 static void
-pcf_i_pii4i(PARROT_INTERP, PMC *self)
+pcf_i_pii4i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3763,12 +4074,13 @@
     INTVAL t_2;
     PMC *t_3; long i_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIPI", &t_0, &t_1, &t_2, &t_3, &t_4);
     i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, &i_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3776,38 +4088,41 @@
 
 }
 static void
-pcf_i_piii(PARROT_INTERP, PMC *self)
+pcf_i_piii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_piiiiii(PARROT_INTERP, PMC *self)
+pcf_i_piiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3817,12 +4132,13 @@
     INTVAL t_4;
     INTVAL t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, t_6);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3832,13 +4148,14 @@
 
 }
 static void
-pcf_i_piiilsp(PARROT_INTERP, PMC *self)
+pcf_i_piiilsp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3848,12 +4165,13 @@
     INTVAL t_4;
     INTVAL t_5;
     PMC *t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIIIP", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, PMC_IS_NULL((PMC*)t_6) ? (void *)NULL : VTABLE_get_pointer(interp, t_6));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3863,38 +4181,41 @@
 
 }
 static void
-pcf_i_piil(PARROT_INTERP, PMC *self)
+pcf_i_piil(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_piili(PARROT_INTERP, PMC *self)
+pcf_i_piili(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3902,12 +4223,13 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3915,38 +4237,41 @@
 
 }
 static void
-pcf_i_piit(PARROT_INTERP, PMC *self)
+pcf_i_piit(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     char *t_3; STRING *ts_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIS", &t_0, &t_1, &t_2, &ts_3);
     t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 if (t_3) Parrot_str_free_cstring(t_3);
 }
 static void
-pcf_i_piiti(PARROT_INTERP, PMC *self)
+pcf_i_piiti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, int, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3954,12 +4279,13 @@
     INTVAL t_2;
     char *t_3; STRING *ts_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIISI", &t_0, &t_1, &t_2, &ts_3, &t_4);
     t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3967,13 +4293,14 @@
 
 }
 static void
-pcf_i_pilsp(PARROT_INTERP, PMC *self)
+pcf_i_pilsp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -3981,12 +4308,13 @@
     INTVAL t_2;
     INTVAL t_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIP", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -3994,59 +4322,64 @@
 
 }
 static void
-pcf_i_pli(PARROT_INTERP, PMC *self)
+pcf_i_pli(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_pll(PARROT_INTERP, PMC *self)
+pcf_i_pll(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_pllllllll(PARROT_INTERP, PMC *self)
+pcf_i_pllllllll(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long, long, long, long, long, long, long, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -4058,12 +4391,13 @@
     INTVAL t_6;
     INTVAL t_7;
     INTVAL t_8;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4, t_5, t_6, t_7, t_8);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4075,105 +4409,114 @@
 
 }
 static void
-pcf_i_plp(PARROT_INTERP, PMC *self)
+pcf_i_plp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_plsp(PARROT_INTERP, PMC *self)
+pcf_i_plsp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, long, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIP", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_pp(PARROT_INTERP, PMC *self)
+pcf_i_pp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_ppi(PARROT_INTERP, PMC *self)
+pcf_i_ppi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_ppiiiiiiii(PARROT_INTERP, PMC *self)
+pcf_i_ppiiiiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int, int, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -4186,12 +4529,13 @@
     INTVAL t_7;
     INTVAL t_8;
     INTVAL t_9;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8, &t_9);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6, t_7, t_8, t_9);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -4204,627 +4548,682 @@
 
 }
 static void
-pcf_i_pppp(PARROT_INTERP, PMC *self)
+pcf_i_pppp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2;
     PMC *t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPP", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_psp(PARROT_INTERP, PMC *self)
+pcf_i_psp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIP", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_pti(PARROT_INTERP, PMC *self)
+pcf_i_pti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     char *t_1; STRING *ts_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSI", &t_0, &ts_1, &t_2);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
 }
 static void
-pcf_i_pitl(PARROT_INTERP, PMC *self)
+pcf_i_pitl(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, char *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     char *t_2; STRING *ts_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PISI", &t_0, &t_1, &ts_2, &t_3);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 
 }
 static void
-pcf_i_s(PARROT_INTERP, PMC *self)
+pcf_i_s(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_i_s22(PARROT_INTERP, PMC *self)
+pcf_i_s22(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short, short *, short *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; short i_1;
     PMC *t_2; short i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPP", &t_0, &t_1, &t_2);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1, &i_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 }
 static void
-pcf_i_s222(PARROT_INTERP, PMC *self)
+pcf_i_s222(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short, short *, short *, short *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; short i_1;
     PMC *t_2; short i_2;
     PMC *t_3; short i_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IPPP", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);i_3 = VTABLE_get_integer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1, &i_2, &i_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 VTABLE_set_integer_native(interp, t_3, i_3);
 }
 static void
-pcf_i_sp(PARROT_INTERP, PMC *self)
+pcf_i_sp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_sss(PARROT_INTERP, PMC *self)
+pcf_i_sss(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short, short, short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_ssss(PARROT_INTERP, PMC *self)
+pcf_i_ssss(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short, short, short, short);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_t(PARROT_INTERP, PMC *self)
+pcf_i_t(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
-pcf_i_ti(PARROT_INTERP, PMC *self)
+pcf_i_ti(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(char *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SI", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 }
 static void
-pcf_i_4(PARROT_INTERP, PMC *self)
+pcf_i_4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; long i_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     i_0 = VTABLE_get_integer(interp, t_0);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 }
 static void
-pcf_i_4i(PARROT_INTERP, PMC *self)
+pcf_i_4i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; long i_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     i_0 = VTABLE_get_integer(interp, t_0);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 
 }
 static void
-pcf_i_42p(PARROT_INTERP, PMC *self)
+pcf_i_42p(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(long *, short *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; long i_0;
     PMC *t_1; short i_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     i_0 = VTABLE_get_integer(interp, t_0);i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0, &i_1, PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 
 }
 static void
-pcf_l_ii(PARROT_INTERP, PMC *self)
+pcf_l_ii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_l_l4(PARROT_INTERP, PMC *self)
+pcf_l_l4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(long, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; long i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(t_0, &i_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
-pcf_l_pi(PARROT_INTERP, PMC *self)
+pcf_l_pi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_l_pii(PARROT_INTERP, PMC *self)
+pcf_l_pii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_l_p33l(PARROT_INTERP, PMC *self)
+pcf_l_p33l(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(void *, int *, int *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1; int i_1;
     PMC *t_2; int i_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPI", &t_0, &t_1, &t_2, &t_3);
     i_1 = VTABLE_get_integer(interp, t_1);i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), &i_1, &i_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 VTABLE_set_integer_native(interp, t_2, i_2);
 
 }
 static void
-pcf_l_33l(PARROT_INTERP, PMC *self)
+pcf_l_33l(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef long(* func_t)(int *, int *, long);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; int i_0;
     PMC *t_1; int i_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPI", &t_0, &t_1, &t_2);
     i_0 = VTABLE_get_integer(interp, t_0);i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (long)(*fn_pointer)(&i_0, &i_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 
 }
 static void
-pcf_p_(PARROT_INTERP, PMC *self)
+pcf_p_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)();
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
-pcf_p_B(PARROT_INTERP, PMC *self)
+pcf_p_B(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *) NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(&t_0);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
-pcf_p_b(PARROT_INTERP, PMC *self)
+pcf_p_b(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     STRING *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(Buffer_bufstart(t_0));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
-pcf_p_Jt(PARROT_INTERP, PMC *self)
+pcf_p_Jt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(interp, t_1);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_p_i(PARROT_INTERP, PMC *self)
+pcf_p_i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 }
 static void
-pcf_p_ii(PARROT_INTERP, PMC *self)
+pcf_p_ii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
 static void
-pcf_p_iiii(PARROT_INTERP, PMC *self)
+pcf_p_iiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4832,29 +5231,31 @@
     INTVAL t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, t_2, t_3);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
 
 }
 static void
-pcf_p_iiiiii(PARROT_INTERP, PMC *self)
+pcf_p_iiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4864,16 +5265,17 @@
     INTVAL t_3;
     INTVAL t_4;
     INTVAL t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, t_2, t_3, t_4, t_5);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4882,13 +5284,14 @@
 
 }
 static void
-pcf_p_iiiiiiii(PARROT_INTERP, PMC *self)
+pcf_p_iiiiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int, int, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4900,16 +5303,17 @@
     INTVAL t_5;
     INTVAL t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4920,41 +5324,44 @@
 
 }
 static void
-pcf_p_pii(PARROT_INTERP, PMC *self)
+pcf_p_pii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
 }
 static void
-pcf_p_piiii(PARROT_INTERP, PMC *self)
+pcf_p_piiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -4963,16 +5370,17 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -4980,65 +5388,70 @@
 
 }
 static void
-pcf_p_t(PARROT_INTERP, PMC *self)
+pcf_p_t(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
-pcf_p_tpp(PARROT_INTERP, PMC *self)
+pcf_p_tpp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char *, void *, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     char *t_0; STRING *ts_0;
     PMC *t_1;
     PMC *t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SPP", &ts_0, &t_1, &t_2);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 
 }
 static void
-pcf_p_ttttttt(PARROT_INTERP, PMC *self)
+pcf_p_ttttttt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(char *, char *, char *, char *, char *, char *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -5049,16 +5462,17 @@
     char *t_4; STRING *ts_4;
     char *t_5; STRING *ts_5;
     char *t_6; STRING *ts_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SSSSSSS", &ts_0, &ts_1, &ts_2, &ts_3, &ts_4, &ts_5, &ts_6);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;t_3 = ts_3 ? Parrot_str_to_cstring(interp, ts_3) : (char *)NULL;t_4 = ts_4 ? Parrot_str_to_cstring(interp, ts_4) : (char *)NULL;t_5 = ts_5 ? Parrot_str_to_cstring(interp, ts_5) : (char *)NULL;t_6 = ts_6 ? Parrot_str_to_cstring(interp, ts_6) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, t_1, t_2, t_3, t_4, t_5, t_6);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 if (t_1) Parrot_str_free_cstring(t_1);
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -5068,385 +5482,421 @@
 if (t_6) Parrot_str_free_cstring(t_6);
 }
 static void
-pcf_s_(PARROT_INTERP, PMC *self)
+pcf_s_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef short(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (short)(*fn_pointer)();
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 }
 static void
-pcf_t_(PARROT_INTERP, PMC *self)
+pcf_t_(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     ;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    UNUSED(return_data); /* Potentially unused, at least */
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)();
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
-pcf_t_i(PARROT_INTERP, PMC *self)
+pcf_t_i(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     INTVAL t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
-pcf_t_ii(PARROT_INTERP, PMC *self)
+pcf_t_ii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 }
 static void
-pcf_t_pi(PARROT_INTERP, PMC *self)
+pcf_t_pi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 }
 static void
-pcf_t_pii(PARROT_INTERP, PMC *self)
+pcf_t_pii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 
 
 }
 static void
-pcf_t_t(PARROT_INTERP, PMC *self)
+pcf_t_t(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
-pcf_t_tl4(PARROT_INTERP, PMC *self)
+pcf_t_tl4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(char *, long, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
     INTVAL t_1;
     PMC *t_2; long i_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SIP", &ts_0, &t_1, &t_2);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;i_2 = VTABLE_get_integer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, t_1, &i_2);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 
 VTABLE_set_integer_native(interp, t_2, i_2);
 }
 static void
-pcf_t_t4(PARROT_INTERP, PMC *self)
+pcf_t_t4(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(char *, long *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
     PMC *t_1; long i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SP", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(t_0, &i_1);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
-pcf_i_sc(PARROT_INTERP, PMC *self)
+pcf_i_sc(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(short, char);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_s_sc(PARROT_INTERP, PMC *self)
+pcf_s_sc(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef short(* func_t)(short, char);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (short)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_c_sc(PARROT_INTERP, PMC *self)
+pcf_c_sc(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char(* func_t)(short, char);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char)(*fn_pointer)(t_0, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_iii(PARROT_INTERP, PMC *self)
+pcf_i_iii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_i3(PARROT_INTERP, PMC *self)
+pcf_i_i3(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_0;
     PMC *t_1; int i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &i_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
-pcf_t_b(PARROT_INTERP, PMC *self)
+pcf_t_b(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     STRING *t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(Buffer_bufstart(t_0));
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     
 }
 static void
-pcf_t_B(PARROT_INTERP, PMC *self)
+pcf_t_B(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef char *(* func_t)(char **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     char * return_data;
 STRING *final_destination;
 
     char *t_0; STRING *ts_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_0);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *) NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (char *)(*fn_pointer)(&t_0);
     final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "S", final_destination);
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "S", final_destination);
     if (t_0) Parrot_str_free_cstring(t_0);
 }
 static void
-pcf_v_P(PARROT_INTERP, PMC *self)
+pcf_v_P(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0);
     
     
 }
 static void
-pcf_v_pP(PARROT_INTERP, PMC *self)
+pcf_v_pP(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1);
     
@@ -5454,68 +5904,74 @@
 
 }
 static void
-pcf_p_ip(PARROT_INTERP, PMC *self)
+pcf_p_ip(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(int, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
     INTVAL t_0;
     PMC *t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "IP", &t_0, &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(t_0, PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1));
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 }
 static void
-pcf_i_33(PARROT_INTERP, PMC *self)
+pcf_i_33(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(int *, int *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0; int i_0;
     PMC *t_1; int i_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PP", &t_0, &t_1);
     i_0 = VTABLE_get_integer(interp, t_0);i_1 = VTABLE_get_integer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(&i_0, &i_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     VTABLE_set_integer_native(interp, t_0, i_0);
 VTABLE_set_integer_native(interp, t_1, i_1);
 }
 static void
-pcf_v_pii(PARROT_INTERP, PMC *self)
+pcf_v_pii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0;
     INTVAL t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
     
@@ -5524,19 +5980,21 @@
 
 }
 static void
-pcf_v_JO(PARROT_INTERP, PMC *self)
+pcf_v_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(interp, t_1);
     
@@ -5544,124 +6002,136 @@
 
 }
 static void
-pcf_i_JO(PARROT_INTERP, PMC *self)
+pcf_i_JO(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "Pi", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_i_JOi(PARROT_INTERP, PMC *self)
+pcf_i_JOi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     INTVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiI", &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_JOt(PARROT_INTERP, PMC *self)
+pcf_i_JOt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, PMC *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC * t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PiS", &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_i_Jt(PARROT_INTERP, PMC *self)
+pcf_i_Jt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_1; STRING *ts_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &ts_1);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 }
 static void
-pcf_i_Ji(PARROT_INTERP, PMC *self)
+pcf_i_Ji(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(PARROT_INTERP, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "I", &t_1);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(interp, t_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 }
 static void
-pcf_v_Vi(PARROT_INTERP, PMC *self)
+pcf_v_Vi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void **, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0; void *v_0;
     INTVAL t_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PI", &t_0, &t_1);
     v_0 = VTABLE_get_pointer(interp, t_0);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(&v_0, t_1);
     
@@ -5669,13 +6139,14 @@
 
 }
 static void
-pcf_p_ppiii(PARROT_INTERP, PMC *self)
+pcf_p_ppiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, void *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -5684,16 +6155,17 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -5701,13 +6173,14 @@
 
 }
 static void
-pcf_p_ppiiiiiii(PARROT_INTERP, PMC *self)
+pcf_p_ppiiiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void *(* func_t)(void *, void *, int, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 PMC * final_destination = PMCNULL;
 
@@ -5720,16 +6193,17 @@
     INTVAL t_6;
     INTVAL t_7;
     INTVAL t_8;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (void *)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6, t_7, t_8);
     if (return_data != NULL) {
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, "P", final_destination);
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "P", final_destination);
     
 
 
@@ -5741,38 +6215,41 @@
 
 }
 static void
-pcf_i_ppii(PARROT_INTERP, PMC *self)
+pcf_i_ppii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     INTVAL t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPII", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_ppiii(PARROT_INTERP, PMC *self)
+pcf_i_ppiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5780,12 +6257,13 @@
     INTVAL t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5793,13 +6271,14 @@
 
 }
 static void
-pcf_i_ppiiii(PARROT_INTERP, PMC *self)
+pcf_i_ppiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5808,12 +6287,13 @@
     INTVAL t_3;
     INTVAL t_4;
     INTVAL t_5;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5822,13 +6302,14 @@
 
 }
 static void
-pcf_i_ppiiiii(PARROT_INTERP, PMC *self)
+pcf_i_ppiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5838,12 +6319,13 @@
     INTVAL t_4;
     INTVAL t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5853,13 +6335,14 @@
 
 }
 static void
-pcf_i_ppiiiiii(PARROT_INTERP, PMC *self)
+pcf_i_ppiiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5870,12 +6353,13 @@
     INTVAL t_5;
     INTVAL t_6;
     INTVAL t_7;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2, t_3, t_4, t_5, t_6, t_7);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5886,61 +6370,66 @@
 
 }
 static void
-pcf_i_ppt(PARROT_INTERP, PMC *self)
+pcf_i_ppt(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, char *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     char *t_2; STRING *ts_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPS", &t_0, &t_1, &ts_2);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
 }
 static void
-pcf_i_pppi(PARROT_INTERP, PMC *self)
+pcf_i_pppi(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, void *, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     PMC *t_1;
     PMC *t_2;
     INTVAL t_3;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPI", &t_0, &t_1, &t_2, &t_3);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 
 }
 static void
-pcf_i_pppii(PARROT_INTERP, PMC *self)
+pcf_i_pppii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, void *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5948,12 +6437,13 @@
     PMC *t_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPII", &t_0, &t_1, &t_2, &t_3, &t_4);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5961,13 +6451,14 @@
 
 }
 static void
-pcf_i_pppiiii(PARROT_INTERP, PMC *self)
+pcf_i_pppiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, void *, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -5977,12 +6468,13 @@
     INTVAL t_4;
     INTVAL t_5;
     INTVAL t_6;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), t_3, t_4, t_5, t_6);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -5992,13 +6484,14 @@
 
 }
 static void
-pcf_i_ppppiiiiii(PARROT_INTERP, PMC *self)
+pcf_i_ppppiiiiii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, void *, void *, void *, int, int, int, int, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -6011,12 +6504,13 @@
     INTVAL t_7;
     INTVAL t_8;
     INTVAL t_9;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPPPIIIIII", &t_0, &t_1, &t_2, &t_3, &t_4, &t_5, &t_6, &t_7, &t_8, &t_9);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), PMC_IS_NULL((PMC*)t_1) ? (void *)NULL : VTABLE_get_pointer(interp, t_1), PMC_IS_NULL((PMC*)t_2) ? (void *)NULL : VTABLE_get_pointer(interp, t_2), PMC_IS_NULL((PMC*)t_3) ? (void *)NULL : VTABLE_get_pointer(interp, t_3), t_4, t_5, t_6, t_7, t_8, t_9);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
@@ -6029,21 +6523,23 @@
 
 }
 static void
-pcf_v_fff(PARROT_INTERP, PMC *self)
+pcf_v_fff(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(float, float, float);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     FLOATVAL t_0;
     FLOATVAL t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "NNN", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(t_0, t_1, t_2);
     
@@ -6052,40 +6548,44 @@
 
 }
 static void
-pcf_v_V(PARROT_INTERP, PMC *self)
+pcf_v_V(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0; void *v_0;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_0);
     v_0 = VTABLE_get_pointer(interp, t_0);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(&v_0);
     
     VTABLE_set_pointer(interp, t_0, v_0);
 }
 static void
-pcf_v_VVV(PARROT_INTERP, PMC *self)
+pcf_v_VVV(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef void(* func_t)(void **, void **, void **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     void * return_data;
 
     PMC *t_0; void *v_0;
     PMC *t_1; void *v_1;
     PMC *t_2; void *v_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PPP", &t_0, &t_1, &t_2);
     v_0 = VTABLE_get_pointer(interp, t_0);v_1 = VTABLE_get_pointer(interp, t_1);v_2 = VTABLE_get_pointer(interp, t_2);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
      (*fn_pointer)(&v_0, &v_1, &v_2);
     
@@ -6094,34 +6594,37 @@
 VTABLE_set_pointer(interp, t_2, v_2);
 }
 static void
-pcf_i_tV(PARROT_INTERP, PMC *self)
+pcf_i_tV(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(char *, void **);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     char *t_0; STRING *ts_0;
     PMC *t_1; void *v_1;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "SP", &ts_0, &t_1);
     t_0 = ts_0 ? Parrot_str_to_cstring(interp, ts_0) : (char *)NULL;v_1 = VTABLE_get_pointer(interp, t_1);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(t_0, &v_1);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     if (t_0) Parrot_str_free_cstring(t_0);
 VTABLE_set_pointer(interp, t_1, v_1);
 }
 static void
-pcf_i_ptiVp(PARROT_INTERP, PMC *self)
+pcf_i_ptiVp(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, char *, int, void **, void *);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -6129,12 +6632,13 @@
     INTVAL t_2;
     PMC *t_3; void *v_3;
     PMC *t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PSIPP", &t_0, &ts_1, &t_2, &t_3, &t_4);
     t_1 = ts_1 ? Parrot_str_to_cstring(interp, ts_1) : (char *)NULL;v_3 = VTABLE_get_pointer(interp, t_3);
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, &v_3, PMC_IS_NULL((PMC*)t_4) ? (void *)NULL : VTABLE_get_pointer(interp, t_4));
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 if (t_1) Parrot_str_free_cstring(t_1);
 
@@ -6142,36 +6646,39 @@
 
 }
 static void
-pcf_i_pid(PARROT_INTERP, PMC *self)
+pcf_i_pid(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, double);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
     INTVAL t_1;
     FLOATVAL t_2;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PIN", &t_0, &t_1, &t_2);
     
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 
 }
 static void
-pcf_i_pitii(PARROT_INTERP, PMC *self)
+pcf_i_pitii(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 {
     typedef int(* func_t)(void *, int, char *, int, int);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     INTVAL return_data;
 
     PMC *t_0;
@@ -6179,12 +6686,13 @@
     char *t_2; STRING *ts_2;
     INTVAL t_3;
     INTVAL t_4;
+    UNUSED(return_data); /* Potentially unused, at least */
     Parrot_pcc_fill_params_from_c_args(interp, call_object, "PISII", &t_0, &t_1, &ts_2, &t_3, &t_4);
     t_2 = ts_2 ? Parrot_str_to_cstring(interp, ts_2) : (char *)NULL;
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     return_data =  (int)(*fn_pointer)(PMC_IS_NULL((PMC*)t_0) ? (void *)NULL : VTABLE_get_pointer(interp, t_0), t_1, t_2, t_3, t_4);
-    Parrot_pcc_fill_returns_from_c_args(interp, call_object, "I", return_data);
+    ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "I", return_data);
     
 
 if (t_2) Parrot_str_free_cstring(t_2);
@@ -6194,19 +6702,14 @@
 
  void
 Parrot_nci_load_extra_thunks(PARROT_INTERP)
-;
- void
-Parrot_nci_load_extra_thunks(PARROT_INTERP)
  {
-    PMC *iglobals;
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *temp_pmc;
 
-    iglobals = interp->iglobals;
     PARROT_ASSERT(!(PMC_IS_NULL(iglobals)));
 
-    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals,
-            IGLOBALS_NCI_FUNCS);
+    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FUNCS);
     PARROT_ASSERT(!(PMC_IS_NULL(nci_funcs)));
 
     temp_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);

Modified: branches/ops_pct/src/nci_test.c
==============================================================================
--- branches/ops_pct/src/nci_test.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/nci_test.c	Wed May  5 08:45:29 2010	(r46302)
@@ -892,10 +892,10 @@
 nci_cb_D4(cb_D4_func times_ten, void* user_data)
 {
     int cnt;
-    for (cnt = 0; cnt < 9; cnt++)
+    for (cnt = 0; cnt < 9; ++cnt)
     {
         (times_ten)(user_data, &int_cb_D4);
-        int_cb_D4++;
+        ++int_cb_D4;
     }
 
     return;

Modified: branches/ops_pct/src/oo.c
==============================================================================
--- branches/ops_pct/src/oo.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/oo.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -130,7 +130,7 @@
         }
     }
 
-    /* Import any vtable methods. */
+    /* Import any vtables. */
     Parrot_pcc_invoke_method_from_c_args(interp, ns, CONST_STRING(interp, "get_associated_vtable_methods"), "->P", &vtable_overrides);
 
     if (!PMC_IS_NULL(vtable_overrides)) {
@@ -169,49 +169,51 @@
     ASSERT_ARGS(Parrot_oo_get_class)
     PMC *classobj = PMCNULL;
 
-    if (PObj_is_class_TEST(key))
-        classobj = key;
-    else {
-        /* Fast select of behavior based on type of the lookup key */
-        switch (key->vtable->base_type) {
-          case enum_class_NameSpace:
-            classobj = VTABLE_get_class(interp, key);
-            break;
-          case enum_class_String:
-          case enum_class_Key:
-          case enum_class_ResizableStringArray:
-            {
-                PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp,
-                                        interp->HLL_namespace,
-                                        Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp)));
-                PMC * const ns     = Parrot_get_namespace_keyed(interp,
-                                        hll_ns, key);
+    if (!PMC_IS_NULL(key)) {
+        if (PObj_is_class_TEST(key))
+            classobj = key;
+        else {
+            /* Fast select of behavior based on type of the lookup key */
+            switch (key->vtable->base_type) {
+              case enum_class_NameSpace:
+                classobj = VTABLE_get_class(interp, key);
+                break;
+              case enum_class_String:
+              case enum_class_Key:
+              case enum_class_ResizableStringArray:
+                {
+                    PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp,
+                                            interp->HLL_namespace,
+                                            Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp)));
+                    PMC * const ns     = Parrot_get_namespace_keyed(interp,
+                                            hll_ns, key);
 
-                if (!PMC_IS_NULL(ns))
-                    classobj = VTABLE_get_class(interp, ns);
+                    if (!PMC_IS_NULL(ns))
+                        classobj = VTABLE_get_class(interp, ns);
+                }
+              default:
+                break;
             }
-          default:
-            break;
         }
-    }
 
-    /* If the PMCProxy doesn't exist yet for the given key, we look up the
-       type ID here and create a new one */
-    if (PMC_IS_NULL(classobj)) {
-        INTVAL type;
-        const INTVAL base_type = key->vtable->base_type;
-
-        /* This is a hack! All PMCs should be able to be handled through
-           a single codepath, and all of them should be able to avoid
-           stringification because it's so imprecise. */
-        if (base_type == enum_class_Key
-         || base_type == enum_class_ResizableStringArray
-         || base_type == enum_class_String)
-            type = Parrot_pmc_get_type(interp, key);
-        else
-            type = Parrot_pmc_get_type_str(interp, VTABLE_get_string(interp, key));
+        /* If the PMCProxy doesn't exist yet for the given key, we look up the
+           type ID here and create a new one */
+        if (PMC_IS_NULL(classobj)) {
+            INTVAL type;
+            const INTVAL base_type = key->vtable->base_type;
+
+            /* This is a hack! All PMCs should be able to be handled through
+               a single codepath, and all of them should be able to avoid
+               stringification because it's so imprecise. */
+            if (base_type == enum_class_Key
+             || base_type == enum_class_ResizableStringArray
+             || base_type == enum_class_String)
+                type = Parrot_pmc_get_type(interp, key);
+            else
+                type = Parrot_pmc_get_type_str(interp, VTABLE_get_string(interp, key));
 
-        classobj = get_pmc_proxy(interp, type);
+            classobj = get_pmc_proxy(interp, type);
+        }
     }
 
     return classobj;
@@ -219,8 +221,7 @@
 
 /*
 
-=item C<PMC * Parrot_oo_clone_object(PARROT_INTERP, PMC *pmc, PMC *class_, PMC
-*dest)>
+=item C<PMC * Parrot_oo_clone_object(PARROT_INTERP, PMC *pmc, PMC *dest)>
 
 Clone an Object PMC. If an existing PMC C<dest> is provided, reuse that
 PMC to store copies of the data. Otherwise, create a new PMC and populate
@@ -232,11 +233,10 @@
 
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_oo_clone_object(PARROT_INTERP, ARGIN(PMC *pmc),
-    ARGMOD_NULLOK(PMC *class_), ARGMOD_NULLOK(PMC *dest))
+Parrot_oo_clone_object(PARROT_INTERP, ARGIN(PMC *pmc), ARGMOD_NULLOK(PMC *dest))
 {
     ASSERT_ARGS(Parrot_oo_clone_object)
-    Parrot_Object_attributes *obj;
+    Parrot_Object_attributes *obj = PARROT_OBJECT(pmc);
     Parrot_Object_attributes *cloned_guts;
     Parrot_Class_attributes  *_class;
     PMC                      *cloned;
@@ -244,13 +244,9 @@
     INTVAL                    i, num_attrs;
 
     if (!PMC_IS_NULL(dest)) {
-        PARROT_ASSERT(!PMC_IS_NULL(class_));
-        PARROT_ASSERT(class_->vtable->base_type == enum_class_Class);
-        obj    = PARROT_OBJECT(pmc);
         cloned = dest;
     }
     else {
-        obj    = PARROT_OBJECT(pmc);
         cloned = Parrot_pmc_new_noinit(interp, enum_class_Object);
     }
 
@@ -268,10 +264,10 @@
     /* Now clone attributes list.class. */
     cloned_guts               = (Parrot_Object_attributes *) PMC_data(cloned);
     cloned_guts->_class       = obj->_class;
-    cloned_guts->attrib_store = NULL;
+    cloned_guts->attrib_store = NULL; /* XXX Do we need to set ->attrib_store twice? */
     cloned_guts->attrib_store = VTABLE_clone(interp, obj->attrib_store);
     num_attrs                 = VTABLE_elements(interp, cloned_guts->attrib_store);
-    for (i = 0; i < num_attrs; i++) {
+    for (i = 0; i < num_attrs; ++i) {
         PMC * const to_clone = VTABLE_get_pmc_keyed_int(interp, cloned_guts->attrib_store, i);
         if (!PMC_IS_NULL(to_clone)) {
             VTABLE_set_pmc_keyed_int(interp, cloned_guts->attrib_store, i,
@@ -282,9 +278,10 @@
     /* Some of the attributes may have been the PMCs providing storage for any
      * PMCs we inherited from; also need to clone those. */
     if (CLASS_has_alien_parents_TEST(obj->_class)) {
+        int j;
         /* Locate any PMC parents. */
-        for (i = 0; i < num_classes; i++) {
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
+        for (j = 0; j < num_classes; ++j) {
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp, _class->all_parents, j);
             if (cur_class->vtable->base_type == enum_class_PMCProxy) {
                 /* Clone this PMC too. */
                 STRING * const proxy = CONST_STRING(interp, "proxy");
@@ -342,9 +339,7 @@
 
         /* Create proxy if not found */
         if (PMC_IS_NULL(proxy)) {
-            PMC * const type_num = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, type_num, type);
-            proxy = Parrot_pmc_new_init(interp, enum_class_PMCProxy, type_num);
+            proxy = Parrot_pmc_new_init_int(interp, enum_class_PMCProxy, type);
             Parrot_pcc_invoke_method_from_c_args(interp, pmc_ns, CONST_STRING(interp, "set_class"), "P->", proxy);
         }
         return proxy;
@@ -438,10 +433,9 @@
         ARGIN(PMC *classobj), ARGIN(STRING *name))
 {
     ASSERT_ARGS(Parrot_oo_find_vtable_override_for_class)
-    Parrot_Class_attributes *class_info;
+    const Parrot_Class_attributes * const class_info = PARROT_CLASS(classobj);;
     PARROT_ASSERT(PObj_is_class_TEST(classobj));
 
-    class_info = PARROT_CLASS(classobj);
     return VTABLE_get_pmc_keyed_str(interp, class_info->vtable_overrides, name);
 }
 
@@ -471,11 +465,11 @@
         VTABLE_get_pmc_keyed_str(interp, _class->parent_overrides, name);
 
     if (PMC_IS_NULL(result)) {
-        /* Walk and search for the vtable method. */
+        /* Walk and search for the vtable. */
         const INTVAL num_classes = VTABLE_elements(interp, _class->all_parents);
         INTVAL       i;
 
-        for (i = 0; i < num_classes; i++) {
+        for (i = 0; i < num_classes; ++i) {
             /* Get the class. */
             PMC * const cur_class =
                 VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
@@ -653,11 +647,10 @@
     }
     {
         if (!typeid_exists) {
-            PMC * const classname_hash = interp->class_hash;
-            PMC * const item           = Parrot_pmc_new(interp, enum_class_Integer);
             /* set entry in name->type hash */
-            VTABLE_set_integer_native(interp, item, type);
-
+            PMC * const classname_hash = interp->class_hash;
+            PMC * const item           = Parrot_pmc_new_init_int(interp,
+                    enum_class_Integer, type);
             VTABLE_set_pmc_keyed(interp, classname_hash, name, item);
         }
     }
@@ -691,7 +684,7 @@
     if (!mc)
         return;
 
-    for (type = 0; type < mc->mc_size; type++) {
+    for (type = 0; type < mc->mc_size; ++type) {
         if (!mc->idx[type])
             continue;
 
@@ -744,7 +737,7 @@
     Caches * const mc = interp->caches;
 
     /* mc->idx[type][bits] = e; */
-    for (i = 0; i < mc->mc_size; i++) {
+    for (i = 0; i < mc->mc_size; ++i) {
         if (mc->idx[i])
             invalidate_type_caches(interp, i);
     }
@@ -808,8 +801,8 @@
 invalidate_all_caches(PARROT_INTERP)
 {
     ASSERT_ARGS(invalidate_all_caches)
-    UINTVAL i;
-    for (i = 1; i < (UINTVAL)interp->n_vtable_max; ++i)
+    int i;
+    for (i = 1; i < interp->n_vtable_max; ++i)
         invalidate_type_caches(interp, i);
 }
 
@@ -1044,13 +1037,26 @@
 
     PMC * const  mro = _class->vtable->mro;
     const INTVAL n   = VTABLE_elements(interp, mro);
+    STRING * const methods_str = CONST_STRING(interp, "methods");
+    STRING * const class_str = CONST_STRING(interp, "class");
 
     for (i = 0; i < n; ++i) {
-        PMC *method, *ns;
+        PMC * const _class    = VTABLE_get_pmc_keyed_int(interp, mro, i);
+        PMC * const ns        = VTABLE_get_namespace(interp, _class);
+        PMC * const class_obj = VTABLE_inspect_str(interp, ns, class_str);
+        PMC           *method = PMCNULL;
+        PMC * method_hash;
+
+        if (PMC_IS_NULL(class_obj))
+            method_hash = VTABLE_inspect_str(interp, ns, methods_str);
+        else
+            method_hash = VTABLE_inspect_str(interp, class_obj, methods_str);
+
+        if (!PMC_IS_NULL(method_hash))
+            method = VTABLE_get_pmc_keyed_str(interp, method_hash, method_name);
 
-        _class = VTABLE_get_pmc_keyed_int(interp, mro, i);
-        ns     = VTABLE_get_namespace(interp, _class);
-        method = VTABLE_get_pmc_keyed_str(interp, ns, method_name);
+        if (PMC_IS_NULL(method))
+            method = VTABLE_get_pmc_keyed_str(interp, ns, method_name);
 
         TRACE_FM(interp, _class, method_name, method);
 
@@ -1087,7 +1093,7 @@
 
     /* Try and find something appropriate to add to the MRO - basically, the
      * first list head that is not in the tail of all the other lists. */
-    for (i = 0; i < list_count; i++) {
+    for (i = 0; i < list_count; ++i) {
         PMC * const cand_list = VTABLE_get_pmc_keyed_int(interp, merge_list, i);
 
         PMC *cand_class;
@@ -1098,9 +1104,9 @@
             continue;
 
         cand_class = VTABLE_get_pmc_keyed_int(interp, cand_list, 0);
-        cand_count++;
+        ++cand_count;
 
-        for (j = 0; j < list_count; j++) {
+        for (j = 0; j < list_count; ++j) {
             /* Skip the current list. */
             if (j != i) {
                 /* Is it in the tail? If so, reject. */
@@ -1110,7 +1116,7 @@
                 const int check_length = VTABLE_elements(interp, check_list);
                 int k;
 
-                for (k = 1; k < check_length; k++) {
+                for (k = 1; k < check_length; ++k) {
                     if (VTABLE_get_pmc_keyed_int(interp, check_list, k) ==
                         cand_class) {
                         reject = 1;
@@ -1137,13 +1143,13 @@
             "Could not build C3 linearization: ambiguous hierarchy");
 
     /* Otherwise, remove what was accepted from the merge lists. */
-    for (i = 0; i < list_count; i++) {
+    for (i = 0; i < list_count; ++i) {
 
-        PMC * const list       = VTABLE_get_pmc_keyed_int(interp, merge_list, i);
-        const INTVAL list_count = VTABLE_elements(interp, list);
+        PMC * const list           = VTABLE_get_pmc_keyed_int(interp, merge_list, i);
+        const INTVAL sublist_count = VTABLE_elements(interp, list);
         INTVAL j;
 
-        for (j = 0; j < list_count; j++) {
+        for (j = 0; j < sublist_count; ++j) {
             if (VTABLE_get_pmc_keyed_int(interp, list, j) == accepted) {
                 VTABLE_delete_keyed_int(interp, list, j);
                 break;
@@ -1191,7 +1197,7 @@
     INTVAL parent_count;
 
     /* Now get immediate parents list. */
-    if (!immediate_parents)
+    if (PMC_IS_NULL(immediate_parents))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_METHOD_NOT_FOUND,
             "Failed to get parents list from class!");
 
@@ -1207,7 +1213,7 @@
     /* Otherwise, need to do merge. For that, need linearizations of all of
      * our parents added to the merge list. */
     merge_list = PMCNULL;
-    for (i = 0; i < parent_count; i++) {
+    for (i = 0; i < parent_count; ++i) {
         PMC * const lin = Parrot_ComputeMRO_C3(interp,
             VTABLE_get_pmc_keyed_int(interp, immediate_parents, i));
 
@@ -1275,7 +1281,7 @@
     /* Check we have not already composed the role; if so, just ignore it. */
     INTVAL roles_count = VTABLE_elements(interp, roles_list);
 
-    for (i = 0; i < roles_count; i++)
+    for (i = 0; i < roles_count; ++i)
         if (VTABLE_get_pmc_keyed_int(interp, roles_list, i) == role)
             return;
 
@@ -1303,7 +1309,7 @@
         if (got_exclude) {
             const int exclude_count = VTABLE_elements(interp, exclude);
 
-            for (i = 0; i < exclude_count; i++) {
+            for (i = 0; i < exclude_count; ++i) {
                 const STRING * const check =
                     VTABLE_get_string_keyed_int(interp, exclude, i);
 
@@ -1399,7 +1405,7 @@
                 /* Class already has a multi-sub; need to merge our methods into it. */
                 const INTVAL num_subs = VTABLE_elements(interp, cur_method);
                 INTVAL j;
-                for (j = 0; j < num_subs; j++)
+                for (j = 0; j < num_subs; ++j)
                     VTABLE_push_pmc(interp, cur_entry, VTABLE_get_pmc_keyed_int(interp,
                             cur_method, j));
             }
@@ -1419,7 +1425,7 @@
 
     /* Add this role to the roles list. */
     VTABLE_push_pmc(interp, roles_list, role);
-    roles_count++;
+    ++roles_count;
 
     /* As a result of composing this role, we will also now do the roles
      * that it did itself. Note that we already have the correct methods
@@ -1428,13 +1434,13 @@
     Parrot_pcc_invoke_method_from_c_args(interp, role, CONST_STRING(interp, "roles"), "->P", &roles_of_role);
     roles_of_role_count = VTABLE_elements(interp, roles_of_role);
 
-    for (i = 0; i < roles_of_role_count; i++) {
+    for (i = 0; i < roles_of_role_count; ++i) {
         /* Only add if we don't already have it in the list. */
         PMC * const cur_role = VTABLE_get_pmc_keyed_int(interp,
                                     roles_of_role, i);
         INTVAL j;
 
-        for (j = 0; j < roles_count; j++) {
+        for (j = 0; j < roles_count; ++j) {
             if (VTABLE_get_pmc_keyed_int(interp, roles_list, j) == cur_role) {
                 /* We ain't be havin' it. */
                 VTABLE_push_pmc(interp, roles_list, cur_role);

Modified: branches/ops_pct/src/ops/bit.ops
==============================================================================
--- branches/ops_pct/src/ops/bit.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/bit.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -89,8 +89,6 @@
     VTABLE_set_integer_native(interp, $1, a & b);
 }
 
-=item B<bands>(inout STR, in STR)
-
 =item B<bands>(invar PMC, in STR)
 
 =item B<bands>(invar PMC, invar PMC)
@@ -109,37 +107,33 @@
 
 =cut
 
-inline op bands(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_and(interp, $1, $2, &$1);
-}
-
 inline op bands(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bands(invar PMC, invar PMC) :base_core {
     STRING * a = VTABLE_get_string(interp, $1);
-    STRING * b = VTABLE_get_string(interp, $2);
-    a = Parrot_str_bitwise_and(interp, a, b, NULL);
+    STRING * const b = VTABLE_get_string(interp, $2);
+    a = Parrot_str_bitwise_and(interp, a, b);
     VTABLE_set_string_native(interp, $1, a);
 }
 
 inline op bands(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_and(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_and(interp, $2, $3);
 }
 
 inline op bands(invar PMC, invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $3, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $3);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bands(invar PMC, invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
     STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_and(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_and(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
@@ -177,8 +171,6 @@
     $1 = b;
 }
 
-=item B<bnots>(inout STR)
-
 =item B<bnots>(invar PMC)
 
 =item B<bnots>(out STR, in STR)
@@ -187,23 +179,19 @@
 
 =cut
 
-inline op bnots(inout STR) :base_core {
-    Parrot_str_bitwise_not(interp, $1, &$1);
-}
-
 inline op bnots(out STR, in STR) :base_core {
-    Parrot_str_bitwise_not(interp, $2, &$1);
+    $1 = Parrot_str_bitwise_not(interp, $2);
 }
 
 inline op bnots(invar PMC) :base_core {
-    STRING * a = VTABLE_get_string(interp, $1);
-    STRING * b = Parrot_str_bitwise_not(interp, a, NULL);
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bnots(out PMC, invar PMC) :base_core {
-    STRING * a = VTABLE_get_string(interp, $2);
-    STRING * b = Parrot_str_bitwise_not(interp, a, NULL);
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
     VTABLE_set_string_native(interp, $1, b);
 }
 
@@ -259,8 +247,6 @@
     VTABLE_set_integer_native(interp, $1, a | b);
 }
 
-=item B<bors>(inout STR, in STR)
-
 =item B<bors>(invar PMC, in STR)
 
 =item B<bors>(invar PMC, invar PMC)
@@ -279,37 +265,33 @@
 
 =cut
 
-inline op bors(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_or(interp, $1, $2, &$1);
-}
-
 inline op bors(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_or(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_or(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bors(invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_or(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_or(interp, $2, $3);
 }
 
 inline op bors(invar PMC, invar PMC, in STR) :base_core {
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, b, $3, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, b, $3);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bors(invar PMC, invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
     STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
@@ -559,8 +541,6 @@
     VTABLE_set_integer_native(interp, $1, (INTVAL)c);
 }
 
-=item B<bxors>(inout STR, in STR)
-
 =item B<bxors>(invar PMC, in STR)
 
 =item B<bxors>(invar PMC, invar PMC)
@@ -579,37 +559,33 @@
 
 =cut
 
-inline op bxors(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_xor(interp, $1, $2, &$1);
-}
-
 inline op bxors(invar PMC, in STR) :base_core {
-    STRING *a = VTABLE_get_string(interp, $1);
-    STRING *b = Parrot_str_bitwise_xor(interp, a, $2, NULL);
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bxors(invar PMC, invar PMC) :base_core {
-    STRING *a = VTABLE_get_string(interp, $1);
-    STRING *b = VTABLE_get_string(interp, $2);
-    STRING *c = Parrot_str_bitwise_xor(interp, a, b, NULL);
+    STRING * const a = VTABLE_get_string(interp, $1);
+    STRING * const b = VTABLE_get_string(interp, $2);
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bxors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_xor(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_xor(interp, $2, $3);
 }
 
 inline op bxors(invar PMC, invar PMC, in STR) :base_core {
-    STRING *a = VTABLE_get_string(interp, $2);
-    STRING *b = Parrot_str_bitwise_xor(interp, a, $3, NULL);
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, $3);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bxors(invar PMC, invar PMC, invar PMC) :base_core {
-    STRING *a = VTABLE_get_string(interp, $2);
-    STRING *b = VTABLE_get_string(interp, $3);
-    STRING *c = Parrot_str_bitwise_xor(interp, a, b, NULL);
+    STRING * const a = VTABLE_get_string(interp, $2);
+    STRING * const b = VTABLE_get_string(interp, $3);
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
@@ -621,7 +597,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/ops_pct/src/ops/cmp.ops
==============================================================================
--- branches/ops_pct/src/ops/cmp.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/cmp.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -87,7 +87,7 @@
 }
 
 op eq(invar PMC, in INT, inconst LABEL) :base_core {
-    PMC * temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, $2);
 
     if (VTABLE_is_equal(interp, $1, temp)) {
@@ -193,7 +193,7 @@
 }
 
 op ne(invar PMC, in INT, inconst LABEL) :base_core {
-    PMC * temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, $2);
 
     if (!VTABLE_is_equal(interp, $1, temp)) {
@@ -289,7 +289,7 @@
 }
 
 op lt(invar PMC, in INT, inconst LABEL) :base_core {
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, $2);
 
     if (VTABLE_cmp(interp, $1, temp) < 0) {
@@ -373,7 +373,7 @@
 }
 
 op le(invar PMC, in INT, inconst LABEL) :base_core {
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, $2);
 
     if (VTABLE_cmp(interp, $1, temp) <= 0) {
@@ -433,7 +433,7 @@
 }
 
 op gt(invar PMC, in INT, inconst LABEL) :base_core {
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, $2);
 
     if (VTABLE_cmp(interp, $1, temp) > 0) {
@@ -493,7 +493,7 @@
 }
 
 op ge(invar PMC, in INT, inconst LABEL) :base_core {
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, $2);
 
     if (VTABLE_cmp(interp, $1, temp) >= 0) {
@@ -1004,7 +1004,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/ops_pct/src/ops/core.ops
==============================================================================
--- branches/ops_pct/src/ops/core.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/core.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -93,13 +93,13 @@
 }
 
 inline op check_events() :base_core :flow {
-    opcode_t *next = expr NEXT();
+    opcode_t * const next = expr NEXT();
     Parrot_cx_check_tasks(interp, interp->scheduler);
     goto ADDRESS(next);   /* force this being a branch op */
 }
 
 inline op check_events__() :internal :flow {
-    opcode_t *_this = CUR_OPCODE;
+    opcode_t * const _this = CUR_OPCODE;
     /* Restore op_func_table. */
     disable_event_checking(interp);
     Parrot_cx_handle_tasks(interp, interp->scheduler);
@@ -165,10 +165,10 @@
 
 inline op local_branch(invar PMC, in LABEL) :base_core :check_event :flow {
     INTVAL return_addr;
-    opcode_t *dest = expr NEXT();
+    opcode_t * const dest = expr NEXT();
 
     if (PMC_IS_NULL($1) || $1->vtable->base_type != enum_class_ResizableIntegerArray) {
-        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Must pass a valid integer array to 'local_branch'");
         goto ADDRESS(handler);
@@ -189,10 +189,10 @@
 inline op local_return(invar PMC) :flow {
     INTVAL return_addr;
     opcode_t *next;
-    opcode_t *dest = expr NEXT();
+    opcode_t * const dest = expr NEXT();
 
     if (PMC_IS_NULL($1) || $1->vtable->base_type != enum_class_ResizableIntegerArray) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Must pass a valid integer array to 'local_return'");
         goto ADDRESS(handler);
@@ -204,7 +204,7 @@
     /* The return address must be within the current code segment. */
     if (! (next >= interp->code->base.data
            && next < (interp->code->base.data + interp->code->base.size))) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Address for 'local_return' must be within the current code segment");
         goto ADDRESS(handler);
@@ -376,8 +376,11 @@
 inline op invokecc(invar PMC) :flow {
     PMC      * const p     = $1;
     opcode_t *dest         = expr NEXT();
+    PMC      * const signature = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = NULL;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, NULL);
     interp->current_cont   = NEED_CONTINUATION;
     dest                   = VTABLE_invoke(interp, p, dest);
 
@@ -387,8 +390,11 @@
 inline op invoke(invar PMC, invar PMC) :flow {
     opcode_t   *dest       = expr NEXT();
     PMC * const p          = $1;
+    PMC * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = NULL;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, NULL);
     interp->current_cont   = $2;
 
     dest = VTABLE_invoke(interp, p, dest);
@@ -483,35 +489,17 @@
     goto OFFSET(argc + 2);
 }
 
-op get_results(inconst PMC) :flow {
-    opcode_t * const raw_returns = CUR_OPCODE;
-    PMC * const signature = $1;
-    PMC * call_sig;
-    INTVAL argc;
-
-    call_sig = Parrot_pcc_build_sig_object_returns_from_op(interp,
-            Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)),
-            signature, raw_returns);
-    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_sig);
-
-    argc = VTABLE_elements(interp, signature);
-    goto OFFSET(argc + 2);
-}
-
 op get_params(inconst PMC) :flow {
-    opcode_t * const raw_params = CUR_OPCODE;
-    PMC *caller_ctx, *ctx;
-    PMC *ccont, *call_object;
-    PMC * const signature = $1;
+    opcode_t * const raw_params  = CUR_OPCODE;
+    PMC      * const signature   = $1;
+    PMC      * const ctx         = CURRENT_CONTEXT(interp);
+    PMC      * const ccont       = Parrot_pcc_get_continuation(interp, ctx);
+    PMC      * const caller_ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
+    PMC      * const call_object = Parrot_pcc_get_signature(interp, caller_ctx);
     INTVAL argc;
 
-    ctx     = CURRENT_CONTEXT(interp);
-    ccont   = Parrot_pcc_get_continuation(interp, ctx);
-
-    caller_ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
-    call_object = Parrot_pcc_get_signature(interp, caller_ctx);
-
-    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params);
+    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params,
+            PARROT_ERRORS_PARAM_COUNT_FLAG);
 
     /* TODO Factor out with Sub.invoke */
     if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
@@ -524,20 +512,50 @@
 }
 
 op set_returns(inconst PMC) :flow {
-    opcode_t * const raw_returns = CUR_OPCODE;
-    PMC      *signature          = $1;
-    PMC      *ctx                = CURRENT_CONTEXT(interp);
-    PMC      *caller_ctx         = Parrot_pcc_get_caller_ctx(interp, ctx);
-    PMC      *call_object        = Parrot_pcc_get_signature(interp, caller_ctx);
-    INTVAL    argc               = VTABLE_elements(interp, signature);
+    opcode_t * const raw_args  = CUR_OPCODE;
+    PMC      * const signature = $1;
+    PMC      * const call_sig  = Parrot_pcc_build_sig_object_from_op(interp,
+                Parrot_pcc_get_signature(interp,
+                Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp))),
+                    signature, raw_args);
+    INTVAL argc;
+
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_sig);
+
+    argc = VTABLE_elements(interp, signature);
+    goto OFFSET(argc + 2);
+}
+
+op get_results(inconst PMC) :flow {
+    opcode_t * const raw_params  = CUR_OPCODE;
+    PMC      * const signature   = $1;
+    PMC             *ctx         = CURRENT_CONTEXT(interp);
+    PMC             *ccont       = Parrot_pcc_get_continuation(interp, ctx);
+    PMC             *call_object = Parrot_pcc_get_signature(interp, ctx);
 
-    Parrot_pcc_fill_returns_from_op(interp, call_object, signature, raw_returns);
+    INTVAL argc;
 
-    Parrot_pcc_set_signature(interp, ctx, NULL);
+    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
 
+    argc = VTABLE_elements(interp, signature);
     goto OFFSET(argc + 2);
 }
 
+=item B<set_result_info>(in PMC)
+
+Set result_info. See also C<result_info>.
+
+=cut
+
+inline op set_result_info(in PMC) {
+    PMC * const ctx = CURRENT_CONTEXT(interp);
+
+    VTABLE_set_attr_str(interp, ctx,
+            Parrot_str_new_constant(interp, "return_flags"),
+            $1);
+}
+
 =item B<result_info>(out PMC)
 
 Returns the get_results signature PMC of the caller. This PMC is a
@@ -548,9 +566,8 @@
 =cut
 
 inline op result_info(out PMC) {
-    PMC *caller_ctx  = Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
-    PMC *call_object = Parrot_pcc_get_signature(interp, caller_ctx);
-    PMC *sig = VTABLE_get_attr_str(interp, call_object,
+    PMC * const caller_ctx = Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC * const sig        = VTABLE_get_attr_str(interp, caller_ctx,
             Parrot_str_new_constant(interp, "return_flags"));
 
     /* If no elements, hand back empty array; otherwise PMC. */
@@ -693,21 +710,6 @@
 extended exit status, create an exception with severity B<EXCEPT_exit>
 and throw it.
 
-=item B<pushmark>(in INT)
-
-Push a mark labeled $1 onto the dynamic environment.
-
-=item B<popmark>(in INT)
-
-Pop all items off the dynamic environment to the given mark.
-
-=item B<pushaction>(invar PMC)
-
-Push the given Sub PMC $1 onto the dynamic environment.  If the dynamic
-environment is unwound due to a C<popmark>, subroutine return, or an exception,
-the subroutine will be invoked with an integer argument: C<0> means a normal
-return; C<1> means an exception has been raised.
-
 =cut
 
 inline op push_eh(inconst LABEL) {
@@ -728,8 +730,11 @@
 inline op throw(invar PMC) :flow {
     PMC * except = $1;
     opcode_t *dest;
-    opcode_t *const ret    = expr NEXT();
-    PMC            *resume = new_ret_continuation_pmc(interp, ret);
+    opcode_t * const ret    = expr NEXT();
+    PMC      * const resume = pmc_new(interp, enum_class_Continuation);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
     if (PMC_IS_NULL(except) || except->vtable->base_type != enum_class_Exception)
         except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
                 EXCEPTION_UNIMPLEMENTED,
@@ -755,8 +760,8 @@
 inline op rethrow(invar PMC) :flow {
     opcode_t * dest;
     if (PMC_IS_NULL($1) || $1->vtable->base_type != enum_class_Exception) {
-        opcode_t * const ret = expr NEXT();
-        PMC * except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
+        opcode_t * const ret    = expr NEXT();
+        PMC      * const except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
                 EXCEPTION_UNIMPLEMENTED,
                 Parrot_str_new_constant(interp, "Not a throwable object"));
         dest = Parrot_ex_throw_from_op(interp, except, ret);
@@ -774,10 +779,12 @@
 inline op die(in STR) :flow {
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    PMC             *exception = Parrot_ex_build_exception(interp, EXCEPT_error,
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
                                     CONTROL_ERROR, $1);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -787,12 +794,13 @@
 inline op die(in PMC) :flow {
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    STRING          *msg       = PMC_IS_NULL($1)
-                               ? NULL : VTABLE_get_string(interp, $1);
-    PMC             *exception =
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    STRING   * const msg       = PMC_IS_NULL($1) ? NULL : VTABLE_get_string(interp, $1);
+    PMC      * const exception =
         Parrot_ex_build_exception(interp, EXCEPT_error, CONTROL_ERROR, msg);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -804,10 +812,9 @@
         _exit($2);
     else {
         opcode_t * const ret       = expr NEXT();
-        PMC             *exception = Parrot_ex_build_exception(interp, $1,
-                                                               $2, NULL);
-        opcode_t * const dest      = Parrot_ex_throw_from_op(interp,
-                                                             exception, ret);
+        PMC      * const exception = Parrot_ex_build_exception(interp, $1, $2, NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);
+
         goto ADDRESS(dest);
     }
 }
@@ -815,9 +822,11 @@
 inline op exit(in INT) :flow {
     opcode_t        *dest;
     opcode_t * const ret       = expr NEXT();
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    PMC             *exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
-                                                      $1, NULL);
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, $1, NULL);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     VTABLE_set_integer_keyed_str(interp, exception,
@@ -826,36 +835,6 @@
     goto ADDRESS(dest);
 }
 
-inline op pushmark(in INT) {
-    PMC * const newint = Parrot_pmc_new(interp, enum_class_Integer);
-    VTABLE_set_integer_native(interp, newint, $1);
-    VTABLE_push_pmc(interp, interp->dynamic_env, newint);
-}
-
-inline op popmark(in INT) {
-    opcode_t * dest;
-    opcode_t * const ret = expr NEXT();
-    int found = 0;
-    while (VTABLE_elements(interp, interp->dynamic_env)) {
-        PMC * const item = VTABLE_pop_pmc(interp, interp->dynamic_env);
-        if (item->vtable->base_type == enum_class_Integer
-         && VTABLE_get_integer(interp, item) == $1) {
-            found = 1;
-            break;
-        }
-
-        else if (item->vtable->base_type == enum_class_Sub
-              || item->vtable->base_type == enum_class_NCI)
-            Parrot_pcc_invoke_sub_from_c_args(interp, item, "I->", 0);
-    }
-    if (!found)
-        dest = Parrot_ex_throw_from_op_args(interp, ret, 1, "Mark %d not found", $1);
-}
-
-inline op pushaction(invar PMC) {
-    VTABLE_push_pmc(interp, interp->dynamic_env, $1);
-}
-
 =back
 
 =cut
@@ -981,7 +960,7 @@
 }
 
 op interpinfo(out STR, in INT) {
-    STRING * s = interpinfo_s(interp, $2);
+    STRING * const s = interpinfo_s(interp, $2);
     $1 = s;
 }
 
@@ -1209,7 +1188,21 @@
 
 =item B<loadlib>(out PMC, in STR)
 
-Load a dynamic link library named $2 and store it in $1.
+=item B<loadlib>(out PMC, in STR, in PMC)
+
+Load a dynamic link library named $2 and store it in $1. $3, if
+provided, controls library loading and initialization; currently,
+we expect a bitmask accessible as an integer.  Bit definitions are
+accessible from PASM if F<dlopenflags.pasm> is included.  The current
+bits are:
+
+=over 4
+
+=item PARROT_DLOPEN_GLOBAL
+
+Make any symbols in the library accessible to other libraries loaded.
+
+=back
 
 =item B<dlfunc>(out PMC, invar PMC, in STR, in STR)
 
@@ -1250,6 +1243,10 @@
     $1 = Parrot_load_lib(interp, $2, NULL);
 }
 
+inline op loadlib(out PMC, in STR, in PMC) {
+    $1 = Parrot_load_lib(interp, $2, $3);
+}
+
 op dlfunc(out PMC, invar PMC, in STR, in STR) {
     char * const  name      = Parrot_str_to_cstring(interp, ($3));
     void         *dl_handle = NULL;
@@ -1284,10 +1281,9 @@
 op dlvar(out PMC, invar PMC, in STR) {
     char * const  name      = Parrot_str_to_cstring(interp, ($3));
     void *        p         = NULL;
-    void         *dl_handle = NULL;
 
     if (!PMC_IS_NULL($2) && $2->vtable->base_type == enum_class_ParrotLibrary) {
-        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data($2))->dl_handle;
+        void * const dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data($2))->dl_handle;
         p         = Parrot_dlsym(PMC_IS_NULL($2) ? NULL : dl_handle, name);
     }
     if (p == NULL) {
@@ -1346,7 +1342,7 @@
 
 inline op annotations(out PMC) {
     if (interp->code->annotations) {
-        opcode_t const cur_pos = (expr NEXT()) - interp->code->base.data;
+        const opcode_t cur_pos = (expr NEXT()) - interp->code->base.data;
         $1 = PackFile_Annotations_lookup(interp, interp->code->annotations,
                 cur_pos, NULL);
     }
@@ -1364,7 +1360,7 @@
 
 inline op annotations(out PMC, in STR) {
     if (interp->code->annotations) {
-        opcode_t const cur_pos = (expr NEXT()) - interp->code->base.data;
+        const opcode_t cur_pos = (expr NEXT()) - interp->code->base.data;
         $1 = PackFile_Annotations_lookup(interp, interp->code->annotations,
                 cur_pos, $2);
     }
@@ -1381,7 +1377,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/ops_pct/src/ops/core_ops.c
==============================================================================
--- branches/ops_pct/src/ops/core_ops.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/core_ops.c	Wed May  5 08:45:29 2010	(r46302)
@@ -70,7 +70,7 @@
 ** Op Info Table:
 */
 
-static op_info_t core_op_info_table[1312] = {
+static op_info_t core_op_info_table[1297] = {
   { /* 0 */
     /* type PARROT_INLINE_OP, */
     "end",
@@ -469,9 +469,9 @@
   },
   { /* 33 */
     /* type PARROT_FUNCTION_OP, */
-    "get_results",
-    "get_results_pc",
-    "Parrot_get_results_pc",
+    "get_params",
+    "get_params_pc",
+    "Parrot_get_params_pc",
     /* "",  body */
     PARROT_JUMP_RELATIVE,
     2,
@@ -481,9 +481,9 @@
   },
   { /* 34 */
     /* type PARROT_FUNCTION_OP, */
-    "get_params",
-    "get_params_pc",
-    "Parrot_get_params_pc",
+    "set_returns",
+    "set_returns_pc",
+    "Parrot_set_returns_pc",
     /* "",  body */
     PARROT_JUMP_RELATIVE,
     2,
@@ -493,9 +493,9 @@
   },
   { /* 35 */
     /* type PARROT_FUNCTION_OP, */
-    "set_returns",
-    "set_returns_pc",
-    "Parrot_set_returns_pc",
+    "get_results",
+    "get_results_pc",
+    "Parrot_get_results_pc",
     /* "",  body */
     PARROT_JUMP_RELATIVE,
     2,
@@ -505,6 +505,30 @@
   },
   { /* 36 */
     /* type PARROT_INLINE_OP, */
+    "set_result_info",
+    "set_result_info_p",
+    "Parrot_set_result_info_p",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_P },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 37 */
+    /* type PARROT_INLINE_OP, */
+    "set_result_info",
+    "set_result_info_pc",
+    "Parrot_set_result_info_pc",
+    /* "",  body */
+    0,
+    2,
+    { PARROT_ARG_PC },
+    { PARROT_ARGDIR_IN },
+    { 0 }
+  },
+  { /* 38 */
+    /* type PARROT_INLINE_OP, */
     "result_info",
     "result_info_p",
     "Parrot_result_info_p",
@@ -515,7 +539,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 37 */
+  { /* 39 */
     /* type PARROT_INLINE_OP, */
     "set_addr",
     "set_addr_i_ic",
@@ -527,7 +551,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 38 */
+  { /* 40 */
     /* type PARROT_INLINE_OP, */
     "set_addr",
     "set_addr_p_ic",
@@ -539,7 +563,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 39 */
+  { /* 41 */
     /* type PARROT_INLINE_OP, */
     "set_addr",
     "set_addr_p_i",
@@ -551,7 +575,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 40 */
+  { /* 42 */
     /* type PARROT_INLINE_OP, */
     "get_addr",
     "get_addr_i_p",
@@ -563,7 +587,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 41 */
+  { /* 43 */
     /* type PARROT_INLINE_OP, */
     "schedule",
     "schedule_p",
@@ -575,7 +599,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 42 */
+  { /* 44 */
     /* type PARROT_INLINE_OP, */
     "addhandler",
     "addhandler_p",
@@ -587,7 +611,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 43 */
+  { /* 45 */
     /* type PARROT_INLINE_OP, */
     "push_eh",
     "push_eh_ic",
@@ -599,7 +623,7 @@
     { PARROT_ARGDIR_IN },
     { 1 }
   },
-  { /* 44 */
+  { /* 46 */
     /* type PARROT_INLINE_OP, */
     "push_eh",
     "push_eh_p",
@@ -611,7 +635,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 45 */
+  { /* 47 */
     /* type PARROT_INLINE_OP, */
     "pop_eh",
     "pop_eh",
@@ -623,7 +647,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 46 */
+  { /* 48 */
     /* type PARROT_INLINE_OP, */
     "throw",
     "throw_p",
@@ -635,7 +659,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 47 */
+  { /* 49 */
     /* type PARROT_INLINE_OP, */
     "throw",
     "throw_p_p",
@@ -647,7 +671,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 48 */
+  { /* 50 */
     /* type PARROT_INLINE_OP, */
     "rethrow",
     "rethrow_p",
@@ -659,7 +683,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 49 */
+  { /* 51 */
     /* type PARROT_INLINE_OP, */
     "count_eh",
     "count_eh_i",
@@ -671,7 +695,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 50 */
+  { /* 52 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_s",
@@ -683,7 +707,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 51 */
+  { /* 53 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_sc",
@@ -695,7 +719,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 52 */
+  { /* 54 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_p",
@@ -707,7 +731,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 53 */
+  { /* 55 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_pc",
@@ -719,7 +743,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 54 */
+  { /* 56 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_i_i",
@@ -731,7 +755,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 55 */
+  { /* 57 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_ic_i",
@@ -743,7 +767,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 56 */
+  { /* 58 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_i_ic",
@@ -755,7 +779,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 57 */
+  { /* 59 */
     /* type PARROT_INLINE_OP, */
     "die",
     "die_ic_ic",
@@ -767,7 +791,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 58 */
+  { /* 60 */
     /* type PARROT_INLINE_OP, */
     "exit",
     "exit_i",
@@ -779,7 +803,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 59 */
+  { /* 61 */
     /* type PARROT_INLINE_OP, */
     "exit",
     "exit_ic",
@@ -791,68 +815,8 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 60 */
-    /* type PARROT_INLINE_OP, */
-    "pushmark",
-    "pushmark_i",
-    "Parrot_pushmark_i",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_I },
-    { PARROT_ARGDIR_IN },
-    { 0 }
-  },
-  { /* 61 */
-    /* type PARROT_INLINE_OP, */
-    "pushmark",
-    "pushmark_ic",
-    "Parrot_pushmark_ic",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_IC },
-    { PARROT_ARGDIR_IN },
-    { 0 }
-  },
   { /* 62 */
     /* type PARROT_INLINE_OP, */
-    "popmark",
-    "popmark_i",
-    "Parrot_popmark_i",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_I },
-    { PARROT_ARGDIR_IN },
-    { 0 }
-  },
-  { /* 63 */
-    /* type PARROT_INLINE_OP, */
-    "popmark",
-    "popmark_ic",
-    "Parrot_popmark_ic",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_IC },
-    { PARROT_ARGDIR_IN },
-    { 0 }
-  },
-  { /* 64 */
-    /* type PARROT_INLINE_OP, */
-    "pushaction",
-    "pushaction_p",
-    "Parrot_pushaction_p",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_P },
-    { PARROT_ARGDIR_IN },
-    { 0 }
-  },
-  { /* 65 */
-    /* type PARROT_INLINE_OP, */
     "debug",
     "debug_i",
     "Parrot_debug_i",
@@ -863,7 +827,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 66 */
+  { /* 63 */
     /* type PARROT_INLINE_OP, */
     "debug",
     "debug_ic",
@@ -875,7 +839,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 67 */
+  { /* 64 */
     /* type PARROT_INLINE_OP, */
     "bounds",
     "bounds_i",
@@ -887,7 +851,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 68 */
+  { /* 65 */
     /* type PARROT_INLINE_OP, */
     "bounds",
     "bounds_ic",
@@ -899,7 +863,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 69 */
+  { /* 66 */
     /* type PARROT_INLINE_OP, */
     "profile",
     "profile_i",
@@ -911,7 +875,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 70 */
+  { /* 67 */
     /* type PARROT_INLINE_OP, */
     "profile",
     "profile_ic",
@@ -923,7 +887,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 71 */
+  { /* 68 */
     /* type PARROT_INLINE_OP, */
     "trace",
     "trace_i",
@@ -935,7 +899,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 72 */
+  { /* 69 */
     /* type PARROT_INLINE_OP, */
     "trace",
     "trace_ic",
@@ -947,7 +911,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 73 */
+  { /* 70 */
     /* type PARROT_INLINE_OP, */
     "gc_debug",
     "gc_debug_i",
@@ -959,7 +923,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 74 */
+  { /* 71 */
     /* type PARROT_INLINE_OP, */
     "gc_debug",
     "gc_debug_ic",
@@ -971,7 +935,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 75 */
+  { /* 72 */
     /* type PARROT_FUNCTION_OP, */
     "interpinfo",
     "interpinfo_i_i",
@@ -983,7 +947,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 76 */
+  { /* 73 */
     /* type PARROT_FUNCTION_OP, */
     "interpinfo",
     "interpinfo_i_ic",
@@ -995,7 +959,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 77 */
+  { /* 74 */
     /* type PARROT_FUNCTION_OP, */
     "interpinfo",
     "interpinfo_p_i",
@@ -1007,7 +971,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 78 */
+  { /* 75 */
     /* type PARROT_FUNCTION_OP, */
     "interpinfo",
     "interpinfo_p_ic",
@@ -1019,7 +983,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 79 */
+  { /* 76 */
     /* type PARROT_FUNCTION_OP, */
     "interpinfo",
     "interpinfo_s_i",
@@ -1031,7 +995,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 80 */
+  { /* 77 */
     /* type PARROT_FUNCTION_OP, */
     "interpinfo",
     "interpinfo_s_ic",
@@ -1043,7 +1007,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 81 */
+  { /* 78 */
     /* type PARROT_INLINE_OP, */
     "warningson",
     "warningson_i",
@@ -1055,7 +1019,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 82 */
+  { /* 79 */
     /* type PARROT_INLINE_OP, */
     "warningson",
     "warningson_ic",
@@ -1067,7 +1031,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 83 */
+  { /* 80 */
     /* type PARROT_INLINE_OP, */
     "warningsoff",
     "warningsoff_i",
@@ -1079,7 +1043,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 84 */
+  { /* 81 */
     /* type PARROT_INLINE_OP, */
     "warningsoff",
     "warningsoff_ic",
@@ -1091,7 +1055,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 85 */
+  { /* 82 */
     /* type PARROT_INLINE_OP, */
     "errorson",
     "errorson_i",
@@ -1103,7 +1067,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 86 */
+  { /* 83 */
     /* type PARROT_INLINE_OP, */
     "errorson",
     "errorson_ic",
@@ -1115,7 +1079,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 87 */
+  { /* 84 */
     /* type PARROT_INLINE_OP, */
     "errorsoff",
     "errorsoff_i",
@@ -1127,7 +1091,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 88 */
+  { /* 85 */
     /* type PARROT_INLINE_OP, */
     "errorsoff",
     "errorsoff_ic",
@@ -1139,7 +1103,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 89 */
+  { /* 86 */
     /* type PARROT_FUNCTION_OP, */
     "runinterp",
     "runinterp_p_i",
@@ -1151,7 +1115,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 90 */
+  { /* 87 */
     /* type PARROT_FUNCTION_OP, */
     "runinterp",
     "runinterp_p_ic",
@@ -1163,7 +1127,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 91 */
+  { /* 88 */
     /* type PARROT_FUNCTION_OP, */
     "getinterp",
     "getinterp_p",
@@ -1175,7 +1139,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 92 */
+  { /* 89 */
     /* type PARROT_FUNCTION_OP, */
     "sweep",
     "sweep_ic",
@@ -1187,7 +1151,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 93 */
+  { /* 90 */
     /* type PARROT_FUNCTION_OP, */
     "collect",
     "collect",
@@ -1199,7 +1163,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 94 */
+  { /* 91 */
     /* type PARROT_FUNCTION_OP, */
     "sweepoff",
     "sweepoff",
@@ -1211,7 +1175,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 95 */
+  { /* 92 */
     /* type PARROT_FUNCTION_OP, */
     "sweepon",
     "sweepon",
@@ -1223,7 +1187,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 96 */
+  { /* 93 */
     /* type PARROT_FUNCTION_OP, */
     "collectoff",
     "collectoff",
@@ -1235,7 +1199,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 97 */
+  { /* 94 */
     /* type PARROT_FUNCTION_OP, */
     "collecton",
     "collecton",
@@ -1247,7 +1211,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 98 */
+  { /* 95 */
     /* type PARROT_FUNCTION_OP, */
     "needs_destroy",
     "needs_destroy_p",
@@ -1259,7 +1223,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 99 */
+  { /* 96 */
     /* type PARROT_INLINE_OP, */
     "loadlib",
     "loadlib_p_s",
@@ -1271,7 +1235,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 100 */
+  { /* 97 */
     /* type PARROT_INLINE_OP, */
     "loadlib",
     "loadlib_p_sc",
@@ -1283,7 +1247,55 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
+  { /* 98 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_s_p",
+    "Parrot_loadlib_p_s_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 99 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_sc_p",
+    "Parrot_loadlib_p_sc_p",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 100 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_s_pc",
+    "Parrot_loadlib_p_s_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_S, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
   { /* 101 */
+    /* type PARROT_INLINE_OP, */
+    "loadlib",
+    "loadlib_p_sc_pc",
+    "Parrot_loadlib_p_sc_pc",
+    /* "",  body */
+    0,
+    4,
+    { PARROT_ARG_P, PARROT_ARG_SC, PARROT_ARG_PC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0 }
+  },
+  { /* 102 */
     /* type PARROT_FUNCTION_OP, */
     "dlfunc",
     "dlfunc_p_p_s_s",
@@ -1295,7 +1307,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 102 */
+  { /* 103 */
     /* type PARROT_FUNCTION_OP, */
     "dlfunc",
     "dlfunc_p_p_sc_s",
@@ -1307,7 +1319,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 103 */
+  { /* 104 */
     /* type PARROT_FUNCTION_OP, */
     "dlfunc",
     "dlfunc_p_p_s_sc",
@@ -1319,7 +1331,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 104 */
+  { /* 105 */
     /* type PARROT_FUNCTION_OP, */
     "dlfunc",
     "dlfunc_p_p_sc_sc",
@@ -1331,7 +1343,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 105 */
+  { /* 106 */
     /* type PARROT_FUNCTION_OP, */
     "dlvar",
     "dlvar_p_p_s",
@@ -1343,7 +1355,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 106 */
+  { /* 107 */
     /* type PARROT_FUNCTION_OP, */
     "dlvar",
     "dlvar_p_p_sc",
@@ -1355,7 +1367,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 107 */
+  { /* 108 */
     /* type PARROT_INLINE_OP, */
     "compreg",
     "compreg_s_p",
@@ -1367,7 +1379,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 108 */
+  { /* 109 */
     /* type PARROT_INLINE_OP, */
     "compreg",
     "compreg_sc_p",
@@ -1379,7 +1391,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 109 */
+  { /* 110 */
     /* type PARROT_INLINE_OP, */
     "compreg",
     "compreg_p_s",
@@ -1391,7 +1403,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 110 */
+  { /* 111 */
     /* type PARROT_INLINE_OP, */
     "compreg",
     "compreg_p_sc",
@@ -1403,7 +1415,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 111 */
+  { /* 112 */
     /* type PARROT_FUNCTION_OP, */
     "new_callback",
     "new_callback_p_p_p_s",
@@ -1415,7 +1427,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 112 */
+  { /* 113 */
     /* type PARROT_FUNCTION_OP, */
     "new_callback",
     "new_callback_p_p_p_sc",
@@ -1427,7 +1439,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 113 */
+  { /* 114 */
     /* type PARROT_INLINE_OP, */
     "annotations",
     "annotations_p",
@@ -1439,7 +1451,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 114 */
+  { /* 115 */
     /* type PARROT_INLINE_OP, */
     "annotations",
     "annotations_p_s",
@@ -1451,7 +1463,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 115 */
+  { /* 116 */
     /* type PARROT_INLINE_OP, */
     "annotations",
     "annotations_p_sc",
@@ -1463,7 +1475,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 116 */
+  { /* 117 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_i_i",
@@ -1475,7 +1487,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 117 */
+  { /* 118 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_i_ic",
@@ -1487,7 +1499,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 118 */
+  { /* 119 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_p_i",
@@ -1499,7 +1511,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 119 */
+  { /* 120 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_p_ic",
@@ -1511,7 +1523,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 120 */
+  { /* 121 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_p_p",
@@ -1523,7 +1535,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 121 */
+  { /* 122 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_i_i_i",
@@ -1535,7 +1547,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 122 */
+  { /* 123 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_i_ic_i",
@@ -1547,7 +1559,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 123 */
+  { /* 124 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_i_i_ic",
@@ -1559,7 +1571,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 124 */
+  { /* 125 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_p_p_i",
@@ -1571,7 +1583,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 125 */
+  { /* 126 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_p_p_ic",
@@ -1583,7 +1595,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 126 */
+  { /* 127 */
     /* type PARROT_INLINE_OP, */
     "band",
     "band_p_p_p",
@@ -1595,33 +1607,9 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 127 */
-    /* type PARROT_INLINE_OP, */
-    "bands",
-    "bands_s_s",
-    "Parrot_bands_s_s",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
   { /* 128 */
     /* type PARROT_INLINE_OP, */
     "bands",
-    "bands_s_sc",
-    "Parrot_bands_s_sc",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 129 */
-    /* type PARROT_INLINE_OP, */
-    "bands",
     "bands_p_s",
     "Parrot_bands_p_s",
     /* "",  body */
@@ -1631,7 +1619,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 130 */
+  { /* 129 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_p_sc",
@@ -1643,7 +1631,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 131 */
+  { /* 130 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_p_p",
@@ -1655,7 +1643,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 132 */
+  { /* 131 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_s_s_s",
@@ -1667,7 +1655,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 133 */
+  { /* 132 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_s_sc_s",
@@ -1679,7 +1667,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 134 */
+  { /* 133 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_s_s_sc",
@@ -1691,7 +1679,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 135 */
+  { /* 134 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_p_p_s",
@@ -1703,7 +1691,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 136 */
+  { /* 135 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_p_p_sc",
@@ -1715,7 +1703,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 137 */
+  { /* 136 */
     /* type PARROT_INLINE_OP, */
     "bands",
     "bands_p_p_p",
@@ -1727,7 +1715,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 138 */
+  { /* 137 */
     /* type PARROT_INLINE_OP, */
     "bnot",
     "bnot_i",
@@ -1739,7 +1727,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 139 */
+  { /* 138 */
     /* type PARROT_INLINE_OP, */
     "bnot",
     "bnot_i_i",
@@ -1751,7 +1739,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 140 */
+  { /* 139 */
     /* type PARROT_INLINE_OP, */
     "bnot",
     "bnot_p",
@@ -1763,7 +1751,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 141 */
+  { /* 140 */
     /* type PARROT_INLINE_OP, */
     "bnot",
     "bnot_p_p",
@@ -1775,19 +1763,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 142 */
-    /* type PARROT_INLINE_OP, */
-    "bnots",
-    "bnots_s",
-    "Parrot_bnots_s",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT },
-    { 0 }
-  },
-  { /* 143 */
+  { /* 141 */
     /* type PARROT_INLINE_OP, */
     "bnots",
     "bnots_s_s",
@@ -1799,7 +1775,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 144 */
+  { /* 142 */
     /* type PARROT_INLINE_OP, */
     "bnots",
     "bnots_s_sc",
@@ -1811,7 +1787,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 145 */
+  { /* 143 */
     /* type PARROT_INLINE_OP, */
     "bnots",
     "bnots_p",
@@ -1823,7 +1799,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 146 */
+  { /* 144 */
     /* type PARROT_INLINE_OP, */
     "bnots",
     "bnots_p_p",
@@ -1835,7 +1811,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 147 */
+  { /* 145 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_i_i",
@@ -1847,7 +1823,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 148 */
+  { /* 146 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_i_ic",
@@ -1859,7 +1835,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 149 */
+  { /* 147 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_p_i",
@@ -1871,7 +1847,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 150 */
+  { /* 148 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_p_ic",
@@ -1883,7 +1859,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 151 */
+  { /* 149 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_p_p",
@@ -1895,7 +1871,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 152 */
+  { /* 150 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_i_i_i",
@@ -1907,7 +1883,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 153 */
+  { /* 151 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_i_ic_i",
@@ -1919,7 +1895,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 154 */
+  { /* 152 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_i_i_ic",
@@ -1931,7 +1907,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 155 */
+  { /* 153 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_p_p_i",
@@ -1943,7 +1919,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 156 */
+  { /* 154 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_p_p_ic",
@@ -1955,7 +1931,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 157 */
+  { /* 155 */
     /* type PARROT_INLINE_OP, */
     "bor",
     "bor_p_p_p",
@@ -1967,31 +1943,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 158 */
-    /* type PARROT_INLINE_OP, */
-    "bors",
-    "bors_s_s",
-    "Parrot_bors_s_s",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 159 */
-    /* type PARROT_INLINE_OP, */
-    "bors",
-    "bors_s_sc",
-    "Parrot_bors_s_sc",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 160 */
+  { /* 156 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_p_s",
@@ -2003,7 +1955,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 161 */
+  { /* 157 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_p_sc",
@@ -2015,7 +1967,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 162 */
+  { /* 158 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_p_p",
@@ -2027,7 +1979,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 163 */
+  { /* 159 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_s_s_s",
@@ -2039,7 +1991,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 164 */
+  { /* 160 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_s_sc_s",
@@ -2051,7 +2003,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 165 */
+  { /* 161 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_s_s_sc",
@@ -2063,7 +2015,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 166 */
+  { /* 162 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_p_p_s",
@@ -2075,7 +2027,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 167 */
+  { /* 163 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_p_p_sc",
@@ -2087,7 +2039,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 168 */
+  { /* 164 */
     /* type PARROT_INLINE_OP, */
     "bors",
     "bors_p_p_p",
@@ -2099,7 +2051,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 169 */
+  { /* 165 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_i_i",
@@ -2111,7 +2063,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 170 */
+  { /* 166 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_i_ic",
@@ -2123,7 +2075,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 171 */
+  { /* 167 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_p_i",
@@ -2135,7 +2087,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 172 */
+  { /* 168 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_p_ic",
@@ -2147,7 +2099,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 173 */
+  { /* 169 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_p_p",
@@ -2159,7 +2111,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 174 */
+  { /* 170 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_i_i_i",
@@ -2171,7 +2123,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 175 */
+  { /* 171 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_i_ic_i",
@@ -2183,7 +2135,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 176 */
+  { /* 172 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_i_i_ic",
@@ -2195,7 +2147,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 177 */
+  { /* 173 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_p_p_i",
@@ -2207,7 +2159,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 178 */
+  { /* 174 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_p_p_ic",
@@ -2219,7 +2171,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 179 */
+  { /* 175 */
     /* type PARROT_INLINE_OP, */
     "shl",
     "shl_p_p_p",
@@ -2231,7 +2183,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 180 */
+  { /* 176 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_i_i",
@@ -2243,7 +2195,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 181 */
+  { /* 177 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_i_ic",
@@ -2255,7 +2207,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 182 */
+  { /* 178 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_p_i",
@@ -2267,7 +2219,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 183 */
+  { /* 179 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_p_ic",
@@ -2279,7 +2231,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 184 */
+  { /* 180 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_p_p",
@@ -2291,7 +2243,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 185 */
+  { /* 181 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_i_i_i",
@@ -2303,7 +2255,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 186 */
+  { /* 182 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_i_ic_i",
@@ -2315,7 +2267,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 187 */
+  { /* 183 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_i_i_ic",
@@ -2327,7 +2279,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 188 */
+  { /* 184 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_p_p_i",
@@ -2339,7 +2291,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 189 */
+  { /* 185 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_p_p_ic",
@@ -2351,7 +2303,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 190 */
+  { /* 186 */
     /* type PARROT_INLINE_OP, */
     "shr",
     "shr_p_p_p",
@@ -2363,7 +2315,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 191 */
+  { /* 187 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_i_i",
@@ -2375,7 +2327,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 192 */
+  { /* 188 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_i_ic",
@@ -2387,7 +2339,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 193 */
+  { /* 189 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_p_i",
@@ -2399,7 +2351,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 194 */
+  { /* 190 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_p_ic",
@@ -2411,7 +2363,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 195 */
+  { /* 191 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_p_p",
@@ -2423,7 +2375,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 196 */
+  { /* 192 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_i_i_i",
@@ -2435,7 +2387,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 197 */
+  { /* 193 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_i_ic_i",
@@ -2447,7 +2399,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 198 */
+  { /* 194 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_i_i_ic",
@@ -2459,7 +2411,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 199 */
+  { /* 195 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_p_p_i",
@@ -2471,7 +2423,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 200 */
+  { /* 196 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_p_p_ic",
@@ -2483,7 +2435,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 201 */
+  { /* 197 */
     /* type PARROT_INLINE_OP, */
     "lsr",
     "lsr_p_p_p",
@@ -2495,7 +2447,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 202 */
+  { /* 198 */
     /* type PARROT_INLINE_OP, */
     "rot",
     "rot_i_i_i_ic",
@@ -2507,7 +2459,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 203 */
+  { /* 199 */
     /* type PARROT_INLINE_OP, */
     "rot",
     "rot_i_ic_i_ic",
@@ -2519,7 +2471,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 204 */
+  { /* 200 */
     /* type PARROT_INLINE_OP, */
     "rot",
     "rot_i_i_ic_ic",
@@ -2531,7 +2483,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 205 */
+  { /* 201 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_i_i",
@@ -2543,7 +2495,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 206 */
+  { /* 202 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_i_ic",
@@ -2555,7 +2507,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 207 */
+  { /* 203 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_p_i",
@@ -2567,7 +2519,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 208 */
+  { /* 204 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_p_ic",
@@ -2579,7 +2531,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 209 */
+  { /* 205 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_p_p",
@@ -2591,7 +2543,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 210 */
+  { /* 206 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_i_i_i",
@@ -2603,7 +2555,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 211 */
+  { /* 207 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_i_ic_i",
@@ -2615,7 +2567,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 212 */
+  { /* 208 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_i_i_ic",
@@ -2627,7 +2579,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 213 */
+  { /* 209 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_p_p_i",
@@ -2639,7 +2591,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 214 */
+  { /* 210 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_p_p_ic",
@@ -2651,7 +2603,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 215 */
+  { /* 211 */
     /* type PARROT_INLINE_OP, */
     "bxor",
     "bxor_p_p_p",
@@ -2663,43 +2615,19 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 216 */
+  { /* 212 */
     /* type PARROT_INLINE_OP, */
     "bxors",
-    "bxors_s_s",
-    "Parrot_bxors_s_s",
+    "bxors_p_s",
+    "Parrot_bxors_p_s",
     /* "",  body */
     0,
     3,
-    { PARROT_ARG_S, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
+    { PARROT_ARG_P, PARROT_ARG_S },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 217 */
-    /* type PARROT_INLINE_OP, */
-    "bxors",
-    "bxors_s_sc",
-    "Parrot_bxors_s_sc",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 218 */
-    /* type PARROT_INLINE_OP, */
-    "bxors",
-    "bxors_p_s",
-    "Parrot_bxors_p_s",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_P, PARROT_ARG_S },
-    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 219 */
+  { /* 213 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_p_sc",
@@ -2711,7 +2639,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 220 */
+  { /* 214 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_p_p",
@@ -2723,7 +2651,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 221 */
+  { /* 215 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_s_s_s",
@@ -2735,7 +2663,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 222 */
+  { /* 216 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_s_sc_s",
@@ -2747,7 +2675,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 223 */
+  { /* 217 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_s_s_sc",
@@ -2759,7 +2687,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 224 */
+  { /* 218 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_p_p_s",
@@ -2771,7 +2699,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 225 */
+  { /* 219 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_p_p_sc",
@@ -2783,7 +2711,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 226 */
+  { /* 220 */
     /* type PARROT_INLINE_OP, */
     "bxors",
     "bxors_p_p_p",
@@ -2795,7 +2723,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 227 */
+  { /* 221 */
     /* type PARROT_INLINE_OP, */
     "eq",
     "eq_i_i_ic",
@@ -2807,7 +2735,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 228 */
+  { /* 222 */
     /* type PARROT_INLINE_OP, */
     "eq",
     "eq_ic_i_ic",
@@ -2819,7 +2747,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 229 */
+  { /* 223 */
     /* type PARROT_INLINE_OP, */
     "eq",
     "eq_i_ic_ic",
@@ -2831,7 +2759,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 230 */
+  { /* 224 */
     /* type PARROT_INLINE_OP, */
     "eq",
     "eq_n_n_ic",
@@ -2843,7 +2771,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 231 */
+  { /* 225 */
     /* type PARROT_INLINE_OP, */
     "eq",
     "eq_nc_n_ic",
@@ -2855,7 +2783,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 232 */
+  { /* 226 */
     /* type PARROT_INLINE_OP, */
     "eq",
     "eq_n_nc_ic",
@@ -2867,7 +2795,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 233 */
+  { /* 227 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_s_s_ic",
@@ -2879,7 +2807,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 234 */
+  { /* 228 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_sc_s_ic",
@@ -2891,7 +2819,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 235 */
+  { /* 229 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_s_sc_ic",
@@ -2903,7 +2831,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 236 */
+  { /* 230 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_p_ic",
@@ -2915,7 +2843,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 237 */
+  { /* 231 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_i_ic",
@@ -2927,7 +2855,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 238 */
+  { /* 232 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_ic_ic",
@@ -2939,7 +2867,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 239 */
+  { /* 233 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_n_ic",
@@ -2951,7 +2879,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 240 */
+  { /* 234 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_nc_ic",
@@ -2963,7 +2891,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 241 */
+  { /* 235 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_s_ic",
@@ -2975,7 +2903,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 242 */
+  { /* 236 */
     /* type PARROT_FUNCTION_OP, */
     "eq",
     "eq_p_sc_ic",
@@ -2987,7 +2915,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 243 */
+  { /* 237 */
     /* type PARROT_FUNCTION_OP, */
     "eq_str",
     "eq_str_p_p_ic",
@@ -2999,7 +2927,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 244 */
+  { /* 238 */
     /* type PARROT_FUNCTION_OP, */
     "eq_num",
     "eq_num_p_p_ic",
@@ -3011,7 +2939,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 245 */
+  { /* 239 */
     /* type PARROT_FUNCTION_OP, */
     "eq_addr",
     "eq_addr_s_s_ic",
@@ -3023,7 +2951,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 246 */
+  { /* 240 */
     /* type PARROT_FUNCTION_OP, */
     "eq_addr",
     "eq_addr_sc_s_ic",
@@ -3035,7 +2963,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 247 */
+  { /* 241 */
     /* type PARROT_FUNCTION_OP, */
     "eq_addr",
     "eq_addr_s_sc_ic",
@@ -3047,7 +2975,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 248 */
+  { /* 242 */
     /* type PARROT_FUNCTION_OP, */
     "eq_addr",
     "eq_addr_sc_sc_ic",
@@ -3059,7 +2987,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 249 */
+  { /* 243 */
     /* type PARROT_FUNCTION_OP, */
     "eq_addr",
     "eq_addr_p_p_ic",
@@ -3071,7 +2999,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 250 */
+  { /* 244 */
     /* type PARROT_INLINE_OP, */
     "ne",
     "ne_i_i_ic",
@@ -3083,7 +3011,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 251 */
+  { /* 245 */
     /* type PARROT_INLINE_OP, */
     "ne",
     "ne_ic_i_ic",
@@ -3095,7 +3023,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 252 */
+  { /* 246 */
     /* type PARROT_INLINE_OP, */
     "ne",
     "ne_i_ic_ic",
@@ -3107,7 +3035,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 253 */
+  { /* 247 */
     /* type PARROT_INLINE_OP, */
     "ne",
     "ne_n_n_ic",
@@ -3119,7 +3047,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 254 */
+  { /* 248 */
     /* type PARROT_INLINE_OP, */
     "ne",
     "ne_nc_n_ic",
@@ -3131,7 +3059,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 255 */
+  { /* 249 */
     /* type PARROT_INLINE_OP, */
     "ne",
     "ne_n_nc_ic",
@@ -3143,7 +3071,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 256 */
+  { /* 250 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_s_s_ic",
@@ -3155,7 +3083,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 257 */
+  { /* 251 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_sc_s_ic",
@@ -3167,7 +3095,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 258 */
+  { /* 252 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_s_sc_ic",
@@ -3179,7 +3107,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 259 */
+  { /* 253 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_p_ic",
@@ -3191,7 +3119,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 260 */
+  { /* 254 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_i_ic",
@@ -3203,7 +3131,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 261 */
+  { /* 255 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_ic_ic",
@@ -3215,7 +3143,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 262 */
+  { /* 256 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_n_ic",
@@ -3227,7 +3155,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 263 */
+  { /* 257 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_nc_ic",
@@ -3239,7 +3167,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 264 */
+  { /* 258 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_s_ic",
@@ -3251,7 +3179,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 265 */
+  { /* 259 */
     /* type PARROT_FUNCTION_OP, */
     "ne",
     "ne_p_sc_ic",
@@ -3263,7 +3191,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 266 */
+  { /* 260 */
     /* type PARROT_FUNCTION_OP, */
     "ne_str",
     "ne_str_p_p_ic",
@@ -3275,7 +3203,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 267 */
+  { /* 261 */
     /* type PARROT_FUNCTION_OP, */
     "ne_num",
     "ne_num_p_p_ic",
@@ -3287,7 +3215,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 268 */
+  { /* 262 */
     /* type PARROT_FUNCTION_OP, */
     "ne_addr",
     "ne_addr_s_s_ic",
@@ -3299,7 +3227,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 269 */
+  { /* 263 */
     /* type PARROT_FUNCTION_OP, */
     "ne_addr",
     "ne_addr_sc_s_ic",
@@ -3311,7 +3239,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 270 */
+  { /* 264 */
     /* type PARROT_FUNCTION_OP, */
     "ne_addr",
     "ne_addr_s_sc_ic",
@@ -3323,7 +3251,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 271 */
+  { /* 265 */
     /* type PARROT_FUNCTION_OP, */
     "ne_addr",
     "ne_addr_sc_sc_ic",
@@ -3335,7 +3263,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 272 */
+  { /* 266 */
     /* type PARROT_FUNCTION_OP, */
     "ne_addr",
     "ne_addr_p_p_ic",
@@ -3347,7 +3275,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 273 */
+  { /* 267 */
     /* type PARROT_INLINE_OP, */
     "lt",
     "lt_i_i_ic",
@@ -3359,7 +3287,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 274 */
+  { /* 268 */
     /* type PARROT_INLINE_OP, */
     "lt",
     "lt_ic_i_ic",
@@ -3371,7 +3299,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 275 */
+  { /* 269 */
     /* type PARROT_INLINE_OP, */
     "lt",
     "lt_i_ic_ic",
@@ -3383,7 +3311,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 276 */
+  { /* 270 */
     /* type PARROT_INLINE_OP, */
     "lt",
     "lt_n_n_ic",
@@ -3395,7 +3323,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 277 */
+  { /* 271 */
     /* type PARROT_INLINE_OP, */
     "lt",
     "lt_nc_n_ic",
@@ -3407,7 +3335,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 278 */
+  { /* 272 */
     /* type PARROT_INLINE_OP, */
     "lt",
     "lt_n_nc_ic",
@@ -3419,7 +3347,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 279 */
+  { /* 273 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_s_s_ic",
@@ -3431,7 +3359,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 280 */
+  { /* 274 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_sc_s_ic",
@@ -3443,7 +3371,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 281 */
+  { /* 275 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_s_sc_ic",
@@ -3455,7 +3383,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 282 */
+  { /* 276 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_p_ic",
@@ -3467,7 +3395,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 283 */
+  { /* 277 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_i_ic",
@@ -3479,7 +3407,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 284 */
+  { /* 278 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_ic_ic",
@@ -3491,7 +3419,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 285 */
+  { /* 279 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_n_ic",
@@ -3503,7 +3431,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 286 */
+  { /* 280 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_nc_ic",
@@ -3515,7 +3443,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 287 */
+  { /* 281 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_s_ic",
@@ -3527,7 +3455,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 288 */
+  { /* 282 */
     /* type PARROT_FUNCTION_OP, */
     "lt",
     "lt_p_sc_ic",
@@ -3539,7 +3467,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 289 */
+  { /* 283 */
     /* type PARROT_FUNCTION_OP, */
     "lt_str",
     "lt_str_p_p_ic",
@@ -3551,7 +3479,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 290 */
+  { /* 284 */
     /* type PARROT_FUNCTION_OP, */
     "lt_num",
     "lt_num_p_p_ic",
@@ -3563,7 +3491,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 291 */
+  { /* 285 */
     /* type PARROT_INLINE_OP, */
     "le",
     "le_i_i_ic",
@@ -3575,7 +3503,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 292 */
+  { /* 286 */
     /* type PARROT_INLINE_OP, */
     "le",
     "le_ic_i_ic",
@@ -3587,7 +3515,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 293 */
+  { /* 287 */
     /* type PARROT_INLINE_OP, */
     "le",
     "le_i_ic_ic",
@@ -3599,7 +3527,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 294 */
+  { /* 288 */
     /* type PARROT_INLINE_OP, */
     "le",
     "le_n_n_ic",
@@ -3611,7 +3539,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 295 */
+  { /* 289 */
     /* type PARROT_INLINE_OP, */
     "le",
     "le_nc_n_ic",
@@ -3623,7 +3551,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 296 */
+  { /* 290 */
     /* type PARROT_INLINE_OP, */
     "le",
     "le_n_nc_ic",
@@ -3635,7 +3563,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 297 */
+  { /* 291 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_s_s_ic",
@@ -3647,7 +3575,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 298 */
+  { /* 292 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_sc_s_ic",
@@ -3659,7 +3587,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 299 */
+  { /* 293 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_s_sc_ic",
@@ -3671,7 +3599,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 300 */
+  { /* 294 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_p_ic",
@@ -3683,7 +3611,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 301 */
+  { /* 295 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_i_ic",
@@ -3695,7 +3623,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 302 */
+  { /* 296 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_ic_ic",
@@ -3707,7 +3635,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 303 */
+  { /* 297 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_n_ic",
@@ -3719,7 +3647,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 304 */
+  { /* 298 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_nc_ic",
@@ -3731,7 +3659,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 305 */
+  { /* 299 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_s_ic",
@@ -3743,7 +3671,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 306 */
+  { /* 300 */
     /* type PARROT_FUNCTION_OP, */
     "le",
     "le_p_sc_ic",
@@ -3755,7 +3683,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 307 */
+  { /* 301 */
     /* type PARROT_FUNCTION_OP, */
     "le_str",
     "le_str_p_p_ic",
@@ -3767,7 +3695,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 308 */
+  { /* 302 */
     /* type PARROT_FUNCTION_OP, */
     "le_num",
     "le_num_p_p_ic",
@@ -3779,7 +3707,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 309 */
+  { /* 303 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_p_ic",
@@ -3791,7 +3719,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 310 */
+  { /* 304 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_i_ic",
@@ -3803,7 +3731,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 311 */
+  { /* 305 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_ic_ic",
@@ -3815,7 +3743,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 312 */
+  { /* 306 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_n_ic",
@@ -3827,7 +3755,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 313 */
+  { /* 307 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_nc_ic",
@@ -3839,7 +3767,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 314 */
+  { /* 308 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_s_ic",
@@ -3851,7 +3779,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 315 */
+  { /* 309 */
     /* type PARROT_FUNCTION_OP, */
     "gt",
     "gt_p_sc_ic",
@@ -3863,7 +3791,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 316 */
+  { /* 310 */
     /* type PARROT_FUNCTION_OP, */
     "gt_str",
     "gt_str_p_p_ic",
@@ -3875,7 +3803,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 317 */
+  { /* 311 */
     /* type PARROT_FUNCTION_OP, */
     "gt_num",
     "gt_num_p_p_ic",
@@ -3887,7 +3815,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 318 */
+  { /* 312 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_p_ic",
@@ -3899,7 +3827,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 319 */
+  { /* 313 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_i_ic",
@@ -3911,7 +3839,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 320 */
+  { /* 314 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_ic_ic",
@@ -3923,7 +3851,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 321 */
+  { /* 315 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_n_ic",
@@ -3935,7 +3863,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 322 */
+  { /* 316 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_nc_ic",
@@ -3947,7 +3875,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 323 */
+  { /* 317 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_s_ic",
@@ -3959,7 +3887,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 324 */
+  { /* 318 */
     /* type PARROT_FUNCTION_OP, */
     "ge",
     "ge_p_sc_ic",
@@ -3971,7 +3899,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 325 */
+  { /* 319 */
     /* type PARROT_FUNCTION_OP, */
     "ge_str",
     "ge_str_p_p_ic",
@@ -3983,7 +3911,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 326 */
+  { /* 320 */
     /* type PARROT_FUNCTION_OP, */
     "ge_num",
     "ge_num_p_p_ic",
@@ -3995,7 +3923,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 1 }
   },
-  { /* 327 */
+  { /* 321 */
     /* type PARROT_FUNCTION_OP, */
     "if_null",
     "if_null_p_ic",
@@ -4007,7 +3935,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 328 */
+  { /* 322 */
     /* type PARROT_FUNCTION_OP, */
     "if_null",
     "if_null_s_ic",
@@ -4019,7 +3947,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 329 */
+  { /* 323 */
     /* type PARROT_FUNCTION_OP, */
     "unless_null",
     "unless_null_p_ic",
@@ -4031,7 +3959,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 330 */
+  { /* 324 */
     /* type PARROT_FUNCTION_OP, */
     "unless_null",
     "unless_null_s_ic",
@@ -4043,7 +3971,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 1 }
   },
-  { /* 331 */
+  { /* 325 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_i_i",
@@ -4055,7 +3983,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 332 */
+  { /* 326 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_ic_i",
@@ -4067,7 +3995,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 333 */
+  { /* 327 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_i_ic",
@@ -4079,7 +4007,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 334 */
+  { /* 328 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_n_n",
@@ -4091,7 +4019,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 335 */
+  { /* 329 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_nc_n",
@@ -4103,7 +4031,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 336 */
+  { /* 330 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_n_nc",
@@ -4115,7 +4043,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 337 */
+  { /* 331 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_s_s",
@@ -4127,7 +4055,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 338 */
+  { /* 332 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_sc_s",
@@ -4139,7 +4067,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 339 */
+  { /* 333 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_s_sc",
@@ -4151,7 +4079,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 340 */
+  { /* 334 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_p",
@@ -4163,7 +4091,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 341 */
+  { /* 335 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_i",
@@ -4175,7 +4103,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 342 */
+  { /* 336 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_ic",
@@ -4187,7 +4115,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 343 */
+  { /* 337 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_n",
@@ -4199,7 +4127,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 344 */
+  { /* 338 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_nc",
@@ -4211,7 +4139,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 345 */
+  { /* 339 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_s",
@@ -4223,7 +4151,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 346 */
+  { /* 340 */
     /* type PARROT_INLINE_OP, */
     "cmp",
     "cmp_i_p_sc",
@@ -4235,7 +4163,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 347 */
+  { /* 341 */
     /* type PARROT_INLINE_OP, */
     "cmp_str",
     "cmp_str_i_p_p",
@@ -4247,7 +4175,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 348 */
+  { /* 342 */
     /* type PARROT_INLINE_OP, */
     "cmp_num",
     "cmp_num_i_p_p",
@@ -4259,7 +4187,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 349 */
+  { /* 343 */
     /* type PARROT_INLINE_OP, */
     "cmp_pmc",
     "cmp_pmc_p_p_p",
@@ -4271,7 +4199,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 350 */
+  { /* 344 */
     /* type PARROT_INLINE_OP, */
     "issame",
     "issame_i_p_p",
@@ -4283,7 +4211,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 351 */
+  { /* 345 */
     /* type PARROT_INLINE_OP, */
     "issame",
     "issame_i_s_s",
@@ -4295,7 +4223,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 352 */
+  { /* 346 */
     /* type PARROT_INLINE_OP, */
     "issame",
     "issame_i_sc_s",
@@ -4307,7 +4235,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 353 */
+  { /* 347 */
     /* type PARROT_INLINE_OP, */
     "issame",
     "issame_i_s_sc",
@@ -4319,7 +4247,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 354 */
+  { /* 348 */
     /* type PARROT_INLINE_OP, */
     "issame",
     "issame_i_sc_sc",
@@ -4331,7 +4259,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 355 */
+  { /* 349 */
     /* type PARROT_INLINE_OP, */
     "isntsame",
     "isntsame_i_p_p",
@@ -4343,7 +4271,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 356 */
+  { /* 350 */
     /* type PARROT_INLINE_OP, */
     "isntsame",
     "isntsame_i_s_s",
@@ -4355,7 +4283,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 357 */
+  { /* 351 */
     /* type PARROT_INLINE_OP, */
     "isntsame",
     "isntsame_i_sc_s",
@@ -4367,7 +4295,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 358 */
+  { /* 352 */
     /* type PARROT_INLINE_OP, */
     "isntsame",
     "isntsame_i_s_sc",
@@ -4379,7 +4307,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 359 */
+  { /* 353 */
     /* type PARROT_INLINE_OP, */
     "isntsame",
     "isntsame_i_sc_sc",
@@ -4391,7 +4319,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 360 */
+  { /* 354 */
     /* type PARROT_INLINE_OP, */
     "istrue",
     "istrue_i_p",
@@ -4403,7 +4331,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 361 */
+  { /* 355 */
     /* type PARROT_INLINE_OP, */
     "isfalse",
     "isfalse_i_p",
@@ -4415,7 +4343,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 362 */
+  { /* 356 */
     /* type PARROT_INLINE_OP, */
     "isnull",
     "isnull_i_p",
@@ -4427,7 +4355,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 363 */
+  { /* 357 */
     /* type PARROT_INLINE_OP, */
     "isnull",
     "isnull_i_pc",
@@ -4439,7 +4367,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 364 */
+  { /* 358 */
     /* type PARROT_INLINE_OP, */
     "isnull",
     "isnull_i_s",
@@ -4451,7 +4379,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 365 */
+  { /* 359 */
     /* type PARROT_INLINE_OP, */
     "isnull",
     "isnull_i_sc",
@@ -4463,7 +4391,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 366 */
+  { /* 360 */
     /* type PARROT_INLINE_OP, */
     "isgt",
     "isgt_i_p_p",
@@ -4475,7 +4403,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 367 */
+  { /* 361 */
     /* type PARROT_INLINE_OP, */
     "isge",
     "isge_i_p_p",
@@ -4487,7 +4415,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 368 */
+  { /* 362 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_i_i",
@@ -4499,7 +4427,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 369 */
+  { /* 363 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_ic_i",
@@ -4511,7 +4439,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 370 */
+  { /* 364 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_i_ic",
@@ -4523,7 +4451,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 371 */
+  { /* 365 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_n_n",
@@ -4535,7 +4463,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 372 */
+  { /* 366 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_nc_n",
@@ -4547,7 +4475,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 373 */
+  { /* 367 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_n_nc",
@@ -4559,7 +4487,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 374 */
+  { /* 368 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_s_s",
@@ -4571,7 +4499,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 375 */
+  { /* 369 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_sc_s",
@@ -4583,7 +4511,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 376 */
+  { /* 370 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_s_sc",
@@ -4595,7 +4523,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 377 */
+  { /* 371 */
     /* type PARROT_INLINE_OP, */
     "isle",
     "isle_i_p_p",
@@ -4607,7 +4535,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 378 */
+  { /* 372 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_i_i",
@@ -4619,7 +4547,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 379 */
+  { /* 373 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_ic_i",
@@ -4631,7 +4559,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 380 */
+  { /* 374 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_i_ic",
@@ -4643,7 +4571,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 381 */
+  { /* 375 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_n_n",
@@ -4655,7 +4583,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 382 */
+  { /* 376 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_nc_n",
@@ -4667,7 +4595,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 383 */
+  { /* 377 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_n_nc",
@@ -4679,7 +4607,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 384 */
+  { /* 378 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_s_s",
@@ -4691,7 +4619,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 385 */
+  { /* 379 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_sc_s",
@@ -4703,7 +4631,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 386 */
+  { /* 380 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_s_sc",
@@ -4715,7 +4643,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 387 */
+  { /* 381 */
     /* type PARROT_INLINE_OP, */
     "islt",
     "islt_i_p_p",
@@ -4727,7 +4655,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 388 */
+  { /* 382 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_i_i",
@@ -4739,7 +4667,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 389 */
+  { /* 383 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_ic_i",
@@ -4751,7 +4679,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 390 */
+  { /* 384 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_i_ic",
@@ -4763,7 +4691,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 391 */
+  { /* 385 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_n_n",
@@ -4775,7 +4703,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 392 */
+  { /* 386 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_nc_n",
@@ -4787,7 +4715,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 393 */
+  { /* 387 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_n_nc",
@@ -4799,7 +4727,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 394 */
+  { /* 388 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_s_s",
@@ -4811,7 +4739,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 395 */
+  { /* 389 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_sc_s",
@@ -4823,7 +4751,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 396 */
+  { /* 390 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_s_sc",
@@ -4835,7 +4763,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 397 */
+  { /* 391 */
     /* type PARROT_INLINE_OP, */
     "iseq",
     "iseq_i_p_p",
@@ -4847,7 +4775,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 398 */
+  { /* 392 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_i_i",
@@ -4859,7 +4787,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 399 */
+  { /* 393 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_ic_i",
@@ -4871,7 +4799,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 400 */
+  { /* 394 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_i_ic",
@@ -4883,7 +4811,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 401 */
+  { /* 395 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_n_n",
@@ -4895,7 +4823,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 402 */
+  { /* 396 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_nc_n",
@@ -4907,7 +4835,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 403 */
+  { /* 397 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_n_nc",
@@ -4919,7 +4847,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 404 */
+  { /* 398 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_s_s",
@@ -4931,7 +4859,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 405 */
+  { /* 399 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_sc_s",
@@ -4943,7 +4871,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 406 */
+  { /* 400 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_s_sc",
@@ -4955,7 +4883,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 407 */
+  { /* 401 */
     /* type PARROT_INLINE_OP, */
     "isne",
     "isne_i_p_p",
@@ -4967,7 +4895,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 408 */
+  { /* 402 */
     /* type PARROT_INLINE_OP, */
     "and",
     "and_i_i_i",
@@ -4979,7 +4907,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 409 */
+  { /* 403 */
     /* type PARROT_INLINE_OP, */
     "and",
     "and_i_ic_i",
@@ -4991,7 +4919,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 410 */
+  { /* 404 */
     /* type PARROT_INLINE_OP, */
     "and",
     "and_i_i_ic",
@@ -5003,7 +4931,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 411 */
+  { /* 405 */
     /* type PARROT_INLINE_OP, */
     "and",
     "and_p_p_p",
@@ -5015,7 +4943,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 412 */
+  { /* 406 */
     /* type PARROT_INLINE_OP, */
     "not",
     "not_i",
@@ -5027,7 +4955,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 413 */
+  { /* 407 */
     /* type PARROT_INLINE_OP, */
     "not",
     "not_i_i",
@@ -5039,7 +4967,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 414 */
+  { /* 408 */
     /* type PARROT_INLINE_OP, */
     "not",
     "not_p",
@@ -5051,7 +4979,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 415 */
+  { /* 409 */
     /* type PARROT_INLINE_OP, */
     "not",
     "not_p_p",
@@ -5063,7 +4991,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 416 */
+  { /* 410 */
     /* type PARROT_INLINE_OP, */
     "or",
     "or_i_i_i",
@@ -5075,7 +5003,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 417 */
+  { /* 411 */
     /* type PARROT_INLINE_OP, */
     "or",
     "or_i_ic_i",
@@ -5087,7 +5015,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 418 */
+  { /* 412 */
     /* type PARROT_INLINE_OP, */
     "or",
     "or_i_i_ic",
@@ -5099,7 +5027,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 419 */
+  { /* 413 */
     /* type PARROT_INLINE_OP, */
     "or",
     "or_p_p_p",
@@ -5111,7 +5039,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 420 */
+  { /* 414 */
     /* type PARROT_INLINE_OP, */
     "xor",
     "xor_i_i_i",
@@ -5123,7 +5051,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 421 */
+  { /* 415 */
     /* type PARROT_INLINE_OP, */
     "xor",
     "xor_i_ic_i",
@@ -5135,7 +5063,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 422 */
+  { /* 416 */
     /* type PARROT_INLINE_OP, */
     "xor",
     "xor_i_i_ic",
@@ -5147,7 +5075,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 423 */
+  { /* 417 */
     /* type PARROT_INLINE_OP, */
     "xor",
     "xor_p_p_p",
@@ -5159,7 +5087,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 424 */
+  { /* 418 */
     /* type PARROT_FUNCTION_OP, */
     "debug_init",
     "debug_init",
@@ -5171,7 +5099,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 425 */
+  { /* 419 */
     /* type PARROT_FUNCTION_OP, */
     "debug_load",
     "debug_load_sc",
@@ -5183,7 +5111,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 426 */
+  { /* 420 */
     /* type PARROT_FUNCTION_OP, */
     "debug_break",
     "debug_break",
@@ -5195,7 +5123,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 427 */
+  { /* 421 */
     /* type PARROT_FUNCTION_OP, */
     "debug_print",
     "debug_print",
@@ -5207,7 +5135,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 428 */
+  { /* 422 */
     /* type PARROT_FUNCTION_OP, */
     "backtrace",
     "backtrace",
@@ -5219,7 +5147,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 429 */
+  { /* 423 */
     /* type PARROT_INLINE_OP, */
     "getline",
     "getline_i",
@@ -5231,7 +5159,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 430 */
+  { /* 424 */
     /* type PARROT_INLINE_OP, */
     "getfile",
     "getfile_s",
@@ -5243,7 +5171,31 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 431 */
+  { /* 425 */
+    /* type PARROT_INLINE_OP, */
+    "set_label",
+    "set_label_p_ic",
+    "Parrot_set_label_p_ic",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_P, PARROT_ARG_IC },
+    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 1 }
+  },
+  { /* 426 */
+    /* type PARROT_INLINE_OP, */
+    "get_label",
+    "get_label_i_p",
+    "Parrot_get_label_i_p",
+    /* "",  body */
+    0,
+    3,
+    { PARROT_ARG_I, PARROT_ARG_P },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
+    { 0, 0 }
+  },
+  { /* 427 */
     /* type PARROT_INLINE_OP, */
     "close",
     "close_p",
@@ -5255,7 +5207,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 432 */
+  { /* 428 */
     /* type PARROT_INLINE_OP, */
     "fdopen",
     "fdopen_p_i_s",
@@ -5267,7 +5219,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 433 */
+  { /* 429 */
     /* type PARROT_INLINE_OP, */
     "fdopen",
     "fdopen_p_ic_s",
@@ -5279,7 +5231,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 434 */
+  { /* 430 */
     /* type PARROT_INLINE_OP, */
     "fdopen",
     "fdopen_p_i_sc",
@@ -5291,7 +5243,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 435 */
+  { /* 431 */
     /* type PARROT_INLINE_OP, */
     "fdopen",
     "fdopen_p_ic_sc",
@@ -5303,7 +5255,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 436 */
+  { /* 432 */
     /* type PARROT_INLINE_OP, */
     "getstdin",
     "getstdin_p",
@@ -5315,7 +5267,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 437 */
+  { /* 433 */
     /* type PARROT_INLINE_OP, */
     "getstdout",
     "getstdout_p",
@@ -5327,7 +5279,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 438 */
+  { /* 434 */
     /* type PARROT_INLINE_OP, */
     "getstderr",
     "getstderr_p",
@@ -5339,7 +5291,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 439 */
+  { /* 435 */
     /* type PARROT_INLINE_OP, */
     "setstdin",
     "setstdin_p",
@@ -5351,7 +5303,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 440 */
+  { /* 436 */
     /* type PARROT_INLINE_OP, */
     "setstdout",
     "setstdout_p",
@@ -5363,7 +5315,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 441 */
+  { /* 437 */
     /* type PARROT_INLINE_OP, */
     "setstderr",
     "setstderr_p",
@@ -5375,7 +5327,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 442 */
+  { /* 438 */
     /* type PARROT_INLINE_OP, */
     "open",
     "open_p_s_s",
@@ -5387,7 +5339,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 443 */
+  { /* 439 */
     /* type PARROT_INLINE_OP, */
     "open",
     "open_p_sc_s",
@@ -5399,7 +5351,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 444 */
+  { /* 440 */
     /* type PARROT_INLINE_OP, */
     "open",
     "open_p_s_sc",
@@ -5411,7 +5363,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 445 */
+  { /* 441 */
     /* type PARROT_INLINE_OP, */
     "open",
     "open_p_sc_sc",
@@ -5423,7 +5375,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 446 */
+  { /* 442 */
     /* type PARROT_INLINE_OP, */
     "open",
     "open_p_s",
@@ -5435,7 +5387,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 447 */
+  { /* 443 */
     /* type PARROT_INLINE_OP, */
     "open",
     "open_p_sc",
@@ -5447,7 +5399,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 448 */
+  { /* 444 */
     /* type PARROT_INLINE_OP, */
     "print",
     "print_i",
@@ -5459,7 +5411,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 449 */
+  { /* 445 */
     /* type PARROT_INLINE_OP, */
     "print",
     "print_ic",
@@ -5471,7 +5423,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 450 */
+  { /* 446 */
     /* type PARROT_INLINE_OP, */
     "print",
     "print_n",
@@ -5483,7 +5435,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 451 */
+  { /* 447 */
     /* type PARROT_INLINE_OP, */
     "print",
     "print_nc",
@@ -5495,7 +5447,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 452 */
+  { /* 448 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_s",
@@ -5507,7 +5459,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 453 */
+  { /* 449 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_sc",
@@ -5519,7 +5471,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 454 */
+  { /* 450 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p",
@@ -5531,7 +5483,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 455 */
+  { /* 451 */
     /* type PARROT_INLINE_OP, */
     "say",
     "say_i",
@@ -5543,7 +5495,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 456 */
+  { /* 452 */
     /* type PARROT_INLINE_OP, */
     "say",
     "say_ic",
@@ -5555,7 +5507,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 457 */
+  { /* 453 */
     /* type PARROT_INLINE_OP, */
     "say",
     "say_n",
@@ -5567,7 +5519,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 458 */
+  { /* 454 */
     /* type PARROT_INLINE_OP, */
     "say",
     "say_nc",
@@ -5579,7 +5531,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 459 */
+  { /* 455 */
     /* type PARROT_FUNCTION_OP, */
     "say",
     "say_s",
@@ -5591,7 +5543,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 460 */
+  { /* 456 */
     /* type PARROT_FUNCTION_OP, */
     "say",
     "say_sc",
@@ -5603,7 +5555,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 461 */
+  { /* 457 */
     /* type PARROT_FUNCTION_OP, */
     "say",
     "say_p",
@@ -5615,7 +5567,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 462 */
+  { /* 458 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_i",
@@ -5627,7 +5579,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 463 */
+  { /* 459 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_ic",
@@ -5639,7 +5591,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 464 */
+  { /* 460 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_n",
@@ -5651,7 +5603,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 465 */
+  { /* 461 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_nc",
@@ -5663,7 +5615,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 466 */
+  { /* 462 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_s",
@@ -5675,7 +5627,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 467 */
+  { /* 463 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_sc",
@@ -5687,7 +5639,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 468 */
+  { /* 464 */
     /* type PARROT_FUNCTION_OP, */
     "printerr",
     "printerr_p",
@@ -5699,7 +5651,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 469 */
+  { /* 465 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_i",
@@ -5711,7 +5663,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 470 */
+  { /* 466 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_ic",
@@ -5723,7 +5675,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 471 */
+  { /* 467 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_n",
@@ -5735,7 +5687,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 472 */
+  { /* 468 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_nc",
@@ -5747,7 +5699,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 473 */
+  { /* 469 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_s",
@@ -5759,7 +5711,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 474 */
+  { /* 470 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_sc",
@@ -5771,7 +5723,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 475 */
+  { /* 471 */
     /* type PARROT_FUNCTION_OP, */
     "print",
     "print_p_p",
@@ -5783,7 +5735,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 476 */
+  { /* 472 */
     /* type PARROT_FUNCTION_OP, */
     "read",
     "read_s_i",
@@ -5795,7 +5747,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 477 */
+  { /* 473 */
     /* type PARROT_FUNCTION_OP, */
     "read",
     "read_s_ic",
@@ -5807,7 +5759,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 478 */
+  { /* 474 */
     /* type PARROT_FUNCTION_OP, */
     "read",
     "read_s_p_i",
@@ -5819,7 +5771,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 479 */
+  { /* 475 */
     /* type PARROT_FUNCTION_OP, */
     "read",
     "read_s_p_ic",
@@ -5831,7 +5783,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 480 */
+  { /* 476 */
     /* type PARROT_INLINE_OP, */
     "readline",
     "readline_s_p",
@@ -5843,7 +5795,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 481 */
+  { /* 477 */
     /* type PARROT_FUNCTION_OP, */
     "peek",
     "peek_s",
@@ -5855,7 +5807,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 482 */
+  { /* 478 */
     /* type PARROT_FUNCTION_OP, */
     "peek",
     "peek_s_p",
@@ -5867,7 +5819,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 483 */
+  { /* 479 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_s_i",
@@ -5879,7 +5831,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 484 */
+  { /* 480 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_sc_i",
@@ -5891,7 +5843,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 485 */
+  { /* 481 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_s_ic",
@@ -5903,7 +5855,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 486 */
+  { /* 482 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_sc_ic",
@@ -5915,7 +5867,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 487 */
+  { /* 483 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_i_i",
@@ -5927,7 +5879,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 488 */
+  { /* 484 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_ic_i",
@@ -5939,7 +5891,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 489 */
+  { /* 485 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_i_ic",
@@ -5951,7 +5903,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 490 */
+  { /* 486 */
     /* type PARROT_FUNCTION_OP, */
     "stat",
     "stat_i_ic_ic",
@@ -5963,7 +5915,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 491 */
+  { /* 487 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_i_i",
@@ -5975,7 +5927,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 492 */
+  { /* 488 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_ic_i",
@@ -5987,7 +5939,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 493 */
+  { /* 489 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_i_ic",
@@ -5999,7 +5951,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 494 */
+  { /* 490 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_ic_ic",
@@ -6011,7 +5963,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 495 */
+  { /* 491 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_i_i_i",
@@ -6023,7 +5975,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 496 */
+  { /* 492 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_ic_i_i",
@@ -6035,7 +5987,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 497 */
+  { /* 493 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_i_ic_i",
@@ -6047,7 +5999,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 498 */
+  { /* 494 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_ic_ic_i",
@@ -6059,7 +6011,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 499 */
+  { /* 495 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_i_i_ic",
@@ -6071,7 +6023,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 500 */
+  { /* 496 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_ic_i_ic",
@@ -6083,7 +6035,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 501 */
+  { /* 497 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_i_ic_ic",
@@ -6095,7 +6047,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 502 */
+  { /* 498 */
     /* type PARROT_FUNCTION_OP, */
     "seek",
     "seek_p_ic_ic_ic",
@@ -6107,7 +6059,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 503 */
+  { /* 499 */
     /* type PARROT_FUNCTION_OP, */
     "tell",
     "tell_i_p",
@@ -6119,7 +6071,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 504 */
+  { /* 500 */
     /* type PARROT_FUNCTION_OP, */
     "tell",
     "tell_i_i_p",
@@ -6131,7 +6083,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 505 */
+  { /* 501 */
     /* type PARROT_INLINE_OP, */
     "abs",
     "abs_i",
@@ -6143,7 +6095,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 506 */
+  { /* 502 */
     /* type PARROT_INLINE_OP, */
     "abs",
     "abs_n",
@@ -6155,7 +6107,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 507 */
+  { /* 503 */
     /* type PARROT_INLINE_OP, */
     "abs",
     "abs_i_i",
@@ -6167,7 +6119,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 508 */
+  { /* 504 */
     /* type PARROT_INLINE_OP, */
     "abs",
     "abs_n_n",
@@ -6179,7 +6131,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 509 */
+  { /* 505 */
     /* type PARROT_INLINE_OP, */
     "abs",
     "abs_p",
@@ -6191,7 +6143,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 510 */
+  { /* 506 */
     /* type PARROT_INLINE_OP, */
     "abs",
     "abs_p_p",
@@ -6203,7 +6155,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 511 */
+  { /* 507 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_i_i",
@@ -6215,7 +6167,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 512 */
+  { /* 508 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_i_ic",
@@ -6227,7 +6179,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 513 */
+  { /* 509 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_n_n",
@@ -6239,7 +6191,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 514 */
+  { /* 510 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_n_nc",
@@ -6251,7 +6203,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 515 */
+  { /* 511 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_p",
@@ -6263,7 +6215,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 516 */
+  { /* 512 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_i",
@@ -6275,7 +6227,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 517 */
+  { /* 513 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_ic",
@@ -6287,7 +6239,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 518 */
+  { /* 514 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_n",
@@ -6299,7 +6251,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 519 */
+  { /* 515 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_nc",
@@ -6311,7 +6263,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 520 */
+  { /* 516 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_i_i_i",
@@ -6323,7 +6275,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 521 */
+  { /* 517 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_i_ic_i",
@@ -6335,7 +6287,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 522 */
+  { /* 518 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_i_i_ic",
@@ -6347,7 +6299,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 523 */
+  { /* 519 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_n_n_n",
@@ -6359,7 +6311,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 524 */
+  { /* 520 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_n_nc_n",
@@ -6371,7 +6323,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 525 */
+  { /* 521 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_n_n_nc",
@@ -6383,7 +6335,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 526 */
+  { /* 522 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_p_p",
@@ -6395,7 +6347,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 527 */
+  { /* 523 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_p_i",
@@ -6407,7 +6359,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 528 */
+  { /* 524 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_p_ic",
@@ -6419,7 +6371,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 529 */
+  { /* 525 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_p_n",
@@ -6431,7 +6383,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 530 */
+  { /* 526 */
     /* type PARROT_INLINE_OP, */
     "add",
     "add_p_p_nc",
@@ -6443,7 +6395,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 531 */
+  { /* 527 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_i_i_i",
@@ -6455,7 +6407,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 532 */
+  { /* 528 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_i_ic_i",
@@ -6467,7 +6419,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 533 */
+  { /* 529 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_i_i_ic",
@@ -6479,7 +6431,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 534 */
+  { /* 530 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_p_p_i",
@@ -6491,7 +6443,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 535 */
+  { /* 531 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_p_p_ic",
@@ -6503,7 +6455,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 536 */
+  { /* 532 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_p_p_p",
@@ -6515,7 +6467,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 537 */
+  { /* 533 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_n_n_n",
@@ -6527,7 +6479,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 538 */
+  { /* 534 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_n_nc_n",
@@ -6539,7 +6491,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 539 */
+  { /* 535 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_n_n_nc",
@@ -6551,7 +6503,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 540 */
+  { /* 536 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_p_p_n",
@@ -6563,7 +6515,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 541 */
+  { /* 537 */
     /* type PARROT_INLINE_OP, */
     "cmod",
     "cmod_p_p_nc",
@@ -6575,7 +6527,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 542 */
+  { /* 538 */
     /* type PARROT_INLINE_OP, */
     "dec",
     "dec_i",
@@ -6587,7 +6539,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 543 */
+  { /* 539 */
     /* type PARROT_INLINE_OP, */
     "dec",
     "dec_n",
@@ -6599,7 +6551,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 544 */
+  { /* 540 */
     /* type PARROT_INLINE_OP, */
     "dec",
     "dec_p",
@@ -6611,7 +6563,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 545 */
+  { /* 541 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_i_i",
@@ -6623,7 +6575,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 546 */
+  { /* 542 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_i_ic",
@@ -6635,7 +6587,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 547 */
+  { /* 543 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_n_n",
@@ -6647,7 +6599,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 548 */
+  { /* 544 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_n_nc",
@@ -6659,7 +6611,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 549 */
+  { /* 545 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_p",
@@ -6671,7 +6623,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 550 */
+  { /* 546 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_i",
@@ -6683,7 +6635,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 551 */
+  { /* 547 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_ic",
@@ -6695,7 +6647,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 552 */
+  { /* 548 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_n",
@@ -6707,7 +6659,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 553 */
+  { /* 549 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_nc",
@@ -6719,7 +6671,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 554 */
+  { /* 550 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_i_i_i",
@@ -6731,7 +6683,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 555 */
+  { /* 551 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_i_ic_i",
@@ -6743,7 +6695,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 556 */
+  { /* 552 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_i_i_ic",
@@ -6755,7 +6707,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 557 */
+  { /* 553 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_i_ic_ic",
@@ -6767,7 +6719,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 558 */
+  { /* 554 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_n_n_n",
@@ -6779,7 +6731,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 559 */
+  { /* 555 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_n_nc_n",
@@ -6791,7 +6743,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 560 */
+  { /* 556 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_n_n_nc",
@@ -6803,7 +6755,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 561 */
+  { /* 557 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_n_nc_nc",
@@ -6815,7 +6767,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 562 */
+  { /* 558 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_p_p",
@@ -6827,7 +6779,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 563 */
+  { /* 559 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_p_i",
@@ -6839,7 +6791,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 564 */
+  { /* 560 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_p_ic",
@@ -6851,7 +6803,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 565 */
+  { /* 561 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_p_n",
@@ -6863,7 +6815,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 566 */
+  { /* 562 */
     /* type PARROT_INLINE_OP, */
     "div",
     "div_p_p_nc",
@@ -6875,7 +6827,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 567 */
+  { /* 563 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_i_i",
@@ -6887,7 +6839,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 568 */
+  { /* 564 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_i_ic",
@@ -6899,7 +6851,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 569 */
+  { /* 565 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_n_n",
@@ -6911,7 +6863,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 570 */
+  { /* 566 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_n_nc",
@@ -6923,7 +6875,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 571 */
+  { /* 567 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_p",
@@ -6935,7 +6887,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 572 */
+  { /* 568 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_i",
@@ -6947,7 +6899,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 573 */
+  { /* 569 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_ic",
@@ -6959,7 +6911,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 574 */
+  { /* 570 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_n",
@@ -6971,7 +6923,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 575 */
+  { /* 571 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_nc",
@@ -6983,7 +6935,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 576 */
+  { /* 572 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_i_i_i",
@@ -6995,7 +6947,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 577 */
+  { /* 573 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_i_ic_i",
@@ -7007,7 +6959,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 578 */
+  { /* 574 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_i_i_ic",
@@ -7019,7 +6971,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 579 */
+  { /* 575 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_n_n_n",
@@ -7031,7 +6983,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 580 */
+  { /* 576 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_n_nc_n",
@@ -7043,7 +6995,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 581 */
+  { /* 577 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_n_n_nc",
@@ -7055,7 +7007,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 582 */
+  { /* 578 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_p_p",
@@ -7067,7 +7019,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 583 */
+  { /* 579 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_p_i",
@@ -7079,7 +7031,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 584 */
+  { /* 580 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_p_ic",
@@ -7091,7 +7043,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 585 */
+  { /* 581 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_p_n",
@@ -7103,7 +7055,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 586 */
+  { /* 582 */
     /* type PARROT_INLINE_OP, */
     "fdiv",
     "fdiv_p_p_nc",
@@ -7115,7 +7067,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 587 */
+  { /* 583 */
     /* type PARROT_INLINE_OP, */
     "ceil",
     "ceil_n",
@@ -7127,7 +7079,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 588 */
+  { /* 584 */
     /* type PARROT_INLINE_OP, */
     "ceil",
     "ceil_i_n",
@@ -7139,7 +7091,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 589 */
+  { /* 585 */
     /* type PARROT_INLINE_OP, */
     "ceil",
     "ceil_n_n",
@@ -7151,7 +7103,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 590 */
+  { /* 586 */
     /* type PARROT_INLINE_OP, */
     "floor",
     "floor_n",
@@ -7163,7 +7115,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 591 */
+  { /* 587 */
     /* type PARROT_INLINE_OP, */
     "floor",
     "floor_i_n",
@@ -7175,7 +7127,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 592 */
+  { /* 588 */
     /* type PARROT_INLINE_OP, */
     "floor",
     "floor_n_n",
@@ -7187,7 +7139,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 593 */
+  { /* 589 */
     /* type PARROT_INLINE_OP, */
     "inc",
     "inc_i",
@@ -7199,7 +7151,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 594 */
+  { /* 590 */
     /* type PARROT_INLINE_OP, */
     "inc",
     "inc_n",
@@ -7211,7 +7163,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 595 */
+  { /* 591 */
     /* type PARROT_INLINE_OP, */
     "inc",
     "inc_p",
@@ -7223,7 +7175,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 596 */
+  { /* 592 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_i_i",
@@ -7235,7 +7187,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 597 */
+  { /* 593 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_i_ic",
@@ -7247,7 +7199,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 598 */
+  { /* 594 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_n_n",
@@ -7259,7 +7211,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 599 */
+  { /* 595 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_n_nc",
@@ -7271,7 +7223,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 600 */
+  { /* 596 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_p",
@@ -7283,7 +7235,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 601 */
+  { /* 597 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_i",
@@ -7295,7 +7247,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 602 */
+  { /* 598 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_ic",
@@ -7307,7 +7259,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 603 */
+  { /* 599 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_n",
@@ -7319,7 +7271,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 604 */
+  { /* 600 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_nc",
@@ -7331,7 +7283,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 605 */
+  { /* 601 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_i_i_i",
@@ -7343,7 +7295,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 606 */
+  { /* 602 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_i_ic_i",
@@ -7355,7 +7307,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 607 */
+  { /* 603 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_i_i_ic",
@@ -7367,7 +7319,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 608 */
+  { /* 604 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_n_n_n",
@@ -7379,7 +7331,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 609 */
+  { /* 605 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_n_nc_n",
@@ -7391,7 +7343,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 610 */
+  { /* 606 */
     /* type PARROT_FUNCTION_OP, */
     "mod",
     "mod_n_n_nc",
@@ -7403,7 +7355,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 611 */
+  { /* 607 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_p_p",
@@ -7415,7 +7367,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 612 */
+  { /* 608 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_p_i",
@@ -7427,7 +7379,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 613 */
+  { /* 609 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_p_ic",
@@ -7439,7 +7391,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 614 */
+  { /* 610 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_p_n",
@@ -7451,7 +7403,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 615 */
+  { /* 611 */
     /* type PARROT_INLINE_OP, */
     "mod",
     "mod_p_p_nc",
@@ -7463,7 +7415,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 616 */
+  { /* 612 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_i_i",
@@ -7475,7 +7427,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 617 */
+  { /* 613 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_i_ic",
@@ -7487,7 +7439,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 618 */
+  { /* 614 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_n_n",
@@ -7499,7 +7451,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 619 */
+  { /* 615 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_n_nc",
@@ -7511,7 +7463,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 620 */
+  { /* 616 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_p",
@@ -7523,7 +7475,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 621 */
+  { /* 617 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_i",
@@ -7535,7 +7487,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 622 */
+  { /* 618 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_ic",
@@ -7547,7 +7499,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 623 */
+  { /* 619 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_n",
@@ -7559,7 +7511,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 624 */
+  { /* 620 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_nc",
@@ -7571,7 +7523,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 625 */
+  { /* 621 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_i_i_i",
@@ -7583,7 +7535,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 626 */
+  { /* 622 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_i_ic_i",
@@ -7595,7 +7547,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 627 */
+  { /* 623 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_i_i_ic",
@@ -7607,7 +7559,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 628 */
+  { /* 624 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_n_n_n",
@@ -7619,7 +7571,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 629 */
+  { /* 625 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_n_nc_n",
@@ -7631,7 +7583,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 630 */
+  { /* 626 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_n_n_nc",
@@ -7643,7 +7595,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 631 */
+  { /* 627 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_p_p",
@@ -7655,7 +7607,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 632 */
+  { /* 628 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_p_i",
@@ -7667,7 +7619,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 633 */
+  { /* 629 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_p_ic",
@@ -7679,7 +7631,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 634 */
+  { /* 630 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_p_n",
@@ -7691,7 +7643,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 635 */
+  { /* 631 */
     /* type PARROT_INLINE_OP, */
     "mul",
     "mul_p_p_nc",
@@ -7703,7 +7655,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 636 */
+  { /* 632 */
     /* type PARROT_INLINE_OP, */
     "neg",
     "neg_i",
@@ -7715,7 +7667,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 637 */
+  { /* 633 */
     /* type PARROT_INLINE_OP, */
     "neg",
     "neg_n",
@@ -7727,7 +7679,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 638 */
+  { /* 634 */
     /* type PARROT_INLINE_OP, */
     "neg",
     "neg_p",
@@ -7739,7 +7691,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 639 */
+  { /* 635 */
     /* type PARROT_INLINE_OP, */
     "neg",
     "neg_i_i",
@@ -7751,7 +7703,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 640 */
+  { /* 636 */
     /* type PARROT_INLINE_OP, */
     "neg",
     "neg_n_n",
@@ -7763,7 +7715,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 641 */
+  { /* 637 */
     /* type PARROT_INLINE_OP, */
     "neg",
     "neg_p_p",
@@ -7775,7 +7727,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 642 */
+  { /* 638 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_n_n",
@@ -7787,7 +7739,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 643 */
+  { /* 639 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_nc_n",
@@ -7799,7 +7751,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 644 */
+  { /* 640 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_n_nc",
@@ -7811,7 +7763,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 645 */
+  { /* 641 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_p_p_p",
@@ -7823,7 +7775,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 646 */
+  { /* 642 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_p_p_i",
@@ -7835,7 +7787,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 647 */
+  { /* 643 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_p_p_ic",
@@ -7847,7 +7799,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 648 */
+  { /* 644 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_p_p_n",
@@ -7859,7 +7811,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 649 */
+  { /* 645 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_p_p_nc",
@@ -7871,7 +7823,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 650 */
+  { /* 646 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_n_i",
@@ -7883,7 +7835,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 651 */
+  { /* 647 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_nc_i",
@@ -7895,7 +7847,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 652 */
+  { /* 648 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_n_ic",
@@ -7907,7 +7859,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 653 */
+  { /* 649 */
     /* type PARROT_INLINE_OP, */
     "pow",
     "pow_n_nc_ic",
@@ -7919,7 +7871,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 654 */
+  { /* 650 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_i_i",
@@ -7931,7 +7883,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 655 */
+  { /* 651 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_i_ic",
@@ -7943,7 +7895,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 656 */
+  { /* 652 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_n_n",
@@ -7955,7 +7907,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 657 */
+  { /* 653 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_n_nc",
@@ -7967,7 +7919,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 658 */
+  { /* 654 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_p",
@@ -7979,7 +7931,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 659 */
+  { /* 655 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_i",
@@ -7991,7 +7943,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 660 */
+  { /* 656 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_ic",
@@ -8003,7 +7955,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 661 */
+  { /* 657 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_n",
@@ -8015,7 +7967,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 662 */
+  { /* 658 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_nc",
@@ -8027,7 +7979,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 663 */
+  { /* 659 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_i_i_i",
@@ -8039,7 +7991,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 664 */
+  { /* 660 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_i_ic_i",
@@ -8051,7 +8003,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 665 */
+  { /* 661 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_i_i_ic",
@@ -8063,7 +8015,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 666 */
+  { /* 662 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_n_n_n",
@@ -8075,7 +8027,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 667 */
+  { /* 663 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_n_nc_n",
@@ -8087,7 +8039,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 668 */
+  { /* 664 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_n_n_nc",
@@ -8099,7 +8051,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 669 */
+  { /* 665 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_p_p",
@@ -8111,7 +8063,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 670 */
+  { /* 666 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_p_i",
@@ -8123,7 +8075,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 671 */
+  { /* 667 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_p_ic",
@@ -8135,7 +8087,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 672 */
+  { /* 668 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_p_n",
@@ -8147,7 +8099,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 673 */
+  { /* 669 */
     /* type PARROT_INLINE_OP, */
     "sub",
     "sub_p_p_nc",
@@ -8159,7 +8111,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 674 */
+  { /* 670 */
     /* type PARROT_INLINE_OP, */
     "sqrt",
     "sqrt_n_n",
@@ -8171,7 +8123,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 675 */
+  { /* 671 */
     /* type PARROT_INLINE_OP, */
     "acos",
     "acos_n_n",
@@ -8183,7 +8135,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 676 */
+  { /* 672 */
     /* type PARROT_INLINE_OP, */
     "asec",
     "asec_n_n",
@@ -8195,7 +8147,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 677 */
+  { /* 673 */
     /* type PARROT_INLINE_OP, */
     "asin",
     "asin_n_n",
@@ -8207,7 +8159,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 678 */
+  { /* 674 */
     /* type PARROT_INLINE_OP, */
     "atan",
     "atan_n_n",
@@ -8219,7 +8171,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 679 */
+  { /* 675 */
     /* type PARROT_INLINE_OP, */
     "atan",
     "atan_n_n_n",
@@ -8231,7 +8183,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 680 */
+  { /* 676 */
     /* type PARROT_INLINE_OP, */
     "atan",
     "atan_n_nc_n",
@@ -8243,7 +8195,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 681 */
+  { /* 677 */
     /* type PARROT_INLINE_OP, */
     "atan",
     "atan_n_n_nc",
@@ -8255,7 +8207,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 682 */
+  { /* 678 */
     /* type PARROT_INLINE_OP, */
     "cos",
     "cos_n_n",
@@ -8267,7 +8219,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 683 */
+  { /* 679 */
     /* type PARROT_INLINE_OP, */
     "cosh",
     "cosh_n_n",
@@ -8279,7 +8231,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 684 */
+  { /* 680 */
     /* type PARROT_INLINE_OP, */
     "exp",
     "exp_n_n",
@@ -8291,7 +8243,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 685 */
+  { /* 681 */
     /* type PARROT_INLINE_OP, */
     "ln",
     "ln_n_n",
@@ -8303,7 +8255,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 686 */
+  { /* 682 */
     /* type PARROT_INLINE_OP, */
     "log10",
     "log10_n_n",
@@ -8315,7 +8267,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 687 */
+  { /* 683 */
     /* type PARROT_FUNCTION_OP, */
     "log2",
     "log2_n_n",
@@ -8327,7 +8279,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 688 */
+  { /* 684 */
     /* type PARROT_INLINE_OP, */
     "sec",
     "sec_n_n",
@@ -8339,7 +8291,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 689 */
+  { /* 685 */
     /* type PARROT_INLINE_OP, */
     "sech",
     "sech_n_n",
@@ -8351,7 +8303,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 690 */
+  { /* 686 */
     /* type PARROT_INLINE_OP, */
     "sin",
     "sin_n_n",
@@ -8363,7 +8315,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 691 */
+  { /* 687 */
     /* type PARROT_INLINE_OP, */
     "sinh",
     "sinh_n_n",
@@ -8375,7 +8327,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 692 */
+  { /* 688 */
     /* type PARROT_INLINE_OP, */
     "tan",
     "tan_n_n",
@@ -8387,7 +8339,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 693 */
+  { /* 689 */
     /* type PARROT_INLINE_OP, */
     "tanh",
     "tanh_n_n",
@@ -8399,7 +8351,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 694 */
+  { /* 690 */
     /* type PARROT_INLINE_OP, */
     "gcd",
     "gcd_i_i_i",
@@ -8411,7 +8363,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 695 */
+  { /* 691 */
     /* type PARROT_INLINE_OP, */
     "gcd",
     "gcd_i_ic_i",
@@ -8423,7 +8375,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 696 */
+  { /* 692 */
     /* type PARROT_INLINE_OP, */
     "gcd",
     "gcd_i_i_ic",
@@ -8435,7 +8387,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 697 */
+  { /* 693 */
     /* type PARROT_INLINE_OP, */
     "lcm",
     "lcm_i_i_i",
@@ -8447,7 +8399,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 698 */
+  { /* 694 */
     /* type PARROT_INLINE_OP, */
     "lcm",
     "lcm_i_ic_i",
@@ -8459,7 +8411,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 699 */
+  { /* 695 */
     /* type PARROT_INLINE_OP, */
     "lcm",
     "lcm_i_i_ic",
@@ -8471,7 +8423,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 700 */
+  { /* 696 */
     /* type PARROT_INLINE_OP, */
     "fact",
     "fact_i_i",
@@ -8483,7 +8435,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 701 */
+  { /* 697 */
     /* type PARROT_INLINE_OP, */
     "fact",
     "fact_n_i",
@@ -8495,7 +8447,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 702 */
+  { /* 698 */
     /* type PARROT_FUNCTION_OP, */
     "callmethodcc",
     "callmethodcc_p_s",
@@ -8507,7 +8459,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 703 */
+  { /* 699 */
     /* type PARROT_FUNCTION_OP, */
     "callmethodcc",
     "callmethodcc_p_sc",
@@ -8519,7 +8471,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 704 */
+  { /* 700 */
     /* type PARROT_FUNCTION_OP, */
     "callmethodcc",
     "callmethodcc_p_p",
@@ -8531,7 +8483,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 705 */
+  { /* 701 */
     /* type PARROT_FUNCTION_OP, */
     "callmethod",
     "callmethod_p_s_p",
@@ -8543,7 +8495,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 706 */
+  { /* 702 */
     /* type PARROT_FUNCTION_OP, */
     "callmethod",
     "callmethod_p_sc_p",
@@ -8555,7 +8507,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 707 */
+  { /* 703 */
     /* type PARROT_FUNCTION_OP, */
     "callmethod",
     "callmethod_p_p_p",
@@ -8567,7 +8519,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 708 */
+  { /* 704 */
     /* type PARROT_FUNCTION_OP, */
     "tailcallmethod",
     "tailcallmethod_p_s",
@@ -8579,7 +8531,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 709 */
+  { /* 705 */
     /* type PARROT_FUNCTION_OP, */
     "tailcallmethod",
     "tailcallmethod_p_sc",
@@ -8591,7 +8543,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 710 */
+  { /* 706 */
     /* type PARROT_FUNCTION_OP, */
     "tailcallmethod",
     "tailcallmethod_p_p",
@@ -8603,7 +8555,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 711 */
+  { /* 707 */
     /* type PARROT_INLINE_OP, */
     "addmethod",
     "addmethod_p_s_p",
@@ -8615,7 +8567,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 712 */
+  { /* 708 */
     /* type PARROT_INLINE_OP, */
     "addmethod",
     "addmethod_p_sc_p",
@@ -8627,7 +8579,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 713 */
+  { /* 709 */
     /* type PARROT_INLINE_OP, */
     "can",
     "can_i_p_s",
@@ -8639,7 +8591,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 714 */
+  { /* 710 */
     /* type PARROT_INLINE_OP, */
     "can",
     "can_i_p_sc",
@@ -8651,7 +8603,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 715 */
+  { /* 711 */
     /* type PARROT_INLINE_OP, */
     "does",
     "does_i_p_s",
@@ -8663,7 +8615,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 716 */
+  { /* 712 */
     /* type PARROT_INLINE_OP, */
     "does",
     "does_i_p_sc",
@@ -8675,7 +8627,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 717 */
+  { /* 713 */
     /* type PARROT_INLINE_OP, */
     "does",
     "does_i_p_p",
@@ -8687,7 +8639,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 718 */
+  { /* 714 */
     /* type PARROT_INLINE_OP, */
     "does",
     "does_i_p_pc",
@@ -8699,7 +8651,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 719 */
+  { /* 715 */
     /* type PARROT_INLINE_OP, */
     "isa",
     "isa_i_p_s",
@@ -8711,7 +8663,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 720 */
+  { /* 716 */
     /* type PARROT_INLINE_OP, */
     "isa",
     "isa_i_p_sc",
@@ -8723,7 +8675,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 721 */
+  { /* 717 */
     /* type PARROT_INLINE_OP, */
     "isa",
     "isa_i_p_p",
@@ -8735,7 +8687,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 722 */
+  { /* 718 */
     /* type PARROT_INLINE_OP, */
     "isa",
     "isa_i_p_pc",
@@ -8747,7 +8699,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 723 */
+  { /* 719 */
     /* type PARROT_INLINE_OP, */
     "newclass",
     "newclass_p_s",
@@ -8759,7 +8711,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 724 */
+  { /* 720 */
     /* type PARROT_INLINE_OP, */
     "newclass",
     "newclass_p_sc",
@@ -8771,7 +8723,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 725 */
+  { /* 721 */
     /* type PARROT_INLINE_OP, */
     "newclass",
     "newclass_p_p",
@@ -8783,7 +8735,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 726 */
+  { /* 722 */
     /* type PARROT_INLINE_OP, */
     "newclass",
     "newclass_p_pc",
@@ -8795,7 +8747,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 727 */
+  { /* 723 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_p",
@@ -8807,7 +8759,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 728 */
+  { /* 724 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_pc",
@@ -8819,7 +8771,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 729 */
+  { /* 725 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_p_s",
@@ -8831,7 +8783,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 730 */
+  { /* 726 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_pc_s",
@@ -8843,7 +8795,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 731 */
+  { /* 727 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_p_sc",
@@ -8855,7 +8807,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 732 */
+  { /* 728 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_pc_sc",
@@ -8867,7 +8819,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 733 */
+  { /* 729 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_p_p",
@@ -8879,7 +8831,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 734 */
+  { /* 730 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_pc_p",
@@ -8891,7 +8843,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 735 */
+  { /* 731 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_p_pc",
@@ -8903,7 +8855,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 736 */
+  { /* 732 */
     /* type PARROT_INLINE_OP, */
     "subclass",
     "subclass_p_pc_pc",
@@ -8915,7 +8867,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 737 */
+  { /* 733 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_s",
@@ -8927,7 +8879,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 738 */
+  { /* 734 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_sc",
@@ -8939,7 +8891,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 739 */
+  { /* 735 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_s_s",
@@ -8951,7 +8903,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 740 */
+  { /* 736 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_sc_s",
@@ -8963,7 +8915,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 741 */
+  { /* 737 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_s_sc",
@@ -8975,7 +8927,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 742 */
+  { /* 738 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_sc_sc",
@@ -8987,7 +8939,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 743 */
+  { /* 739 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_s_p",
@@ -8999,7 +8951,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 744 */
+  { /* 740 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_sc_p",
@@ -9011,7 +8963,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 745 */
+  { /* 741 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_s_pc",
@@ -9023,7 +8975,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 746 */
+  { /* 742 */
     /* type PARROT_FUNCTION_OP, */
     "subclass",
     "subclass_p_sc_pc",
@@ -9035,7 +8987,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 747 */
+  { /* 743 */
     /* type PARROT_INLINE_OP, */
     "get_class",
     "get_class_p_s",
@@ -9047,7 +8999,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 748 */
+  { /* 744 */
     /* type PARROT_INLINE_OP, */
     "get_class",
     "get_class_p_sc",
@@ -9059,7 +9011,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 749 */
+  { /* 745 */
     /* type PARROT_INLINE_OP, */
     "get_class",
     "get_class_p_p",
@@ -9071,7 +9023,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 750 */
+  { /* 746 */
     /* type PARROT_INLINE_OP, */
     "get_class",
     "get_class_p_pc",
@@ -9083,7 +9035,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 751 */
+  { /* 747 */
     /* type PARROT_INLINE_OP, */
     "class",
     "class_p_p",
@@ -9095,7 +9047,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 752 */
+  { /* 748 */
     /* type PARROT_INLINE_OP, */
     "addparent",
     "addparent_p_p",
@@ -9107,7 +9059,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 753 */
+  { /* 749 */
     /* type PARROT_INLINE_OP, */
     "removeparent",
     "removeparent_p_p",
@@ -9119,7 +9071,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 754 */
+  { /* 750 */
     /* type PARROT_INLINE_OP, */
     "addrole",
     "addrole_p_p",
@@ -9131,7 +9083,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 755 */
+  { /* 751 */
     /* type PARROT_INLINE_OP, */
     "addattribute",
     "addattribute_p_s",
@@ -9143,7 +9095,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 756 */
+  { /* 752 */
     /* type PARROT_INLINE_OP, */
     "addattribute",
     "addattribute_p_sc",
@@ -9155,7 +9107,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 757 */
+  { /* 753 */
     /* type PARROT_FUNCTION_OP, */
     "removeattribute",
     "removeattribute_p_s",
@@ -9167,7 +9119,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 758 */
+  { /* 754 */
     /* type PARROT_FUNCTION_OP, */
     "removeattribute",
     "removeattribute_p_sc",
@@ -9179,7 +9131,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 759 */
+  { /* 755 */
     /* type PARROT_INLINE_OP, */
     "getattribute",
     "getattribute_p_p_s",
@@ -9191,7 +9143,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 760 */
+  { /* 756 */
     /* type PARROT_INLINE_OP, */
     "getattribute",
     "getattribute_p_p_sc",
@@ -9203,7 +9155,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 761 */
+  { /* 757 */
     /* type PARROT_INLINE_OP, */
     "getattribute",
     "getattribute_p_p_p_s",
@@ -9215,7 +9167,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 762 */
+  { /* 758 */
     /* type PARROT_INLINE_OP, */
     "getattribute",
     "getattribute_p_p_pc_s",
@@ -9227,7 +9179,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 763 */
+  { /* 759 */
     /* type PARROT_INLINE_OP, */
     "getattribute",
     "getattribute_p_p_p_sc",
@@ -9239,7 +9191,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 764 */
+  { /* 760 */
     /* type PARROT_INLINE_OP, */
     "getattribute",
     "getattribute_p_p_pc_sc",
@@ -9251,7 +9203,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 765 */
+  { /* 761 */
     /* type PARROT_INLINE_OP, */
     "setattribute",
     "setattribute_p_s_p",
@@ -9263,7 +9215,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 766 */
+  { /* 762 */
     /* type PARROT_INLINE_OP, */
     "setattribute",
     "setattribute_p_sc_p",
@@ -9275,7 +9227,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 767 */
+  { /* 763 */
     /* type PARROT_INLINE_OP, */
     "setattribute",
     "setattribute_p_p_s_p",
@@ -9287,7 +9239,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 768 */
+  { /* 764 */
     /* type PARROT_INLINE_OP, */
     "setattribute",
     "setattribute_p_pc_s_p",
@@ -9299,7 +9251,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 769 */
+  { /* 765 */
     /* type PARROT_INLINE_OP, */
     "setattribute",
     "setattribute_p_p_sc_p",
@@ -9311,7 +9263,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 770 */
+  { /* 766 */
     /* type PARROT_INLINE_OP, */
     "setattribute",
     "setattribute_p_pc_sc_p",
@@ -9323,7 +9275,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 771 */
+  { /* 767 */
     /* type PARROT_INLINE_OP, */
     "inspect",
     "inspect_p_p",
@@ -9335,7 +9287,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 772 */
+  { /* 768 */
     /* type PARROT_INLINE_OP, */
     "inspect",
     "inspect_p_pc",
@@ -9347,7 +9299,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 773 */
+  { /* 769 */
     /* type PARROT_INLINE_OP, */
     "inspect",
     "inspect_p_p_s",
@@ -9359,7 +9311,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 774 */
+  { /* 770 */
     /* type PARROT_INLINE_OP, */
     "inspect",
     "inspect_p_pc_s",
@@ -9371,7 +9323,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 775 */
+  { /* 771 */
     /* type PARROT_INLINE_OP, */
     "inspect",
     "inspect_p_p_sc",
@@ -9383,7 +9335,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 776 */
+  { /* 772 */
     /* type PARROT_INLINE_OP, */
     "inspect",
     "inspect_p_pc_sc",
@@ -9395,7 +9347,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 777 */
+  { /* 773 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_s",
@@ -9407,7 +9359,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 778 */
+  { /* 774 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_sc",
@@ -9419,7 +9371,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 779 */
+  { /* 775 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_s_p",
@@ -9431,7 +9383,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 780 */
+  { /* 776 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_sc_p",
@@ -9443,7 +9395,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 781 */
+  { /* 777 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_s_pc",
@@ -9455,7 +9407,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 782 */
+  { /* 778 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_sc_pc",
@@ -9467,7 +9419,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 783 */
+  { /* 779 */
     /* type PARROT_INLINE_OP, */
     "new",
     "new_p_p",
@@ -9479,7 +9431,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 784 */
+  { /* 780 */
     /* type PARROT_INLINE_OP, */
     "new",
     "new_p_pc",
@@ -9491,7 +9443,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 785 */
+  { /* 781 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_p_p",
@@ -9503,7 +9455,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 786 */
+  { /* 782 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_pc_p",
@@ -9515,7 +9467,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 787 */
+  { /* 783 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_p_pc",
@@ -9527,7 +9479,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 788 */
+  { /* 784 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_pc_pc",
@@ -9539,7 +9491,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 789 */
+  { /* 785 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_p",
@@ -9551,7 +9503,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 790 */
+  { /* 786 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_pc",
@@ -9563,7 +9515,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 791 */
+  { /* 787 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_p_p",
@@ -9575,7 +9527,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 792 */
+  { /* 788 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_pc_p",
@@ -9587,7 +9539,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 793 */
+  { /* 789 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_p_pc",
@@ -9599,7 +9551,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 794 */
+  { /* 790 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_pc_pc",
@@ -9611,7 +9563,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 795 */
+  { /* 791 */
     /* type PARROT_INLINE_OP, */
     "typeof",
     "typeof_s_p",
@@ -9623,7 +9575,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 796 */
+  { /* 792 */
     /* type PARROT_INLINE_OP, */
     "typeof",
     "typeof_p_p",
@@ -9635,7 +9587,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 797 */
+  { /* 793 */
     /* type PARROT_FUNCTION_OP, */
     "get_repr",
     "get_repr_s_p",
@@ -9647,7 +9599,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 798 */
+  { /* 794 */
     /* type PARROT_FUNCTION_OP, */
     "find_method",
     "find_method_p_p_s",
@@ -9659,7 +9611,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 799 */
+  { /* 795 */
     /* type PARROT_FUNCTION_OP, */
     "find_method",
     "find_method_p_p_sc",
@@ -9671,7 +9623,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 800 */
+  { /* 796 */
     /* type PARROT_INLINE_OP, */
     "defined",
     "defined_i_p",
@@ -9683,7 +9635,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 801 */
+  { /* 797 */
     /* type PARROT_INLINE_OP, */
     "defined",
     "defined_i_p_ki",
@@ -9695,7 +9647,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 802 */
+  { /* 798 */
     /* type PARROT_INLINE_OP, */
     "defined",
     "defined_i_p_kic",
@@ -9707,7 +9659,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 803 */
+  { /* 799 */
     /* type PARROT_INLINE_OP, */
     "defined",
     "defined_i_p_k",
@@ -9719,7 +9671,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 804 */
+  { /* 800 */
     /* type PARROT_INLINE_OP, */
     "defined",
     "defined_i_p_kc",
@@ -9731,7 +9683,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 805 */
+  { /* 801 */
     /* type PARROT_INLINE_OP, */
     "exists",
     "exists_i_p_ki",
@@ -9743,7 +9695,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 806 */
+  { /* 802 */
     /* type PARROT_INLINE_OP, */
     "exists",
     "exists_i_p_kic",
@@ -9755,7 +9707,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 807 */
+  { /* 803 */
     /* type PARROT_INLINE_OP, */
     "exists",
     "exists_i_p_k",
@@ -9767,7 +9719,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 808 */
+  { /* 804 */
     /* type PARROT_INLINE_OP, */
     "exists",
     "exists_i_p_kc",
@@ -9779,7 +9731,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 809 */
+  { /* 805 */
     /* type PARROT_INLINE_OP, */
     "delete",
     "delete_p_k",
@@ -9791,7 +9743,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 810 */
+  { /* 806 */
     /* type PARROT_INLINE_OP, */
     "delete",
     "delete_p_kc",
@@ -9803,7 +9755,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 811 */
+  { /* 807 */
     /* type PARROT_INLINE_OP, */
     "delete",
     "delete_p_ki",
@@ -9815,7 +9767,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 812 */
+  { /* 808 */
     /* type PARROT_INLINE_OP, */
     "delete",
     "delete_p_kic",
@@ -9827,7 +9779,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 813 */
+  { /* 809 */
     /* type PARROT_INLINE_OP, */
     "elements",
     "elements_i_p",
@@ -9839,7 +9791,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 814 */
+  { /* 810 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_i",
@@ -9851,7 +9803,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 815 */
+  { /* 811 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_ic",
@@ -9863,7 +9815,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 816 */
+  { /* 812 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_n",
@@ -9875,7 +9827,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 817 */
+  { /* 813 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_nc",
@@ -9887,7 +9839,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 818 */
+  { /* 814 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_s",
@@ -9899,7 +9851,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 819 */
+  { /* 815 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_sc",
@@ -9911,7 +9863,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 820 */
+  { /* 816 */
     /* type PARROT_INLINE_OP, */
     "push",
     "push_p_p",
@@ -9923,7 +9875,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 821 */
+  { /* 817 */
     /* type PARROT_INLINE_OP, */
     "pop",
     "pop_i_p",
@@ -9935,7 +9887,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 822 */
+  { /* 818 */
     /* type PARROT_INLINE_OP, */
     "pop",
     "pop_n_p",
@@ -9947,7 +9899,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 823 */
+  { /* 819 */
     /* type PARROT_INLINE_OP, */
     "pop",
     "pop_s_p",
@@ -9959,7 +9911,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 824 */
+  { /* 820 */
     /* type PARROT_INLINE_OP, */
     "pop",
     "pop_p_p",
@@ -9971,7 +9923,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 825 */
+  { /* 821 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_i",
@@ -9983,7 +9935,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 826 */
+  { /* 822 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_ic",
@@ -9995,7 +9947,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 827 */
+  { /* 823 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_n",
@@ -10007,7 +9959,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 828 */
+  { /* 824 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_nc",
@@ -10019,7 +9971,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 829 */
+  { /* 825 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_s",
@@ -10031,7 +9983,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 830 */
+  { /* 826 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_sc",
@@ -10043,7 +9995,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 831 */
+  { /* 827 */
     /* type PARROT_INLINE_OP, */
     "unshift",
     "unshift_p_p",
@@ -10055,7 +10007,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 832 */
+  { /* 828 */
     /* type PARROT_INLINE_OP, */
     "shift",
     "shift_i_p",
@@ -10067,7 +10019,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 833 */
+  { /* 829 */
     /* type PARROT_INLINE_OP, */
     "shift",
     "shift_n_p",
@@ -10079,7 +10031,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 834 */
+  { /* 830 */
     /* type PARROT_INLINE_OP, */
     "shift",
     "shift_s_p",
@@ -10091,7 +10043,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 835 */
+  { /* 831 */
     /* type PARROT_INLINE_OP, */
     "shift",
     "shift_p_p",
@@ -10103,7 +10055,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 836 */
+  { /* 832 */
     /* type PARROT_INLINE_OP, */
     "splice",
     "splice_p_p_i_i",
@@ -10115,7 +10067,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 837 */
+  { /* 833 */
     /* type PARROT_INLINE_OP, */
     "splice",
     "splice_p_p_ic_i",
@@ -10127,7 +10079,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 838 */
+  { /* 834 */
     /* type PARROT_INLINE_OP, */
     "splice",
     "splice_p_p_i_ic",
@@ -10139,7 +10091,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 839 */
+  { /* 835 */
     /* type PARROT_INLINE_OP, */
     "splice",
     "splice_p_p_ic_ic",
@@ -10151,7 +10103,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 840 */
+  { /* 836 */
     /* type PARROT_FUNCTION_OP, */
     "setprop",
     "setprop_p_s_p",
@@ -10163,7 +10115,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 841 */
+  { /* 837 */
     /* type PARROT_FUNCTION_OP, */
     "setprop",
     "setprop_p_sc_p",
@@ -10175,7 +10127,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 842 */
+  { /* 838 */
     /* type PARROT_FUNCTION_OP, */
     "getprop",
     "getprop_p_s_p",
@@ -10187,7 +10139,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 843 */
+  { /* 839 */
     /* type PARROT_FUNCTION_OP, */
     "getprop",
     "getprop_p_sc_p",
@@ -10199,7 +10151,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 844 */
+  { /* 840 */
     /* type PARROT_FUNCTION_OP, */
     "delprop",
     "delprop_p_s",
@@ -10211,7 +10163,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 845 */
+  { /* 841 */
     /* type PARROT_FUNCTION_OP, */
     "delprop",
     "delprop_p_sc",
@@ -10223,7 +10175,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 846 */
+  { /* 842 */
     /* type PARROT_FUNCTION_OP, */
     "prophash",
     "prophash_p_p",
@@ -10235,7 +10187,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 847 */
+  { /* 843 */
     /* type PARROT_FUNCTION_OP, */
     "freeze",
     "freeze_s_p",
@@ -10247,7 +10199,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 848 */
+  { /* 844 */
     /* type PARROT_FUNCTION_OP, */
     "thaw",
     "thaw_p_s",
@@ -10259,7 +10211,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 849 */
+  { /* 845 */
     /* type PARROT_FUNCTION_OP, */
     "thaw",
     "thaw_p_sc",
@@ -10271,7 +10223,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 850 */
+  { /* 846 */
     /* type PARROT_INLINE_OP, */
     "add_multi",
     "add_multi_s_s_p",
@@ -10283,7 +10235,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 851 */
+  { /* 847 */
     /* type PARROT_INLINE_OP, */
     "add_multi",
     "add_multi_sc_s_p",
@@ -10295,7 +10247,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 852 */
+  { /* 848 */
     /* type PARROT_INLINE_OP, */
     "add_multi",
     "add_multi_s_sc_p",
@@ -10307,7 +10259,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 853 */
+  { /* 849 */
     /* type PARROT_INLINE_OP, */
     "add_multi",
     "add_multi_sc_sc_p",
@@ -10319,7 +10271,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 854 */
+  { /* 850 */
     /* type PARROT_INLINE_OP, */
     "find_multi",
     "find_multi_p_s_s",
@@ -10331,7 +10283,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 855 */
+  { /* 851 */
     /* type PARROT_INLINE_OP, */
     "find_multi",
     "find_multi_p_sc_s",
@@ -10343,7 +10295,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 856 */
+  { /* 852 */
     /* type PARROT_INLINE_OP, */
     "find_multi",
     "find_multi_p_s_sc",
@@ -10355,7 +10307,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 857 */
+  { /* 853 */
     /* type PARROT_INLINE_OP, */
     "find_multi",
     "find_multi_p_sc_sc",
@@ -10367,7 +10319,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 858 */
+  { /* 854 */
     /* type PARROT_FUNCTION_OP, */
     "register",
     "register_p",
@@ -10379,7 +10331,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 859 */
+  { /* 855 */
     /* type PARROT_FUNCTION_OP, */
     "unregister",
     "unregister_p",
@@ -10391,7 +10343,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 860 */
+  { /* 856 */
     /* type PARROT_FUNCTION_OP, */
     "box",
     "box_p_i",
@@ -10403,7 +10355,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 861 */
+  { /* 857 */
     /* type PARROT_FUNCTION_OP, */
     "box",
     "box_p_ic",
@@ -10415,7 +10367,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 862 */
+  { /* 858 */
     /* type PARROT_FUNCTION_OP, */
     "box",
     "box_p_n",
@@ -10427,7 +10379,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 863 */
+  { /* 859 */
     /* type PARROT_FUNCTION_OP, */
     "box",
     "box_p_nc",
@@ -10439,7 +10391,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 864 */
+  { /* 860 */
     /* type PARROT_FUNCTION_OP, */
     "box",
     "box_p_s",
@@ -10451,7 +10403,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 865 */
+  { /* 861 */
     /* type PARROT_FUNCTION_OP, */
     "box",
     "box_p_sc",
@@ -10463,7 +10415,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 866 */
+  { /* 862 */
     /* type PARROT_INLINE_OP, */
     "iter",
     "iter_p_p",
@@ -10475,7 +10427,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 867 */
+  { /* 863 */
     /* type PARROT_INLINE_OP, */
     "morph",
     "morph_p_p",
@@ -10487,7 +10439,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 868 */
+  { /* 864 */
     /* type PARROT_INLINE_OP, */
     "morph",
     "morph_p_pc",
@@ -10499,7 +10451,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 869 */
+  { /* 865 */
     /* type PARROT_INLINE_OP, */
     "clone",
     "clone_s_s",
@@ -10511,7 +10463,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 870 */
+  { /* 866 */
     /* type PARROT_INLINE_OP, */
     "clone",
     "clone_s_sc",
@@ -10523,7 +10475,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 871 */
+  { /* 867 */
     /* type PARROT_FUNCTION_OP, */
     "exchange",
     "exchange_i_i",
@@ -10535,7 +10487,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_INOUT },
     { 0, 0 }
   },
-  { /* 872 */
+  { /* 868 */
     /* type PARROT_FUNCTION_OP, */
     "exchange",
     "exchange_p_p",
@@ -10547,7 +10499,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_INOUT },
     { 0, 0 }
   },
-  { /* 873 */
+  { /* 869 */
     /* type PARROT_FUNCTION_OP, */
     "exchange",
     "exchange_n_n",
@@ -10559,7 +10511,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_INOUT },
     { 0, 0 }
   },
-  { /* 874 */
+  { /* 870 */
     /* type PARROT_FUNCTION_OP, */
     "exchange",
     "exchange_s_s",
@@ -10571,7 +10523,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_INOUT },
     { 0, 0 }
   },
-  { /* 875 */
+  { /* 871 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_i",
@@ -10583,7 +10535,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 876 */
+  { /* 872 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_ic",
@@ -10595,7 +10547,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 877 */
+  { /* 873 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_n",
@@ -10607,7 +10559,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 878 */
+  { /* 874 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_nc",
@@ -10619,7 +10571,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 879 */
+  { /* 875 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_s",
@@ -10631,7 +10583,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 880 */
+  { /* 876 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_sc",
@@ -10643,7 +10595,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 881 */
+  { /* 877 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_n",
@@ -10655,7 +10607,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 882 */
+  { /* 878 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_nc",
@@ -10667,7 +10619,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 883 */
+  { /* 879 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_i",
@@ -10679,7 +10631,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 884 */
+  { /* 880 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_ic",
@@ -10691,7 +10643,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 885 */
+  { /* 881 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_s",
@@ -10703,7 +10655,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 886 */
+  { /* 882 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_sc",
@@ -10715,7 +10667,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 887 */
+  { /* 883 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_p",
@@ -10727,7 +10679,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 888 */
+  { /* 884 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_p",
@@ -10739,7 +10691,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 889 */
+  { /* 885 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_s",
@@ -10751,7 +10703,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 890 */
+  { /* 886 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_sc",
@@ -10763,7 +10715,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 891 */
+  { /* 887 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_i",
@@ -10775,7 +10727,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 892 */
+  { /* 888 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_ic",
@@ -10787,7 +10739,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 893 */
+  { /* 889 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_n",
@@ -10799,7 +10751,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 894 */
+  { /* 890 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_nc",
@@ -10811,7 +10763,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 895 */
+  { /* 891 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_pc",
@@ -10823,7 +10775,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 896 */
+  { /* 892 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_p",
@@ -10835,7 +10787,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 897 */
+  { /* 893 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_i",
@@ -10847,7 +10799,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 898 */
+  { /* 894 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ic",
@@ -10859,7 +10811,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 899 */
+  { /* 895 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_n",
@@ -10871,7 +10823,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 900 */
+  { /* 896 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_nc",
@@ -10883,7 +10835,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 901 */
+  { /* 897 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_s",
@@ -10895,7 +10847,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 902 */
+  { /* 898 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_sc",
@@ -10907,7 +10859,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 903 */
+  { /* 899 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_p",
@@ -10919,7 +10871,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 904 */
+  { /* 900 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_p",
@@ -10931,7 +10883,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 905 */
+  { /* 901 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_i",
@@ -10943,7 +10895,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 906 */
+  { /* 902 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_ic",
@@ -10955,7 +10907,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 907 */
+  { /* 903 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_n",
@@ -10967,7 +10919,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 908 */
+  { /* 904 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_nc",
@@ -10979,7 +10931,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 909 */
+  { /* 905 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_s",
@@ -10991,7 +10943,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 910 */
+  { /* 906 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_p_sc",
@@ -11003,7 +10955,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 911 */
+  { /* 907 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_s_s",
@@ -11015,7 +10967,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 912 */
+  { /* 908 */
     /* type PARROT_INLINE_OP, */
     "assign",
     "assign_s_sc",
@@ -11027,7 +10979,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 913 */
+  { /* 909 */
     /* type PARROT_INLINE_OP, */
     "setref",
     "setref_p_p",
@@ -11039,7 +10991,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 914 */
+  { /* 910 */
     /* type PARROT_INLINE_OP, */
     "deref",
     "deref_p_p",
@@ -11051,7 +11003,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 915 */
+  { /* 911 */
     /* type PARROT_INLINE_OP, */
     "setp_ind",
     "setp_ind_i_p",
@@ -11063,7 +11015,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 916 */
+  { /* 912 */
     /* type PARROT_INLINE_OP, */
     "setp_ind",
     "setp_ind_ic_p",
@@ -11075,7 +11027,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 917 */
+  { /* 913 */
     /* type PARROT_INLINE_OP, */
     "setn_ind",
     "setn_ind_i_n",
@@ -11087,7 +11039,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 918 */
+  { /* 914 */
     /* type PARROT_INLINE_OP, */
     "setn_ind",
     "setn_ind_ic_n",
@@ -11099,7 +11051,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 919 */
+  { /* 915 */
     /* type PARROT_INLINE_OP, */
     "setn_ind",
     "setn_ind_i_nc",
@@ -11111,7 +11063,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 920 */
+  { /* 916 */
     /* type PARROT_INLINE_OP, */
     "setn_ind",
     "setn_ind_ic_nc",
@@ -11123,7 +11075,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 921 */
+  { /* 917 */
     /* type PARROT_INLINE_OP, */
     "sets_ind",
     "sets_ind_i_s",
@@ -11135,7 +11087,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 922 */
+  { /* 918 */
     /* type PARROT_INLINE_OP, */
     "sets_ind",
     "sets_ind_ic_s",
@@ -11147,7 +11099,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 923 */
+  { /* 919 */
     /* type PARROT_INLINE_OP, */
     "sets_ind",
     "sets_ind_i_sc",
@@ -11159,7 +11111,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 924 */
+  { /* 920 */
     /* type PARROT_INLINE_OP, */
     "sets_ind",
     "sets_ind_ic_sc",
@@ -11171,7 +11123,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 925 */
+  { /* 921 */
     /* type PARROT_INLINE_OP, */
     "seti_ind",
     "seti_ind_i_i",
@@ -11183,7 +11135,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 926 */
+  { /* 922 */
     /* type PARROT_INLINE_OP, */
     "seti_ind",
     "seti_ind_ic_i",
@@ -11195,7 +11147,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 927 */
+  { /* 923 */
     /* type PARROT_INLINE_OP, */
     "seti_ind",
     "seti_ind_i_ic",
@@ -11207,7 +11159,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 928 */
+  { /* 924 */
     /* type PARROT_INLINE_OP, */
     "seti_ind",
     "seti_ind_ic_ic",
@@ -11219,7 +11171,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 929 */
+  { /* 925 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_i",
@@ -11231,7 +11183,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 930 */
+  { /* 926 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_i",
@@ -11243,7 +11195,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 931 */
+  { /* 927 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_ic",
@@ -11255,7 +11207,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 932 */
+  { /* 928 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_ic",
@@ -11267,7 +11219,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 933 */
+  { /* 929 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_n",
@@ -11279,7 +11231,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 934 */
+  { /* 930 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_n",
@@ -11291,7 +11243,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 935 */
+  { /* 931 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_nc",
@@ -11303,7 +11255,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 936 */
+  { /* 932 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_nc",
@@ -11315,7 +11267,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 937 */
+  { /* 933 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_s",
@@ -11327,7 +11279,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 938 */
+  { /* 934 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_s",
@@ -11339,7 +11291,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 939 */
+  { /* 935 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_sc",
@@ -11351,7 +11303,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 940 */
+  { /* 936 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_sc",
@@ -11363,7 +11315,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 941 */
+  { /* 937 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_ki_p",
@@ -11375,7 +11327,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 942 */
+  { /* 938 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kic_p",
@@ -11387,7 +11339,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 943 */
+  { /* 939 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_p_ki",
@@ -11399,7 +11351,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 944 */
+  { /* 940 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_p_kic",
@@ -11411,7 +11363,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 945 */
+  { /* 941 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_p_ki",
@@ -11423,7 +11375,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 946 */
+  { /* 942 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_p_kic",
@@ -11435,7 +11387,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 947 */
+  { /* 943 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_p_ki",
@@ -11447,7 +11399,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 948 */
+  { /* 944 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_p_kic",
@@ -11459,7 +11411,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 949 */
+  { /* 945 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_p_ki",
@@ -11471,7 +11423,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 950 */
+  { /* 946 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_p_kic",
@@ -11483,7 +11435,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 951 */
+  { /* 947 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_i",
@@ -11495,7 +11447,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 952 */
+  { /* 948 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_i",
@@ -11507,7 +11459,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 953 */
+  { /* 949 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_ic",
@@ -11519,7 +11471,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 954 */
+  { /* 950 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_ic",
@@ -11531,7 +11483,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 955 */
+  { /* 951 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_n",
@@ -11543,7 +11495,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 956 */
+  { /* 952 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_n",
@@ -11555,7 +11507,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 957 */
+  { /* 953 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_nc",
@@ -11567,7 +11519,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 958 */
+  { /* 954 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_nc",
@@ -11579,7 +11531,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 959 */
+  { /* 955 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_s",
@@ -11591,7 +11543,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 960 */
+  { /* 956 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_s",
@@ -11603,7 +11555,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 961 */
+  { /* 957 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_sc",
@@ -11615,7 +11567,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 962 */
+  { /* 958 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_sc",
@@ -11627,7 +11579,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 963 */
+  { /* 959 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_k_p",
@@ -11639,7 +11591,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 964 */
+  { /* 960 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_kc_p",
@@ -11651,7 +11603,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 965 */
+  { /* 961 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_p_k",
@@ -11663,7 +11615,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 966 */
+  { /* 962 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_i_p_kc",
@@ -11675,7 +11627,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 967 */
+  { /* 963 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_p_k",
@@ -11687,7 +11639,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 968 */
+  { /* 964 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_n_p_kc",
@@ -11699,7 +11651,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 969 */
+  { /* 965 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_p_k",
@@ -11711,7 +11663,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 970 */
+  { /* 966 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_s_p_kc",
@@ -11723,7 +11675,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 971 */
+  { /* 967 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_p_k",
@@ -11735,7 +11687,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 972 */
+  { /* 968 */
     /* type PARROT_INLINE_OP, */
     "set",
     "set_p_p_kc",
@@ -11747,7 +11699,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 973 */
+  { /* 969 */
     /* type PARROT_INLINE_OP, */
     "clone",
     "clone_p_p",
@@ -11759,7 +11711,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 974 */
+  { /* 970 */
     /* type PARROT_INLINE_OP, */
     "clone",
     "clone_p_p_p",
@@ -11771,7 +11723,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 975 */
+  { /* 971 */
     /* type PARROT_INLINE_OP, */
     "clone",
     "clone_p_p_pc",
@@ -11783,7 +11735,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 976 */
+  { /* 972 */
     /* type PARROT_INLINE_OP, */
     "copy",
     "copy_p_p",
@@ -11795,7 +11747,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 977 */
+  { /* 973 */
     /* type PARROT_INLINE_OP, */
     "null",
     "null_s",
@@ -11807,7 +11759,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 978 */
+  { /* 974 */
     /* type PARROT_INLINE_OP, */
     "null",
     "null_i",
@@ -11819,7 +11771,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 979 */
+  { /* 975 */
     /* type PARROT_INLINE_OP, */
     "null",
     "null_p",
@@ -11831,7 +11783,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 980 */
+  { /* 976 */
     /* type PARROT_INLINE_OP, */
     "null",
     "null_n",
@@ -11843,7 +11795,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 981 */
+  { /* 977 */
     /* type PARROT_INLINE_OP, */
     "cleari",
     "cleari",
@@ -11855,7 +11807,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 982 */
+  { /* 978 */
     /* type PARROT_INLINE_OP, */
     "clearn",
     "clearn",
@@ -11867,7 +11819,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 983 */
+  { /* 979 */
     /* type PARROT_INLINE_OP, */
     "clears",
     "clears",
@@ -11879,7 +11831,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 984 */
+  { /* 980 */
     /* type PARROT_INLINE_OP, */
     "clearp",
     "clearp",
@@ -11891,7 +11843,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 985 */
+  { /* 981 */
     /* type PARROT_INLINE_OP, */
     "ord",
     "ord_i_s",
@@ -11903,7 +11855,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 986 */
+  { /* 982 */
     /* type PARROT_INLINE_OP, */
     "ord",
     "ord_i_sc",
@@ -11915,7 +11867,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 987 */
+  { /* 983 */
     /* type PARROT_INLINE_OP, */
     "ord",
     "ord_i_s_i",
@@ -11927,7 +11879,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 988 */
+  { /* 984 */
     /* type PARROT_INLINE_OP, */
     "ord",
     "ord_i_sc_i",
@@ -11939,7 +11891,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 989 */
+  { /* 985 */
     /* type PARROT_INLINE_OP, */
     "ord",
     "ord_i_s_ic",
@@ -11951,7 +11903,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 990 */
+  { /* 986 */
     /* type PARROT_INLINE_OP, */
     "ord",
     "ord_i_sc_ic",
@@ -11963,7 +11915,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 991 */
+  { /* 987 */
     /* type PARROT_INLINE_OP, */
     "chr",
     "chr_s_i",
@@ -11975,7 +11927,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 992 */
+  { /* 988 */
     /* type PARROT_INLINE_OP, */
     "chr",
     "chr_s_ic",
@@ -11987,31 +11939,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 993 */
-    /* type PARROT_INLINE_OP, */
-    "chopn",
-    "chopn_s_i",
-    "Parrot_chopn_s_i",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_I },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 994 */
-    /* type PARROT_INLINE_OP, */
-    "chopn",
-    "chopn_s_ic",
-    "Parrot_chopn_s_ic",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_IC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 995 */
+  { /* 989 */
     /* type PARROT_INLINE_OP, */
     "chopn",
     "chopn_s_s_i",
@@ -12023,7 +11951,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 996 */
+  { /* 990 */
     /* type PARROT_INLINE_OP, */
     "chopn",
     "chopn_s_sc_i",
@@ -12035,7 +11963,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 997 */
+  { /* 991 */
     /* type PARROT_INLINE_OP, */
     "chopn",
     "chopn_s_s_ic",
@@ -12047,7 +11975,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 998 */
+  { /* 992 */
     /* type PARROT_INLINE_OP, */
     "chopn",
     "chopn_s_sc_ic",
@@ -12059,7 +11987,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 999 */
+  { /* 993 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_s_s",
@@ -12071,7 +11999,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1000 */
+  { /* 994 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_s_sc",
@@ -12083,7 +12011,7 @@
     { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1001 */
+  { /* 995 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_p_p",
@@ -12095,7 +12023,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1002 */
+  { /* 996 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_p_s",
@@ -12107,7 +12035,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1003 */
+  { /* 997 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_p_sc",
@@ -12119,7 +12047,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1004 */
+  { /* 998 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_s_s_s",
@@ -12131,7 +12059,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1005 */
+  { /* 999 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_s_sc_s",
@@ -12143,7 +12071,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1006 */
+  { /* 1000 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_s_s_sc",
@@ -12155,7 +12083,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1007 */
+  { /* 1001 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_p_p_s",
@@ -12167,7 +12095,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1008 */
+  { /* 1002 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_p_p_sc",
@@ -12179,7 +12107,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1009 */
+  { /* 1003 */
     /* type PARROT_INLINE_OP, */
     "concat",
     "concat_p_p_p",
@@ -12191,7 +12119,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1010 */
+  { /* 1004 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_s_s_i",
@@ -12203,7 +12131,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1011 */
+  { /* 1005 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_s_sc_i",
@@ -12215,7 +12143,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1012 */
+  { /* 1006 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_s_s_ic",
@@ -12227,7 +12155,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1013 */
+  { /* 1007 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_s_sc_ic",
@@ -12239,7 +12167,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1014 */
+  { /* 1008 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_p_p_i",
@@ -12251,7 +12179,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1015 */
+  { /* 1009 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_p_p_ic",
@@ -12263,7 +12191,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1016 */
+  { /* 1010 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_p_p_p",
@@ -12275,7 +12203,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1017 */
+  { /* 1011 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_p_i",
@@ -12287,7 +12215,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1018 */
+  { /* 1012 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_p_ic",
@@ -12299,7 +12227,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1019 */
+  { /* 1013 */
     /* type PARROT_INLINE_OP, */
     "repeat",
     "repeat_p_p",
@@ -12311,7 +12239,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1020 */
+  { /* 1014 */
     /* type PARROT_INLINE_OP, */
     "length",
     "length_i_s",
@@ -12323,7 +12251,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1021 */
+  { /* 1015 */
     /* type PARROT_INLINE_OP, */
     "length",
     "length_i_sc",
@@ -12335,7 +12263,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1022 */
+  { /* 1016 */
     /* type PARROT_INLINE_OP, */
     "bytelength",
     "bytelength_i_s",
@@ -12347,7 +12275,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1023 */
+  { /* 1017 */
     /* type PARROT_INLINE_OP, */
     "bytelength",
     "bytelength_i_sc",
@@ -12359,7 +12287,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1024 */
+  { /* 1018 */
     /* type PARROT_FUNCTION_OP, */
     "pin",
     "pin_s",
@@ -12371,7 +12299,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 1025 */
+  { /* 1019 */
     /* type PARROT_FUNCTION_OP, */
     "unpin",
     "unpin_s",
@@ -12383,7 +12311,7 @@
     { PARROT_ARGDIR_INOUT },
     { 0 }
   },
-  { /* 1026 */
+  { /* 1020 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_s_i",
@@ -12395,7 +12323,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1027 */
+  { /* 1021 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_sc_i",
@@ -12407,7 +12335,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1028 */
+  { /* 1022 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_s_ic",
@@ -12419,7 +12347,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1029 */
+  { /* 1023 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_sc_ic",
@@ -12431,7 +12359,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1030 */
+  { /* 1024 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_s_i_i",
@@ -12443,7 +12371,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1031 */
+  { /* 1025 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_sc_i_i",
@@ -12455,7 +12383,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1032 */
+  { /* 1026 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_s_ic_i",
@@ -12467,7 +12395,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1033 */
+  { /* 1027 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_sc_ic_i",
@@ -12479,7 +12407,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1034 */
+  { /* 1028 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_s_i_ic",
@@ -12491,7 +12419,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1035 */
+  { /* 1029 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_sc_i_ic",
@@ -12503,7 +12431,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1036 */
+  { /* 1030 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_s_ic_ic",
@@ -12515,7 +12443,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1037 */
+  { /* 1031 */
     /* type PARROT_INLINE_OP, */
     "substr",
     "substr_s_sc_ic_ic",
@@ -12527,247 +12455,247 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1038 */
+  { /* 1032 */
     /* type PARROT_INLINE_OP, */
     "substr",
-    "substr_s_s_i_i_s",
-    "Parrot_substr_s_s_i_i_s",
+    "substr_s_p_i_i",
+    "Parrot_substr_s_p_i_i",
     /* "",  body */
     0,
-    6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
   },
-  { /* 1039 */
+  { /* 1033 */
     /* type PARROT_INLINE_OP, */
     "substr",
-    "substr_s_s_ic_i_s",
-    "Parrot_substr_s_s_ic_i_s",
+    "substr_s_p_ic_i",
+    "Parrot_substr_s_p_ic_i",
     /* "",  body */
     0,
-    6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_I },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
   },
-  { /* 1040 */
+  { /* 1034 */
     /* type PARROT_INLINE_OP, */
     "substr",
-    "substr_s_s_i_ic_s",
-    "Parrot_substr_s_s_i_ic_s",
+    "substr_s_p_i_ic",
+    "Parrot_substr_s_p_i_ic",
     /* "",  body */
     0,
-    6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
   },
-  { /* 1041 */
+  { /* 1035 */
     /* type PARROT_INLINE_OP, */
     "substr",
-    "substr_s_s_ic_ic_s",
-    "Parrot_substr_s_s_ic_ic_s",
+    "substr_s_p_ic_ic",
+    "Parrot_substr_s_p_ic_ic",
     /* "",  body */
     0,
-    6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0, 0 }
+    5,
+    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0 }
   },
-  { /* 1042 */
+  { /* 1036 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_s_i_i_sc",
-    "Parrot_substr_s_s_i_i_sc",
+    "replace",
+    "replace_s_s_i_i_s",
+    "Parrot_replace_s_s_i_i_s",
     /* "",  body */
     0,
     6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1043 */
+  { /* 1037 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_s_ic_i_sc",
-    "Parrot_substr_s_s_ic_i_sc",
+    "replace",
+    "replace_s_sc_i_i_s",
+    "Parrot_replace_s_sc_i_i_s",
     /* "",  body */
     0,
     6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1044 */
+  { /* 1038 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_s_i_ic_sc",
-    "Parrot_substr_s_s_i_ic_sc",
+    "replace",
+    "replace_s_s_ic_i_s",
+    "Parrot_replace_s_s_ic_i_s",
     /* "",  body */
     0,
     6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1045 */
+  { /* 1039 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_s_ic_ic_sc",
-    "Parrot_substr_s_s_ic_ic_sc",
+    "replace",
+    "replace_s_sc_ic_i_s",
+    "Parrot_replace_s_sc_ic_i_s",
     /* "",  body */
     0,
     6,
-    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1046 */
+  { /* 1040 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_i_i_s",
-    "Parrot_substr_s_i_i_s",
+    "replace",
+    "replace_s_s_i_ic_s",
+    "Parrot_replace_s_s_i_ic_s",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1047 */
+  { /* 1041 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_ic_i_s",
-    "Parrot_substr_s_ic_i_s",
+    "replace",
+    "replace_s_sc_i_ic_s",
+    "Parrot_replace_s_sc_i_ic_s",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1048 */
+  { /* 1042 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_i_ic_s",
-    "Parrot_substr_s_i_ic_s",
+    "replace",
+    "replace_s_s_ic_ic_s",
+    "Parrot_replace_s_s_ic_ic_s",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1049 */
+  { /* 1043 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_ic_ic_s",
-    "Parrot_substr_s_ic_ic_s",
+    "replace",
+    "replace_s_sc_ic_ic_s",
+    "Parrot_replace_s_sc_ic_ic_s",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_S },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1050 */
+  { /* 1044 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_i_i_sc",
-    "Parrot_substr_s_i_i_sc",
+    "replace",
+    "replace_s_s_i_i_sc",
+    "Parrot_replace_s_s_i_i_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1051 */
+  { /* 1045 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_ic_i_sc",
-    "Parrot_substr_s_ic_i_sc",
+    "replace",
+    "replace_s_sc_i_i_sc",
+    "Parrot_replace_s_sc_i_i_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1052 */
+  { /* 1046 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_i_ic_sc",
-    "Parrot_substr_s_i_ic_sc",
+    "replace",
+    "replace_s_s_ic_i_sc",
+    "Parrot_replace_s_s_ic_i_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1053 */
+  { /* 1047 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_ic_ic_sc",
-    "Parrot_substr_s_ic_ic_sc",
+    "replace",
+    "replace_s_sc_ic_i_sc",
+    "Parrot_replace_s_sc_ic_i_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_I, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1054 */
+  { /* 1048 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_p_i_i",
-    "Parrot_substr_s_p_i_i",
+    "replace",
+    "replace_s_s_i_ic_sc",
+    "Parrot_replace_s_s_i_ic_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_I },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1055 */
+  { /* 1049 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_p_ic_i",
-    "Parrot_substr_s_p_ic_i",
+    "replace",
+    "replace_s_sc_i_ic_sc",
+    "Parrot_replace_s_sc_i_ic_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_I },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_I, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1056 */
+  { /* 1050 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_p_i_ic",
-    "Parrot_substr_s_p_i_ic",
+    "replace",
+    "replace_s_s_ic_ic_sc",
+    "Parrot_replace_s_s_ic_ic_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_I, PARROT_ARG_IC },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_S, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1057 */
+  { /* 1051 */
     /* type PARROT_INLINE_OP, */
-    "substr",
-    "substr_s_p_ic_ic",
-    "Parrot_substr_s_p_ic_ic",
+    "replace",
+    "replace_s_sc_ic_ic_sc",
+    "Parrot_replace_s_sc_ic_ic_sc",
     /* "",  body */
     0,
-    5,
-    { PARROT_ARG_S, PARROT_ARG_P, PARROT_ARG_IC, PARROT_ARG_IC },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 0, 0, 0 }
+    6,
+    { PARROT_ARG_S, PARROT_ARG_SC, PARROT_ARG_IC, PARROT_ARG_IC, PARROT_ARG_SC },
+    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
+    { 0, 0, 0, 0, 0 }
   },
-  { /* 1058 */
+  { /* 1052 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_s_s",
@@ -12779,7 +12707,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1059 */
+  { /* 1053 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_sc_s",
@@ -12791,7 +12719,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1060 */
+  { /* 1054 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_s_sc",
@@ -12803,7 +12731,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1061 */
+  { /* 1055 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_sc_sc",
@@ -12815,7 +12743,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1062 */
+  { /* 1056 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_s_s_i",
@@ -12827,7 +12755,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1063 */
+  { /* 1057 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_sc_s_i",
@@ -12839,7 +12767,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1064 */
+  { /* 1058 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_s_sc_i",
@@ -12851,7 +12779,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1065 */
+  { /* 1059 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_sc_sc_i",
@@ -12863,7 +12791,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1066 */
+  { /* 1060 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_s_s_ic",
@@ -12875,7 +12803,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1067 */
+  { /* 1061 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_sc_s_ic",
@@ -12887,7 +12815,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1068 */
+  { /* 1062 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_s_sc_ic",
@@ -12899,7 +12827,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1069 */
+  { /* 1063 */
     /* type PARROT_INLINE_OP, */
     "index",
     "index_i_sc_sc_ic",
@@ -12911,7 +12839,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1070 */
+  { /* 1064 */
     /* type PARROT_INLINE_OP, */
     "sprintf",
     "sprintf_s_s_p",
@@ -12923,7 +12851,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1071 */
+  { /* 1065 */
     /* type PARROT_INLINE_OP, */
     "sprintf",
     "sprintf_s_sc_p",
@@ -12935,7 +12863,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1072 */
+  { /* 1066 */
     /* type PARROT_INLINE_OP, */
     "sprintf",
     "sprintf_p_p_p",
@@ -12947,7 +12875,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1073 */
+  { /* 1067 */
     /* type PARROT_INLINE_OP, */
     "new",
     "new_s",
@@ -12959,7 +12887,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1074 */
+  { /* 1068 */
     /* type PARROT_INLINE_OP, */
     "new",
     "new_s_i",
@@ -12971,7 +12899,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1075 */
+  { /* 1069 */
     /* type PARROT_INLINE_OP, */
     "new",
     "new_s_ic",
@@ -12983,7 +12911,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1076 */
+  { /* 1070 */
     /* type PARROT_INLINE_OP, */
     "stringinfo",
     "stringinfo_i_s_i",
@@ -12995,7 +12923,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1077 */
+  { /* 1071 */
     /* type PARROT_INLINE_OP, */
     "stringinfo",
     "stringinfo_i_sc_i",
@@ -13007,7 +12935,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1078 */
+  { /* 1072 */
     /* type PARROT_INLINE_OP, */
     "stringinfo",
     "stringinfo_i_s_ic",
@@ -13019,7 +12947,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1079 */
+  { /* 1073 */
     /* type PARROT_INLINE_OP, */
     "stringinfo",
     "stringinfo_i_sc_ic",
@@ -13031,7 +12959,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1080 */
+  { /* 1074 */
     /* type PARROT_INLINE_OP, */
     "upcase",
     "upcase_s_s",
@@ -13043,7 +12971,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1081 */
+  { /* 1075 */
     /* type PARROT_INLINE_OP, */
     "upcase",
     "upcase_s_sc",
@@ -13055,19 +12983,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1082 */
-    /* type PARROT_INLINE_OP, */
-    "upcase",
-    "upcase_s",
-    "Parrot_upcase_s",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT },
-    { 0 }
-  },
-  { /* 1083 */
+  { /* 1076 */
     /* type PARROT_INLINE_OP, */
     "downcase",
     "downcase_s_s",
@@ -13079,7 +12995,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1084 */
+  { /* 1077 */
     /* type PARROT_INLINE_OP, */
     "downcase",
     "downcase_s_sc",
@@ -13091,19 +13007,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1085 */
-    /* type PARROT_INLINE_OP, */
-    "downcase",
-    "downcase_s",
-    "Parrot_downcase_s",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT },
-    { 0 }
-  },
-  { /* 1086 */
+  { /* 1078 */
     /* type PARROT_INLINE_OP, */
     "titlecase",
     "titlecase_s_s",
@@ -13115,7 +13019,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1087 */
+  { /* 1079 */
     /* type PARROT_INLINE_OP, */
     "titlecase",
     "titlecase_s_sc",
@@ -13127,19 +13031,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1088 */
-    /* type PARROT_INLINE_OP, */
-    "titlecase",
-    "titlecase_s",
-    "Parrot_titlecase_s",
-    /* "",  body */
-    0,
-    2,
-    { PARROT_ARG_S },
-    { PARROT_ARGDIR_INOUT },
-    { 0 }
-  },
-  { /* 1089 */
+  { /* 1080 */
     /* type PARROT_FUNCTION_OP, */
     "join",
     "join_s_s_p",
@@ -13151,7 +13043,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1090 */
+  { /* 1081 */
     /* type PARROT_FUNCTION_OP, */
     "join",
     "join_s_sc_p",
@@ -13163,7 +13055,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1091 */
+  { /* 1082 */
     /* type PARROT_FUNCTION_OP, */
     "split",
     "split_p_s_s",
@@ -13175,7 +13067,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1092 */
+  { /* 1083 */
     /* type PARROT_FUNCTION_OP, */
     "split",
     "split_p_sc_s",
@@ -13187,7 +13079,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1093 */
+  { /* 1084 */
     /* type PARROT_FUNCTION_OP, */
     "split",
     "split_p_s_sc",
@@ -13199,7 +13091,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1094 */
+  { /* 1085 */
     /* type PARROT_FUNCTION_OP, */
     "split",
     "split_p_sc_sc",
@@ -13211,7 +13103,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1095 */
+  { /* 1086 */
     /* type PARROT_FUNCTION_OP, */
     "charset",
     "charset_i_s",
@@ -13223,7 +13115,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1096 */
+  { /* 1087 */
     /* type PARROT_FUNCTION_OP, */
     "charset",
     "charset_i_sc",
@@ -13235,7 +13127,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1097 */
+  { /* 1088 */
     /* type PARROT_FUNCTION_OP, */
     "charsetname",
     "charsetname_s_i",
@@ -13247,7 +13139,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1098 */
+  { /* 1089 */
     /* type PARROT_FUNCTION_OP, */
     "charsetname",
     "charsetname_s_ic",
@@ -13259,7 +13151,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1099 */
+  { /* 1090 */
     /* type PARROT_FUNCTION_OP, */
     "find_charset",
     "find_charset_i_s",
@@ -13271,7 +13163,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1100 */
+  { /* 1091 */
     /* type PARROT_FUNCTION_OP, */
     "find_charset",
     "find_charset_i_sc",
@@ -13283,31 +13175,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1101 */
-    /* type PARROT_FUNCTION_OP, */
-    "trans_charset",
-    "trans_charset_s_i",
-    "Parrot_trans_charset_s_i",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_I },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 1102 */
-    /* type PARROT_FUNCTION_OP, */
-    "trans_charset",
-    "trans_charset_s_ic",
-    "Parrot_trans_charset_s_ic",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_IC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 1103 */
+  { /* 1092 */
     /* type PARROT_FUNCTION_OP, */
     "trans_charset",
     "trans_charset_s_s_i",
@@ -13319,7 +13187,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1104 */
+  { /* 1093 */
     /* type PARROT_FUNCTION_OP, */
     "trans_charset",
     "trans_charset_s_sc_i",
@@ -13331,7 +13199,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1105 */
+  { /* 1094 */
     /* type PARROT_FUNCTION_OP, */
     "trans_charset",
     "trans_charset_s_s_ic",
@@ -13343,7 +13211,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1106 */
+  { /* 1095 */
     /* type PARROT_FUNCTION_OP, */
     "trans_charset",
     "trans_charset_s_sc_ic",
@@ -13355,7 +13223,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1107 */
+  { /* 1096 */
     /* type PARROT_FUNCTION_OP, */
     "encoding",
     "encoding_i_s",
@@ -13367,7 +13235,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1108 */
+  { /* 1097 */
     /* type PARROT_FUNCTION_OP, */
     "encoding",
     "encoding_i_sc",
@@ -13379,7 +13247,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1109 */
+  { /* 1098 */
     /* type PARROT_FUNCTION_OP, */
     "encodingname",
     "encodingname_s_i",
@@ -13391,7 +13259,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1110 */
+  { /* 1099 */
     /* type PARROT_FUNCTION_OP, */
     "encodingname",
     "encodingname_s_ic",
@@ -13403,7 +13271,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1111 */
+  { /* 1100 */
     /* type PARROT_FUNCTION_OP, */
     "find_encoding",
     "find_encoding_i_s",
@@ -13415,7 +13283,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1112 */
+  { /* 1101 */
     /* type PARROT_FUNCTION_OP, */
     "find_encoding",
     "find_encoding_i_sc",
@@ -13427,31 +13295,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1113 */
-    /* type PARROT_FUNCTION_OP, */
-    "trans_encoding",
-    "trans_encoding_s_i",
-    "Parrot_trans_encoding_s_i",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_I },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 1114 */
-    /* type PARROT_FUNCTION_OP, */
-    "trans_encoding",
-    "trans_encoding_s_ic",
-    "Parrot_trans_encoding_s_ic",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_S, PARROT_ARG_IC },
-    { PARROT_ARGDIR_INOUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 1115 */
+  { /* 1102 */
     /* type PARROT_FUNCTION_OP, */
     "trans_encoding",
     "trans_encoding_s_s_i",
@@ -13463,7 +13307,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1116 */
+  { /* 1103 */
     /* type PARROT_FUNCTION_OP, */
     "trans_encoding",
     "trans_encoding_s_sc_i",
@@ -13475,7 +13319,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1117 */
+  { /* 1104 */
     /* type PARROT_FUNCTION_OP, */
     "trans_encoding",
     "trans_encoding_s_s_ic",
@@ -13487,7 +13331,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1118 */
+  { /* 1105 */
     /* type PARROT_FUNCTION_OP, */
     "trans_encoding",
     "trans_encoding_s_sc_ic",
@@ -13499,7 +13343,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1119 */
+  { /* 1106 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_i_s_i",
@@ -13511,7 +13355,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1120 */
+  { /* 1107 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_ic_s_i",
@@ -13523,7 +13367,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1121 */
+  { /* 1108 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_i_sc_i",
@@ -13535,7 +13379,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1122 */
+  { /* 1109 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_ic_sc_i",
@@ -13547,7 +13391,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1123 */
+  { /* 1110 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_i_s_ic",
@@ -13559,7 +13403,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1124 */
+  { /* 1111 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_ic_s_ic",
@@ -13571,7 +13415,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1125 */
+  { /* 1112 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_i_sc_ic",
@@ -13583,7 +13427,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1126 */
+  { /* 1113 */
     /* type PARROT_INLINE_OP, */
     "is_cclass",
     "is_cclass_i_ic_sc_ic",
@@ -13595,7 +13439,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1127 */
+  { /* 1114 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_s_i_i",
@@ -13607,7 +13451,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1128 */
+  { /* 1115 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_s_i_i",
@@ -13619,7 +13463,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1129 */
+  { /* 1116 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_sc_i_i",
@@ -13631,7 +13475,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1130 */
+  { /* 1117 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_sc_i_i",
@@ -13643,7 +13487,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1131 */
+  { /* 1118 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_s_ic_i",
@@ -13655,7 +13499,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1132 */
+  { /* 1119 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_s_ic_i",
@@ -13667,7 +13511,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1133 */
+  { /* 1120 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_sc_ic_i",
@@ -13679,7 +13523,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1134 */
+  { /* 1121 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_sc_ic_i",
@@ -13691,7 +13535,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1135 */
+  { /* 1122 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_s_i_ic",
@@ -13703,7 +13547,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1136 */
+  { /* 1123 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_s_i_ic",
@@ -13715,7 +13559,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1137 */
+  { /* 1124 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_sc_i_ic",
@@ -13727,7 +13571,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1138 */
+  { /* 1125 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_sc_i_ic",
@@ -13739,7 +13583,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1139 */
+  { /* 1126 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_s_ic_ic",
@@ -13751,7 +13595,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1140 */
+  { /* 1127 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_s_ic_ic",
@@ -13763,7 +13607,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1141 */
+  { /* 1128 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_i_sc_ic_ic",
@@ -13775,7 +13619,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1142 */
+  { /* 1129 */
     /* type PARROT_INLINE_OP, */
     "find_cclass",
     "find_cclass_i_ic_sc_ic_ic",
@@ -13787,7 +13631,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1143 */
+  { /* 1130 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_s_i_i",
@@ -13799,7 +13643,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1144 */
+  { /* 1131 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_s_i_i",
@@ -13811,7 +13655,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1145 */
+  { /* 1132 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_sc_i_i",
@@ -13823,7 +13667,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1146 */
+  { /* 1133 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_sc_i_i",
@@ -13835,7 +13679,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1147 */
+  { /* 1134 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_s_ic_i",
@@ -13847,7 +13691,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1148 */
+  { /* 1135 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_s_ic_i",
@@ -13859,7 +13703,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1149 */
+  { /* 1136 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_sc_ic_i",
@@ -13871,7 +13715,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1150 */
+  { /* 1137 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_sc_ic_i",
@@ -13883,7 +13727,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1151 */
+  { /* 1138 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_s_i_ic",
@@ -13895,7 +13739,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1152 */
+  { /* 1139 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_s_i_ic",
@@ -13907,7 +13751,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1153 */
+  { /* 1140 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_sc_i_ic",
@@ -13919,7 +13763,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1154 */
+  { /* 1141 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_sc_i_ic",
@@ -13931,7 +13775,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1155 */
+  { /* 1142 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_s_ic_ic",
@@ -13943,7 +13787,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1156 */
+  { /* 1143 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_s_ic_ic",
@@ -13955,7 +13799,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1157 */
+  { /* 1144 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_i_sc_ic_ic",
@@ -13967,7 +13811,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1158 */
+  { /* 1145 */
     /* type PARROT_INLINE_OP, */
     "find_not_cclass",
     "find_not_cclass_i_ic_sc_ic_ic",
@@ -13979,7 +13823,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0, 0 }
   },
-  { /* 1159 */
+  { /* 1146 */
     /* type PARROT_FUNCTION_OP, */
     "escape",
     "escape_s_s",
@@ -13991,7 +13835,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1160 */
+  { /* 1147 */
     /* type PARROT_FUNCTION_OP, */
     "compose",
     "compose_s_s",
@@ -14003,7 +13847,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1161 */
+  { /* 1148 */
     /* type PARROT_FUNCTION_OP, */
     "compose",
     "compose_s_sc",
@@ -14015,7 +13859,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1162 */
+  { /* 1149 */
     /* type PARROT_INLINE_OP, */
     "spawnw",
     "spawnw_i_s",
@@ -14027,7 +13871,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1163 */
+  { /* 1150 */
     /* type PARROT_INLINE_OP, */
     "spawnw",
     "spawnw_i_sc",
@@ -14039,7 +13883,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1164 */
+  { /* 1151 */
     /* type PARROT_INLINE_OP, */
     "spawnw",
     "spawnw_i_p",
@@ -14051,7 +13895,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1165 */
+  { /* 1152 */
     /* type PARROT_INLINE_OP, */
     "err",
     "err_i",
@@ -14063,7 +13907,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1166 */
+  { /* 1153 */
     /* type PARROT_FUNCTION_OP, */
     "err",
     "err_s",
@@ -14075,7 +13919,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1167 */
+  { /* 1154 */
     /* type PARROT_FUNCTION_OP, */
     "err",
     "err_s_i",
@@ -14087,7 +13931,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1168 */
+  { /* 1155 */
     /* type PARROT_FUNCTION_OP, */
     "err",
     "err_s_ic",
@@ -14099,7 +13943,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1169 */
+  { /* 1156 */
     /* type PARROT_INLINE_OP, */
     "time",
     "time_i",
@@ -14111,7 +13955,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1170 */
+  { /* 1157 */
     /* type PARROT_INLINE_OP, */
     "time",
     "time_n",
@@ -14123,7 +13967,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1171 */
+  { /* 1158 */
     /* type PARROT_FUNCTION_OP, */
     "gmtime",
     "gmtime_s_i",
@@ -14135,7 +13979,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1172 */
+  { /* 1159 */
     /* type PARROT_FUNCTION_OP, */
     "gmtime",
     "gmtime_s_ic",
@@ -14147,7 +13991,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1173 */
+  { /* 1160 */
     /* type PARROT_FUNCTION_OP, */
     "localtime",
     "localtime_s_i",
@@ -14159,7 +14003,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1174 */
+  { /* 1161 */
     /* type PARROT_FUNCTION_OP, */
     "localtime",
     "localtime_s_ic",
@@ -14171,7 +14015,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1175 */
+  { /* 1162 */
     /* type PARROT_FUNCTION_OP, */
     "decodetime",
     "decodetime_p_i",
@@ -14183,7 +14027,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1176 */
+  { /* 1163 */
     /* type PARROT_FUNCTION_OP, */
     "decodetime",
     "decodetime_p_ic",
@@ -14195,7 +14039,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1177 */
+  { /* 1164 */
     /* type PARROT_FUNCTION_OP, */
     "decodelocaltime",
     "decodelocaltime_p_i",
@@ -14207,7 +14051,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1178 */
+  { /* 1165 */
     /* type PARROT_FUNCTION_OP, */
     "decodelocaltime",
     "decodelocaltime_p_ic",
@@ -14219,7 +14063,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1179 */
+  { /* 1166 */
     /* type PARROT_INLINE_OP, */
     "sysinfo",
     "sysinfo_s_i",
@@ -14231,7 +14075,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1180 */
+  { /* 1167 */
     /* type PARROT_INLINE_OP, */
     "sysinfo",
     "sysinfo_s_ic",
@@ -14243,7 +14087,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1181 */
+  { /* 1168 */
     /* type PARROT_INLINE_OP, */
     "sysinfo",
     "sysinfo_i_i",
@@ -14255,7 +14099,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1182 */
+  { /* 1169 */
     /* type PARROT_INLINE_OP, */
     "sysinfo",
     "sysinfo_i_ic",
@@ -14267,7 +14111,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1183 */
+  { /* 1170 */
     /* type PARROT_INLINE_OP, */
     "sleep",
     "sleep_i",
@@ -14279,7 +14123,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 1184 */
+  { /* 1171 */
     /* type PARROT_INLINE_OP, */
     "sleep",
     "sleep_ic",
@@ -14291,7 +14135,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 1185 */
+  { /* 1172 */
     /* type PARROT_INLINE_OP, */
     "sleep",
     "sleep_n",
@@ -14303,7 +14147,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 1186 */
+  { /* 1173 */
     /* type PARROT_INLINE_OP, */
     "sleep",
     "sleep_nc",
@@ -14315,7 +14159,7 @@
     { PARROT_ARGDIR_IN },
     { 0 }
   },
-  { /* 1187 */
+  { /* 1174 */
     /* type PARROT_INLINE_OP, */
     "sizeof",
     "sizeof_i_i",
@@ -14327,7 +14171,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1188 */
+  { /* 1175 */
     /* type PARROT_INLINE_OP, */
     "sizeof",
     "sizeof_i_ic",
@@ -14339,7 +14183,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1189 */
+  { /* 1176 */
     /* type PARROT_FUNCTION_OP, */
     "store_lex",
     "store_lex_s_p",
@@ -14351,7 +14195,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1190 */
+  { /* 1177 */
     /* type PARROT_FUNCTION_OP, */
     "store_lex",
     "store_lex_sc_p",
@@ -14363,7 +14207,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1191 */
+  { /* 1178 */
     /* type PARROT_FUNCTION_OP, */
     "store_dynamic_lex",
     "store_dynamic_lex_s_p",
@@ -14375,7 +14219,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1192 */
+  { /* 1179 */
     /* type PARROT_FUNCTION_OP, */
     "store_dynamic_lex",
     "store_dynamic_lex_sc_p",
@@ -14387,7 +14231,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1193 */
+  { /* 1180 */
     /* type PARROT_FUNCTION_OP, */
     "find_lex",
     "find_lex_p_s",
@@ -14399,7 +14243,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1194 */
+  { /* 1181 */
     /* type PARROT_FUNCTION_OP, */
     "find_lex",
     "find_lex_p_sc",
@@ -14411,7 +14255,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1195 */
+  { /* 1182 */
     /* type PARROT_FUNCTION_OP, */
     "find_dynamic_lex",
     "find_dynamic_lex_p_s",
@@ -14423,7 +14267,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1196 */
+  { /* 1183 */
     /* type PARROT_FUNCTION_OP, */
     "find_dynamic_lex",
     "find_dynamic_lex_p_sc",
@@ -14435,7 +14279,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1197 */
+  { /* 1184 */
     /* type PARROT_FUNCTION_OP, */
     "find_caller_lex",
     "find_caller_lex_p_s",
@@ -14447,7 +14291,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1198 */
+  { /* 1185 */
     /* type PARROT_FUNCTION_OP, */
     "find_caller_lex",
     "find_caller_lex_p_sc",
@@ -14459,7 +14303,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1199 */
+  { /* 1186 */
     /* type PARROT_FUNCTION_OP, */
     "get_namespace",
     "get_namespace_p",
@@ -14471,7 +14315,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1200 */
+  { /* 1187 */
     /* type PARROT_FUNCTION_OP, */
     "get_namespace",
     "get_namespace_p_p",
@@ -14483,7 +14327,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1201 */
+  { /* 1188 */
     /* type PARROT_FUNCTION_OP, */
     "get_namespace",
     "get_namespace_p_pc",
@@ -14495,7 +14339,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1202 */
+  { /* 1189 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_namespace",
     "get_hll_namespace_p",
@@ -14507,7 +14351,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1203 */
+  { /* 1190 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_namespace",
     "get_hll_namespace_p_p",
@@ -14519,7 +14363,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1204 */
+  { /* 1191 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_namespace",
     "get_hll_namespace_p_pc",
@@ -14531,7 +14375,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1205 */
+  { /* 1192 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_namespace",
     "get_root_namespace_p",
@@ -14543,7 +14387,7 @@
     { PARROT_ARGDIR_OUT },
     { 0 }
   },
-  { /* 1206 */
+  { /* 1193 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_namespace",
     "get_root_namespace_p_p",
@@ -14555,7 +14399,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1207 */
+  { /* 1194 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_namespace",
     "get_root_namespace_p_pc",
@@ -14567,7 +14411,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1208 */
+  { /* 1195 */
     /* type PARROT_FUNCTION_OP, */
     "get_global",
     "get_global_p_s",
@@ -14579,7 +14423,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1209 */
+  { /* 1196 */
     /* type PARROT_FUNCTION_OP, */
     "get_global",
     "get_global_p_sc",
@@ -14591,7 +14435,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1210 */
+  { /* 1197 */
     /* type PARROT_FUNCTION_OP, */
     "get_global",
     "get_global_p_p_s",
@@ -14603,7 +14447,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1211 */
+  { /* 1198 */
     /* type PARROT_FUNCTION_OP, */
     "get_global",
     "get_global_p_pc_s",
@@ -14615,7 +14459,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1212 */
+  { /* 1199 */
     /* type PARROT_FUNCTION_OP, */
     "get_global",
     "get_global_p_p_sc",
@@ -14627,7 +14471,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1213 */
+  { /* 1200 */
     /* type PARROT_FUNCTION_OP, */
     "get_global",
     "get_global_p_pc_sc",
@@ -14639,7 +14483,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1214 */
+  { /* 1201 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_global",
     "get_hll_global_p_s",
@@ -14651,7 +14495,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1215 */
+  { /* 1202 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_global",
     "get_hll_global_p_sc",
@@ -14663,7 +14507,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1216 */
+  { /* 1203 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_global",
     "get_hll_global_p_p_s",
@@ -14675,7 +14519,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1217 */
+  { /* 1204 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_global",
     "get_hll_global_p_pc_s",
@@ -14687,7 +14531,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1218 */
+  { /* 1205 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_global",
     "get_hll_global_p_p_sc",
@@ -14699,7 +14543,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1219 */
+  { /* 1206 */
     /* type PARROT_FUNCTION_OP, */
     "get_hll_global",
     "get_hll_global_p_pc_sc",
@@ -14711,7 +14555,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1220 */
+  { /* 1207 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_global",
     "get_root_global_p_s",
@@ -14723,7 +14567,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1221 */
+  { /* 1208 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_global",
     "get_root_global_p_sc",
@@ -14735,7 +14579,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1222 */
+  { /* 1209 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_global",
     "get_root_global_p_p_s",
@@ -14747,7 +14591,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1223 */
+  { /* 1210 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_global",
     "get_root_global_p_pc_s",
@@ -14759,7 +14603,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1224 */
+  { /* 1211 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_global",
     "get_root_global_p_p_sc",
@@ -14771,7 +14615,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1225 */
+  { /* 1212 */
     /* type PARROT_FUNCTION_OP, */
     "get_root_global",
     "get_root_global_p_pc_sc",
@@ -14783,7 +14627,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1226 */
+  { /* 1213 */
     /* type PARROT_FUNCTION_OP, */
     "set_global",
     "set_global_s_p",
@@ -14795,7 +14639,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1227 */
+  { /* 1214 */
     /* type PARROT_FUNCTION_OP, */
     "set_global",
     "set_global_sc_p",
@@ -14807,7 +14651,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1228 */
+  { /* 1215 */
     /* type PARROT_FUNCTION_OP, */
     "set_global",
     "set_global_p_s_p",
@@ -14819,7 +14663,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1229 */
+  { /* 1216 */
     /* type PARROT_FUNCTION_OP, */
     "set_global",
     "set_global_pc_s_p",
@@ -14831,7 +14675,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1230 */
+  { /* 1217 */
     /* type PARROT_FUNCTION_OP, */
     "set_global",
     "set_global_p_sc_p",
@@ -14843,7 +14687,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1231 */
+  { /* 1218 */
     /* type PARROT_FUNCTION_OP, */
     "set_global",
     "set_global_pc_sc_p",
@@ -14855,7 +14699,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1232 */
+  { /* 1219 */
     /* type PARROT_FUNCTION_OP, */
     "set_hll_global",
     "set_hll_global_s_p",
@@ -14867,7 +14711,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1233 */
+  { /* 1220 */
     /* type PARROT_FUNCTION_OP, */
     "set_hll_global",
     "set_hll_global_sc_p",
@@ -14879,7 +14723,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1234 */
+  { /* 1221 */
     /* type PARROT_FUNCTION_OP, */
     "set_hll_global",
     "set_hll_global_p_s_p",
@@ -14891,7 +14735,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1235 */
+  { /* 1222 */
     /* type PARROT_FUNCTION_OP, */
     "set_hll_global",
     "set_hll_global_pc_s_p",
@@ -14903,7 +14747,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1236 */
+  { /* 1223 */
     /* type PARROT_FUNCTION_OP, */
     "set_hll_global",
     "set_hll_global_p_sc_p",
@@ -14915,7 +14759,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1237 */
+  { /* 1224 */
     /* type PARROT_FUNCTION_OP, */
     "set_hll_global",
     "set_hll_global_pc_sc_p",
@@ -14927,7 +14771,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1238 */
+  { /* 1225 */
     /* type PARROT_FUNCTION_OP, */
     "set_root_global",
     "set_root_global_s_p",
@@ -14939,7 +14783,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1239 */
+  { /* 1226 */
     /* type PARROT_FUNCTION_OP, */
     "set_root_global",
     "set_root_global_sc_p",
@@ -14951,7 +14795,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1240 */
+  { /* 1227 */
     /* type PARROT_FUNCTION_OP, */
     "set_root_global",
     "set_root_global_p_s_p",
@@ -14963,7 +14807,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1241 */
+  { /* 1228 */
     /* type PARROT_FUNCTION_OP, */
     "set_root_global",
     "set_root_global_pc_s_p",
@@ -14975,7 +14819,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1242 */
+  { /* 1229 */
     /* type PARROT_FUNCTION_OP, */
     "set_root_global",
     "set_root_global_p_sc_p",
@@ -14987,7 +14831,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1243 */
+  { /* 1230 */
     /* type PARROT_FUNCTION_OP, */
     "set_root_global",
     "set_root_global_pc_sc_p",
@@ -14999,7 +14843,7 @@
     { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1244 */
+  { /* 1231 */
     /* type PARROT_FUNCTION_OP, */
     "find_name",
     "find_name_p_s",
@@ -15011,7 +14855,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1245 */
+  { /* 1232 */
     /* type PARROT_FUNCTION_OP, */
     "find_name",
     "find_name_p_sc",
@@ -15023,7 +14867,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1246 */
+  { /* 1233 */
     /* type PARROT_INLINE_OP, */
     "find_sub_not_null",
     "find_sub_not_null_p_s",
@@ -15035,7 +14879,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1247 */
+  { /* 1234 */
     /* type PARROT_INLINE_OP, */
     "find_sub_not_null",
     "find_sub_not_null_p_sc",
@@ -15047,7 +14891,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
     { 0, 0 }
   },
-  { /* 1248 */
+  { /* 1235 */
     /* type PARROT_FUNCTION_OP, */
     "trap",
     "trap",
@@ -15059,31 +14903,7 @@
     { (arg_dir_t) 0 },
     { 0 }
   },
-  { /* 1249 */
-    /* type PARROT_INLINE_OP, */
-    "set_label",
-    "set_label_p_ic",
-    "Parrot_set_label_p_ic",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_P, PARROT_ARG_IC },
-    { PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
-    { 0, 1 }
-  },
-  { /* 1250 */
-    /* type PARROT_INLINE_OP, */
-    "get_label",
-    "get_label_i_p",
-    "Parrot_get_label_i_p",
-    /* "",  body */
-    0,
-    3,
-    { PARROT_ARG_I, PARROT_ARG_P },
-    { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN },
-    { 0, 0 }
-  },
-  { /* 1251 */
+  { /* 1236 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_p_p",
@@ -15095,7 +14915,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1252 */
+  { /* 1237 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_p_p",
@@ -15107,7 +14927,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1253 */
+  { /* 1238 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_pc_p",
@@ -15119,7 +14939,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1254 */
+  { /* 1239 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_pc_p",
@@ -15131,7 +14951,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1255 */
+  { /* 1240 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_p_pc",
@@ -15143,7 +14963,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1256 */
+  { /* 1241 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_p_pc",
@@ -15155,7 +14975,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1257 */
+  { /* 1242 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_pc_pc",
@@ -15167,7 +14987,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1258 */
+  { /* 1243 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_pc_pc",
@@ -15179,7 +14999,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1259 */
+  { /* 1244 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_i_p",
@@ -15191,7 +15011,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1260 */
+  { /* 1245 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_i_p",
@@ -15203,7 +15023,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1261 */
+  { /* 1246 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_ic_p",
@@ -15215,7 +15035,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1262 */
+  { /* 1247 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_ic_p",
@@ -15227,7 +15047,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1263 */
+  { /* 1248 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_i_pc",
@@ -15239,7 +15059,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1264 */
+  { /* 1249 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_i_pc",
@@ -15251,7 +15071,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1265 */
+  { /* 1250 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_ic_pc",
@@ -15263,7 +15083,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1266 */
+  { /* 1251 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_ic_pc",
@@ -15275,7 +15095,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1267 */
+  { /* 1252 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_s_p",
@@ -15287,7 +15107,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1268 */
+  { /* 1253 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_s_p",
@@ -15299,7 +15119,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1269 */
+  { /* 1254 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_sc_p",
@@ -15311,7 +15131,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1270 */
+  { /* 1255 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_sc_p",
@@ -15323,7 +15143,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1271 */
+  { /* 1256 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_s_pc",
@@ -15335,7 +15155,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1272 */
+  { /* 1257 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_s_pc",
@@ -15347,7 +15167,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1273 */
+  { /* 1258 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_p_sc_pc",
@@ -15359,7 +15179,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1274 */
+  { /* 1259 */
     /* type PARROT_INLINE_OP, */
     "fetch",
     "fetch_p_pc_sc_pc",
@@ -15371,7 +15191,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1275 */
+  { /* 1260 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_p_p",
@@ -15383,7 +15203,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1276 */
+  { /* 1261 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_p_p",
@@ -15395,7 +15215,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1277 */
+  { /* 1262 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_pc_p",
@@ -15407,7 +15227,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1278 */
+  { /* 1263 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_pc_p",
@@ -15419,7 +15239,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1279 */
+  { /* 1264 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_p_pc",
@@ -15431,7 +15251,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1280 */
+  { /* 1265 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_p_pc",
@@ -15443,7 +15263,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1281 */
+  { /* 1266 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_pc_pc",
@@ -15455,7 +15275,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1282 */
+  { /* 1267 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_pc_pc",
@@ -15467,7 +15287,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1283 */
+  { /* 1268 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_i_p",
@@ -15479,7 +15299,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1284 */
+  { /* 1269 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_i_p",
@@ -15491,7 +15311,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1285 */
+  { /* 1270 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_ic_p",
@@ -15503,7 +15323,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1286 */
+  { /* 1271 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_ic_p",
@@ -15515,7 +15335,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1287 */
+  { /* 1272 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_i_pc",
@@ -15527,7 +15347,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1288 */
+  { /* 1273 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_i_pc",
@@ -15539,7 +15359,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1289 */
+  { /* 1274 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_ic_pc",
@@ -15551,7 +15371,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1290 */
+  { /* 1275 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_ic_pc",
@@ -15563,7 +15383,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1291 */
+  { /* 1276 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_s_p",
@@ -15575,7 +15395,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1292 */
+  { /* 1277 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_s_p",
@@ -15587,7 +15407,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1293 */
+  { /* 1278 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_sc_p",
@@ -15599,7 +15419,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1294 */
+  { /* 1279 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_sc_p",
@@ -15611,7 +15431,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1295 */
+  { /* 1280 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_s_pc",
@@ -15623,7 +15443,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1296 */
+  { /* 1281 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_s_pc",
@@ -15635,7 +15455,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1297 */
+  { /* 1282 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_p_sc_pc",
@@ -15647,7 +15467,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1298 */
+  { /* 1283 */
     /* type PARROT_INLINE_OP, */
     "vivify",
     "vivify_p_pc_sc_pc",
@@ -15659,7 +15479,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0, 0 }
   },
-  { /* 1299 */
+  { /* 1284 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_s_i",
@@ -15671,7 +15491,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1300 */
+  { /* 1285 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_sc_i",
@@ -15683,7 +15503,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1301 */
+  { /* 1286 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_s_ic",
@@ -15695,7 +15515,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1302 */
+  { /* 1287 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_sc_ic",
@@ -15707,7 +15527,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1303 */
+  { /* 1288 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_p_i",
@@ -15719,7 +15539,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1304 */
+  { /* 1289 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_pc_i",
@@ -15731,7 +15551,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1305 */
+  { /* 1290 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_p_ic",
@@ -15743,7 +15563,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1306 */
+  { /* 1291 */
     /* type PARROT_FUNCTION_OP, */
     "new",
     "new_p_pc_ic",
@@ -15755,7 +15575,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1307 */
+  { /* 1292 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_p_i",
@@ -15767,7 +15587,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1308 */
+  { /* 1293 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_pc_i",
@@ -15779,7 +15599,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1309 */
+  { /* 1294 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_p_ic",
@@ -15791,7 +15611,7 @@
     { PARROT_ARGDIR_OUT, PARROT_ARGDIR_IN, PARROT_ARGDIR_IN },
     { 0, 0, 0 }
   },
-  { /* 1310 */
+  { /* 1295 */
     /* type PARROT_FUNCTION_OP, */
     "root_new",
     "root_new_p_pc_ic",
@@ -15806,13 +15626,13 @@
 };
 
 
-INTVAL core_numops = 1311;
+INTVAL core_numops = 1296;
 
 /*
 ** Op Function Table:
 */
 
-static op_func_t core_op_func_table[1312] = {
+static op_func_t core_op_func_table[1297] = {
   Parrot_end,                                        /*      0 */
   Parrot_noop,                                       /*      1 */
   Parrot_check_events,                               /*      2 */
@@ -15846,1284 +15666,1269 @@
   Parrot_capture_lex_p,                              /*     30 */
   Parrot_newclosure_p_p,                             /*     31 */
   Parrot_set_args_pc,                                /*     32 */
-  Parrot_get_results_pc,                             /*     33 */
-  Parrot_get_params_pc,                              /*     34 */
-  Parrot_set_returns_pc,                             /*     35 */
-  Parrot_result_info_p,                              /*     36 */
-  Parrot_set_addr_i_ic,                              /*     37 */
-  Parrot_set_addr_p_ic,                              /*     38 */
-  Parrot_set_addr_p_i,                               /*     39 */
-  Parrot_get_addr_i_p,                               /*     40 */
-  Parrot_schedule_p,                                 /*     41 */
-  Parrot_addhandler_p,                               /*     42 */
-  Parrot_push_eh_ic,                                 /*     43 */
-  Parrot_push_eh_p,                                  /*     44 */
-  Parrot_pop_eh,                                     /*     45 */
-  Parrot_throw_p,                                    /*     46 */
-  Parrot_throw_p_p,                                  /*     47 */
-  Parrot_rethrow_p,                                  /*     48 */
-  Parrot_count_eh_i,                                 /*     49 */
-  Parrot_die_s,                                      /*     50 */
-  Parrot_die_sc,                                     /*     51 */
-  Parrot_die_p,                                      /*     52 */
-  Parrot_die_pc,                                     /*     53 */
-  Parrot_die_i_i,                                    /*     54 */
-  Parrot_die_ic_i,                                   /*     55 */
-  Parrot_die_i_ic,                                   /*     56 */
-  Parrot_die_ic_ic,                                  /*     57 */
-  Parrot_exit_i,                                     /*     58 */
-  Parrot_exit_ic,                                    /*     59 */
-  Parrot_pushmark_i,                                 /*     60 */
-  Parrot_pushmark_ic,                                /*     61 */
-  Parrot_popmark_i,                                  /*     62 */
-  Parrot_popmark_ic,                                 /*     63 */
-  Parrot_pushaction_p,                               /*     64 */
-  Parrot_debug_i,                                    /*     65 */
-  Parrot_debug_ic,                                   /*     66 */
-  Parrot_bounds_i,                                   /*     67 */
-  Parrot_bounds_ic,                                  /*     68 */
-  Parrot_profile_i,                                  /*     69 */
-  Parrot_profile_ic,                                 /*     70 */
-  Parrot_trace_i,                                    /*     71 */
-  Parrot_trace_ic,                                   /*     72 */
-  Parrot_gc_debug_i,                                 /*     73 */
-  Parrot_gc_debug_ic,                                /*     74 */
-  Parrot_interpinfo_i_i,                             /*     75 */
-  Parrot_interpinfo_i_ic,                            /*     76 */
-  Parrot_interpinfo_p_i,                             /*     77 */
-  Parrot_interpinfo_p_ic,                            /*     78 */
-  Parrot_interpinfo_s_i,                             /*     79 */
-  Parrot_interpinfo_s_ic,                            /*     80 */
-  Parrot_warningson_i,                               /*     81 */
-  Parrot_warningson_ic,                              /*     82 */
-  Parrot_warningsoff_i,                              /*     83 */
-  Parrot_warningsoff_ic,                             /*     84 */
-  Parrot_errorson_i,                                 /*     85 */
-  Parrot_errorson_ic,                                /*     86 */
-  Parrot_errorsoff_i,                                /*     87 */
-  Parrot_errorsoff_ic,                               /*     88 */
-  Parrot_runinterp_p_i,                              /*     89 */
-  Parrot_runinterp_p_ic,                             /*     90 */
-  Parrot_getinterp_p,                                /*     91 */
-  Parrot_sweep_ic,                                   /*     92 */
-  Parrot_collect,                                    /*     93 */
-  Parrot_sweepoff,                                   /*     94 */
-  Parrot_sweepon,                                    /*     95 */
-  Parrot_collectoff,                                 /*     96 */
-  Parrot_collecton,                                  /*     97 */
-  Parrot_needs_destroy_p,                            /*     98 */
-  Parrot_loadlib_p_s,                                /*     99 */
-  Parrot_loadlib_p_sc,                               /*    100 */
-  Parrot_dlfunc_p_p_s_s,                             /*    101 */
-  Parrot_dlfunc_p_p_sc_s,                            /*    102 */
-  Parrot_dlfunc_p_p_s_sc,                            /*    103 */
-  Parrot_dlfunc_p_p_sc_sc,                           /*    104 */
-  Parrot_dlvar_p_p_s,                                /*    105 */
-  Parrot_dlvar_p_p_sc,                               /*    106 */
-  Parrot_compreg_s_p,                                /*    107 */
-  Parrot_compreg_sc_p,                               /*    108 */
-  Parrot_compreg_p_s,                                /*    109 */
-  Parrot_compreg_p_sc,                               /*    110 */
-  Parrot_new_callback_p_p_p_s,                       /*    111 */
-  Parrot_new_callback_p_p_p_sc,                      /*    112 */
-  Parrot_annotations_p,                              /*    113 */
-  Parrot_annotations_p_s,                            /*    114 */
-  Parrot_annotations_p_sc,                           /*    115 */
-  Parrot_band_i_i,                                   /*    116 */
-  Parrot_band_i_ic,                                  /*    117 */
-  Parrot_band_p_i,                                   /*    118 */
-  Parrot_band_p_ic,                                  /*    119 */
-  Parrot_band_p_p,                                   /*    120 */
-  Parrot_band_i_i_i,                                 /*    121 */
-  Parrot_band_i_ic_i,                                /*    122 */
-  Parrot_band_i_i_ic,                                /*    123 */
-  Parrot_band_p_p_i,                                 /*    124 */
-  Parrot_band_p_p_ic,                                /*    125 */
-  Parrot_band_p_p_p,                                 /*    126 */
-  Parrot_bands_s_s,                                  /*    127 */
-  Parrot_bands_s_sc,                                 /*    128 */
-  Parrot_bands_p_s,                                  /*    129 */
-  Parrot_bands_p_sc,                                 /*    130 */
-  Parrot_bands_p_p,                                  /*    131 */
-  Parrot_bands_s_s_s,                                /*    132 */
-  Parrot_bands_s_sc_s,                               /*    133 */
-  Parrot_bands_s_s_sc,                               /*    134 */
-  Parrot_bands_p_p_s,                                /*    135 */
-  Parrot_bands_p_p_sc,                               /*    136 */
-  Parrot_bands_p_p_p,                                /*    137 */
-  Parrot_bnot_i,                                     /*    138 */
-  Parrot_bnot_i_i,                                   /*    139 */
-  Parrot_bnot_p,                                     /*    140 */
-  Parrot_bnot_p_p,                                   /*    141 */
-  Parrot_bnots_s,                                    /*    142 */
-  Parrot_bnots_s_s,                                  /*    143 */
-  Parrot_bnots_s_sc,                                 /*    144 */
-  Parrot_bnots_p,                                    /*    145 */
-  Parrot_bnots_p_p,                                  /*    146 */
-  Parrot_bor_i_i,                                    /*    147 */
-  Parrot_bor_i_ic,                                   /*    148 */
-  Parrot_bor_p_i,                                    /*    149 */
-  Parrot_bor_p_ic,                                   /*    150 */
-  Parrot_bor_p_p,                                    /*    151 */
-  Parrot_bor_i_i_i,                                  /*    152 */
-  Parrot_bor_i_ic_i,                                 /*    153 */
-  Parrot_bor_i_i_ic,                                 /*    154 */
-  Parrot_bor_p_p_i,                                  /*    155 */
-  Parrot_bor_p_p_ic,                                 /*    156 */
-  Parrot_bor_p_p_p,                                  /*    157 */
-  Parrot_bors_s_s,                                   /*    158 */
-  Parrot_bors_s_sc,                                  /*    159 */
-  Parrot_bors_p_s,                                   /*    160 */
-  Parrot_bors_p_sc,                                  /*    161 */
-  Parrot_bors_p_p,                                   /*    162 */
-  Parrot_bors_s_s_s,                                 /*    163 */
-  Parrot_bors_s_sc_s,                                /*    164 */
-  Parrot_bors_s_s_sc,                                /*    165 */
-  Parrot_bors_p_p_s,                                 /*    166 */
-  Parrot_bors_p_p_sc,                                /*    167 */
-  Parrot_bors_p_p_p,                                 /*    168 */
-  Parrot_shl_i_i,                                    /*    169 */
-  Parrot_shl_i_ic,                                   /*    170 */
-  Parrot_shl_p_i,                                    /*    171 */
-  Parrot_shl_p_ic,                                   /*    172 */
-  Parrot_shl_p_p,                                    /*    173 */
-  Parrot_shl_i_i_i,                                  /*    174 */
-  Parrot_shl_i_ic_i,                                 /*    175 */
-  Parrot_shl_i_i_ic,                                 /*    176 */
-  Parrot_shl_p_p_i,                                  /*    177 */
-  Parrot_shl_p_p_ic,                                 /*    178 */
-  Parrot_shl_p_p_p,                                  /*    179 */
-  Parrot_shr_i_i,                                    /*    180 */
-  Parrot_shr_i_ic,                                   /*    181 */
-  Parrot_shr_p_i,                                    /*    182 */
-  Parrot_shr_p_ic,                                   /*    183 */
-  Parrot_shr_p_p,                                    /*    184 */
-  Parrot_shr_i_i_i,                                  /*    185 */
-  Parrot_shr_i_ic_i,                                 /*    186 */
-  Parrot_shr_i_i_ic,                                 /*    187 */
-  Parrot_shr_p_p_i,                                  /*    188 */
-  Parrot_shr_p_p_ic,                                 /*    189 */
-  Parrot_shr_p_p_p,                                  /*    190 */
-  Parrot_lsr_i_i,                                    /*    191 */
-  Parrot_lsr_i_ic,                                   /*    192 */
-  Parrot_lsr_p_i,                                    /*    193 */
-  Parrot_lsr_p_ic,                                   /*    194 */
-  Parrot_lsr_p_p,                                    /*    195 */
-  Parrot_lsr_i_i_i,                                  /*    196 */
-  Parrot_lsr_i_ic_i,                                 /*    197 */
-  Parrot_lsr_i_i_ic,                                 /*    198 */
-  Parrot_lsr_p_p_i,                                  /*    199 */
-  Parrot_lsr_p_p_ic,                                 /*    200 */
-  Parrot_lsr_p_p_p,                                  /*    201 */
-  Parrot_rot_i_i_i_ic,                               /*    202 */
-  Parrot_rot_i_ic_i_ic,                              /*    203 */
-  Parrot_rot_i_i_ic_ic,                              /*    204 */
-  Parrot_bxor_i_i,                                   /*    205 */
-  Parrot_bxor_i_ic,                                  /*    206 */
-  Parrot_bxor_p_i,                                   /*    207 */
-  Parrot_bxor_p_ic,                                  /*    208 */
-  Parrot_bxor_p_p,                                   /*    209 */
-  Parrot_bxor_i_i_i,                                 /*    210 */
-  Parrot_bxor_i_ic_i,                                /*    211 */
-  Parrot_bxor_i_i_ic,                                /*    212 */
-  Parrot_bxor_p_p_i,                                 /*    213 */
-  Parrot_bxor_p_p_ic,                                /*    214 */
-  Parrot_bxor_p_p_p,                                 /*    215 */
-  Parrot_bxors_s_s,                                  /*    216 */
-  Parrot_bxors_s_sc,                                 /*    217 */
-  Parrot_bxors_p_s,                                  /*    218 */
-  Parrot_bxors_p_sc,                                 /*    219 */
-  Parrot_bxors_p_p,                                  /*    220 */
-  Parrot_bxors_s_s_s,                                /*    221 */
-  Parrot_bxors_s_sc_s,                               /*    222 */
-  Parrot_bxors_s_s_sc,                               /*    223 */
-  Parrot_bxors_p_p_s,                                /*    224 */
-  Parrot_bxors_p_p_sc,                               /*    225 */
-  Parrot_bxors_p_p_p,                                /*    226 */
-  Parrot_eq_i_i_ic,                                  /*    227 */
-  Parrot_eq_ic_i_ic,                                 /*    228 */
-  Parrot_eq_i_ic_ic,                                 /*    229 */
-  Parrot_eq_n_n_ic,                                  /*    230 */
-  Parrot_eq_nc_n_ic,                                 /*    231 */
-  Parrot_eq_n_nc_ic,                                 /*    232 */
-  Parrot_eq_s_s_ic,                                  /*    233 */
-  Parrot_eq_sc_s_ic,                                 /*    234 */
-  Parrot_eq_s_sc_ic,                                 /*    235 */
-  Parrot_eq_p_p_ic,                                  /*    236 */
-  Parrot_eq_p_i_ic,                                  /*    237 */
-  Parrot_eq_p_ic_ic,                                 /*    238 */
-  Parrot_eq_p_n_ic,                                  /*    239 */
-  Parrot_eq_p_nc_ic,                                 /*    240 */
-  Parrot_eq_p_s_ic,                                  /*    241 */
-  Parrot_eq_p_sc_ic,                                 /*    242 */
-  Parrot_eq_str_p_p_ic,                              /*    243 */
-  Parrot_eq_num_p_p_ic,                              /*    244 */
-  Parrot_eq_addr_s_s_ic,                             /*    245 */
-  Parrot_eq_addr_sc_s_ic,                            /*    246 */
-  Parrot_eq_addr_s_sc_ic,                            /*    247 */
-  Parrot_eq_addr_sc_sc_ic,                           /*    248 */
-  Parrot_eq_addr_p_p_ic,                             /*    249 */
-  Parrot_ne_i_i_ic,                                  /*    250 */
-  Parrot_ne_ic_i_ic,                                 /*    251 */
-  Parrot_ne_i_ic_ic,                                 /*    252 */
-  Parrot_ne_n_n_ic,                                  /*    253 */
-  Parrot_ne_nc_n_ic,                                 /*    254 */
-  Parrot_ne_n_nc_ic,                                 /*    255 */
-  Parrot_ne_s_s_ic,                                  /*    256 */
-  Parrot_ne_sc_s_ic,                                 /*    257 */
-  Parrot_ne_s_sc_ic,                                 /*    258 */
-  Parrot_ne_p_p_ic,                                  /*    259 */
-  Parrot_ne_p_i_ic,                                  /*    260 */
-  Parrot_ne_p_ic_ic,                                 /*    261 */
-  Parrot_ne_p_n_ic,                                  /*    262 */
-  Parrot_ne_p_nc_ic,                                 /*    263 */
-  Parrot_ne_p_s_ic,                                  /*    264 */
-  Parrot_ne_p_sc_ic,                                 /*    265 */
-  Parrot_ne_str_p_p_ic,                              /*    266 */
-  Parrot_ne_num_p_p_ic,                              /*    267 */
-  Parrot_ne_addr_s_s_ic,                             /*    268 */
-  Parrot_ne_addr_sc_s_ic,                            /*    269 */
-  Parrot_ne_addr_s_sc_ic,                            /*    270 */
-  Parrot_ne_addr_sc_sc_ic,                           /*    271 */
-  Parrot_ne_addr_p_p_ic,                             /*    272 */
-  Parrot_lt_i_i_ic,                                  /*    273 */
-  Parrot_lt_ic_i_ic,                                 /*    274 */
-  Parrot_lt_i_ic_ic,                                 /*    275 */
-  Parrot_lt_n_n_ic,                                  /*    276 */
-  Parrot_lt_nc_n_ic,                                 /*    277 */
-  Parrot_lt_n_nc_ic,                                 /*    278 */
-  Parrot_lt_s_s_ic,                                  /*    279 */
-  Parrot_lt_sc_s_ic,                                 /*    280 */
-  Parrot_lt_s_sc_ic,                                 /*    281 */
-  Parrot_lt_p_p_ic,                                  /*    282 */
-  Parrot_lt_p_i_ic,                                  /*    283 */
-  Parrot_lt_p_ic_ic,                                 /*    284 */
-  Parrot_lt_p_n_ic,                                  /*    285 */
-  Parrot_lt_p_nc_ic,                                 /*    286 */
-  Parrot_lt_p_s_ic,                                  /*    287 */
-  Parrot_lt_p_sc_ic,                                 /*    288 */
-  Parrot_lt_str_p_p_ic,                              /*    289 */
-  Parrot_lt_num_p_p_ic,                              /*    290 */
-  Parrot_le_i_i_ic,                                  /*    291 */
-  Parrot_le_ic_i_ic,                                 /*    292 */
-  Parrot_le_i_ic_ic,                                 /*    293 */
-  Parrot_le_n_n_ic,                                  /*    294 */
-  Parrot_le_nc_n_ic,                                 /*    295 */
-  Parrot_le_n_nc_ic,                                 /*    296 */
-  Parrot_le_s_s_ic,                                  /*    297 */
-  Parrot_le_sc_s_ic,                                 /*    298 */
-  Parrot_le_s_sc_ic,                                 /*    299 */
-  Parrot_le_p_p_ic,                                  /*    300 */
-  Parrot_le_p_i_ic,                                  /*    301 */
-  Parrot_le_p_ic_ic,                                 /*    302 */
-  Parrot_le_p_n_ic,                                  /*    303 */
-  Parrot_le_p_nc_ic,                                 /*    304 */
-  Parrot_le_p_s_ic,                                  /*    305 */
-  Parrot_le_p_sc_ic,                                 /*    306 */
-  Parrot_le_str_p_p_ic,                              /*    307 */
-  Parrot_le_num_p_p_ic,                              /*    308 */
-  Parrot_gt_p_p_ic,                                  /*    309 */
-  Parrot_gt_p_i_ic,                                  /*    310 */
-  Parrot_gt_p_ic_ic,                                 /*    311 */
-  Parrot_gt_p_n_ic,                                  /*    312 */
-  Parrot_gt_p_nc_ic,                                 /*    313 */
-  Parrot_gt_p_s_ic,                                  /*    314 */
-  Parrot_gt_p_sc_ic,                                 /*    315 */
-  Parrot_gt_str_p_p_ic,                              /*    316 */
-  Parrot_gt_num_p_p_ic,                              /*    317 */
-  Parrot_ge_p_p_ic,                                  /*    318 */
-  Parrot_ge_p_i_ic,                                  /*    319 */
-  Parrot_ge_p_ic_ic,                                 /*    320 */
-  Parrot_ge_p_n_ic,                                  /*    321 */
-  Parrot_ge_p_nc_ic,                                 /*    322 */
-  Parrot_ge_p_s_ic,                                  /*    323 */
-  Parrot_ge_p_sc_ic,                                 /*    324 */
-  Parrot_ge_str_p_p_ic,                              /*    325 */
-  Parrot_ge_num_p_p_ic,                              /*    326 */
-  Parrot_if_null_p_ic,                               /*    327 */
-  Parrot_if_null_s_ic,                               /*    328 */
-  Parrot_unless_null_p_ic,                           /*    329 */
-  Parrot_unless_null_s_ic,                           /*    330 */
-  Parrot_cmp_i_i_i,                                  /*    331 */
-  Parrot_cmp_i_ic_i,                                 /*    332 */
-  Parrot_cmp_i_i_ic,                                 /*    333 */
-  Parrot_cmp_i_n_n,                                  /*    334 */
-  Parrot_cmp_i_nc_n,                                 /*    335 */
-  Parrot_cmp_i_n_nc,                                 /*    336 */
-  Parrot_cmp_i_s_s,                                  /*    337 */
-  Parrot_cmp_i_sc_s,                                 /*    338 */
-  Parrot_cmp_i_s_sc,                                 /*    339 */
-  Parrot_cmp_i_p_p,                                  /*    340 */
-  Parrot_cmp_i_p_i,                                  /*    341 */
-  Parrot_cmp_i_p_ic,                                 /*    342 */
-  Parrot_cmp_i_p_n,                                  /*    343 */
-  Parrot_cmp_i_p_nc,                                 /*    344 */
-  Parrot_cmp_i_p_s,                                  /*    345 */
-  Parrot_cmp_i_p_sc,                                 /*    346 */
-  Parrot_cmp_str_i_p_p,                              /*    347 */
-  Parrot_cmp_num_i_p_p,                              /*    348 */
-  Parrot_cmp_pmc_p_p_p,                              /*    349 */
-  Parrot_issame_i_p_p,                               /*    350 */
-  Parrot_issame_i_s_s,                               /*    351 */
-  Parrot_issame_i_sc_s,                              /*    352 */
-  Parrot_issame_i_s_sc,                              /*    353 */
-  Parrot_issame_i_sc_sc,                             /*    354 */
-  Parrot_isntsame_i_p_p,                             /*    355 */
-  Parrot_isntsame_i_s_s,                             /*    356 */
-  Parrot_isntsame_i_sc_s,                            /*    357 */
-  Parrot_isntsame_i_s_sc,                            /*    358 */
-  Parrot_isntsame_i_sc_sc,                           /*    359 */
-  Parrot_istrue_i_p,                                 /*    360 */
-  Parrot_isfalse_i_p,                                /*    361 */
-  Parrot_isnull_i_p,                                 /*    362 */
-  Parrot_isnull_i_pc,                                /*    363 */
-  Parrot_isnull_i_s,                                 /*    364 */
-  Parrot_isnull_i_sc,                                /*    365 */
-  Parrot_isgt_i_p_p,                                 /*    366 */
-  Parrot_isge_i_p_p,                                 /*    367 */
-  Parrot_isle_i_i_i,                                 /*    368 */
-  Parrot_isle_i_ic_i,                                /*    369 */
-  Parrot_isle_i_i_ic,                                /*    370 */
-  Parrot_isle_i_n_n,                                 /*    371 */
-  Parrot_isle_i_nc_n,                                /*    372 */
-  Parrot_isle_i_n_nc,                                /*    373 */
-  Parrot_isle_i_s_s,                                 /*    374 */
-  Parrot_isle_i_sc_s,                                /*    375 */
-  Parrot_isle_i_s_sc,                                /*    376 */
-  Parrot_isle_i_p_p,                                 /*    377 */
-  Parrot_islt_i_i_i,                                 /*    378 */
-  Parrot_islt_i_ic_i,                                /*    379 */
-  Parrot_islt_i_i_ic,                                /*    380 */
-  Parrot_islt_i_n_n,                                 /*    381 */
-  Parrot_islt_i_nc_n,                                /*    382 */
-  Parrot_islt_i_n_nc,                                /*    383 */
-  Parrot_islt_i_s_s,                                 /*    384 */
-  Parrot_islt_i_sc_s,                                /*    385 */
-  Parrot_islt_i_s_sc,                                /*    386 */
-  Parrot_islt_i_p_p,                                 /*    387 */
-  Parrot_iseq_i_i_i,                                 /*    388 */
-  Parrot_iseq_i_ic_i,                                /*    389 */
-  Parrot_iseq_i_i_ic,                                /*    390 */
-  Parrot_iseq_i_n_n,                                 /*    391 */
-  Parrot_iseq_i_nc_n,                                /*    392 */
-  Parrot_iseq_i_n_nc,                                /*    393 */
-  Parrot_iseq_i_s_s,                                 /*    394 */
-  Parrot_iseq_i_sc_s,                                /*    395 */
-  Parrot_iseq_i_s_sc,                                /*    396 */
-  Parrot_iseq_i_p_p,                                 /*    397 */
-  Parrot_isne_i_i_i,                                 /*    398 */
-  Parrot_isne_i_ic_i,                                /*    399 */
-  Parrot_isne_i_i_ic,                                /*    400 */
-  Parrot_isne_i_n_n,                                 /*    401 */
-  Parrot_isne_i_nc_n,                                /*    402 */
-  Parrot_isne_i_n_nc,                                /*    403 */
-  Parrot_isne_i_s_s,                                 /*    404 */
-  Parrot_isne_i_sc_s,                                /*    405 */
-  Parrot_isne_i_s_sc,                                /*    406 */
-  Parrot_isne_i_p_p,                                 /*    407 */
-  Parrot_and_i_i_i,                                  /*    408 */
-  Parrot_and_i_ic_i,                                 /*    409 */
-  Parrot_and_i_i_ic,                                 /*    410 */
-  Parrot_and_p_p_p,                                  /*    411 */
-  Parrot_not_i,                                      /*    412 */
-  Parrot_not_i_i,                                    /*    413 */
-  Parrot_not_p,                                      /*    414 */
-  Parrot_not_p_p,                                    /*    415 */
-  Parrot_or_i_i_i,                                   /*    416 */
-  Parrot_or_i_ic_i,                                  /*    417 */
-  Parrot_or_i_i_ic,                                  /*    418 */
-  Parrot_or_p_p_p,                                   /*    419 */
-  Parrot_xor_i_i_i,                                  /*    420 */
-  Parrot_xor_i_ic_i,                                 /*    421 */
-  Parrot_xor_i_i_ic,                                 /*    422 */
-  Parrot_xor_p_p_p,                                  /*    423 */
-  Parrot_debug_init,                                 /*    424 */
-  Parrot_debug_load_sc,                              /*    425 */
-  Parrot_debug_break,                                /*    426 */
-  Parrot_debug_print,                                /*    427 */
-  Parrot_backtrace,                                  /*    428 */
-  Parrot_getline_i,                                  /*    429 */
-  Parrot_getfile_s,                                  /*    430 */
-  Parrot_close_p,                                    /*    431 */
-  Parrot_fdopen_p_i_s,                               /*    432 */
-  Parrot_fdopen_p_ic_s,                              /*    433 */
-  Parrot_fdopen_p_i_sc,                              /*    434 */
-  Parrot_fdopen_p_ic_sc,                             /*    435 */
-  Parrot_getstdin_p,                                 /*    436 */
-  Parrot_getstdout_p,                                /*    437 */
-  Parrot_getstderr_p,                                /*    438 */
-  Parrot_setstdin_p,                                 /*    439 */
-  Parrot_setstdout_p,                                /*    440 */
-  Parrot_setstderr_p,                                /*    441 */
-  Parrot_open_p_s_s,                                 /*    442 */
-  Parrot_open_p_sc_s,                                /*    443 */
-  Parrot_open_p_s_sc,                                /*    444 */
-  Parrot_open_p_sc_sc,                               /*    445 */
-  Parrot_open_p_s,                                   /*    446 */
-  Parrot_open_p_sc,                                  /*    447 */
-  Parrot_print_i,                                    /*    448 */
-  Parrot_print_ic,                                   /*    449 */
-  Parrot_print_n,                                    /*    450 */
-  Parrot_print_nc,                                   /*    451 */
-  Parrot_print_s,                                    /*    452 */
-  Parrot_print_sc,                                   /*    453 */
-  Parrot_print_p,                                    /*    454 */
-  Parrot_say_i,                                      /*    455 */
-  Parrot_say_ic,                                     /*    456 */
-  Parrot_say_n,                                      /*    457 */
-  Parrot_say_nc,                                     /*    458 */
-  Parrot_say_s,                                      /*    459 */
-  Parrot_say_sc,                                     /*    460 */
-  Parrot_say_p,                                      /*    461 */
-  Parrot_printerr_i,                                 /*    462 */
-  Parrot_printerr_ic,                                /*    463 */
-  Parrot_printerr_n,                                 /*    464 */
-  Parrot_printerr_nc,                                /*    465 */
-  Parrot_printerr_s,                                 /*    466 */
-  Parrot_printerr_sc,                                /*    467 */
-  Parrot_printerr_p,                                 /*    468 */
-  Parrot_print_p_i,                                  /*    469 */
-  Parrot_print_p_ic,                                 /*    470 */
-  Parrot_print_p_n,                                  /*    471 */
-  Parrot_print_p_nc,                                 /*    472 */
-  Parrot_print_p_s,                                  /*    473 */
-  Parrot_print_p_sc,                                 /*    474 */
-  Parrot_print_p_p,                                  /*    475 */
-  Parrot_read_s_i,                                   /*    476 */
-  Parrot_read_s_ic,                                  /*    477 */
-  Parrot_read_s_p_i,                                 /*    478 */
-  Parrot_read_s_p_ic,                                /*    479 */
-  Parrot_readline_s_p,                               /*    480 */
-  Parrot_peek_s,                                     /*    481 */
-  Parrot_peek_s_p,                                   /*    482 */
-  Parrot_stat_i_s_i,                                 /*    483 */
-  Parrot_stat_i_sc_i,                                /*    484 */
-  Parrot_stat_i_s_ic,                                /*    485 */
-  Parrot_stat_i_sc_ic,                               /*    486 */
-  Parrot_stat_i_i_i,                                 /*    487 */
-  Parrot_stat_i_ic_i,                                /*    488 */
-  Parrot_stat_i_i_ic,                                /*    489 */
-  Parrot_stat_i_ic_ic,                               /*    490 */
-  Parrot_seek_p_i_i,                                 /*    491 */
-  Parrot_seek_p_ic_i,                                /*    492 */
-  Parrot_seek_p_i_ic,                                /*    493 */
-  Parrot_seek_p_ic_ic,                               /*    494 */
-  Parrot_seek_p_i_i_i,                               /*    495 */
-  Parrot_seek_p_ic_i_i,                              /*    496 */
-  Parrot_seek_p_i_ic_i,                              /*    497 */
-  Parrot_seek_p_ic_ic_i,                             /*    498 */
-  Parrot_seek_p_i_i_ic,                              /*    499 */
-  Parrot_seek_p_ic_i_ic,                             /*    500 */
-  Parrot_seek_p_i_ic_ic,                             /*    501 */
-  Parrot_seek_p_ic_ic_ic,                            /*    502 */
-  Parrot_tell_i_p,                                   /*    503 */
-  Parrot_tell_i_i_p,                                 /*    504 */
-  Parrot_abs_i,                                      /*    505 */
-  Parrot_abs_n,                                      /*    506 */
-  Parrot_abs_i_i,                                    /*    507 */
-  Parrot_abs_n_n,                                    /*    508 */
-  Parrot_abs_p,                                      /*    509 */
-  Parrot_abs_p_p,                                    /*    510 */
-  Parrot_add_i_i,                                    /*    511 */
-  Parrot_add_i_ic,                                   /*    512 */
-  Parrot_add_n_n,                                    /*    513 */
-  Parrot_add_n_nc,                                   /*    514 */
-  Parrot_add_p_p,                                    /*    515 */
-  Parrot_add_p_i,                                    /*    516 */
-  Parrot_add_p_ic,                                   /*    517 */
-  Parrot_add_p_n,                                    /*    518 */
-  Parrot_add_p_nc,                                   /*    519 */
-  Parrot_add_i_i_i,                                  /*    520 */
-  Parrot_add_i_ic_i,                                 /*    521 */
-  Parrot_add_i_i_ic,                                 /*    522 */
-  Parrot_add_n_n_n,                                  /*    523 */
-  Parrot_add_n_nc_n,                                 /*    524 */
-  Parrot_add_n_n_nc,                                 /*    525 */
-  Parrot_add_p_p_p,                                  /*    526 */
-  Parrot_add_p_p_i,                                  /*    527 */
-  Parrot_add_p_p_ic,                                 /*    528 */
-  Parrot_add_p_p_n,                                  /*    529 */
-  Parrot_add_p_p_nc,                                 /*    530 */
-  Parrot_cmod_i_i_i,                                 /*    531 */
-  Parrot_cmod_i_ic_i,                                /*    532 */
-  Parrot_cmod_i_i_ic,                                /*    533 */
-  Parrot_cmod_p_p_i,                                 /*    534 */
-  Parrot_cmod_p_p_ic,                                /*    535 */
-  Parrot_cmod_p_p_p,                                 /*    536 */
-  Parrot_cmod_n_n_n,                                 /*    537 */
-  Parrot_cmod_n_nc_n,                                /*    538 */
-  Parrot_cmod_n_n_nc,                                /*    539 */
-  Parrot_cmod_p_p_n,                                 /*    540 */
-  Parrot_cmod_p_p_nc,                                /*    541 */
-  Parrot_dec_i,                                      /*    542 */
-  Parrot_dec_n,                                      /*    543 */
-  Parrot_dec_p,                                      /*    544 */
-  Parrot_div_i_i,                                    /*    545 */
-  Parrot_div_i_ic,                                   /*    546 */
-  Parrot_div_n_n,                                    /*    547 */
-  Parrot_div_n_nc,                                   /*    548 */
-  Parrot_div_p_p,                                    /*    549 */
-  Parrot_div_p_i,                                    /*    550 */
-  Parrot_div_p_ic,                                   /*    551 */
-  Parrot_div_p_n,                                    /*    552 */
-  Parrot_div_p_nc,                                   /*    553 */
-  Parrot_div_i_i_i,                                  /*    554 */
-  Parrot_div_i_ic_i,                                 /*    555 */
-  Parrot_div_i_i_ic,                                 /*    556 */
-  Parrot_div_i_ic_ic,                                /*    557 */
-  Parrot_div_n_n_n,                                  /*    558 */
-  Parrot_div_n_nc_n,                                 /*    559 */
-  Parrot_div_n_n_nc,                                 /*    560 */
-  Parrot_div_n_nc_nc,                                /*    561 */
-  Parrot_div_p_p_p,                                  /*    562 */
-  Parrot_div_p_p_i,                                  /*    563 */
-  Parrot_div_p_p_ic,                                 /*    564 */
-  Parrot_div_p_p_n,                                  /*    565 */
-  Parrot_div_p_p_nc,                                 /*    566 */
-  Parrot_fdiv_i_i,                                   /*    567 */
-  Parrot_fdiv_i_ic,                                  /*    568 */
-  Parrot_fdiv_n_n,                                   /*    569 */
-  Parrot_fdiv_n_nc,                                  /*    570 */
-  Parrot_fdiv_p_p,                                   /*    571 */
-  Parrot_fdiv_p_i,                                   /*    572 */
-  Parrot_fdiv_p_ic,                                  /*    573 */
-  Parrot_fdiv_p_n,                                   /*    574 */
-  Parrot_fdiv_p_nc,                                  /*    575 */
-  Parrot_fdiv_i_i_i,                                 /*    576 */
-  Parrot_fdiv_i_ic_i,                                /*    577 */
-  Parrot_fdiv_i_i_ic,                                /*    578 */
-  Parrot_fdiv_n_n_n,                                 /*    579 */
-  Parrot_fdiv_n_nc_n,                                /*    580 */
-  Parrot_fdiv_n_n_nc,                                /*    581 */
-  Parrot_fdiv_p_p_p,                                 /*    582 */
-  Parrot_fdiv_p_p_i,                                 /*    583 */
-  Parrot_fdiv_p_p_ic,                                /*    584 */
-  Parrot_fdiv_p_p_n,                                 /*    585 */
-  Parrot_fdiv_p_p_nc,                                /*    586 */
-  Parrot_ceil_n,                                     /*    587 */
-  Parrot_ceil_i_n,                                   /*    588 */
-  Parrot_ceil_n_n,                                   /*    589 */
-  Parrot_floor_n,                                    /*    590 */
-  Parrot_floor_i_n,                                  /*    591 */
-  Parrot_floor_n_n,                                  /*    592 */
-  Parrot_inc_i,                                      /*    593 */
-  Parrot_inc_n,                                      /*    594 */
-  Parrot_inc_p,                                      /*    595 */
-  Parrot_mod_i_i,                                    /*    596 */
-  Parrot_mod_i_ic,                                   /*    597 */
-  Parrot_mod_n_n,                                    /*    598 */
-  Parrot_mod_n_nc,                                   /*    599 */
-  Parrot_mod_p_p,                                    /*    600 */
-  Parrot_mod_p_i,                                    /*    601 */
-  Parrot_mod_p_ic,                                   /*    602 */
-  Parrot_mod_p_n,                                    /*    603 */
-  Parrot_mod_p_nc,                                   /*    604 */
-  Parrot_mod_i_i_i,                                  /*    605 */
-  Parrot_mod_i_ic_i,                                 /*    606 */
-  Parrot_mod_i_i_ic,                                 /*    607 */
-  Parrot_mod_n_n_n,                                  /*    608 */
-  Parrot_mod_n_nc_n,                                 /*    609 */
-  Parrot_mod_n_n_nc,                                 /*    610 */
-  Parrot_mod_p_p_p,                                  /*    611 */
-  Parrot_mod_p_p_i,                                  /*    612 */
-  Parrot_mod_p_p_ic,                                 /*    613 */
-  Parrot_mod_p_p_n,                                  /*    614 */
-  Parrot_mod_p_p_nc,                                 /*    615 */
-  Parrot_mul_i_i,                                    /*    616 */
-  Parrot_mul_i_ic,                                   /*    617 */
-  Parrot_mul_n_n,                                    /*    618 */
-  Parrot_mul_n_nc,                                   /*    619 */
-  Parrot_mul_p_p,                                    /*    620 */
-  Parrot_mul_p_i,                                    /*    621 */
-  Parrot_mul_p_ic,                                   /*    622 */
-  Parrot_mul_p_n,                                    /*    623 */
-  Parrot_mul_p_nc,                                   /*    624 */
-  Parrot_mul_i_i_i,                                  /*    625 */
-  Parrot_mul_i_ic_i,                                 /*    626 */
-  Parrot_mul_i_i_ic,                                 /*    627 */
-  Parrot_mul_n_n_n,                                  /*    628 */
-  Parrot_mul_n_nc_n,                                 /*    629 */
-  Parrot_mul_n_n_nc,                                 /*    630 */
-  Parrot_mul_p_p_p,                                  /*    631 */
-  Parrot_mul_p_p_i,                                  /*    632 */
-  Parrot_mul_p_p_ic,                                 /*    633 */
-  Parrot_mul_p_p_n,                                  /*    634 */
-  Parrot_mul_p_p_nc,                                 /*    635 */
-  Parrot_neg_i,                                      /*    636 */
-  Parrot_neg_n,                                      /*    637 */
-  Parrot_neg_p,                                      /*    638 */
-  Parrot_neg_i_i,                                    /*    639 */
-  Parrot_neg_n_n,                                    /*    640 */
-  Parrot_neg_p_p,                                    /*    641 */
-  Parrot_pow_n_n_n,                                  /*    642 */
-  Parrot_pow_n_nc_n,                                 /*    643 */
-  Parrot_pow_n_n_nc,                                 /*    644 */
-  Parrot_pow_p_p_p,                                  /*    645 */
-  Parrot_pow_p_p_i,                                  /*    646 */
-  Parrot_pow_p_p_ic,                                 /*    647 */
-  Parrot_pow_p_p_n,                                  /*    648 */
-  Parrot_pow_p_p_nc,                                 /*    649 */
-  Parrot_pow_n_n_i,                                  /*    650 */
-  Parrot_pow_n_nc_i,                                 /*    651 */
-  Parrot_pow_n_n_ic,                                 /*    652 */
-  Parrot_pow_n_nc_ic,                                /*    653 */
-  Parrot_sub_i_i,                                    /*    654 */
-  Parrot_sub_i_ic,                                   /*    655 */
-  Parrot_sub_n_n,                                    /*    656 */
-  Parrot_sub_n_nc,                                   /*    657 */
-  Parrot_sub_p_p,                                    /*    658 */
-  Parrot_sub_p_i,                                    /*    659 */
-  Parrot_sub_p_ic,                                   /*    660 */
-  Parrot_sub_p_n,                                    /*    661 */
-  Parrot_sub_p_nc,                                   /*    662 */
-  Parrot_sub_i_i_i,                                  /*    663 */
-  Parrot_sub_i_ic_i,                                 /*    664 */
-  Parrot_sub_i_i_ic,                                 /*    665 */
-  Parrot_sub_n_n_n,                                  /*    666 */
-  Parrot_sub_n_nc_n,                                 /*    667 */
-  Parrot_sub_n_n_nc,                                 /*    668 */
-  Parrot_sub_p_p_p,                                  /*    669 */
-  Parrot_sub_p_p_i,                                  /*    670 */
-  Parrot_sub_p_p_ic,                                 /*    671 */
-  Parrot_sub_p_p_n,                                  /*    672 */
-  Parrot_sub_p_p_nc,                                 /*    673 */
-  Parrot_sqrt_n_n,                                   /*    674 */
-  Parrot_acos_n_n,                                   /*    675 */
-  Parrot_asec_n_n,                                   /*    676 */
-  Parrot_asin_n_n,                                   /*    677 */
-  Parrot_atan_n_n,                                   /*    678 */
-  Parrot_atan_n_n_n,                                 /*    679 */
-  Parrot_atan_n_nc_n,                                /*    680 */
-  Parrot_atan_n_n_nc,                                /*    681 */
-  Parrot_cos_n_n,                                    /*    682 */
-  Parrot_cosh_n_n,                                   /*    683 */
-  Parrot_exp_n_n,                                    /*    684 */
-  Parrot_ln_n_n,                                     /*    685 */
-  Parrot_log10_n_n,                                  /*    686 */
-  Parrot_log2_n_n,                                   /*    687 */
-  Parrot_sec_n_n,                                    /*    688 */
-  Parrot_sech_n_n,                                   /*    689 */
-  Parrot_sin_n_n,                                    /*    690 */
-  Parrot_sinh_n_n,                                   /*    691 */
-  Parrot_tan_n_n,                                    /*    692 */
-  Parrot_tanh_n_n,                                   /*    693 */
-  Parrot_gcd_i_i_i,                                  /*    694 */
-  Parrot_gcd_i_ic_i,                                 /*    695 */
-  Parrot_gcd_i_i_ic,                                 /*    696 */
-  Parrot_lcm_i_i_i,                                  /*    697 */
-  Parrot_lcm_i_ic_i,                                 /*    698 */
-  Parrot_lcm_i_i_ic,                                 /*    699 */
-  Parrot_fact_i_i,                                   /*    700 */
-  Parrot_fact_n_i,                                   /*    701 */
-  Parrot_callmethodcc_p_s,                           /*    702 */
-  Parrot_callmethodcc_p_sc,                          /*    703 */
-  Parrot_callmethodcc_p_p,                           /*    704 */
-  Parrot_callmethod_p_s_p,                           /*    705 */
-  Parrot_callmethod_p_sc_p,                          /*    706 */
-  Parrot_callmethod_p_p_p,                           /*    707 */
-  Parrot_tailcallmethod_p_s,                         /*    708 */
-  Parrot_tailcallmethod_p_sc,                        /*    709 */
-  Parrot_tailcallmethod_p_p,                         /*    710 */
-  Parrot_addmethod_p_s_p,                            /*    711 */
-  Parrot_addmethod_p_sc_p,                           /*    712 */
-  Parrot_can_i_p_s,                                  /*    713 */
-  Parrot_can_i_p_sc,                                 /*    714 */
-  Parrot_does_i_p_s,                                 /*    715 */
-  Parrot_does_i_p_sc,                                /*    716 */
-  Parrot_does_i_p_p,                                 /*    717 */
-  Parrot_does_i_p_pc,                                /*    718 */
-  Parrot_isa_i_p_s,                                  /*    719 */
-  Parrot_isa_i_p_sc,                                 /*    720 */
-  Parrot_isa_i_p_p,                                  /*    721 */
-  Parrot_isa_i_p_pc,                                 /*    722 */
-  Parrot_newclass_p_s,                               /*    723 */
-  Parrot_newclass_p_sc,                              /*    724 */
-  Parrot_newclass_p_p,                               /*    725 */
-  Parrot_newclass_p_pc,                              /*    726 */
-  Parrot_subclass_p_p,                               /*    727 */
-  Parrot_subclass_p_pc,                              /*    728 */
-  Parrot_subclass_p_p_s,                             /*    729 */
-  Parrot_subclass_p_pc_s,                            /*    730 */
-  Parrot_subclass_p_p_sc,                            /*    731 */
-  Parrot_subclass_p_pc_sc,                           /*    732 */
-  Parrot_subclass_p_p_p,                             /*    733 */
-  Parrot_subclass_p_pc_p,                            /*    734 */
-  Parrot_subclass_p_p_pc,                            /*    735 */
-  Parrot_subclass_p_pc_pc,                           /*    736 */
-  Parrot_subclass_p_s,                               /*    737 */
-  Parrot_subclass_p_sc,                              /*    738 */
-  Parrot_subclass_p_s_s,                             /*    739 */
-  Parrot_subclass_p_sc_s,                            /*    740 */
-  Parrot_subclass_p_s_sc,                            /*    741 */
-  Parrot_subclass_p_sc_sc,                           /*    742 */
-  Parrot_subclass_p_s_p,                             /*    743 */
-  Parrot_subclass_p_sc_p,                            /*    744 */
-  Parrot_subclass_p_s_pc,                            /*    745 */
-  Parrot_subclass_p_sc_pc,                           /*    746 */
-  Parrot_get_class_p_s,                              /*    747 */
-  Parrot_get_class_p_sc,                             /*    748 */
-  Parrot_get_class_p_p,                              /*    749 */
-  Parrot_get_class_p_pc,                             /*    750 */
-  Parrot_class_p_p,                                  /*    751 */
-  Parrot_addparent_p_p,                              /*    752 */
-  Parrot_removeparent_p_p,                           /*    753 */
-  Parrot_addrole_p_p,                                /*    754 */
-  Parrot_addattribute_p_s,                           /*    755 */
-  Parrot_addattribute_p_sc,                          /*    756 */
-  Parrot_removeattribute_p_s,                        /*    757 */
-  Parrot_removeattribute_p_sc,                       /*    758 */
-  Parrot_getattribute_p_p_s,                         /*    759 */
-  Parrot_getattribute_p_p_sc,                        /*    760 */
-  Parrot_getattribute_p_p_p_s,                       /*    761 */
-  Parrot_getattribute_p_p_pc_s,                      /*    762 */
-  Parrot_getattribute_p_p_p_sc,                      /*    763 */
-  Parrot_getattribute_p_p_pc_sc,                     /*    764 */
-  Parrot_setattribute_p_s_p,                         /*    765 */
-  Parrot_setattribute_p_sc_p,                        /*    766 */
-  Parrot_setattribute_p_p_s_p,                       /*    767 */
-  Parrot_setattribute_p_pc_s_p,                      /*    768 */
-  Parrot_setattribute_p_p_sc_p,                      /*    769 */
-  Parrot_setattribute_p_pc_sc_p,                     /*    770 */
-  Parrot_inspect_p_p,                                /*    771 */
-  Parrot_inspect_p_pc,                               /*    772 */
-  Parrot_inspect_p_p_s,                              /*    773 */
-  Parrot_inspect_p_pc_s,                             /*    774 */
-  Parrot_inspect_p_p_sc,                             /*    775 */
-  Parrot_inspect_p_pc_sc,                            /*    776 */
-  Parrot_new_p_s,                                    /*    777 */
-  Parrot_new_p_sc,                                   /*    778 */
-  Parrot_new_p_s_p,                                  /*    779 */
-  Parrot_new_p_sc_p,                                 /*    780 */
-  Parrot_new_p_s_pc,                                 /*    781 */
-  Parrot_new_p_sc_pc,                                /*    782 */
-  Parrot_new_p_p,                                    /*    783 */
-  Parrot_new_p_pc,                                   /*    784 */
-  Parrot_new_p_p_p,                                  /*    785 */
-  Parrot_new_p_pc_p,                                 /*    786 */
-  Parrot_new_p_p_pc,                                 /*    787 */
-  Parrot_new_p_pc_pc,                                /*    788 */
-  Parrot_root_new_p_p,                               /*    789 */
-  Parrot_root_new_p_pc,                              /*    790 */
-  Parrot_root_new_p_p_p,                             /*    791 */
-  Parrot_root_new_p_pc_p,                            /*    792 */
-  Parrot_root_new_p_p_pc,                            /*    793 */
-  Parrot_root_new_p_pc_pc,                           /*    794 */
-  Parrot_typeof_s_p,                                 /*    795 */
-  Parrot_typeof_p_p,                                 /*    796 */
-  Parrot_get_repr_s_p,                               /*    797 */
-  Parrot_find_method_p_p_s,                          /*    798 */
-  Parrot_find_method_p_p_sc,                         /*    799 */
-  Parrot_defined_i_p,                                /*    800 */
-  Parrot_defined_i_p_ki,                             /*    801 */
-  Parrot_defined_i_p_kic,                            /*    802 */
-  Parrot_defined_i_p_k,                              /*    803 */
-  Parrot_defined_i_p_kc,                             /*    804 */
-  Parrot_exists_i_p_ki,                              /*    805 */
-  Parrot_exists_i_p_kic,                             /*    806 */
-  Parrot_exists_i_p_k,                               /*    807 */
-  Parrot_exists_i_p_kc,                              /*    808 */
-  Parrot_delete_p_k,                                 /*    809 */
-  Parrot_delete_p_kc,                                /*    810 */
-  Parrot_delete_p_ki,                                /*    811 */
-  Parrot_delete_p_kic,                               /*    812 */
-  Parrot_elements_i_p,                               /*    813 */
-  Parrot_push_p_i,                                   /*    814 */
-  Parrot_push_p_ic,                                  /*    815 */
-  Parrot_push_p_n,                                   /*    816 */
-  Parrot_push_p_nc,                                  /*    817 */
-  Parrot_push_p_s,                                   /*    818 */
-  Parrot_push_p_sc,                                  /*    819 */
-  Parrot_push_p_p,                                   /*    820 */
-  Parrot_pop_i_p,                                    /*    821 */
-  Parrot_pop_n_p,                                    /*    822 */
-  Parrot_pop_s_p,                                    /*    823 */
-  Parrot_pop_p_p,                                    /*    824 */
-  Parrot_unshift_p_i,                                /*    825 */
-  Parrot_unshift_p_ic,                               /*    826 */
-  Parrot_unshift_p_n,                                /*    827 */
-  Parrot_unshift_p_nc,                               /*    828 */
-  Parrot_unshift_p_s,                                /*    829 */
-  Parrot_unshift_p_sc,                               /*    830 */
-  Parrot_unshift_p_p,                                /*    831 */
-  Parrot_shift_i_p,                                  /*    832 */
-  Parrot_shift_n_p,                                  /*    833 */
-  Parrot_shift_s_p,                                  /*    834 */
-  Parrot_shift_p_p,                                  /*    835 */
-  Parrot_splice_p_p_i_i,                             /*    836 */
-  Parrot_splice_p_p_ic_i,                            /*    837 */
-  Parrot_splice_p_p_i_ic,                            /*    838 */
-  Parrot_splice_p_p_ic_ic,                           /*    839 */
-  Parrot_setprop_p_s_p,                              /*    840 */
-  Parrot_setprop_p_sc_p,                             /*    841 */
-  Parrot_getprop_p_s_p,                              /*    842 */
-  Parrot_getprop_p_sc_p,                             /*    843 */
-  Parrot_delprop_p_s,                                /*    844 */
-  Parrot_delprop_p_sc,                               /*    845 */
-  Parrot_prophash_p_p,                               /*    846 */
-  Parrot_freeze_s_p,                                 /*    847 */
-  Parrot_thaw_p_s,                                   /*    848 */
-  Parrot_thaw_p_sc,                                  /*    849 */
-  Parrot_add_multi_s_s_p,                            /*    850 */
-  Parrot_add_multi_sc_s_p,                           /*    851 */
-  Parrot_add_multi_s_sc_p,                           /*    852 */
-  Parrot_add_multi_sc_sc_p,                          /*    853 */
-  Parrot_find_multi_p_s_s,                           /*    854 */
-  Parrot_find_multi_p_sc_s,                          /*    855 */
-  Parrot_find_multi_p_s_sc,                          /*    856 */
-  Parrot_find_multi_p_sc_sc,                         /*    857 */
-  Parrot_register_p,                                 /*    858 */
-  Parrot_unregister_p,                               /*    859 */
-  Parrot_box_p_i,                                    /*    860 */
-  Parrot_box_p_ic,                                   /*    861 */
-  Parrot_box_p_n,                                    /*    862 */
-  Parrot_box_p_nc,                                   /*    863 */
-  Parrot_box_p_s,                                    /*    864 */
-  Parrot_box_p_sc,                                   /*    865 */
-  Parrot_iter_p_p,                                   /*    866 */
-  Parrot_morph_p_p,                                  /*    867 */
-  Parrot_morph_p_pc,                                 /*    868 */
-  Parrot_clone_s_s,                                  /*    869 */
-  Parrot_clone_s_sc,                                 /*    870 */
-  Parrot_exchange_i_i,                               /*    871 */
-  Parrot_exchange_p_p,                               /*    872 */
-  Parrot_exchange_n_n,                               /*    873 */
-  Parrot_exchange_s_s,                               /*    874 */
-  Parrot_set_i_i,                                    /*    875 */
-  Parrot_set_i_ic,                                   /*    876 */
-  Parrot_set_i_n,                                    /*    877 */
-  Parrot_set_i_nc,                                   /*    878 */
-  Parrot_set_i_s,                                    /*    879 */
-  Parrot_set_i_sc,                                   /*    880 */
-  Parrot_set_n_n,                                    /*    881 */
-  Parrot_set_n_nc,                                   /*    882 */
-  Parrot_set_n_i,                                    /*    883 */
-  Parrot_set_n_ic,                                   /*    884 */
-  Parrot_set_n_s,                                    /*    885 */
-  Parrot_set_n_sc,                                   /*    886 */
-  Parrot_set_n_p,                                    /*    887 */
-  Parrot_set_s_p,                                    /*    888 */
-  Parrot_set_s_s,                                    /*    889 */
-  Parrot_set_s_sc,                                   /*    890 */
-  Parrot_set_s_i,                                    /*    891 */
-  Parrot_set_s_ic,                                   /*    892 */
-  Parrot_set_s_n,                                    /*    893 */
-  Parrot_set_s_nc,                                   /*    894 */
-  Parrot_set_p_pc,                                   /*    895 */
-  Parrot_set_p_p,                                    /*    896 */
-  Parrot_set_p_i,                                    /*    897 */
-  Parrot_set_p_ic,                                   /*    898 */
-  Parrot_set_p_n,                                    /*    899 */
-  Parrot_set_p_nc,                                   /*    900 */
-  Parrot_set_p_s,                                    /*    901 */
-  Parrot_set_p_sc,                                   /*    902 */
-  Parrot_set_i_p,                                    /*    903 */
-  Parrot_assign_p_p,                                 /*    904 */
-  Parrot_assign_p_i,                                 /*    905 */
-  Parrot_assign_p_ic,                                /*    906 */
-  Parrot_assign_p_n,                                 /*    907 */
-  Parrot_assign_p_nc,                                /*    908 */
-  Parrot_assign_p_s,                                 /*    909 */
-  Parrot_assign_p_sc,                                /*    910 */
-  Parrot_assign_s_s,                                 /*    911 */
-  Parrot_assign_s_sc,                                /*    912 */
-  Parrot_setref_p_p,                                 /*    913 */
-  Parrot_deref_p_p,                                  /*    914 */
-  Parrot_setp_ind_i_p,                               /*    915 */
-  Parrot_setp_ind_ic_p,                              /*    916 */
-  Parrot_setn_ind_i_n,                               /*    917 */
-  Parrot_setn_ind_ic_n,                              /*    918 */
-  Parrot_setn_ind_i_nc,                              /*    919 */
-  Parrot_setn_ind_ic_nc,                             /*    920 */
-  Parrot_sets_ind_i_s,                               /*    921 */
-  Parrot_sets_ind_ic_s,                              /*    922 */
-  Parrot_sets_ind_i_sc,                              /*    923 */
-  Parrot_sets_ind_ic_sc,                             /*    924 */
-  Parrot_seti_ind_i_i,                               /*    925 */
-  Parrot_seti_ind_ic_i,                              /*    926 */
-  Parrot_seti_ind_i_ic,                              /*    927 */
-  Parrot_seti_ind_ic_ic,                             /*    928 */
-  Parrot_set_p_ki_i,                                 /*    929 */
-  Parrot_set_p_kic_i,                                /*    930 */
-  Parrot_set_p_ki_ic,                                /*    931 */
-  Parrot_set_p_kic_ic,                               /*    932 */
-  Parrot_set_p_ki_n,                                 /*    933 */
-  Parrot_set_p_kic_n,                                /*    934 */
-  Parrot_set_p_ki_nc,                                /*    935 */
-  Parrot_set_p_kic_nc,                               /*    936 */
-  Parrot_set_p_ki_s,                                 /*    937 */
-  Parrot_set_p_kic_s,                                /*    938 */
-  Parrot_set_p_ki_sc,                                /*    939 */
-  Parrot_set_p_kic_sc,                               /*    940 */
-  Parrot_set_p_ki_p,                                 /*    941 */
-  Parrot_set_p_kic_p,                                /*    942 */
-  Parrot_set_i_p_ki,                                 /*    943 */
-  Parrot_set_i_p_kic,                                /*    944 */
-  Parrot_set_n_p_ki,                                 /*    945 */
-  Parrot_set_n_p_kic,                                /*    946 */
-  Parrot_set_s_p_ki,                                 /*    947 */
-  Parrot_set_s_p_kic,                                /*    948 */
-  Parrot_set_p_p_ki,                                 /*    949 */
-  Parrot_set_p_p_kic,                                /*    950 */
-  Parrot_set_p_k_i,                                  /*    951 */
-  Parrot_set_p_kc_i,                                 /*    952 */
-  Parrot_set_p_k_ic,                                 /*    953 */
-  Parrot_set_p_kc_ic,                                /*    954 */
-  Parrot_set_p_k_n,                                  /*    955 */
-  Parrot_set_p_kc_n,                                 /*    956 */
-  Parrot_set_p_k_nc,                                 /*    957 */
-  Parrot_set_p_kc_nc,                                /*    958 */
-  Parrot_set_p_k_s,                                  /*    959 */
-  Parrot_set_p_kc_s,                                 /*    960 */
-  Parrot_set_p_k_sc,                                 /*    961 */
-  Parrot_set_p_kc_sc,                                /*    962 */
-  Parrot_set_p_k_p,                                  /*    963 */
-  Parrot_set_p_kc_p,                                 /*    964 */
-  Parrot_set_i_p_k,                                  /*    965 */
-  Parrot_set_i_p_kc,                                 /*    966 */
-  Parrot_set_n_p_k,                                  /*    967 */
-  Parrot_set_n_p_kc,                                 /*    968 */
-  Parrot_set_s_p_k,                                  /*    969 */
-  Parrot_set_s_p_kc,                                 /*    970 */
-  Parrot_set_p_p_k,                                  /*    971 */
-  Parrot_set_p_p_kc,                                 /*    972 */
-  Parrot_clone_p_p,                                  /*    973 */
-  Parrot_clone_p_p_p,                                /*    974 */
-  Parrot_clone_p_p_pc,                               /*    975 */
-  Parrot_copy_p_p,                                   /*    976 */
-  Parrot_null_s,                                     /*    977 */
-  Parrot_null_i,                                     /*    978 */
-  Parrot_null_p,                                     /*    979 */
-  Parrot_null_n,                                     /*    980 */
-  Parrot_cleari,                                     /*    981 */
-  Parrot_clearn,                                     /*    982 */
-  Parrot_clears,                                     /*    983 */
-  Parrot_clearp,                                     /*    984 */
-  Parrot_ord_i_s,                                    /*    985 */
-  Parrot_ord_i_sc,                                   /*    986 */
-  Parrot_ord_i_s_i,                                  /*    987 */
-  Parrot_ord_i_sc_i,                                 /*    988 */
-  Parrot_ord_i_s_ic,                                 /*    989 */
-  Parrot_ord_i_sc_ic,                                /*    990 */
-  Parrot_chr_s_i,                                    /*    991 */
-  Parrot_chr_s_ic,                                   /*    992 */
-  Parrot_chopn_s_i,                                  /*    993 */
-  Parrot_chopn_s_ic,                                 /*    994 */
-  Parrot_chopn_s_s_i,                                /*    995 */
-  Parrot_chopn_s_sc_i,                               /*    996 */
-  Parrot_chopn_s_s_ic,                               /*    997 */
-  Parrot_chopn_s_sc_ic,                              /*    998 */
-  Parrot_concat_s_s,                                 /*    999 */
-  Parrot_concat_s_sc,                                /*   1000 */
-  Parrot_concat_p_p,                                 /*   1001 */
-  Parrot_concat_p_s,                                 /*   1002 */
-  Parrot_concat_p_sc,                                /*   1003 */
-  Parrot_concat_s_s_s,                               /*   1004 */
-  Parrot_concat_s_sc_s,                              /*   1005 */
-  Parrot_concat_s_s_sc,                              /*   1006 */
-  Parrot_concat_p_p_s,                               /*   1007 */
-  Parrot_concat_p_p_sc,                              /*   1008 */
-  Parrot_concat_p_p_p,                               /*   1009 */
-  Parrot_repeat_s_s_i,                               /*   1010 */
-  Parrot_repeat_s_sc_i,                              /*   1011 */
-  Parrot_repeat_s_s_ic,                              /*   1012 */
-  Parrot_repeat_s_sc_ic,                             /*   1013 */
-  Parrot_repeat_p_p_i,                               /*   1014 */
-  Parrot_repeat_p_p_ic,                              /*   1015 */
-  Parrot_repeat_p_p_p,                               /*   1016 */
-  Parrot_repeat_p_i,                                 /*   1017 */
-  Parrot_repeat_p_ic,                                /*   1018 */
-  Parrot_repeat_p_p,                                 /*   1019 */
-  Parrot_length_i_s,                                 /*   1020 */
-  Parrot_length_i_sc,                                /*   1021 */
-  Parrot_bytelength_i_s,                             /*   1022 */
-  Parrot_bytelength_i_sc,                            /*   1023 */
-  Parrot_pin_s,                                      /*   1024 */
-  Parrot_unpin_s,                                    /*   1025 */
-  Parrot_substr_s_s_i,                               /*   1026 */
-  Parrot_substr_s_sc_i,                              /*   1027 */
-  Parrot_substr_s_s_ic,                              /*   1028 */
-  Parrot_substr_s_sc_ic,                             /*   1029 */
-  Parrot_substr_s_s_i_i,                             /*   1030 */
-  Parrot_substr_s_sc_i_i,                            /*   1031 */
-  Parrot_substr_s_s_ic_i,                            /*   1032 */
-  Parrot_substr_s_sc_ic_i,                           /*   1033 */
-  Parrot_substr_s_s_i_ic,                            /*   1034 */
-  Parrot_substr_s_sc_i_ic,                           /*   1035 */
-  Parrot_substr_s_s_ic_ic,                           /*   1036 */
-  Parrot_substr_s_sc_ic_ic,                          /*   1037 */
-  Parrot_substr_s_s_i_i_s,                           /*   1038 */
-  Parrot_substr_s_s_ic_i_s,                          /*   1039 */
-  Parrot_substr_s_s_i_ic_s,                          /*   1040 */
-  Parrot_substr_s_s_ic_ic_s,                         /*   1041 */
-  Parrot_substr_s_s_i_i_sc,                          /*   1042 */
-  Parrot_substr_s_s_ic_i_sc,                         /*   1043 */
-  Parrot_substr_s_s_i_ic_sc,                         /*   1044 */
-  Parrot_substr_s_s_ic_ic_sc,                        /*   1045 */
-  Parrot_substr_s_i_i_s,                             /*   1046 */
-  Parrot_substr_s_ic_i_s,                            /*   1047 */
-  Parrot_substr_s_i_ic_s,                            /*   1048 */
-  Parrot_substr_s_ic_ic_s,                           /*   1049 */
-  Parrot_substr_s_i_i_sc,                            /*   1050 */
-  Parrot_substr_s_ic_i_sc,                           /*   1051 */
-  Parrot_substr_s_i_ic_sc,                           /*   1052 */
-  Parrot_substr_s_ic_ic_sc,                          /*   1053 */
-  Parrot_substr_s_p_i_i,                             /*   1054 */
-  Parrot_substr_s_p_ic_i,                            /*   1055 */
-  Parrot_substr_s_p_i_ic,                            /*   1056 */
-  Parrot_substr_s_p_ic_ic,                           /*   1057 */
-  Parrot_index_i_s_s,                                /*   1058 */
-  Parrot_index_i_sc_s,                               /*   1059 */
-  Parrot_index_i_s_sc,                               /*   1060 */
-  Parrot_index_i_sc_sc,                              /*   1061 */
-  Parrot_index_i_s_s_i,                              /*   1062 */
-  Parrot_index_i_sc_s_i,                             /*   1063 */
-  Parrot_index_i_s_sc_i,                             /*   1064 */
-  Parrot_index_i_sc_sc_i,                            /*   1065 */
-  Parrot_index_i_s_s_ic,                             /*   1066 */
-  Parrot_index_i_sc_s_ic,                            /*   1067 */
-  Parrot_index_i_s_sc_ic,                            /*   1068 */
-  Parrot_index_i_sc_sc_ic,                           /*   1069 */
-  Parrot_sprintf_s_s_p,                              /*   1070 */
-  Parrot_sprintf_s_sc_p,                             /*   1071 */
-  Parrot_sprintf_p_p_p,                              /*   1072 */
-  Parrot_new_s,                                      /*   1073 */
-  Parrot_new_s_i,                                    /*   1074 */
-  Parrot_new_s_ic,                                   /*   1075 */
-  Parrot_stringinfo_i_s_i,                           /*   1076 */
-  Parrot_stringinfo_i_sc_i,                          /*   1077 */
-  Parrot_stringinfo_i_s_ic,                          /*   1078 */
-  Parrot_stringinfo_i_sc_ic,                         /*   1079 */
-  Parrot_upcase_s_s,                                 /*   1080 */
-  Parrot_upcase_s_sc,                                /*   1081 */
-  Parrot_upcase_s,                                   /*   1082 */
-  Parrot_downcase_s_s,                               /*   1083 */
-  Parrot_downcase_s_sc,                              /*   1084 */
-  Parrot_downcase_s,                                 /*   1085 */
-  Parrot_titlecase_s_s,                              /*   1086 */
-  Parrot_titlecase_s_sc,                             /*   1087 */
-  Parrot_titlecase_s,                                /*   1088 */
-  Parrot_join_s_s_p,                                 /*   1089 */
-  Parrot_join_s_sc_p,                                /*   1090 */
-  Parrot_split_p_s_s,                                /*   1091 */
-  Parrot_split_p_sc_s,                               /*   1092 */
-  Parrot_split_p_s_sc,                               /*   1093 */
-  Parrot_split_p_sc_sc,                              /*   1094 */
-  Parrot_charset_i_s,                                /*   1095 */
-  Parrot_charset_i_sc,                               /*   1096 */
-  Parrot_charsetname_s_i,                            /*   1097 */
-  Parrot_charsetname_s_ic,                           /*   1098 */
-  Parrot_find_charset_i_s,                           /*   1099 */
-  Parrot_find_charset_i_sc,                          /*   1100 */
-  Parrot_trans_charset_s_i,                          /*   1101 */
-  Parrot_trans_charset_s_ic,                         /*   1102 */
-  Parrot_trans_charset_s_s_i,                        /*   1103 */
-  Parrot_trans_charset_s_sc_i,                       /*   1104 */
-  Parrot_trans_charset_s_s_ic,                       /*   1105 */
-  Parrot_trans_charset_s_sc_ic,                      /*   1106 */
-  Parrot_encoding_i_s,                               /*   1107 */
-  Parrot_encoding_i_sc,                              /*   1108 */
-  Parrot_encodingname_s_i,                           /*   1109 */
-  Parrot_encodingname_s_ic,                          /*   1110 */
-  Parrot_find_encoding_i_s,                          /*   1111 */
-  Parrot_find_encoding_i_sc,                         /*   1112 */
-  Parrot_trans_encoding_s_i,                         /*   1113 */
-  Parrot_trans_encoding_s_ic,                        /*   1114 */
-  Parrot_trans_encoding_s_s_i,                       /*   1115 */
-  Parrot_trans_encoding_s_sc_i,                      /*   1116 */
-  Parrot_trans_encoding_s_s_ic,                      /*   1117 */
-  Parrot_trans_encoding_s_sc_ic,                     /*   1118 */
-  Parrot_is_cclass_i_i_s_i,                          /*   1119 */
-  Parrot_is_cclass_i_ic_s_i,                         /*   1120 */
-  Parrot_is_cclass_i_i_sc_i,                         /*   1121 */
-  Parrot_is_cclass_i_ic_sc_i,                        /*   1122 */
-  Parrot_is_cclass_i_i_s_ic,                         /*   1123 */
-  Parrot_is_cclass_i_ic_s_ic,                        /*   1124 */
-  Parrot_is_cclass_i_i_sc_ic,                        /*   1125 */
-  Parrot_is_cclass_i_ic_sc_ic,                       /*   1126 */
-  Parrot_find_cclass_i_i_s_i_i,                      /*   1127 */
-  Parrot_find_cclass_i_ic_s_i_i,                     /*   1128 */
-  Parrot_find_cclass_i_i_sc_i_i,                     /*   1129 */
-  Parrot_find_cclass_i_ic_sc_i_i,                    /*   1130 */
-  Parrot_find_cclass_i_i_s_ic_i,                     /*   1131 */
-  Parrot_find_cclass_i_ic_s_ic_i,                    /*   1132 */
-  Parrot_find_cclass_i_i_sc_ic_i,                    /*   1133 */
-  Parrot_find_cclass_i_ic_sc_ic_i,                   /*   1134 */
-  Parrot_find_cclass_i_i_s_i_ic,                     /*   1135 */
-  Parrot_find_cclass_i_ic_s_i_ic,                    /*   1136 */
-  Parrot_find_cclass_i_i_sc_i_ic,                    /*   1137 */
-  Parrot_find_cclass_i_ic_sc_i_ic,                   /*   1138 */
-  Parrot_find_cclass_i_i_s_ic_ic,                    /*   1139 */
-  Parrot_find_cclass_i_ic_s_ic_ic,                   /*   1140 */
-  Parrot_find_cclass_i_i_sc_ic_ic,                   /*   1141 */
-  Parrot_find_cclass_i_ic_sc_ic_ic,                  /*   1142 */
-  Parrot_find_not_cclass_i_i_s_i_i,                  /*   1143 */
-  Parrot_find_not_cclass_i_ic_s_i_i,                 /*   1144 */
-  Parrot_find_not_cclass_i_i_sc_i_i,                 /*   1145 */
-  Parrot_find_not_cclass_i_ic_sc_i_i,                /*   1146 */
-  Parrot_find_not_cclass_i_i_s_ic_i,                 /*   1147 */
-  Parrot_find_not_cclass_i_ic_s_ic_i,                /*   1148 */
-  Parrot_find_not_cclass_i_i_sc_ic_i,                /*   1149 */
-  Parrot_find_not_cclass_i_ic_sc_ic_i,               /*   1150 */
-  Parrot_find_not_cclass_i_i_s_i_ic,                 /*   1151 */
-  Parrot_find_not_cclass_i_ic_s_i_ic,                /*   1152 */
-  Parrot_find_not_cclass_i_i_sc_i_ic,                /*   1153 */
-  Parrot_find_not_cclass_i_ic_sc_i_ic,               /*   1154 */
-  Parrot_find_not_cclass_i_i_s_ic_ic,                /*   1155 */
-  Parrot_find_not_cclass_i_ic_s_ic_ic,               /*   1156 */
-  Parrot_find_not_cclass_i_i_sc_ic_ic,               /*   1157 */
-  Parrot_find_not_cclass_i_ic_sc_ic_ic,              /*   1158 */
-  Parrot_escape_s_s,                                 /*   1159 */
-  Parrot_compose_s_s,                                /*   1160 */
-  Parrot_compose_s_sc,                               /*   1161 */
-  Parrot_spawnw_i_s,                                 /*   1162 */
-  Parrot_spawnw_i_sc,                                /*   1163 */
-  Parrot_spawnw_i_p,                                 /*   1164 */
-  Parrot_err_i,                                      /*   1165 */
-  Parrot_err_s,                                      /*   1166 */
-  Parrot_err_s_i,                                    /*   1167 */
-  Parrot_err_s_ic,                                   /*   1168 */
-  Parrot_time_i,                                     /*   1169 */
-  Parrot_time_n,                                     /*   1170 */
-  Parrot_gmtime_s_i,                                 /*   1171 */
-  Parrot_gmtime_s_ic,                                /*   1172 */
-  Parrot_localtime_s_i,                              /*   1173 */
-  Parrot_localtime_s_ic,                             /*   1174 */
-  Parrot_decodetime_p_i,                             /*   1175 */
-  Parrot_decodetime_p_ic,                            /*   1176 */
-  Parrot_decodelocaltime_p_i,                        /*   1177 */
-  Parrot_decodelocaltime_p_ic,                       /*   1178 */
-  Parrot_sysinfo_s_i,                                /*   1179 */
-  Parrot_sysinfo_s_ic,                               /*   1180 */
-  Parrot_sysinfo_i_i,                                /*   1181 */
-  Parrot_sysinfo_i_ic,                               /*   1182 */
-  Parrot_sleep_i,                                    /*   1183 */
-  Parrot_sleep_ic,                                   /*   1184 */
-  Parrot_sleep_n,                                    /*   1185 */
-  Parrot_sleep_nc,                                   /*   1186 */
-  Parrot_sizeof_i_i,                                 /*   1187 */
-  Parrot_sizeof_i_ic,                                /*   1188 */
-  Parrot_store_lex_s_p,                              /*   1189 */
-  Parrot_store_lex_sc_p,                             /*   1190 */
-  Parrot_store_dynamic_lex_s_p,                      /*   1191 */
-  Parrot_store_dynamic_lex_sc_p,                     /*   1192 */
-  Parrot_find_lex_p_s,                               /*   1193 */
-  Parrot_find_lex_p_sc,                              /*   1194 */
-  Parrot_find_dynamic_lex_p_s,                       /*   1195 */
-  Parrot_find_dynamic_lex_p_sc,                      /*   1196 */
-  Parrot_find_caller_lex_p_s,                        /*   1197 */
-  Parrot_find_caller_lex_p_sc,                       /*   1198 */
-  Parrot_get_namespace_p,                            /*   1199 */
-  Parrot_get_namespace_p_p,                          /*   1200 */
-  Parrot_get_namespace_p_pc,                         /*   1201 */
-  Parrot_get_hll_namespace_p,                        /*   1202 */
-  Parrot_get_hll_namespace_p_p,                      /*   1203 */
-  Parrot_get_hll_namespace_p_pc,                     /*   1204 */
-  Parrot_get_root_namespace_p,                       /*   1205 */
-  Parrot_get_root_namespace_p_p,                     /*   1206 */
-  Parrot_get_root_namespace_p_pc,                    /*   1207 */
-  Parrot_get_global_p_s,                             /*   1208 */
-  Parrot_get_global_p_sc,                            /*   1209 */
-  Parrot_get_global_p_p_s,                           /*   1210 */
-  Parrot_get_global_p_pc_s,                          /*   1211 */
-  Parrot_get_global_p_p_sc,                          /*   1212 */
-  Parrot_get_global_p_pc_sc,                         /*   1213 */
-  Parrot_get_hll_global_p_s,                         /*   1214 */
-  Parrot_get_hll_global_p_sc,                        /*   1215 */
-  Parrot_get_hll_global_p_p_s,                       /*   1216 */
-  Parrot_get_hll_global_p_pc_s,                      /*   1217 */
-  Parrot_get_hll_global_p_p_sc,                      /*   1218 */
-  Parrot_get_hll_global_p_pc_sc,                     /*   1219 */
-  Parrot_get_root_global_p_s,                        /*   1220 */
-  Parrot_get_root_global_p_sc,                       /*   1221 */
-  Parrot_get_root_global_p_p_s,                      /*   1222 */
-  Parrot_get_root_global_p_pc_s,                     /*   1223 */
-  Parrot_get_root_global_p_p_sc,                     /*   1224 */
-  Parrot_get_root_global_p_pc_sc,                    /*   1225 */
-  Parrot_set_global_s_p,                             /*   1226 */
-  Parrot_set_global_sc_p,                            /*   1227 */
-  Parrot_set_global_p_s_p,                           /*   1228 */
-  Parrot_set_global_pc_s_p,                          /*   1229 */
-  Parrot_set_global_p_sc_p,                          /*   1230 */
-  Parrot_set_global_pc_sc_p,                         /*   1231 */
-  Parrot_set_hll_global_s_p,                         /*   1232 */
-  Parrot_set_hll_global_sc_p,                        /*   1233 */
-  Parrot_set_hll_global_p_s_p,                       /*   1234 */
-  Parrot_set_hll_global_pc_s_p,                      /*   1235 */
-  Parrot_set_hll_global_p_sc_p,                      /*   1236 */
-  Parrot_set_hll_global_pc_sc_p,                     /*   1237 */
-  Parrot_set_root_global_s_p,                        /*   1238 */
-  Parrot_set_root_global_sc_p,                       /*   1239 */
-  Parrot_set_root_global_p_s_p,                      /*   1240 */
-  Parrot_set_root_global_pc_s_p,                     /*   1241 */
-  Parrot_set_root_global_p_sc_p,                     /*   1242 */
-  Parrot_set_root_global_pc_sc_p,                    /*   1243 */
-  Parrot_find_name_p_s,                              /*   1244 */
-  Parrot_find_name_p_sc,                             /*   1245 */
-  Parrot_find_sub_not_null_p_s,                      /*   1246 */
-  Parrot_find_sub_not_null_p_sc,                     /*   1247 */
-  Parrot_trap,                                       /*   1248 */
-  Parrot_set_label_p_ic,                             /*   1249 */
-  Parrot_get_label_i_p,                              /*   1250 */
-  Parrot_fetch_p_p_p_p,                              /*   1251 */
-  Parrot_fetch_p_pc_p_p,                             /*   1252 */
-  Parrot_fetch_p_p_pc_p,                             /*   1253 */
-  Parrot_fetch_p_pc_pc_p,                            /*   1254 */
-  Parrot_fetch_p_p_p_pc,                             /*   1255 */
-  Parrot_fetch_p_pc_p_pc,                            /*   1256 */
-  Parrot_fetch_p_p_pc_pc,                            /*   1257 */
-  Parrot_fetch_p_pc_pc_pc,                           /*   1258 */
-  Parrot_fetch_p_p_i_p,                              /*   1259 */
-  Parrot_fetch_p_pc_i_p,                             /*   1260 */
-  Parrot_fetch_p_p_ic_p,                             /*   1261 */
-  Parrot_fetch_p_pc_ic_p,                            /*   1262 */
-  Parrot_fetch_p_p_i_pc,                             /*   1263 */
-  Parrot_fetch_p_pc_i_pc,                            /*   1264 */
-  Parrot_fetch_p_p_ic_pc,                            /*   1265 */
-  Parrot_fetch_p_pc_ic_pc,                           /*   1266 */
-  Parrot_fetch_p_p_s_p,                              /*   1267 */
-  Parrot_fetch_p_pc_s_p,                             /*   1268 */
-  Parrot_fetch_p_p_sc_p,                             /*   1269 */
-  Parrot_fetch_p_pc_sc_p,                            /*   1270 */
-  Parrot_fetch_p_p_s_pc,                             /*   1271 */
-  Parrot_fetch_p_pc_s_pc,                            /*   1272 */
-  Parrot_fetch_p_p_sc_pc,                            /*   1273 */
-  Parrot_fetch_p_pc_sc_pc,                           /*   1274 */
-  Parrot_vivify_p_p_p_p,                             /*   1275 */
-  Parrot_vivify_p_pc_p_p,                            /*   1276 */
-  Parrot_vivify_p_p_pc_p,                            /*   1277 */
-  Parrot_vivify_p_pc_pc_p,                           /*   1278 */
-  Parrot_vivify_p_p_p_pc,                            /*   1279 */
-  Parrot_vivify_p_pc_p_pc,                           /*   1280 */
-  Parrot_vivify_p_p_pc_pc,                           /*   1281 */
-  Parrot_vivify_p_pc_pc_pc,                          /*   1282 */
-  Parrot_vivify_p_p_i_p,                             /*   1283 */
-  Parrot_vivify_p_pc_i_p,                            /*   1284 */
-  Parrot_vivify_p_p_ic_p,                            /*   1285 */
-  Parrot_vivify_p_pc_ic_p,                           /*   1286 */
-  Parrot_vivify_p_p_i_pc,                            /*   1287 */
-  Parrot_vivify_p_pc_i_pc,                           /*   1288 */
-  Parrot_vivify_p_p_ic_pc,                           /*   1289 */
-  Parrot_vivify_p_pc_ic_pc,                          /*   1290 */
-  Parrot_vivify_p_p_s_p,                             /*   1291 */
-  Parrot_vivify_p_pc_s_p,                            /*   1292 */
-  Parrot_vivify_p_p_sc_p,                            /*   1293 */
-  Parrot_vivify_p_pc_sc_p,                           /*   1294 */
-  Parrot_vivify_p_p_s_pc,                            /*   1295 */
-  Parrot_vivify_p_pc_s_pc,                           /*   1296 */
-  Parrot_vivify_p_p_sc_pc,                           /*   1297 */
-  Parrot_vivify_p_pc_sc_pc,                          /*   1298 */
-  Parrot_new_p_s_i,                                  /*   1299 */
-  Parrot_new_p_sc_i,                                 /*   1300 */
-  Parrot_new_p_s_ic,                                 /*   1301 */
-  Parrot_new_p_sc_ic,                                /*   1302 */
-  Parrot_new_p_p_i,                                  /*   1303 */
-  Parrot_new_p_pc_i,                                 /*   1304 */
-  Parrot_new_p_p_ic,                                 /*   1305 */
-  Parrot_new_p_pc_ic,                                /*   1306 */
-  Parrot_root_new_p_p_i,                             /*   1307 */
-  Parrot_root_new_p_pc_i,                            /*   1308 */
-  Parrot_root_new_p_p_ic,                            /*   1309 */
-  Parrot_root_new_p_pc_ic,                           /*   1310 */
+  Parrot_get_params_pc,                              /*     33 */
+  Parrot_set_returns_pc,                             /*     34 */
+  Parrot_get_results_pc,                             /*     35 */
+  Parrot_set_result_info_p,                          /*     36 */
+  Parrot_set_result_info_pc,                         /*     37 */
+  Parrot_result_info_p,                              /*     38 */
+  Parrot_set_addr_i_ic,                              /*     39 */
+  Parrot_set_addr_p_ic,                              /*     40 */
+  Parrot_set_addr_p_i,                               /*     41 */
+  Parrot_get_addr_i_p,                               /*     42 */
+  Parrot_schedule_p,                                 /*     43 */
+  Parrot_addhandler_p,                               /*     44 */
+  Parrot_push_eh_ic,                                 /*     45 */
+  Parrot_push_eh_p,                                  /*     46 */
+  Parrot_pop_eh,                                     /*     47 */
+  Parrot_throw_p,                                    /*     48 */
+  Parrot_throw_p_p,                                  /*     49 */
+  Parrot_rethrow_p,                                  /*     50 */
+  Parrot_count_eh_i,                                 /*     51 */
+  Parrot_die_s,                                      /*     52 */
+  Parrot_die_sc,                                     /*     53 */
+  Parrot_die_p,                                      /*     54 */
+  Parrot_die_pc,                                     /*     55 */
+  Parrot_die_i_i,                                    /*     56 */
+  Parrot_die_ic_i,                                   /*     57 */
+  Parrot_die_i_ic,                                   /*     58 */
+  Parrot_die_ic_ic,                                  /*     59 */
+  Parrot_exit_i,                                     /*     60 */
+  Parrot_exit_ic,                                    /*     61 */
+  Parrot_debug_i,                                    /*     62 */
+  Parrot_debug_ic,                                   /*     63 */
+  Parrot_bounds_i,                                   /*     64 */
+  Parrot_bounds_ic,                                  /*     65 */
+  Parrot_profile_i,                                  /*     66 */
+  Parrot_profile_ic,                                 /*     67 */
+  Parrot_trace_i,                                    /*     68 */
+  Parrot_trace_ic,                                   /*     69 */
+  Parrot_gc_debug_i,                                 /*     70 */
+  Parrot_gc_debug_ic,                                /*     71 */
+  Parrot_interpinfo_i_i,                             /*     72 */
+  Parrot_interpinfo_i_ic,                            /*     73 */
+  Parrot_interpinfo_p_i,                             /*     74 */
+  Parrot_interpinfo_p_ic,                            /*     75 */
+  Parrot_interpinfo_s_i,                             /*     76 */
+  Parrot_interpinfo_s_ic,                            /*     77 */
+  Parrot_warningson_i,                               /*     78 */
+  Parrot_warningson_ic,                              /*     79 */
+  Parrot_warningsoff_i,                              /*     80 */
+  Parrot_warningsoff_ic,                             /*     81 */
+  Parrot_errorson_i,                                 /*     82 */
+  Parrot_errorson_ic,                                /*     83 */
+  Parrot_errorsoff_i,                                /*     84 */
+  Parrot_errorsoff_ic,                               /*     85 */
+  Parrot_runinterp_p_i,                              /*     86 */
+  Parrot_runinterp_p_ic,                             /*     87 */
+  Parrot_getinterp_p,                                /*     88 */
+  Parrot_sweep_ic,                                   /*     89 */
+  Parrot_collect,                                    /*     90 */
+  Parrot_sweepoff,                                   /*     91 */
+  Parrot_sweepon,                                    /*     92 */
+  Parrot_collectoff,                                 /*     93 */
+  Parrot_collecton,                                  /*     94 */
+  Parrot_needs_destroy_p,                            /*     95 */
+  Parrot_loadlib_p_s,                                /*     96 */
+  Parrot_loadlib_p_sc,                               /*     97 */
+  Parrot_loadlib_p_s_p,                              /*     98 */
+  Parrot_loadlib_p_sc_p,                             /*     99 */
+  Parrot_loadlib_p_s_pc,                             /*    100 */
+  Parrot_loadlib_p_sc_pc,                            /*    101 */
+  Parrot_dlfunc_p_p_s_s,                             /*    102 */
+  Parrot_dlfunc_p_p_sc_s,                            /*    103 */
+  Parrot_dlfunc_p_p_s_sc,                            /*    104 */
+  Parrot_dlfunc_p_p_sc_sc,                           /*    105 */
+  Parrot_dlvar_p_p_s,                                /*    106 */
+  Parrot_dlvar_p_p_sc,                               /*    107 */
+  Parrot_compreg_s_p,                                /*    108 */
+  Parrot_compreg_sc_p,                               /*    109 */
+  Parrot_compreg_p_s,                                /*    110 */
+  Parrot_compreg_p_sc,                               /*    111 */
+  Parrot_new_callback_p_p_p_s,                       /*    112 */
+  Parrot_new_callback_p_p_p_sc,                      /*    113 */
+  Parrot_annotations_p,                              /*    114 */
+  Parrot_annotations_p_s,                            /*    115 */
+  Parrot_annotations_p_sc,                           /*    116 */
+  Parrot_band_i_i,                                   /*    117 */
+  Parrot_band_i_ic,                                  /*    118 */
+  Parrot_band_p_i,                                   /*    119 */
+  Parrot_band_p_ic,                                  /*    120 */
+  Parrot_band_p_p,                                   /*    121 */
+  Parrot_band_i_i_i,                                 /*    122 */
+  Parrot_band_i_ic_i,                                /*    123 */
+  Parrot_band_i_i_ic,                                /*    124 */
+  Parrot_band_p_p_i,                                 /*    125 */
+  Parrot_band_p_p_ic,                                /*    126 */
+  Parrot_band_p_p_p,                                 /*    127 */
+  Parrot_bands_p_s,                                  /*    128 */
+  Parrot_bands_p_sc,                                 /*    129 */
+  Parrot_bands_p_p,                                  /*    130 */
+  Parrot_bands_s_s_s,                                /*    131 */
+  Parrot_bands_s_sc_s,                               /*    132 */
+  Parrot_bands_s_s_sc,                               /*    133 */
+  Parrot_bands_p_p_s,                                /*    134 */
+  Parrot_bands_p_p_sc,                               /*    135 */
+  Parrot_bands_p_p_p,                                /*    136 */
+  Parrot_bnot_i,                                     /*    137 */
+  Parrot_bnot_i_i,                                   /*    138 */
+  Parrot_bnot_p,                                     /*    139 */
+  Parrot_bnot_p_p,                                   /*    140 */
+  Parrot_bnots_s_s,                                  /*    141 */
+  Parrot_bnots_s_sc,                                 /*    142 */
+  Parrot_bnots_p,                                    /*    143 */
+  Parrot_bnots_p_p,                                  /*    144 */
+  Parrot_bor_i_i,                                    /*    145 */
+  Parrot_bor_i_ic,                                   /*    146 */
+  Parrot_bor_p_i,                                    /*    147 */
+  Parrot_bor_p_ic,                                   /*    148 */
+  Parrot_bor_p_p,                                    /*    149 */
+  Parrot_bor_i_i_i,                                  /*    150 */
+  Parrot_bor_i_ic_i,                                 /*    151 */
+  Parrot_bor_i_i_ic,                                 /*    152 */
+  Parrot_bor_p_p_i,                                  /*    153 */
+  Parrot_bor_p_p_ic,                                 /*    154 */
+  Parrot_bor_p_p_p,                                  /*    155 */
+  Parrot_bors_p_s,                                   /*    156 */
+  Parrot_bors_p_sc,                                  /*    157 */
+  Parrot_bors_p_p,                                   /*    158 */
+  Parrot_bors_s_s_s,                                 /*    159 */
+  Parrot_bors_s_sc_s,                                /*    160 */
+  Parrot_bors_s_s_sc,                                /*    161 */
+  Parrot_bors_p_p_s,                                 /*    162 */
+  Parrot_bors_p_p_sc,                                /*    163 */
+  Parrot_bors_p_p_p,                                 /*    164 */
+  Parrot_shl_i_i,                                    /*    165 */
+  Parrot_shl_i_ic,                                   /*    166 */
+  Parrot_shl_p_i,                                    /*    167 */
+  Parrot_shl_p_ic,                                   /*    168 */
+  Parrot_shl_p_p,                                    /*    169 */
+  Parrot_shl_i_i_i,                                  /*    170 */
+  Parrot_shl_i_ic_i,                                 /*    171 */
+  Parrot_shl_i_i_ic,                                 /*    172 */
+  Parrot_shl_p_p_i,                                  /*    173 */
+  Parrot_shl_p_p_ic,                                 /*    174 */
+  Parrot_shl_p_p_p,                                  /*    175 */
+  Parrot_shr_i_i,                                    /*    176 */
+  Parrot_shr_i_ic,                                   /*    177 */
+  Parrot_shr_p_i,                                    /*    178 */
+  Parrot_shr_p_ic,                                   /*    179 */
+  Parrot_shr_p_p,                                    /*    180 */
+  Parrot_shr_i_i_i,                                  /*    181 */
+  Parrot_shr_i_ic_i,                                 /*    182 */
+  Parrot_shr_i_i_ic,                                 /*    183 */
+  Parrot_shr_p_p_i,                                  /*    184 */
+  Parrot_shr_p_p_ic,                                 /*    185 */
+  Parrot_shr_p_p_p,                                  /*    186 */
+  Parrot_lsr_i_i,                                    /*    187 */
+  Parrot_lsr_i_ic,                                   /*    188 */
+  Parrot_lsr_p_i,                                    /*    189 */
+  Parrot_lsr_p_ic,                                   /*    190 */
+  Parrot_lsr_p_p,                                    /*    191 */
+  Parrot_lsr_i_i_i,                                  /*    192 */
+  Parrot_lsr_i_ic_i,                                 /*    193 */
+  Parrot_lsr_i_i_ic,                                 /*    194 */
+  Parrot_lsr_p_p_i,                                  /*    195 */
+  Parrot_lsr_p_p_ic,                                 /*    196 */
+  Parrot_lsr_p_p_p,                                  /*    197 */
+  Parrot_rot_i_i_i_ic,                               /*    198 */
+  Parrot_rot_i_ic_i_ic,                              /*    199 */
+  Parrot_rot_i_i_ic_ic,                              /*    200 */
+  Parrot_bxor_i_i,                                   /*    201 */
+  Parrot_bxor_i_ic,                                  /*    202 */
+  Parrot_bxor_p_i,                                   /*    203 */
+  Parrot_bxor_p_ic,                                  /*    204 */
+  Parrot_bxor_p_p,                                   /*    205 */
+  Parrot_bxor_i_i_i,                                 /*    206 */
+  Parrot_bxor_i_ic_i,                                /*    207 */
+  Parrot_bxor_i_i_ic,                                /*    208 */
+  Parrot_bxor_p_p_i,                                 /*    209 */
+  Parrot_bxor_p_p_ic,                                /*    210 */
+  Parrot_bxor_p_p_p,                                 /*    211 */
+  Parrot_bxors_p_s,                                  /*    212 */
+  Parrot_bxors_p_sc,                                 /*    213 */
+  Parrot_bxors_p_p,                                  /*    214 */
+  Parrot_bxors_s_s_s,                                /*    215 */
+  Parrot_bxors_s_sc_s,                               /*    216 */
+  Parrot_bxors_s_s_sc,                               /*    217 */
+  Parrot_bxors_p_p_s,                                /*    218 */
+  Parrot_bxors_p_p_sc,                               /*    219 */
+  Parrot_bxors_p_p_p,                                /*    220 */
+  Parrot_eq_i_i_ic,                                  /*    221 */
+  Parrot_eq_ic_i_ic,                                 /*    222 */
+  Parrot_eq_i_ic_ic,                                 /*    223 */
+  Parrot_eq_n_n_ic,                                  /*    224 */
+  Parrot_eq_nc_n_ic,                                 /*    225 */
+  Parrot_eq_n_nc_ic,                                 /*    226 */
+  Parrot_eq_s_s_ic,                                  /*    227 */
+  Parrot_eq_sc_s_ic,                                 /*    228 */
+  Parrot_eq_s_sc_ic,                                 /*    229 */
+  Parrot_eq_p_p_ic,                                  /*    230 */
+  Parrot_eq_p_i_ic,                                  /*    231 */
+  Parrot_eq_p_ic_ic,                                 /*    232 */
+  Parrot_eq_p_n_ic,                                  /*    233 */
+  Parrot_eq_p_nc_ic,                                 /*    234 */
+  Parrot_eq_p_s_ic,                                  /*    235 */
+  Parrot_eq_p_sc_ic,                                 /*    236 */
+  Parrot_eq_str_p_p_ic,                              /*    237 */
+  Parrot_eq_num_p_p_ic,                              /*    238 */
+  Parrot_eq_addr_s_s_ic,                             /*    239 */
+  Parrot_eq_addr_sc_s_ic,                            /*    240 */
+  Parrot_eq_addr_s_sc_ic,                            /*    241 */
+  Parrot_eq_addr_sc_sc_ic,                           /*    242 */
+  Parrot_eq_addr_p_p_ic,                             /*    243 */
+  Parrot_ne_i_i_ic,                                  /*    244 */
+  Parrot_ne_ic_i_ic,                                 /*    245 */
+  Parrot_ne_i_ic_ic,                                 /*    246 */
+  Parrot_ne_n_n_ic,                                  /*    247 */
+  Parrot_ne_nc_n_ic,                                 /*    248 */
+  Parrot_ne_n_nc_ic,                                 /*    249 */
+  Parrot_ne_s_s_ic,                                  /*    250 */
+  Parrot_ne_sc_s_ic,                                 /*    251 */
+  Parrot_ne_s_sc_ic,                                 /*    252 */
+  Parrot_ne_p_p_ic,                                  /*    253 */
+  Parrot_ne_p_i_ic,                                  /*    254 */
+  Parrot_ne_p_ic_ic,                                 /*    255 */
+  Parrot_ne_p_n_ic,                                  /*    256 */
+  Parrot_ne_p_nc_ic,                                 /*    257 */
+  Parrot_ne_p_s_ic,                                  /*    258 */
+  Parrot_ne_p_sc_ic,                                 /*    259 */
+  Parrot_ne_str_p_p_ic,                              /*    260 */
+  Parrot_ne_num_p_p_ic,                              /*    261 */
+  Parrot_ne_addr_s_s_ic,                             /*    262 */
+  Parrot_ne_addr_sc_s_ic,                            /*    263 */
+  Parrot_ne_addr_s_sc_ic,                            /*    264 */
+  Parrot_ne_addr_sc_sc_ic,                           /*    265 */
+  Parrot_ne_addr_p_p_ic,                             /*    266 */
+  Parrot_lt_i_i_ic,                                  /*    267 */
+  Parrot_lt_ic_i_ic,                                 /*    268 */
+  Parrot_lt_i_ic_ic,                                 /*    269 */
+  Parrot_lt_n_n_ic,                                  /*    270 */
+  Parrot_lt_nc_n_ic,                                 /*    271 */
+  Parrot_lt_n_nc_ic,                                 /*    272 */
+  Parrot_lt_s_s_ic,                                  /*    273 */
+  Parrot_lt_sc_s_ic,                                 /*    274 */
+  Parrot_lt_s_sc_ic,                                 /*    275 */
+  Parrot_lt_p_p_ic,                                  /*    276 */
+  Parrot_lt_p_i_ic,                                  /*    277 */
+  Parrot_lt_p_ic_ic,                                 /*    278 */
+  Parrot_lt_p_n_ic,                                  /*    279 */
+  Parrot_lt_p_nc_ic,                                 /*    280 */
+  Parrot_lt_p_s_ic,                                  /*    281 */
+  Parrot_lt_p_sc_ic,                                 /*    282 */
+  Parrot_lt_str_p_p_ic,                              /*    283 */
+  Parrot_lt_num_p_p_ic,                              /*    284 */
+  Parrot_le_i_i_ic,                                  /*    285 */
+  Parrot_le_ic_i_ic,                                 /*    286 */
+  Parrot_le_i_ic_ic,                                 /*    287 */
+  Parrot_le_n_n_ic,                                  /*    288 */
+  Parrot_le_nc_n_ic,                                 /*    289 */
+  Parrot_le_n_nc_ic,                                 /*    290 */
+  Parrot_le_s_s_ic,                                  /*    291 */
+  Parrot_le_sc_s_ic,                                 /*    292 */
+  Parrot_le_s_sc_ic,                                 /*    293 */
+  Parrot_le_p_p_ic,                                  /*    294 */
+  Parrot_le_p_i_ic,                                  /*    295 */
+  Parrot_le_p_ic_ic,                                 /*    296 */
+  Parrot_le_p_n_ic,                                  /*    297 */
+  Parrot_le_p_nc_ic,                                 /*    298 */
+  Parrot_le_p_s_ic,                                  /*    299 */
+  Parrot_le_p_sc_ic,                                 /*    300 */
+  Parrot_le_str_p_p_ic,                              /*    301 */
+  Parrot_le_num_p_p_ic,                              /*    302 */
+  Parrot_gt_p_p_ic,                                  /*    303 */
+  Parrot_gt_p_i_ic,                                  /*    304 */
+  Parrot_gt_p_ic_ic,                                 /*    305 */
+  Parrot_gt_p_n_ic,                                  /*    306 */
+  Parrot_gt_p_nc_ic,                                 /*    307 */
+  Parrot_gt_p_s_ic,                                  /*    308 */
+  Parrot_gt_p_sc_ic,                                 /*    309 */
+  Parrot_gt_str_p_p_ic,                              /*    310 */
+  Parrot_gt_num_p_p_ic,                              /*    311 */
+  Parrot_ge_p_p_ic,                                  /*    312 */
+  Parrot_ge_p_i_ic,                                  /*    313 */
+  Parrot_ge_p_ic_ic,                                 /*    314 */
+  Parrot_ge_p_n_ic,                                  /*    315 */
+  Parrot_ge_p_nc_ic,                                 /*    316 */
+  Parrot_ge_p_s_ic,                                  /*    317 */
+  Parrot_ge_p_sc_ic,                                 /*    318 */
+  Parrot_ge_str_p_p_ic,                              /*    319 */
+  Parrot_ge_num_p_p_ic,                              /*    320 */
+  Parrot_if_null_p_ic,                               /*    321 */
+  Parrot_if_null_s_ic,                               /*    322 */
+  Parrot_unless_null_p_ic,                           /*    323 */
+  Parrot_unless_null_s_ic,                           /*    324 */
+  Parrot_cmp_i_i_i,                                  /*    325 */
+  Parrot_cmp_i_ic_i,                                 /*    326 */
+  Parrot_cmp_i_i_ic,                                 /*    327 */
+  Parrot_cmp_i_n_n,                                  /*    328 */
+  Parrot_cmp_i_nc_n,                                 /*    329 */
+  Parrot_cmp_i_n_nc,                                 /*    330 */
+  Parrot_cmp_i_s_s,                                  /*    331 */
+  Parrot_cmp_i_sc_s,                                 /*    332 */
+  Parrot_cmp_i_s_sc,                                 /*    333 */
+  Parrot_cmp_i_p_p,                                  /*    334 */
+  Parrot_cmp_i_p_i,                                  /*    335 */
+  Parrot_cmp_i_p_ic,                                 /*    336 */
+  Parrot_cmp_i_p_n,                                  /*    337 */
+  Parrot_cmp_i_p_nc,                                 /*    338 */
+  Parrot_cmp_i_p_s,                                  /*    339 */
+  Parrot_cmp_i_p_sc,                                 /*    340 */
+  Parrot_cmp_str_i_p_p,                              /*    341 */
+  Parrot_cmp_num_i_p_p,                              /*    342 */
+  Parrot_cmp_pmc_p_p_p,                              /*    343 */
+  Parrot_issame_i_p_p,                               /*    344 */
+  Parrot_issame_i_s_s,                               /*    345 */
+  Parrot_issame_i_sc_s,                              /*    346 */
+  Parrot_issame_i_s_sc,                              /*    347 */
+  Parrot_issame_i_sc_sc,                             /*    348 */
+  Parrot_isntsame_i_p_p,                             /*    349 */
+  Parrot_isntsame_i_s_s,                             /*    350 */
+  Parrot_isntsame_i_sc_s,                            /*    351 */
+  Parrot_isntsame_i_s_sc,                            /*    352 */
+  Parrot_isntsame_i_sc_sc,                           /*    353 */
+  Parrot_istrue_i_p,                                 /*    354 */
+  Parrot_isfalse_i_p,                                /*    355 */
+  Parrot_isnull_i_p,                                 /*    356 */
+  Parrot_isnull_i_pc,                                /*    357 */
+  Parrot_isnull_i_s,                                 /*    358 */
+  Parrot_isnull_i_sc,                                /*    359 */
+  Parrot_isgt_i_p_p,                                 /*    360 */
+  Parrot_isge_i_p_p,                                 /*    361 */
+  Parrot_isle_i_i_i,                                 /*    362 */
+  Parrot_isle_i_ic_i,                                /*    363 */
+  Parrot_isle_i_i_ic,                                /*    364 */
+  Parrot_isle_i_n_n,                                 /*    365 */
+  Parrot_isle_i_nc_n,                                /*    366 */
+  Parrot_isle_i_n_nc,                                /*    367 */
+  Parrot_isle_i_s_s,                                 /*    368 */
+  Parrot_isle_i_sc_s,                                /*    369 */
+  Parrot_isle_i_s_sc,                                /*    370 */
+  Parrot_isle_i_p_p,                                 /*    371 */
+  Parrot_islt_i_i_i,                                 /*    372 */
+  Parrot_islt_i_ic_i,                                /*    373 */
+  Parrot_islt_i_i_ic,                                /*    374 */
+  Parrot_islt_i_n_n,                                 /*    375 */
+  Parrot_islt_i_nc_n,                                /*    376 */
+  Parrot_islt_i_n_nc,                                /*    377 */
+  Parrot_islt_i_s_s,                                 /*    378 */
+  Parrot_islt_i_sc_s,                                /*    379 */
+  Parrot_islt_i_s_sc,                                /*    380 */
+  Parrot_islt_i_p_p,                                 /*    381 */
+  Parrot_iseq_i_i_i,                                 /*    382 */
+  Parrot_iseq_i_ic_i,                                /*    383 */
+  Parrot_iseq_i_i_ic,                                /*    384 */
+  Parrot_iseq_i_n_n,                                 /*    385 */
+  Parrot_iseq_i_nc_n,                                /*    386 */
+  Parrot_iseq_i_n_nc,                                /*    387 */
+  Parrot_iseq_i_s_s,                                 /*    388 */
+  Parrot_iseq_i_sc_s,                                /*    389 */
+  Parrot_iseq_i_s_sc,                                /*    390 */
+  Parrot_iseq_i_p_p,                                 /*    391 */
+  Parrot_isne_i_i_i,                                 /*    392 */
+  Parrot_isne_i_ic_i,                                /*    393 */
+  Parrot_isne_i_i_ic,                                /*    394 */
+  Parrot_isne_i_n_n,                                 /*    395 */
+  Parrot_isne_i_nc_n,                                /*    396 */
+  Parrot_isne_i_n_nc,                                /*    397 */
+  Parrot_isne_i_s_s,                                 /*    398 */
+  Parrot_isne_i_sc_s,                                /*    399 */
+  Parrot_isne_i_s_sc,                                /*    400 */
+  Parrot_isne_i_p_p,                                 /*    401 */
+  Parrot_and_i_i_i,                                  /*    402 */
+  Parrot_and_i_ic_i,                                 /*    403 */
+  Parrot_and_i_i_ic,                                 /*    404 */
+  Parrot_and_p_p_p,                                  /*    405 */
+  Parrot_not_i,                                      /*    406 */
+  Parrot_not_i_i,                                    /*    407 */
+  Parrot_not_p,                                      /*    408 */
+  Parrot_not_p_p,                                    /*    409 */
+  Parrot_or_i_i_i,                                   /*    410 */
+  Parrot_or_i_ic_i,                                  /*    411 */
+  Parrot_or_i_i_ic,                                  /*    412 */
+  Parrot_or_p_p_p,                                   /*    413 */
+  Parrot_xor_i_i_i,                                  /*    414 */
+  Parrot_xor_i_ic_i,                                 /*    415 */
+  Parrot_xor_i_i_ic,                                 /*    416 */
+  Parrot_xor_p_p_p,                                  /*    417 */
+  Parrot_debug_init,                                 /*    418 */
+  Parrot_debug_load_sc,                              /*    419 */
+  Parrot_debug_break,                                /*    420 */
+  Parrot_debug_print,                                /*    421 */
+  Parrot_backtrace,                                  /*    422 */
+  Parrot_getline_i,                                  /*    423 */
+  Parrot_getfile_s,                                  /*    424 */
+  Parrot_set_label_p_ic,                             /*    425 */
+  Parrot_get_label_i_p,                              /*    426 */
+  Parrot_close_p,                                    /*    427 */
+  Parrot_fdopen_p_i_s,                               /*    428 */
+  Parrot_fdopen_p_ic_s,                              /*    429 */
+  Parrot_fdopen_p_i_sc,                              /*    430 */
+  Parrot_fdopen_p_ic_sc,                             /*    431 */
+  Parrot_getstdin_p,                                 /*    432 */
+  Parrot_getstdout_p,                                /*    433 */
+  Parrot_getstderr_p,                                /*    434 */
+  Parrot_setstdin_p,                                 /*    435 */
+  Parrot_setstdout_p,                                /*    436 */
+  Parrot_setstderr_p,                                /*    437 */
+  Parrot_open_p_s_s,                                 /*    438 */
+  Parrot_open_p_sc_s,                                /*    439 */
+  Parrot_open_p_s_sc,                                /*    440 */
+  Parrot_open_p_sc_sc,                               /*    441 */
+  Parrot_open_p_s,                                   /*    442 */
+  Parrot_open_p_sc,                                  /*    443 */
+  Parrot_print_i,                                    /*    444 */
+  Parrot_print_ic,                                   /*    445 */
+  Parrot_print_n,                                    /*    446 */
+  Parrot_print_nc,                                   /*    447 */
+  Parrot_print_s,                                    /*    448 */
+  Parrot_print_sc,                                   /*    449 */
+  Parrot_print_p,                                    /*    450 */
+  Parrot_say_i,                                      /*    451 */
+  Parrot_say_ic,                                     /*    452 */
+  Parrot_say_n,                                      /*    453 */
+  Parrot_say_nc,                                     /*    454 */
+  Parrot_say_s,                                      /*    455 */
+  Parrot_say_sc,                                     /*    456 */
+  Parrot_say_p,                                      /*    457 */
+  Parrot_printerr_i,                                 /*    458 */
+  Parrot_printerr_ic,                                /*    459 */
+  Parrot_printerr_n,                                 /*    460 */
+  Parrot_printerr_nc,                                /*    461 */
+  Parrot_printerr_s,                                 /*    462 */
+  Parrot_printerr_sc,                                /*    463 */
+  Parrot_printerr_p,                                 /*    464 */
+  Parrot_print_p_i,                                  /*    465 */
+  Parrot_print_p_ic,                                 /*    466 */
+  Parrot_print_p_n,                                  /*    467 */
+  Parrot_print_p_nc,                                 /*    468 */
+  Parrot_print_p_s,                                  /*    469 */
+  Parrot_print_p_sc,                                 /*    470 */
+  Parrot_print_p_p,                                  /*    471 */
+  Parrot_read_s_i,                                   /*    472 */
+  Parrot_read_s_ic,                                  /*    473 */
+  Parrot_read_s_p_i,                                 /*    474 */
+  Parrot_read_s_p_ic,                                /*    475 */
+  Parrot_readline_s_p,                               /*    476 */
+  Parrot_peek_s,                                     /*    477 */
+  Parrot_peek_s_p,                                   /*    478 */
+  Parrot_stat_i_s_i,                                 /*    479 */
+  Parrot_stat_i_sc_i,                                /*    480 */
+  Parrot_stat_i_s_ic,                                /*    481 */
+  Parrot_stat_i_sc_ic,                               /*    482 */
+  Parrot_stat_i_i_i,                                 /*    483 */
+  Parrot_stat_i_ic_i,                                /*    484 */
+  Parrot_stat_i_i_ic,                                /*    485 */
+  Parrot_stat_i_ic_ic,                               /*    486 */
+  Parrot_seek_p_i_i,                                 /*    487 */
+  Parrot_seek_p_ic_i,                                /*    488 */
+  Parrot_seek_p_i_ic,                                /*    489 */
+  Parrot_seek_p_ic_ic,                               /*    490 */
+  Parrot_seek_p_i_i_i,                               /*    491 */
+  Parrot_seek_p_ic_i_i,                              /*    492 */
+  Parrot_seek_p_i_ic_i,                              /*    493 */
+  Parrot_seek_p_ic_ic_i,                             /*    494 */
+  Parrot_seek_p_i_i_ic,                              /*    495 */
+  Parrot_seek_p_ic_i_ic,                             /*    496 */
+  Parrot_seek_p_i_ic_ic,                             /*    497 */
+  Parrot_seek_p_ic_ic_ic,                            /*    498 */
+  Parrot_tell_i_p,                                   /*    499 */
+  Parrot_tell_i_i_p,                                 /*    500 */
+  Parrot_abs_i,                                      /*    501 */
+  Parrot_abs_n,                                      /*    502 */
+  Parrot_abs_i_i,                                    /*    503 */
+  Parrot_abs_n_n,                                    /*    504 */
+  Parrot_abs_p,                                      /*    505 */
+  Parrot_abs_p_p,                                    /*    506 */
+  Parrot_add_i_i,                                    /*    507 */
+  Parrot_add_i_ic,                                   /*    508 */
+  Parrot_add_n_n,                                    /*    509 */
+  Parrot_add_n_nc,                                   /*    510 */
+  Parrot_add_p_p,                                    /*    511 */
+  Parrot_add_p_i,                                    /*    512 */
+  Parrot_add_p_ic,                                   /*    513 */
+  Parrot_add_p_n,                                    /*    514 */
+  Parrot_add_p_nc,                                   /*    515 */
+  Parrot_add_i_i_i,                                  /*    516 */
+  Parrot_add_i_ic_i,                                 /*    517 */
+  Parrot_add_i_i_ic,                                 /*    518 */
+  Parrot_add_n_n_n,                                  /*    519 */
+  Parrot_add_n_nc_n,                                 /*    520 */
+  Parrot_add_n_n_nc,                                 /*    521 */
+  Parrot_add_p_p_p,                                  /*    522 */
+  Parrot_add_p_p_i,                                  /*    523 */
+  Parrot_add_p_p_ic,                                 /*    524 */
+  Parrot_add_p_p_n,                                  /*    525 */
+  Parrot_add_p_p_nc,                                 /*    526 */
+  Parrot_cmod_i_i_i,                                 /*    527 */
+  Parrot_cmod_i_ic_i,                                /*    528 */
+  Parrot_cmod_i_i_ic,                                /*    529 */
+  Parrot_cmod_p_p_i,                                 /*    530 */
+  Parrot_cmod_p_p_ic,                                /*    531 */
+  Parrot_cmod_p_p_p,                                 /*    532 */
+  Parrot_cmod_n_n_n,                                 /*    533 */
+  Parrot_cmod_n_nc_n,                                /*    534 */
+  Parrot_cmod_n_n_nc,                                /*    535 */
+  Parrot_cmod_p_p_n,                                 /*    536 */
+  Parrot_cmod_p_p_nc,                                /*    537 */
+  Parrot_dec_i,                                      /*    538 */
+  Parrot_dec_n,                                      /*    539 */
+  Parrot_dec_p,                                      /*    540 */
+  Parrot_div_i_i,                                    /*    541 */
+  Parrot_div_i_ic,                                   /*    542 */
+  Parrot_div_n_n,                                    /*    543 */
+  Parrot_div_n_nc,                                   /*    544 */
+  Parrot_div_p_p,                                    /*    545 */
+  Parrot_div_p_i,                                    /*    546 */
+  Parrot_div_p_ic,                                   /*    547 */
+  Parrot_div_p_n,                                    /*    548 */
+  Parrot_div_p_nc,                                   /*    549 */
+  Parrot_div_i_i_i,                                  /*    550 */
+  Parrot_div_i_ic_i,                                 /*    551 */
+  Parrot_div_i_i_ic,                                 /*    552 */
+  Parrot_div_i_ic_ic,                                /*    553 */
+  Parrot_div_n_n_n,                                  /*    554 */
+  Parrot_div_n_nc_n,                                 /*    555 */
+  Parrot_div_n_n_nc,                                 /*    556 */
+  Parrot_div_n_nc_nc,                                /*    557 */
+  Parrot_div_p_p_p,                                  /*    558 */
+  Parrot_div_p_p_i,                                  /*    559 */
+  Parrot_div_p_p_ic,                                 /*    560 */
+  Parrot_div_p_p_n,                                  /*    561 */
+  Parrot_div_p_p_nc,                                 /*    562 */
+  Parrot_fdiv_i_i,                                   /*    563 */
+  Parrot_fdiv_i_ic,                                  /*    564 */
+  Parrot_fdiv_n_n,                                   /*    565 */
+  Parrot_fdiv_n_nc,                                  /*    566 */
+  Parrot_fdiv_p_p,                                   /*    567 */
+  Parrot_fdiv_p_i,                                   /*    568 */
+  Parrot_fdiv_p_ic,                                  /*    569 */
+  Parrot_fdiv_p_n,                                   /*    570 */
+  Parrot_fdiv_p_nc,                                  /*    571 */
+  Parrot_fdiv_i_i_i,                                 /*    572 */
+  Parrot_fdiv_i_ic_i,                                /*    573 */
+  Parrot_fdiv_i_i_ic,                                /*    574 */
+  Parrot_fdiv_n_n_n,                                 /*    575 */
+  Parrot_fdiv_n_nc_n,                                /*    576 */
+  Parrot_fdiv_n_n_nc,                                /*    577 */
+  Parrot_fdiv_p_p_p,                                 /*    578 */
+  Parrot_fdiv_p_p_i,                                 /*    579 */
+  Parrot_fdiv_p_p_ic,                                /*    580 */
+  Parrot_fdiv_p_p_n,                                 /*    581 */
+  Parrot_fdiv_p_p_nc,                                /*    582 */
+  Parrot_ceil_n,                                     /*    583 */
+  Parrot_ceil_i_n,                                   /*    584 */
+  Parrot_ceil_n_n,                                   /*    585 */
+  Parrot_floor_n,                                    /*    586 */
+  Parrot_floor_i_n,                                  /*    587 */
+  Parrot_floor_n_n,                                  /*    588 */
+  Parrot_inc_i,                                      /*    589 */
+  Parrot_inc_n,                                      /*    590 */
+  Parrot_inc_p,                                      /*    591 */
+  Parrot_mod_i_i,                                    /*    592 */
+  Parrot_mod_i_ic,                                   /*    593 */
+  Parrot_mod_n_n,                                    /*    594 */
+  Parrot_mod_n_nc,                                   /*    595 */
+  Parrot_mod_p_p,                                    /*    596 */
+  Parrot_mod_p_i,                                    /*    597 */
+  Parrot_mod_p_ic,                                   /*    598 */
+  Parrot_mod_p_n,                                    /*    599 */
+  Parrot_mod_p_nc,                                   /*    600 */
+  Parrot_mod_i_i_i,                                  /*    601 */
+  Parrot_mod_i_ic_i,                                 /*    602 */
+  Parrot_mod_i_i_ic,                                 /*    603 */
+  Parrot_mod_n_n_n,                                  /*    604 */
+  Parrot_mod_n_nc_n,                                 /*    605 */
+  Parrot_mod_n_n_nc,                                 /*    606 */
+  Parrot_mod_p_p_p,                                  /*    607 */
+  Parrot_mod_p_p_i,                                  /*    608 */
+  Parrot_mod_p_p_ic,                                 /*    609 */
+  Parrot_mod_p_p_n,                                  /*    610 */
+  Parrot_mod_p_p_nc,                                 /*    611 */
+  Parrot_mul_i_i,                                    /*    612 */
+  Parrot_mul_i_ic,                                   /*    613 */
+  Parrot_mul_n_n,                                    /*    614 */
+  Parrot_mul_n_nc,                                   /*    615 */
+  Parrot_mul_p_p,                                    /*    616 */
+  Parrot_mul_p_i,                                    /*    617 */
+  Parrot_mul_p_ic,                                   /*    618 */
+  Parrot_mul_p_n,                                    /*    619 */
+  Parrot_mul_p_nc,                                   /*    620 */
+  Parrot_mul_i_i_i,                                  /*    621 */
+  Parrot_mul_i_ic_i,                                 /*    622 */
+  Parrot_mul_i_i_ic,                                 /*    623 */
+  Parrot_mul_n_n_n,                                  /*    624 */
+  Parrot_mul_n_nc_n,                                 /*    625 */
+  Parrot_mul_n_n_nc,                                 /*    626 */
+  Parrot_mul_p_p_p,                                  /*    627 */
+  Parrot_mul_p_p_i,                                  /*    628 */
+  Parrot_mul_p_p_ic,                                 /*    629 */
+  Parrot_mul_p_p_n,                                  /*    630 */
+  Parrot_mul_p_p_nc,                                 /*    631 */
+  Parrot_neg_i,                                      /*    632 */
+  Parrot_neg_n,                                      /*    633 */
+  Parrot_neg_p,                                      /*    634 */
+  Parrot_neg_i_i,                                    /*    635 */
+  Parrot_neg_n_n,                                    /*    636 */
+  Parrot_neg_p_p,                                    /*    637 */
+  Parrot_pow_n_n_n,                                  /*    638 */
+  Parrot_pow_n_nc_n,                                 /*    639 */
+  Parrot_pow_n_n_nc,                                 /*    640 */
+  Parrot_pow_p_p_p,                                  /*    641 */
+  Parrot_pow_p_p_i,                                  /*    642 */
+  Parrot_pow_p_p_ic,                                 /*    643 */
+  Parrot_pow_p_p_n,                                  /*    644 */
+  Parrot_pow_p_p_nc,                                 /*    645 */
+  Parrot_pow_n_n_i,                                  /*    646 */
+  Parrot_pow_n_nc_i,                                 /*    647 */
+  Parrot_pow_n_n_ic,                                 /*    648 */
+  Parrot_pow_n_nc_ic,                                /*    649 */
+  Parrot_sub_i_i,                                    /*    650 */
+  Parrot_sub_i_ic,                                   /*    651 */
+  Parrot_sub_n_n,                                    /*    652 */
+  Parrot_sub_n_nc,                                   /*    653 */
+  Parrot_sub_p_p,                                    /*    654 */
+  Parrot_sub_p_i,                                    /*    655 */
+  Parrot_sub_p_ic,                                   /*    656 */
+  Parrot_sub_p_n,                                    /*    657 */
+  Parrot_sub_p_nc,                                   /*    658 */
+  Parrot_sub_i_i_i,                                  /*    659 */
+  Parrot_sub_i_ic_i,                                 /*    660 */
+  Parrot_sub_i_i_ic,                                 /*    661 */
+  Parrot_sub_n_n_n,                                  /*    662 */
+  Parrot_sub_n_nc_n,                                 /*    663 */
+  Parrot_sub_n_n_nc,                                 /*    664 */
+  Parrot_sub_p_p_p,                                  /*    665 */
+  Parrot_sub_p_p_i,                                  /*    666 */
+  Parrot_sub_p_p_ic,                                 /*    667 */
+  Parrot_sub_p_p_n,                                  /*    668 */
+  Parrot_sub_p_p_nc,                                 /*    669 */
+  Parrot_sqrt_n_n,                                   /*    670 */
+  Parrot_acos_n_n,                                   /*    671 */
+  Parrot_asec_n_n,                                   /*    672 */
+  Parrot_asin_n_n,                                   /*    673 */
+  Parrot_atan_n_n,                                   /*    674 */
+  Parrot_atan_n_n_n,                                 /*    675 */
+  Parrot_atan_n_nc_n,                                /*    676 */
+  Parrot_atan_n_n_nc,                                /*    677 */
+  Parrot_cos_n_n,                                    /*    678 */
+  Parrot_cosh_n_n,                                   /*    679 */
+  Parrot_exp_n_n,                                    /*    680 */
+  Parrot_ln_n_n,                                     /*    681 */
+  Parrot_log10_n_n,                                  /*    682 */
+  Parrot_log2_n_n,                                   /*    683 */
+  Parrot_sec_n_n,                                    /*    684 */
+  Parrot_sech_n_n,                                   /*    685 */
+  Parrot_sin_n_n,                                    /*    686 */
+  Parrot_sinh_n_n,                                   /*    687 */
+  Parrot_tan_n_n,                                    /*    688 */
+  Parrot_tanh_n_n,                                   /*    689 */
+  Parrot_gcd_i_i_i,                                  /*    690 */
+  Parrot_gcd_i_ic_i,                                 /*    691 */
+  Parrot_gcd_i_i_ic,                                 /*    692 */
+  Parrot_lcm_i_i_i,                                  /*    693 */
+  Parrot_lcm_i_ic_i,                                 /*    694 */
+  Parrot_lcm_i_i_ic,                                 /*    695 */
+  Parrot_fact_i_i,                                   /*    696 */
+  Parrot_fact_n_i,                                   /*    697 */
+  Parrot_callmethodcc_p_s,                           /*    698 */
+  Parrot_callmethodcc_p_sc,                          /*    699 */
+  Parrot_callmethodcc_p_p,                           /*    700 */
+  Parrot_callmethod_p_s_p,                           /*    701 */
+  Parrot_callmethod_p_sc_p,                          /*    702 */
+  Parrot_callmethod_p_p_p,                           /*    703 */
+  Parrot_tailcallmethod_p_s,                         /*    704 */
+  Parrot_tailcallmethod_p_sc,                        /*    705 */
+  Parrot_tailcallmethod_p_p,                         /*    706 */
+  Parrot_addmethod_p_s_p,                            /*    707 */
+  Parrot_addmethod_p_sc_p,                           /*    708 */
+  Parrot_can_i_p_s,                                  /*    709 */
+  Parrot_can_i_p_sc,                                 /*    710 */
+  Parrot_does_i_p_s,                                 /*    711 */
+  Parrot_does_i_p_sc,                                /*    712 */
+  Parrot_does_i_p_p,                                 /*    713 */
+  Parrot_does_i_p_pc,                                /*    714 */
+  Parrot_isa_i_p_s,                                  /*    715 */
+  Parrot_isa_i_p_sc,                                 /*    716 */
+  Parrot_isa_i_p_p,                                  /*    717 */
+  Parrot_isa_i_p_pc,                                 /*    718 */
+  Parrot_newclass_p_s,                               /*    719 */
+  Parrot_newclass_p_sc,                              /*    720 */
+  Parrot_newclass_p_p,                               /*    721 */
+  Parrot_newclass_p_pc,                              /*    722 */
+  Parrot_subclass_p_p,                               /*    723 */
+  Parrot_subclass_p_pc,                              /*    724 */
+  Parrot_subclass_p_p_s,                             /*    725 */
+  Parrot_subclass_p_pc_s,                            /*    726 */
+  Parrot_subclass_p_p_sc,                            /*    727 */
+  Parrot_subclass_p_pc_sc,                           /*    728 */
+  Parrot_subclass_p_p_p,                             /*    729 */
+  Parrot_subclass_p_pc_p,                            /*    730 */
+  Parrot_subclass_p_p_pc,                            /*    731 */
+  Parrot_subclass_p_pc_pc,                           /*    732 */
+  Parrot_subclass_p_s,                               /*    733 */
+  Parrot_subclass_p_sc,                              /*    734 */
+  Parrot_subclass_p_s_s,                             /*    735 */
+  Parrot_subclass_p_sc_s,                            /*    736 */
+  Parrot_subclass_p_s_sc,                            /*    737 */
+  Parrot_subclass_p_sc_sc,                           /*    738 */
+  Parrot_subclass_p_s_p,                             /*    739 */
+  Parrot_subclass_p_sc_p,                            /*    740 */
+  Parrot_subclass_p_s_pc,                            /*    741 */
+  Parrot_subclass_p_sc_pc,                           /*    742 */
+  Parrot_get_class_p_s,                              /*    743 */
+  Parrot_get_class_p_sc,                             /*    744 */
+  Parrot_get_class_p_p,                              /*    745 */
+  Parrot_get_class_p_pc,                             /*    746 */
+  Parrot_class_p_p,                                  /*    747 */
+  Parrot_addparent_p_p,                              /*    748 */
+  Parrot_removeparent_p_p,                           /*    749 */
+  Parrot_addrole_p_p,                                /*    750 */
+  Parrot_addattribute_p_s,                           /*    751 */
+  Parrot_addattribute_p_sc,                          /*    752 */
+  Parrot_removeattribute_p_s,                        /*    753 */
+  Parrot_removeattribute_p_sc,                       /*    754 */
+  Parrot_getattribute_p_p_s,                         /*    755 */
+  Parrot_getattribute_p_p_sc,                        /*    756 */
+  Parrot_getattribute_p_p_p_s,                       /*    757 */
+  Parrot_getattribute_p_p_pc_s,                      /*    758 */
+  Parrot_getattribute_p_p_p_sc,                      /*    759 */
+  Parrot_getattribute_p_p_pc_sc,                     /*    760 */
+  Parrot_setattribute_p_s_p,                         /*    761 */
+  Parrot_setattribute_p_sc_p,                        /*    762 */
+  Parrot_setattribute_p_p_s_p,                       /*    763 */
+  Parrot_setattribute_p_pc_s_p,                      /*    764 */
+  Parrot_setattribute_p_p_sc_p,                      /*    765 */
+  Parrot_setattribute_p_pc_sc_p,                     /*    766 */
+  Parrot_inspect_p_p,                                /*    767 */
+  Parrot_inspect_p_pc,                               /*    768 */
+  Parrot_inspect_p_p_s,                              /*    769 */
+  Parrot_inspect_p_pc_s,                             /*    770 */
+  Parrot_inspect_p_p_sc,                             /*    771 */
+  Parrot_inspect_p_pc_sc,                            /*    772 */
+  Parrot_new_p_s,                                    /*    773 */
+  Parrot_new_p_sc,                                   /*    774 */
+  Parrot_new_p_s_p,                                  /*    775 */
+  Parrot_new_p_sc_p,                                 /*    776 */
+  Parrot_new_p_s_pc,                                 /*    777 */
+  Parrot_new_p_sc_pc,                                /*    778 */
+  Parrot_new_p_p,                                    /*    779 */
+  Parrot_new_p_pc,                                   /*    780 */
+  Parrot_new_p_p_p,                                  /*    781 */
+  Parrot_new_p_pc_p,                                 /*    782 */
+  Parrot_new_p_p_pc,                                 /*    783 */
+  Parrot_new_p_pc_pc,                                /*    784 */
+  Parrot_root_new_p_p,                               /*    785 */
+  Parrot_root_new_p_pc,                              /*    786 */
+  Parrot_root_new_p_p_p,                             /*    787 */
+  Parrot_root_new_p_pc_p,                            /*    788 */
+  Parrot_root_new_p_p_pc,                            /*    789 */
+  Parrot_root_new_p_pc_pc,                           /*    790 */
+  Parrot_typeof_s_p,                                 /*    791 */
+  Parrot_typeof_p_p,                                 /*    792 */
+  Parrot_get_repr_s_p,                               /*    793 */
+  Parrot_find_method_p_p_s,                          /*    794 */
+  Parrot_find_method_p_p_sc,                         /*    795 */
+  Parrot_defined_i_p,                                /*    796 */
+  Parrot_defined_i_p_ki,                             /*    797 */
+  Parrot_defined_i_p_kic,                            /*    798 */
+  Parrot_defined_i_p_k,                              /*    799 */
+  Parrot_defined_i_p_kc,                             /*    800 */
+  Parrot_exists_i_p_ki,                              /*    801 */
+  Parrot_exists_i_p_kic,                             /*    802 */
+  Parrot_exists_i_p_k,                               /*    803 */
+  Parrot_exists_i_p_kc,                              /*    804 */
+  Parrot_delete_p_k,                                 /*    805 */
+  Parrot_delete_p_kc,                                /*    806 */
+  Parrot_delete_p_ki,                                /*    807 */
+  Parrot_delete_p_kic,                               /*    808 */
+  Parrot_elements_i_p,                               /*    809 */
+  Parrot_push_p_i,                                   /*    810 */
+  Parrot_push_p_ic,                                  /*    811 */
+  Parrot_push_p_n,                                   /*    812 */
+  Parrot_push_p_nc,                                  /*    813 */
+  Parrot_push_p_s,                                   /*    814 */
+  Parrot_push_p_sc,                                  /*    815 */
+  Parrot_push_p_p,                                   /*    816 */
+  Parrot_pop_i_p,                                    /*    817 */
+  Parrot_pop_n_p,                                    /*    818 */
+  Parrot_pop_s_p,                                    /*    819 */
+  Parrot_pop_p_p,                                    /*    820 */
+  Parrot_unshift_p_i,                                /*    821 */
+  Parrot_unshift_p_ic,                               /*    822 */
+  Parrot_unshift_p_n,                                /*    823 */
+  Parrot_unshift_p_nc,                               /*    824 */
+  Parrot_unshift_p_s,                                /*    825 */
+  Parrot_unshift_p_sc,                               /*    826 */
+  Parrot_unshift_p_p,                                /*    827 */
+  Parrot_shift_i_p,                                  /*    828 */
+  Parrot_shift_n_p,                                  /*    829 */
+  Parrot_shift_s_p,                                  /*    830 */
+  Parrot_shift_p_p,                                  /*    831 */
+  Parrot_splice_p_p_i_i,                             /*    832 */
+  Parrot_splice_p_p_ic_i,                            /*    833 */
+  Parrot_splice_p_p_i_ic,                            /*    834 */
+  Parrot_splice_p_p_ic_ic,                           /*    835 */
+  Parrot_setprop_p_s_p,                              /*    836 */
+  Parrot_setprop_p_sc_p,                             /*    837 */
+  Parrot_getprop_p_s_p,                              /*    838 */
+  Parrot_getprop_p_sc_p,                             /*    839 */
+  Parrot_delprop_p_s,                                /*    840 */
+  Parrot_delprop_p_sc,                               /*    841 */
+  Parrot_prophash_p_p,                               /*    842 */
+  Parrot_freeze_s_p,                                 /*    843 */
+  Parrot_thaw_p_s,                                   /*    844 */
+  Parrot_thaw_p_sc,                                  /*    845 */
+  Parrot_add_multi_s_s_p,                            /*    846 */
+  Parrot_add_multi_sc_s_p,                           /*    847 */
+  Parrot_add_multi_s_sc_p,                           /*    848 */
+  Parrot_add_multi_sc_sc_p,                          /*    849 */
+  Parrot_find_multi_p_s_s,                           /*    850 */
+  Parrot_find_multi_p_sc_s,                          /*    851 */
+  Parrot_find_multi_p_s_sc,                          /*    852 */
+  Parrot_find_multi_p_sc_sc,                         /*    853 */
+  Parrot_register_p,                                 /*    854 */
+  Parrot_unregister_p,                               /*    855 */
+  Parrot_box_p_i,                                    /*    856 */
+  Parrot_box_p_ic,                                   /*    857 */
+  Parrot_box_p_n,                                    /*    858 */
+  Parrot_box_p_nc,                                   /*    859 */
+  Parrot_box_p_s,                                    /*    860 */
+  Parrot_box_p_sc,                                   /*    861 */
+  Parrot_iter_p_p,                                   /*    862 */
+  Parrot_morph_p_p,                                  /*    863 */
+  Parrot_morph_p_pc,                                 /*    864 */
+  Parrot_clone_s_s,                                  /*    865 */
+  Parrot_clone_s_sc,                                 /*    866 */
+  Parrot_exchange_i_i,                               /*    867 */
+  Parrot_exchange_p_p,                               /*    868 */
+  Parrot_exchange_n_n,                               /*    869 */
+  Parrot_exchange_s_s,                               /*    870 */
+  Parrot_set_i_i,                                    /*    871 */
+  Parrot_set_i_ic,                                   /*    872 */
+  Parrot_set_i_n,                                    /*    873 */
+  Parrot_set_i_nc,                                   /*    874 */
+  Parrot_set_i_s,                                    /*    875 */
+  Parrot_set_i_sc,                                   /*    876 */
+  Parrot_set_n_n,                                    /*    877 */
+  Parrot_set_n_nc,                                   /*    878 */
+  Parrot_set_n_i,                                    /*    879 */
+  Parrot_set_n_ic,                                   /*    880 */
+  Parrot_set_n_s,                                    /*    881 */
+  Parrot_set_n_sc,                                   /*    882 */
+  Parrot_set_n_p,                                    /*    883 */
+  Parrot_set_s_p,                                    /*    884 */
+  Parrot_set_s_s,                                    /*    885 */
+  Parrot_set_s_sc,                                   /*    886 */
+  Parrot_set_s_i,                                    /*    887 */
+  Parrot_set_s_ic,                                   /*    888 */
+  Parrot_set_s_n,                                    /*    889 */
+  Parrot_set_s_nc,                                   /*    890 */
+  Parrot_set_p_pc,                                   /*    891 */
+  Parrot_set_p_p,                                    /*    892 */
+  Parrot_set_p_i,                                    /*    893 */
+  Parrot_set_p_ic,                                   /*    894 */
+  Parrot_set_p_n,                                    /*    895 */
+  Parrot_set_p_nc,                                   /*    896 */
+  Parrot_set_p_s,                                    /*    897 */
+  Parrot_set_p_sc,                                   /*    898 */
+  Parrot_set_i_p,                                    /*    899 */
+  Parrot_assign_p_p,                                 /*    900 */
+  Parrot_assign_p_i,                                 /*    901 */
+  Parrot_assign_p_ic,                                /*    902 */
+  Parrot_assign_p_n,                                 /*    903 */
+  Parrot_assign_p_nc,                                /*    904 */
+  Parrot_assign_p_s,                                 /*    905 */
+  Parrot_assign_p_sc,                                /*    906 */
+  Parrot_assign_s_s,                                 /*    907 */
+  Parrot_assign_s_sc,                                /*    908 */
+  Parrot_setref_p_p,                                 /*    909 */
+  Parrot_deref_p_p,                                  /*    910 */
+  Parrot_setp_ind_i_p,                               /*    911 */
+  Parrot_setp_ind_ic_p,                              /*    912 */
+  Parrot_setn_ind_i_n,                               /*    913 */
+  Parrot_setn_ind_ic_n,                              /*    914 */
+  Parrot_setn_ind_i_nc,                              /*    915 */
+  Parrot_setn_ind_ic_nc,                             /*    916 */
+  Parrot_sets_ind_i_s,                               /*    917 */
+  Parrot_sets_ind_ic_s,                              /*    918 */
+  Parrot_sets_ind_i_sc,                              /*    919 */
+  Parrot_sets_ind_ic_sc,                             /*    920 */
+  Parrot_seti_ind_i_i,                               /*    921 */
+  Parrot_seti_ind_ic_i,                              /*    922 */
+  Parrot_seti_ind_i_ic,                              /*    923 */
+  Parrot_seti_ind_ic_ic,                             /*    924 */
+  Parrot_set_p_ki_i,                                 /*    925 */
+  Parrot_set_p_kic_i,                                /*    926 */
+  Parrot_set_p_ki_ic,                                /*    927 */
+  Parrot_set_p_kic_ic,                               /*    928 */
+  Parrot_set_p_ki_n,                                 /*    929 */
+  Parrot_set_p_kic_n,                                /*    930 */
+  Parrot_set_p_ki_nc,                                /*    931 */
+  Parrot_set_p_kic_nc,                               /*    932 */
+  Parrot_set_p_ki_s,                                 /*    933 */
+  Parrot_set_p_kic_s,                                /*    934 */
+  Parrot_set_p_ki_sc,                                /*    935 */
+  Parrot_set_p_kic_sc,                               /*    936 */
+  Parrot_set_p_ki_p,                                 /*    937 */
+  Parrot_set_p_kic_p,                                /*    938 */
+  Parrot_set_i_p_ki,                                 /*    939 */
+  Parrot_set_i_p_kic,                                /*    940 */
+  Parrot_set_n_p_ki,                                 /*    941 */
+  Parrot_set_n_p_kic,                                /*    942 */
+  Parrot_set_s_p_ki,                                 /*    943 */
+  Parrot_set_s_p_kic,                                /*    944 */
+  Parrot_set_p_p_ki,                                 /*    945 */
+  Parrot_set_p_p_kic,                                /*    946 */
+  Parrot_set_p_k_i,                                  /*    947 */
+  Parrot_set_p_kc_i,                                 /*    948 */
+  Parrot_set_p_k_ic,                                 /*    949 */
+  Parrot_set_p_kc_ic,                                /*    950 */
+  Parrot_set_p_k_n,                                  /*    951 */
+  Parrot_set_p_kc_n,                                 /*    952 */
+  Parrot_set_p_k_nc,                                 /*    953 */
+  Parrot_set_p_kc_nc,                                /*    954 */
+  Parrot_set_p_k_s,                                  /*    955 */
+  Parrot_set_p_kc_s,                                 /*    956 */
+  Parrot_set_p_k_sc,                                 /*    957 */
+  Parrot_set_p_kc_sc,                                /*    958 */
+  Parrot_set_p_k_p,                                  /*    959 */
+  Parrot_set_p_kc_p,                                 /*    960 */
+  Parrot_set_i_p_k,                                  /*    961 */
+  Parrot_set_i_p_kc,                                 /*    962 */
+  Parrot_set_n_p_k,                                  /*    963 */
+  Parrot_set_n_p_kc,                                 /*    964 */
+  Parrot_set_s_p_k,                                  /*    965 */
+  Parrot_set_s_p_kc,                                 /*    966 */
+  Parrot_set_p_p_k,                                  /*    967 */
+  Parrot_set_p_p_kc,                                 /*    968 */
+  Parrot_clone_p_p,                                  /*    969 */
+  Parrot_clone_p_p_p,                                /*    970 */
+  Parrot_clone_p_p_pc,                               /*    971 */
+  Parrot_copy_p_p,                                   /*    972 */
+  Parrot_null_s,                                     /*    973 */
+  Parrot_null_i,                                     /*    974 */
+  Parrot_null_p,                                     /*    975 */
+  Parrot_null_n,                                     /*    976 */
+  Parrot_cleari,                                     /*    977 */
+  Parrot_clearn,                                     /*    978 */
+  Parrot_clears,                                     /*    979 */
+  Parrot_clearp,                                     /*    980 */
+  Parrot_ord_i_s,                                    /*    981 */
+  Parrot_ord_i_sc,                                   /*    982 */
+  Parrot_ord_i_s_i,                                  /*    983 */
+  Parrot_ord_i_sc_i,                                 /*    984 */
+  Parrot_ord_i_s_ic,                                 /*    985 */
+  Parrot_ord_i_sc_ic,                                /*    986 */
+  Parrot_chr_s_i,                                    /*    987 */
+  Parrot_chr_s_ic,                                   /*    988 */
+  Parrot_chopn_s_s_i,                                /*    989 */
+  Parrot_chopn_s_sc_i,                               /*    990 */
+  Parrot_chopn_s_s_ic,                               /*    991 */
+  Parrot_chopn_s_sc_ic,                              /*    992 */
+  Parrot_concat_s_s,                                 /*    993 */
+  Parrot_concat_s_sc,                                /*    994 */
+  Parrot_concat_p_p,                                 /*    995 */
+  Parrot_concat_p_s,                                 /*    996 */
+  Parrot_concat_p_sc,                                /*    997 */
+  Parrot_concat_s_s_s,                               /*    998 */
+  Parrot_concat_s_sc_s,                              /*    999 */
+  Parrot_concat_s_s_sc,                              /*   1000 */
+  Parrot_concat_p_p_s,                               /*   1001 */
+  Parrot_concat_p_p_sc,                              /*   1002 */
+  Parrot_concat_p_p_p,                               /*   1003 */
+  Parrot_repeat_s_s_i,                               /*   1004 */
+  Parrot_repeat_s_sc_i,                              /*   1005 */
+  Parrot_repeat_s_s_ic,                              /*   1006 */
+  Parrot_repeat_s_sc_ic,                             /*   1007 */
+  Parrot_repeat_p_p_i,                               /*   1008 */
+  Parrot_repeat_p_p_ic,                              /*   1009 */
+  Parrot_repeat_p_p_p,                               /*   1010 */
+  Parrot_repeat_p_i,                                 /*   1011 */
+  Parrot_repeat_p_ic,                                /*   1012 */
+  Parrot_repeat_p_p,                                 /*   1013 */
+  Parrot_length_i_s,                                 /*   1014 */
+  Parrot_length_i_sc,                                /*   1015 */
+  Parrot_bytelength_i_s,                             /*   1016 */
+  Parrot_bytelength_i_sc,                            /*   1017 */
+  Parrot_pin_s,                                      /*   1018 */
+  Parrot_unpin_s,                                    /*   1019 */
+  Parrot_substr_s_s_i,                               /*   1020 */
+  Parrot_substr_s_sc_i,                              /*   1021 */
+  Parrot_substr_s_s_ic,                              /*   1022 */
+  Parrot_substr_s_sc_ic,                             /*   1023 */
+  Parrot_substr_s_s_i_i,                             /*   1024 */
+  Parrot_substr_s_sc_i_i,                            /*   1025 */
+  Parrot_substr_s_s_ic_i,                            /*   1026 */
+  Parrot_substr_s_sc_ic_i,                           /*   1027 */
+  Parrot_substr_s_s_i_ic,                            /*   1028 */
+  Parrot_substr_s_sc_i_ic,                           /*   1029 */
+  Parrot_substr_s_s_ic_ic,                           /*   1030 */
+  Parrot_substr_s_sc_ic_ic,                          /*   1031 */
+  Parrot_substr_s_p_i_i,                             /*   1032 */
+  Parrot_substr_s_p_ic_i,                            /*   1033 */
+  Parrot_substr_s_p_i_ic,                            /*   1034 */
+  Parrot_substr_s_p_ic_ic,                           /*   1035 */
+  Parrot_replace_s_s_i_i_s,                          /*   1036 */
+  Parrot_replace_s_sc_i_i_s,                         /*   1037 */
+  Parrot_replace_s_s_ic_i_s,                         /*   1038 */
+  Parrot_replace_s_sc_ic_i_s,                        /*   1039 */
+  Parrot_replace_s_s_i_ic_s,                         /*   1040 */
+  Parrot_replace_s_sc_i_ic_s,                        /*   1041 */
+  Parrot_replace_s_s_ic_ic_s,                        /*   1042 */
+  Parrot_replace_s_sc_ic_ic_s,                       /*   1043 */
+  Parrot_replace_s_s_i_i_sc,                         /*   1044 */
+  Parrot_replace_s_sc_i_i_sc,                        /*   1045 */
+  Parrot_replace_s_s_ic_i_sc,                        /*   1046 */
+  Parrot_replace_s_sc_ic_i_sc,                       /*   1047 */
+  Parrot_replace_s_s_i_ic_sc,                        /*   1048 */
+  Parrot_replace_s_sc_i_ic_sc,                       /*   1049 */
+  Parrot_replace_s_s_ic_ic_sc,                       /*   1050 */
+  Parrot_replace_s_sc_ic_ic_sc,                      /*   1051 */
+  Parrot_index_i_s_s,                                /*   1052 */
+  Parrot_index_i_sc_s,                               /*   1053 */
+  Parrot_index_i_s_sc,                               /*   1054 */
+  Parrot_index_i_sc_sc,                              /*   1055 */
+  Parrot_index_i_s_s_i,                              /*   1056 */
+  Parrot_index_i_sc_s_i,                             /*   1057 */
+  Parrot_index_i_s_sc_i,                             /*   1058 */
+  Parrot_index_i_sc_sc_i,                            /*   1059 */
+  Parrot_index_i_s_s_ic,                             /*   1060 */
+  Parrot_index_i_sc_s_ic,                            /*   1061 */
+  Parrot_index_i_s_sc_ic,                            /*   1062 */
+  Parrot_index_i_sc_sc_ic,                           /*   1063 */
+  Parrot_sprintf_s_s_p,                              /*   1064 */
+  Parrot_sprintf_s_sc_p,                             /*   1065 */
+  Parrot_sprintf_p_p_p,                              /*   1066 */
+  Parrot_new_s,                                      /*   1067 */
+  Parrot_new_s_i,                                    /*   1068 */
+  Parrot_new_s_ic,                                   /*   1069 */
+  Parrot_stringinfo_i_s_i,                           /*   1070 */
+  Parrot_stringinfo_i_sc_i,                          /*   1071 */
+  Parrot_stringinfo_i_s_ic,                          /*   1072 */
+  Parrot_stringinfo_i_sc_ic,                         /*   1073 */
+  Parrot_upcase_s_s,                                 /*   1074 */
+  Parrot_upcase_s_sc,                                /*   1075 */
+  Parrot_downcase_s_s,                               /*   1076 */
+  Parrot_downcase_s_sc,                              /*   1077 */
+  Parrot_titlecase_s_s,                              /*   1078 */
+  Parrot_titlecase_s_sc,                             /*   1079 */
+  Parrot_join_s_s_p,                                 /*   1080 */
+  Parrot_join_s_sc_p,                                /*   1081 */
+  Parrot_split_p_s_s,                                /*   1082 */
+  Parrot_split_p_sc_s,                               /*   1083 */
+  Parrot_split_p_s_sc,                               /*   1084 */
+  Parrot_split_p_sc_sc,                              /*   1085 */
+  Parrot_charset_i_s,                                /*   1086 */
+  Parrot_charset_i_sc,                               /*   1087 */
+  Parrot_charsetname_s_i,                            /*   1088 */
+  Parrot_charsetname_s_ic,                           /*   1089 */
+  Parrot_find_charset_i_s,                           /*   1090 */
+  Parrot_find_charset_i_sc,                          /*   1091 */
+  Parrot_trans_charset_s_s_i,                        /*   1092 */
+  Parrot_trans_charset_s_sc_i,                       /*   1093 */
+  Parrot_trans_charset_s_s_ic,                       /*   1094 */
+  Parrot_trans_charset_s_sc_ic,                      /*   1095 */
+  Parrot_encoding_i_s,                               /*   1096 */
+  Parrot_encoding_i_sc,                              /*   1097 */
+  Parrot_encodingname_s_i,                           /*   1098 */
+  Parrot_encodingname_s_ic,                          /*   1099 */
+  Parrot_find_encoding_i_s,                          /*   1100 */
+  Parrot_find_encoding_i_sc,                         /*   1101 */
+  Parrot_trans_encoding_s_s_i,                       /*   1102 */
+  Parrot_trans_encoding_s_sc_i,                      /*   1103 */
+  Parrot_trans_encoding_s_s_ic,                      /*   1104 */
+  Parrot_trans_encoding_s_sc_ic,                     /*   1105 */
+  Parrot_is_cclass_i_i_s_i,                          /*   1106 */
+  Parrot_is_cclass_i_ic_s_i,                         /*   1107 */
+  Parrot_is_cclass_i_i_sc_i,                         /*   1108 */
+  Parrot_is_cclass_i_ic_sc_i,                        /*   1109 */
+  Parrot_is_cclass_i_i_s_ic,                         /*   1110 */
+  Parrot_is_cclass_i_ic_s_ic,                        /*   1111 */
+  Parrot_is_cclass_i_i_sc_ic,                        /*   1112 */
+  Parrot_is_cclass_i_ic_sc_ic,                       /*   1113 */
+  Parrot_find_cclass_i_i_s_i_i,                      /*   1114 */
+  Parrot_find_cclass_i_ic_s_i_i,                     /*   1115 */
+  Parrot_find_cclass_i_i_sc_i_i,                     /*   1116 */
+  Parrot_find_cclass_i_ic_sc_i_i,                    /*   1117 */
+  Parrot_find_cclass_i_i_s_ic_i,                     /*   1118 */
+  Parrot_find_cclass_i_ic_s_ic_i,                    /*   1119 */
+  Parrot_find_cclass_i_i_sc_ic_i,                    /*   1120 */
+  Parrot_find_cclass_i_ic_sc_ic_i,                   /*   1121 */
+  Parrot_find_cclass_i_i_s_i_ic,                     /*   1122 */
+  Parrot_find_cclass_i_ic_s_i_ic,                    /*   1123 */
+  Parrot_find_cclass_i_i_sc_i_ic,                    /*   1124 */
+  Parrot_find_cclass_i_ic_sc_i_ic,                   /*   1125 */
+  Parrot_find_cclass_i_i_s_ic_ic,                    /*   1126 */
+  Parrot_find_cclass_i_ic_s_ic_ic,                   /*   1127 */
+  Parrot_find_cclass_i_i_sc_ic_ic,                   /*   1128 */
+  Parrot_find_cclass_i_ic_sc_ic_ic,                  /*   1129 */
+  Parrot_find_not_cclass_i_i_s_i_i,                  /*   1130 */
+  Parrot_find_not_cclass_i_ic_s_i_i,                 /*   1131 */
+  Parrot_find_not_cclass_i_i_sc_i_i,                 /*   1132 */
+  Parrot_find_not_cclass_i_ic_sc_i_i,                /*   1133 */
+  Parrot_find_not_cclass_i_i_s_ic_i,                 /*   1134 */
+  Parrot_find_not_cclass_i_ic_s_ic_i,                /*   1135 */
+  Parrot_find_not_cclass_i_i_sc_ic_i,                /*   1136 */
+  Parrot_find_not_cclass_i_ic_sc_ic_i,               /*   1137 */
+  Parrot_find_not_cclass_i_i_s_i_ic,                 /*   1138 */
+  Parrot_find_not_cclass_i_ic_s_i_ic,                /*   1139 */
+  Parrot_find_not_cclass_i_i_sc_i_ic,                /*   1140 */
+  Parrot_find_not_cclass_i_ic_sc_i_ic,               /*   1141 */
+  Parrot_find_not_cclass_i_i_s_ic_ic,                /*   1142 */
+  Parrot_find_not_cclass_i_ic_s_ic_ic,               /*   1143 */
+  Parrot_find_not_cclass_i_i_sc_ic_ic,               /*   1144 */
+  Parrot_find_not_cclass_i_ic_sc_ic_ic,              /*   1145 */
+  Parrot_escape_s_s,                                 /*   1146 */
+  Parrot_compose_s_s,                                /*   1147 */
+  Parrot_compose_s_sc,                               /*   1148 */
+  Parrot_spawnw_i_s,                                 /*   1149 */
+  Parrot_spawnw_i_sc,                                /*   1150 */
+  Parrot_spawnw_i_p,                                 /*   1151 */
+  Parrot_err_i,                                      /*   1152 */
+  Parrot_err_s,                                      /*   1153 */
+  Parrot_err_s_i,                                    /*   1154 */
+  Parrot_err_s_ic,                                   /*   1155 */
+  Parrot_time_i,                                     /*   1156 */
+  Parrot_time_n,                                     /*   1157 */
+  Parrot_gmtime_s_i,                                 /*   1158 */
+  Parrot_gmtime_s_ic,                                /*   1159 */
+  Parrot_localtime_s_i,                              /*   1160 */
+  Parrot_localtime_s_ic,                             /*   1161 */
+  Parrot_decodetime_p_i,                             /*   1162 */
+  Parrot_decodetime_p_ic,                            /*   1163 */
+  Parrot_decodelocaltime_p_i,                        /*   1164 */
+  Parrot_decodelocaltime_p_ic,                       /*   1165 */
+  Parrot_sysinfo_s_i,                                /*   1166 */
+  Parrot_sysinfo_s_ic,                               /*   1167 */
+  Parrot_sysinfo_i_i,                                /*   1168 */
+  Parrot_sysinfo_i_ic,                               /*   1169 */
+  Parrot_sleep_i,                                    /*   1170 */
+  Parrot_sleep_ic,                                   /*   1171 */
+  Parrot_sleep_n,                                    /*   1172 */
+  Parrot_sleep_nc,                                   /*   1173 */
+  Parrot_sizeof_i_i,                                 /*   1174 */
+  Parrot_sizeof_i_ic,                                /*   1175 */
+  Parrot_store_lex_s_p,                              /*   1176 */
+  Parrot_store_lex_sc_p,                             /*   1177 */
+  Parrot_store_dynamic_lex_s_p,                      /*   1178 */
+  Parrot_store_dynamic_lex_sc_p,                     /*   1179 */
+  Parrot_find_lex_p_s,                               /*   1180 */
+  Parrot_find_lex_p_sc,                              /*   1181 */
+  Parrot_find_dynamic_lex_p_s,                       /*   1182 */
+  Parrot_find_dynamic_lex_p_sc,                      /*   1183 */
+  Parrot_find_caller_lex_p_s,                        /*   1184 */
+  Parrot_find_caller_lex_p_sc,                       /*   1185 */
+  Parrot_get_namespace_p,                            /*   1186 */
+  Parrot_get_namespace_p_p,                          /*   1187 */
+  Parrot_get_namespace_p_pc,                         /*   1188 */
+  Parrot_get_hll_namespace_p,                        /*   1189 */
+  Parrot_get_hll_namespace_p_p,                      /*   1190 */
+  Parrot_get_hll_namespace_p_pc,                     /*   1191 */
+  Parrot_get_root_namespace_p,                       /*   1192 */
+  Parrot_get_root_namespace_p_p,                     /*   1193 */
+  Parrot_get_root_namespace_p_pc,                    /*   1194 */
+  Parrot_get_global_p_s,                             /*   1195 */
+  Parrot_get_global_p_sc,                            /*   1196 */
+  Parrot_get_global_p_p_s,                           /*   1197 */
+  Parrot_get_global_p_pc_s,                          /*   1198 */
+  Parrot_get_global_p_p_sc,                          /*   1199 */
+  Parrot_get_global_p_pc_sc,                         /*   1200 */
+  Parrot_get_hll_global_p_s,                         /*   1201 */
+  Parrot_get_hll_global_p_sc,                        /*   1202 */
+  Parrot_get_hll_global_p_p_s,                       /*   1203 */
+  Parrot_get_hll_global_p_pc_s,                      /*   1204 */
+  Parrot_get_hll_global_p_p_sc,                      /*   1205 */
+  Parrot_get_hll_global_p_pc_sc,                     /*   1206 */
+  Parrot_get_root_global_p_s,                        /*   1207 */
+  Parrot_get_root_global_p_sc,                       /*   1208 */
+  Parrot_get_root_global_p_p_s,                      /*   1209 */
+  Parrot_get_root_global_p_pc_s,                     /*   1210 */
+  Parrot_get_root_global_p_p_sc,                     /*   1211 */
+  Parrot_get_root_global_p_pc_sc,                    /*   1212 */
+  Parrot_set_global_s_p,                             /*   1213 */
+  Parrot_set_global_sc_p,                            /*   1214 */
+  Parrot_set_global_p_s_p,                           /*   1215 */
+  Parrot_set_global_pc_s_p,                          /*   1216 */
+  Parrot_set_global_p_sc_p,                          /*   1217 */
+  Parrot_set_global_pc_sc_p,                         /*   1218 */
+  Parrot_set_hll_global_s_p,                         /*   1219 */
+  Parrot_set_hll_global_sc_p,                        /*   1220 */
+  Parrot_set_hll_global_p_s_p,                       /*   1221 */
+  Parrot_set_hll_global_pc_s_p,                      /*   1222 */
+  Parrot_set_hll_global_p_sc_p,                      /*   1223 */
+  Parrot_set_hll_global_pc_sc_p,                     /*   1224 */
+  Parrot_set_root_global_s_p,                        /*   1225 */
+  Parrot_set_root_global_sc_p,                       /*   1226 */
+  Parrot_set_root_global_p_s_p,                      /*   1227 */
+  Parrot_set_root_global_pc_s_p,                     /*   1228 */
+  Parrot_set_root_global_p_sc_p,                     /*   1229 */
+  Parrot_set_root_global_pc_sc_p,                    /*   1230 */
+  Parrot_find_name_p_s,                              /*   1231 */
+  Parrot_find_name_p_sc,                             /*   1232 */
+  Parrot_find_sub_not_null_p_s,                      /*   1233 */
+  Parrot_find_sub_not_null_p_sc,                     /*   1234 */
+  Parrot_trap,                                       /*   1235 */
+  Parrot_fetch_p_p_p_p,                              /*   1236 */
+  Parrot_fetch_p_pc_p_p,                             /*   1237 */
+  Parrot_fetch_p_p_pc_p,                             /*   1238 */
+  Parrot_fetch_p_pc_pc_p,                            /*   1239 */
+  Parrot_fetch_p_p_p_pc,                             /*   1240 */
+  Parrot_fetch_p_pc_p_pc,                            /*   1241 */
+  Parrot_fetch_p_p_pc_pc,                            /*   1242 */
+  Parrot_fetch_p_pc_pc_pc,                           /*   1243 */
+  Parrot_fetch_p_p_i_p,                              /*   1244 */
+  Parrot_fetch_p_pc_i_p,                             /*   1245 */
+  Parrot_fetch_p_p_ic_p,                             /*   1246 */
+  Parrot_fetch_p_pc_ic_p,                            /*   1247 */
+  Parrot_fetch_p_p_i_pc,                             /*   1248 */
+  Parrot_fetch_p_pc_i_pc,                            /*   1249 */
+  Parrot_fetch_p_p_ic_pc,                            /*   1250 */
+  Parrot_fetch_p_pc_ic_pc,                           /*   1251 */
+  Parrot_fetch_p_p_s_p,                              /*   1252 */
+  Parrot_fetch_p_pc_s_p,                             /*   1253 */
+  Parrot_fetch_p_p_sc_p,                             /*   1254 */
+  Parrot_fetch_p_pc_sc_p,                            /*   1255 */
+  Parrot_fetch_p_p_s_pc,                             /*   1256 */
+  Parrot_fetch_p_pc_s_pc,                            /*   1257 */
+  Parrot_fetch_p_p_sc_pc,                            /*   1258 */
+  Parrot_fetch_p_pc_sc_pc,                           /*   1259 */
+  Parrot_vivify_p_p_p_p,                             /*   1260 */
+  Parrot_vivify_p_pc_p_p,                            /*   1261 */
+  Parrot_vivify_p_p_pc_p,                            /*   1262 */
+  Parrot_vivify_p_pc_pc_p,                           /*   1263 */
+  Parrot_vivify_p_p_p_pc,                            /*   1264 */
+  Parrot_vivify_p_pc_p_pc,                           /*   1265 */
+  Parrot_vivify_p_p_pc_pc,                           /*   1266 */
+  Parrot_vivify_p_pc_pc_pc,                          /*   1267 */
+  Parrot_vivify_p_p_i_p,                             /*   1268 */
+  Parrot_vivify_p_pc_i_p,                            /*   1269 */
+  Parrot_vivify_p_p_ic_p,                            /*   1270 */
+  Parrot_vivify_p_pc_ic_p,                           /*   1271 */
+  Parrot_vivify_p_p_i_pc,                            /*   1272 */
+  Parrot_vivify_p_pc_i_pc,                           /*   1273 */
+  Parrot_vivify_p_p_ic_pc,                           /*   1274 */
+  Parrot_vivify_p_pc_ic_pc,                          /*   1275 */
+  Parrot_vivify_p_p_s_p,                             /*   1276 */
+  Parrot_vivify_p_pc_s_p,                            /*   1277 */
+  Parrot_vivify_p_p_sc_p,                            /*   1278 */
+  Parrot_vivify_p_pc_sc_p,                           /*   1279 */
+  Parrot_vivify_p_p_s_pc,                            /*   1280 */
+  Parrot_vivify_p_pc_s_pc,                           /*   1281 */
+  Parrot_vivify_p_p_sc_pc,                           /*   1282 */
+  Parrot_vivify_p_pc_sc_pc,                          /*   1283 */
+  Parrot_new_p_s_i,                                  /*   1284 */
+  Parrot_new_p_sc_i,                                 /*   1285 */
+  Parrot_new_p_s_ic,                                 /*   1286 */
+  Parrot_new_p_sc_ic,                                /*   1287 */
+  Parrot_new_p_p_i,                                  /*   1288 */
+  Parrot_new_p_pc_i,                                 /*   1289 */
+  Parrot_new_p_p_ic,                                 /*   1290 */
+  Parrot_new_p_pc_ic,                                /*   1291 */
+  Parrot_root_new_p_p_i,                             /*   1292 */
+  Parrot_root_new_p_pc_i,                            /*   1293 */
+  Parrot_root_new_p_p_ic,                            /*   1294 */
+  Parrot_root_new_p_pc_ic,                           /*   1295 */
   NULL /* NULL function pointer */
 };
 
@@ -17139,9 +16944,9 @@
   PARROT_FUNCTION_CORE,                       /* core_type = PARROT_XX_CORE */
   0,                                /* flags */
   2,    /* major_version */
-  1,    /* minor_version */
+  3,    /* minor_version */
   0,    /* patch_version */
-  1311,              /* op_count */
+  1296,              /* op_count */
   core_op_info_table,              /* op_info_table */
   core_op_func_table,              /* op_func_table */
   get_op                 /* op_code() */
@@ -17153,28 +16958,32 @@
 
 opcode_t *
 Parrot_end(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/core.ops"
     return (opcode_t *)0;
 }
 
 opcode_t *
 Parrot_noop(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 93 "src/ops/core.ops"
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_check_events(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t *next = cur_opcode + 1;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 96 "src/ops/core.ops"
+    opcode_t * const next = cur_opcode + 1;
     Parrot_cx_check_tasks(interp, interp->scheduler);
     return (opcode_t *)next;   /* force this being a branch op */
 }
 
 opcode_t *
 Parrot_check_events__(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t *_this = CUR_OPCODE;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 102 "src/ops/core.ops"
+    opcode_t * const _this = CUR_OPCODE;
     /* Restore op_func_table. */
     disable_event_checking(interp);
     Parrot_cx_handle_tasks(interp, interp->scheduler);
@@ -17183,7 +16992,8 @@
 
 opcode_t *
 Parrot_wrapper__(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 110 "src/ops/core.ops"
     opcode_t *pc = CUR_OPCODE;
     DO_OP(pc, interp);
     return (opcode_t *)pc;
@@ -17191,52 +17001,59 @@
 
 opcode_t *
 Parrot_load_bytecode_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 116 "src/ops/core.ops"
     Parrot_load_bytecode(interp, SREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_load_bytecode_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 116 "src/ops/core.ops"
     Parrot_load_bytecode(interp, CONST(1)->u.string);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_load_language_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 127 "src/ops/core.ops"
     Parrot_load_language(interp, SREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_load_language_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 127 "src/ops/core.ops"
     Parrot_load_language(interp, CONST(1)->u.string);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_branch_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 153 "src/ops/core.ops"
     return (opcode_t *)cur_opcode + IREG(1);
 }
 
 opcode_t *
 Parrot_branch_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 153 "src/ops/core.ops"
     return (opcode_t *)cur_opcode + cur_opcode[1];
 }
 
 opcode_t *
 Parrot_local_branch_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 167 "src/ops/core.ops"
     INTVAL return_addr;
-    opcode_t *dest = cur_opcode + 3;
+    opcode_t * const dest = cur_opcode + 3;
 
     if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_ResizableIntegerArray) {
-        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Must pass a valid integer array to 'local_branch'");
         return (opcode_t *)handler;
@@ -17250,12 +17067,13 @@
 
 opcode_t *
 Parrot_local_branch_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 167 "src/ops/core.ops"
     INTVAL return_addr;
-    opcode_t *dest = cur_opcode + 3;
+    opcode_t * const dest = cur_opcode + 3;
 
     if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_ResizableIntegerArray) {
-        opcode_t * handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Must pass a valid integer array to 'local_branch'");
         return (opcode_t *)handler;
@@ -17269,13 +17087,14 @@
 
 opcode_t *
 Parrot_local_return_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 190 "src/ops/core.ops"
     INTVAL return_addr;
     opcode_t *next;
-    opcode_t *dest = cur_opcode + 2;
+    opcode_t * const dest = cur_opcode + 2;
 
     if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_ResizableIntegerArray) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Must pass a valid integer array to 'local_return'");
         return (opcode_t *)handler;
@@ -17287,7 +17106,7 @@
     /* The return address must be within the current code segment. */
     if (! (next >= interp->code->base.data
            && next < (interp->code->base.data + interp->code->base.size))) {
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
             EXCEPTION_INVALID_OPERATION,
             "Address for 'local_return' must be within the current code segment");
         return (opcode_t *)handler;
@@ -17298,21 +17117,24 @@
 
 opcode_t *
 Parrot_jump_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 225 "src/ops/core.ops"
     opcode_t * const loc = INTVAL2PTR(opcode_t *, IREG(1));
     return (opcode_t *)loc;
 }
 
 opcode_t *
 Parrot_jump_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 225 "src/ops/core.ops"
     opcode_t * const loc = INTVAL2PTR(opcode_t *, cur_opcode[1]);
     return (opcode_t *)loc;
 }
 
 opcode_t *
 Parrot_enternative(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 238 "src/ops/core.ops"
     opcode_t * const addr = run_native(interp, CUR_OPCODE,
             interp->code->base.data);
     return (opcode_t *)addr;
@@ -17320,7 +17142,8 @@
 
 opcode_t *
 Parrot_if_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 273 "src/ops/core.ops"
     if (IREG(1) != 0)
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17328,7 +17151,8 @@
 
 opcode_t *
 Parrot_if_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 278 "src/ops/core.ops"
     if (!FLOAT_IS_ZERO(NREG(1)))
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17336,7 +17160,8 @@
 
 opcode_t *
 Parrot_if_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 283 "src/ops/core.ops"
     if (Parrot_str_boolean(interp, SREG(1)))
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17344,7 +17169,8 @@
 
 opcode_t *
 Parrot_if_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 288 "src/ops/core.ops"
     if (VTABLE_get_bool(interp, PREG(1)))
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17352,7 +17178,8 @@
 
 opcode_t *
 Parrot_unless_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 307 "src/ops/core.ops"
     if (IREG(1) == 0)
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17360,7 +17187,8 @@
 
 opcode_t *
 Parrot_unless_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 312 "src/ops/core.ops"
     if (FLOAT_IS_ZERO(NREG(1)))
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17368,7 +17196,8 @@
 
 opcode_t *
 Parrot_unless_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/core.ops"
     if (!Parrot_str_boolean(interp, SREG(1)))
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17376,7 +17205,8 @@
 
 opcode_t *
 Parrot_unless_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 322 "src/ops/core.ops"
     if (!VTABLE_get_bool(interp, PREG(1)))
         return (opcode_t *)cur_opcode + cur_opcode[2];
 
@@ -17384,11 +17214,15 @@
 
 opcode_t *
 Parrot_invokecc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 377 "src/ops/core.ops"
     PMC      * const p     = PREG(1);
     opcode_t *dest         = cur_opcode + 2;
+    PMC      * const signature = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = NULL;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, NULL);
     interp->current_cont   = NEED_CONTINUATION;
     dest                   = VTABLE_invoke(interp, p, dest);
 
@@ -17397,11 +17231,15 @@
 
 opcode_t *
 Parrot_invoke_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 391 "src/ops/core.ops"
     opcode_t   *dest       = cur_opcode + 3;
     PMC * const p          = PREG(1);
+    PMC * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = NULL;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, NULL);
     interp->current_cont   = PREG(2);
 
     dest = VTABLE_invoke(interp, p, dest);
@@ -17410,7 +17248,8 @@
 
 opcode_t *
 Parrot_yield(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 405 "src/ops/core.ops"
     opcode_t   *dest = cur_opcode + 1;
     PMC * const p    = Parrot_pcc_get_sub(interp, CURRENT_CONTEXT(interp));
 
@@ -17422,7 +17261,8 @@
 
 opcode_t *
 Parrot_tailcall_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 415 "src/ops/core.ops"
     PMC * const p               = PREG(1);
     opcode_t   *dest            = cur_opcode + 2;
     PMC * const ctx             = CURRENT_CONTEXT(interp);
@@ -17440,7 +17280,8 @@
 
 opcode_t *
 Parrot_returncc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/core.ops"
     PMC * const p = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
     opcode_t * const dest = VTABLE_invoke(interp, p, cur_opcode + 1);
     return (opcode_t *)dest;
@@ -17448,21 +17289,24 @@
 
 opcode_t *
 Parrot_capture_lex_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 437 "src/ops/core.ops"
     Parrot_capture_lex(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_newclosure_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 441 "src/ops/core.ops"
     PREG(1) = parrot_new_closure(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_args_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 479 "src/ops/core.ops"
     opcode_t * const raw_args = CUR_OPCODE;
     PMC * const signature = CONST(1)->u.key;
     PMC * call_sig;
@@ -17477,72 +17321,97 @@
 }
 
 opcode_t *
-Parrot_get_results_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t * const raw_returns = CUR_OPCODE;
-    PMC * const signature = CONST(1)->u.key;
-    PMC * call_sig;
+Parrot_get_params_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 493 "src/ops/core.ops"
+    opcode_t * const raw_params  = CUR_OPCODE;
+    PMC      * const signature   = CONST(1)->u.key;
+    PMC      * const ctx         = CURRENT_CONTEXT(interp);
+    PMC      * const ccont       = Parrot_pcc_get_continuation(interp, ctx);
+    PMC      * const caller_ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
+    PMC      * const call_object = Parrot_pcc_get_signature(interp, caller_ctx);
     INTVAL argc;
 
-    call_sig = Parrot_pcc_build_sig_object_returns_from_op(interp,
-            Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)),
-            signature, raw_returns);
-    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_sig);
+    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params,
+            PARROT_ERRORS_PARAM_COUNT_FLAG);
 
+    /* TODO Factor out with Sub.invoke */
+    if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
+        PObj_get_FLAGS(ccont) &= ~SUB_FLAG_TAILCALL;
+        Parrot_pcc_dec_recursion_depth(interp, ctx);
+        Parrot_pcc_set_caller_ctx(interp, ctx, Parrot_pcc_get_caller_ctx(interp, caller_ctx));
+    }
     argc = VTABLE_elements(interp, signature);
     return (opcode_t *)cur_opcode + argc + 2;
 }
 
 opcode_t *
-Parrot_get_params_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t * const raw_params = CUR_OPCODE;
-    PMC *caller_ctx, *ctx;
-    PMC *ccont, *call_object;
-    PMC * const signature = CONST(1)->u.key;
+Parrot_set_returns_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/core.ops"
+    opcode_t * const raw_args  = CUR_OPCODE;
+    PMC      * const signature = CONST(1)->u.key;
+    PMC      * const call_sig  = Parrot_pcc_build_sig_object_from_op(interp,
+                Parrot_pcc_get_signature(interp,
+                Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp))),
+                    signature, raw_args);
     INTVAL argc;
 
-    ctx     = CURRENT_CONTEXT(interp);
-    ccont   = Parrot_pcc_get_continuation(interp, ctx);
-
-    caller_ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
-    call_object = Parrot_pcc_get_signature(interp, caller_ctx);
+    Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_sig);
 
-    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params);
+    argc = VTABLE_elements(interp, signature);
+    return (opcode_t *)cur_opcode + argc + 2;
+}
+
+opcode_t *
+Parrot_get_results_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 530 "src/ops/core.ops"
+    opcode_t * const raw_params  = CUR_OPCODE;
+    PMC      * const signature   = CONST(1)->u.key;
+    PMC             *ctx         = CURRENT_CONTEXT(interp);
+    PMC             *ccont       = Parrot_pcc_get_continuation(interp, ctx);
+    PMC             *call_object = Parrot_pcc_get_signature(interp, ctx);
+
+    INTVAL argc;
+
+    Parrot_pcc_fill_params_from_op(interp, call_object, signature, raw_params,
+            PARROT_ERRORS_RESULT_COUNT_FLAG);
 
-    /* TODO Factor out with Sub.invoke */
-    if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
-        PObj_get_FLAGS(ccont) &= ~SUB_FLAG_TAILCALL;
-        Parrot_pcc_dec_recursion_depth(interp, ctx);
-        Parrot_pcc_set_caller_ctx(interp, ctx, Parrot_pcc_get_caller_ctx(interp, caller_ctx));
-    }
     argc = VTABLE_elements(interp, signature);
     return (opcode_t *)cur_opcode + argc + 2;
 }
 
 opcode_t *
-Parrot_set_returns_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t * const raw_returns = CUR_OPCODE;
-    PMC      *signature          = CONST(1)->u.key;
-    PMC      *ctx                = CURRENT_CONTEXT(interp);
-    PMC      *caller_ctx         = Parrot_pcc_get_caller_ctx(interp, ctx);
-    PMC      *call_object        = Parrot_pcc_get_signature(interp, caller_ctx);
-    INTVAL    argc               = VTABLE_elements(interp, signature);
+Parrot_set_result_info_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 552 "src/ops/core.ops"
+    PMC * const ctx = CURRENT_CONTEXT(interp);
 
-    Parrot_pcc_fill_returns_from_op(interp, call_object, signature, raw_returns);
+    VTABLE_set_attr_str(interp, ctx,
+            Parrot_str_new_constant(interp, "return_flags"),
+            PREG(1));
 
-    Parrot_pcc_set_signature(interp, ctx, NULL);
+return (opcode_t *)cur_opcode + 2;}
 
-    return (opcode_t *)cur_opcode + argc + 2;
-}
+opcode_t *
+Parrot_set_result_info_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 552 "src/ops/core.ops"
+    PMC * const ctx = CURRENT_CONTEXT(interp);
+
+    VTABLE_set_attr_str(interp, ctx,
+            Parrot_str_new_constant(interp, "return_flags"),
+            CONST(1)->u.key);
+
+return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_result_info_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC *caller_ctx  = Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
-    PMC *call_object = Parrot_pcc_get_signature(interp, caller_ctx);
-    PMC *sig = VTABLE_get_attr_str(interp, call_object,
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 569 "src/ops/core.ops"
+    PMC * const caller_ctx = Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
+    PMC * const sig        = VTABLE_get_attr_str(interp, caller_ctx,
             Parrot_str_new_constant(interp, "return_flags"));
 
     /* If no elements, hand back empty array; otherwise PMC. */
@@ -17555,28 +17424,32 @@
 
 opcode_t *
 Parrot_set_addr_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 609 "src/ops/core.ops"
     IREG(1) = PTR2INTVAL(CUR_OPCODE + cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_addr_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 613 "src/ops/core.ops"
     VTABLE_set_pointer(interp, PREG(1), (CUR_OPCODE + cur_opcode[2]));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_addr_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 617 "src/ops/core.ops"
     VTABLE_set_pointer(interp, PREG(1), (void*)IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_get_addr_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 621 "src/ops/core.ops"
     void *ptr = VTABLE_get_pointer(interp, PREG(2));
     IREG(1)        = (INTVAL)ptr;
 
@@ -17584,21 +17457,24 @@
 
 opcode_t *
 Parrot_schedule_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 643 "src/ops/core.ops"
     Parrot_cx_schedule_task(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_addhandler_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 654 "src/ops/core.ops"
     Parrot_cx_add_handler(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_push_eh_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 716 "src/ops/core.ops"
     PMC * const eh = Parrot_pmc_new(interp, enum_class_ExceptionHandler);
     VTABLE_set_pointer(interp, eh, CUR_OPCODE + cur_opcode[1]);
     Parrot_cx_add_handler_local(interp, eh);
@@ -17607,14 +17483,16 @@
 
 opcode_t *
 Parrot_push_eh_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 722 "src/ops/core.ops"
     Parrot_cx_add_handler_local(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_pop_eh(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 726 "src/ops/core.ops"
     Parrot_cx_delete_handler_local(interp,
             Parrot_str_new_constant(interp, "exception"));
 
@@ -17622,11 +17500,15 @@
 
 opcode_t *
 Parrot_throw_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 731 "src/ops/core.ops"
     PMC * except = PREG(1);
     opcode_t *dest;
-    opcode_t *const ret    = cur_opcode + 2;
-    PMC            *resume = new_ret_continuation_pmc(interp, ret);
+    opcode_t * const ret    = cur_opcode + 2;
+    PMC      * const resume = pmc_new(interp, enum_class_Continuation);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
     if (PMC_IS_NULL(except) || except->vtable->base_type != enum_class_Exception)
         except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
                 EXCEPTION_UNIMPLEMENTED,
@@ -17639,7 +17521,8 @@
 
 opcode_t *
 Parrot_throw_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 749 "src/ops/core.ops"
     opcode_t * dest;
     PMC * except = PREG(1);
     if (PMC_IS_NULL(except) || except->vtable->base_type != enum_class_Exception)
@@ -17653,11 +17536,12 @@
 
 opcode_t *
 Parrot_rethrow_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 761 "src/ops/core.ops"
     opcode_t * dest;
     if (PMC_IS_NULL(PREG(1)) || PREG(1)->vtable->base_type != enum_class_Exception) {
-        opcode_t * const ret = cur_opcode + 2;
-        PMC * except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
+        opcode_t * const ret    = cur_opcode + 2;
+        PMC      * const except = Parrot_ex_build_exception(interp, EXCEPT_fatal,
                 EXCEPTION_UNIMPLEMENTED,
                 Parrot_str_new_constant(interp, "Not a throwable object"));
         dest = Parrot_ex_throw_from_op(interp, except, ret);
@@ -17669,7 +17553,8 @@
 
 opcode_t *
 Parrot_count_eh_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 775 "src/ops/core.ops"
     IREG(1) = Parrot_cx_count_handlers_local(interp,
             Parrot_str_new_constant(interp, "exception"));
 
@@ -17677,13 +17562,16 @@
 
 opcode_t *
 Parrot_die_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 780 "src/ops/core.ops"
     opcode_t        *dest;
     opcode_t * const ret       = cur_opcode + 2;
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    PMC             *exception = Parrot_ex_build_exception(interp, EXCEPT_error,
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
                                     CONTROL_ERROR, SREG(1));
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -17692,13 +17580,16 @@
 
 opcode_t *
 Parrot_die_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 780 "src/ops/core.ops"
     opcode_t        *dest;
     opcode_t * const ret       = cur_opcode + 2;
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    PMC             *exception = Parrot_ex_build_exception(interp, EXCEPT_error,
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
                                     CONTROL_ERROR, CONST(1)->u.string);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -17707,15 +17598,17 @@
 
 opcode_t *
 Parrot_die_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 795 "src/ops/core.ops"
     opcode_t        *dest;
     opcode_t * const ret       = cur_opcode + 2;
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    STRING          *msg       = PMC_IS_NULL(PREG(1))
-                               ? NULL : VTABLE_get_string(interp, PREG(1));
-    PMC             *exception =
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    STRING   * const msg       = PMC_IS_NULL(PREG(1)) ? NULL : VTABLE_get_string(interp, PREG(1));
+    PMC      * const exception =
         Parrot_ex_build_exception(interp, EXCEPT_error, CONTROL_ERROR, msg);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -17724,15 +17617,17 @@
 
 opcode_t *
 Parrot_die_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 795 "src/ops/core.ops"
     opcode_t        *dest;
     opcode_t * const ret       = cur_opcode + 2;
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    STRING          *msg       = PMC_IS_NULL(CONST(1)->u.key)
-                               ? NULL : VTABLE_get_string(interp, CONST(1)->u.key);
-    PMC             *exception =
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    STRING   * const msg       = PMC_IS_NULL(CONST(1)->u.key) ? NULL : VTABLE_get_string(interp, CONST(1)->u.key);
+    PMC      * const exception =
         Parrot_ex_build_exception(interp, EXCEPT_error, CONTROL_ERROR, msg);
 
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     dest = Parrot_ex_throw_from_op(interp, exception, ret);
@@ -17741,72 +17636,75 @@
 
 opcode_t *
 Parrot_die_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/core.ops"
     if (IREG(1) == EXCEPT_doomed)
         _exit(IREG(2));
     else {
         opcode_t * const ret       = cur_opcode + 3;
-        PMC             *exception = Parrot_ex_build_exception(interp, IREG(1),
-                                                               IREG(2), NULL);
-        opcode_t * const dest      = Parrot_ex_throw_from_op(interp,
-                                                             exception, ret);
+        PMC      * const exception = Parrot_ex_build_exception(interp, IREG(1), IREG(2), NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);
+
         return (opcode_t *)dest;
     }
 }
 
 opcode_t *
 Parrot_die_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/core.ops"
     if (cur_opcode[1] == EXCEPT_doomed)
         _exit(IREG(2));
     else {
         opcode_t * const ret       = cur_opcode + 3;
-        PMC             *exception = Parrot_ex_build_exception(interp, cur_opcode[1],
-                                                               IREG(2), NULL);
-        opcode_t * const dest      = Parrot_ex_throw_from_op(interp,
-                                                             exception, ret);
+        PMC      * const exception = Parrot_ex_build_exception(interp, cur_opcode[1], IREG(2), NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);
+
         return (opcode_t *)dest;
     }
 }
 
 opcode_t *
 Parrot_die_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/core.ops"
     if (IREG(1) == EXCEPT_doomed)
         _exit(cur_opcode[2]);
     else {
         opcode_t * const ret       = cur_opcode + 3;
-        PMC             *exception = Parrot_ex_build_exception(interp, IREG(1),
-                                                               cur_opcode[2], NULL);
-        opcode_t * const dest      = Parrot_ex_throw_from_op(interp,
-                                                             exception, ret);
+        PMC      * const exception = Parrot_ex_build_exception(interp, IREG(1), cur_opcode[2], NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);
+
         return (opcode_t *)dest;
     }
 }
 
 opcode_t *
 Parrot_die_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/core.ops"
     if (cur_opcode[1] == EXCEPT_doomed)
         _exit(cur_opcode[2]);
     else {
         opcode_t * const ret       = cur_opcode + 3;
-        PMC             *exception = Parrot_ex_build_exception(interp, cur_opcode[1],
-                                                               cur_opcode[2], NULL);
-        opcode_t * const dest      = Parrot_ex_throw_from_op(interp,
-                                                             exception, ret);
+        PMC      * const exception = Parrot_ex_build_exception(interp, cur_opcode[1], cur_opcode[2], NULL);
+        opcode_t * const dest      = Parrot_ex_throw_from_op(interp, exception, ret);
+
         return (opcode_t *)dest;
     }
 }
 
 opcode_t *
 Parrot_exit_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 823 "src/ops/core.ops"
     opcode_t        *dest;
     opcode_t * const ret       = cur_opcode + 2;
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    PMC             *exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
-                                                      IREG(1), NULL);
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, IREG(1), NULL);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     VTABLE_set_integer_keyed_str(interp, exception,
@@ -17817,12 +17715,15 @@
 
 opcode_t *
 Parrot_exit_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 823 "src/ops/core.ops"
     opcode_t        *dest;
     opcode_t * const ret       = cur_opcode + 2;
-    PMC             *resume    = new_ret_continuation_pmc(interp, ret);
-    PMC             *exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
-                                                      cur_opcode[1], NULL);
+    PMC      * const resume    = pmc_new(interp, enum_class_Continuation);
+    PMC      * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, cur_opcode[1], NULL);
+
+    VTABLE_set_pointer(interp, resume, ret);
+
     VTABLE_set_attr_str(interp, exception,
                         Parrot_str_new_constant(interp, "resume"), resume);
     VTABLE_set_integer_keyed_str(interp, exception,
@@ -17832,79 +17733,9 @@
 }
 
 opcode_t *
-Parrot_pushmark_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * const newint = Parrot_pmc_new(interp, enum_class_Integer);
-    VTABLE_set_integer_native(interp, newint, IREG(1));
-    VTABLE_push_pmc(interp, interp->dynamic_env, newint);
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
-Parrot_pushmark_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * const newint = Parrot_pmc_new(interp, enum_class_Integer);
-    VTABLE_set_integer_native(interp, newint, cur_opcode[1]);
-    VTABLE_push_pmc(interp, interp->dynamic_env, newint);
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
-Parrot_popmark_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t * dest;
-    opcode_t * const ret = cur_opcode + 2;
-    int found = 0;
-    while (VTABLE_elements(interp, interp->dynamic_env)) {
-        PMC * const item = VTABLE_pop_pmc(interp, interp->dynamic_env);
-        if (item->vtable->base_type == enum_class_Integer
-         && VTABLE_get_integer(interp, item) == IREG(1)) {
-            found = 1;
-            break;
-        }
-
-        else if (item->vtable->base_type == enum_class_Sub
-              || item->vtable->base_type == enum_class_NCI)
-            Parrot_pcc_invoke_sub_from_c_args(interp, item, "I->", 0);
-    }
-    if (!found)
-        dest = Parrot_ex_throw_from_op_args(interp, ret, 1, "Mark %d not found", IREG(1));
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
-Parrot_popmark_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    opcode_t * dest;
-    opcode_t * const ret = cur_opcode + 2;
-    int found = 0;
-    while (VTABLE_elements(interp, interp->dynamic_env)) {
-        PMC * const item = VTABLE_pop_pmc(interp, interp->dynamic_env);
-        if (item->vtable->base_type == enum_class_Integer
-         && VTABLE_get_integer(interp, item) == cur_opcode[1]) {
-            found = 1;
-            break;
-        }
-
-        else if (item->vtable->base_type == enum_class_Sub
-              || item->vtable->base_type == enum_class_NCI)
-            Parrot_pcc_invoke_sub_from_c_args(interp, item, "I->", 0);
-    }
-    if (!found)
-        dest = Parrot_ex_throw_from_op_args(interp, ret, 1, "Mark %d not found", cur_opcode[1]);
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
-Parrot_pushaction_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    VTABLE_push_pmc(interp, interp->dynamic_env, PREG(1));
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
 Parrot_debug_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 862 "src/ops/core.ops"
     if (IREG(1) != 0) { Interp_debug_SET(interp,   IREG(1)); }
     else         { Interp_debug_CLEAR(interp, PARROT_ALL_DEBUG_FLAGS); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17912,7 +17743,8 @@
 
 opcode_t *
 Parrot_debug_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 862 "src/ops/core.ops"
     if (cur_opcode[1] != 0) { Interp_debug_SET(interp,   cur_opcode[1]); }
     else         { Interp_debug_CLEAR(interp, PARROT_ALL_DEBUG_FLAGS); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17920,7 +17752,8 @@
 
 opcode_t *
 Parrot_bounds_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 877 "src/ops/core.ops"
     if (IREG(1) != 0) { Parrot_set_flag(interp,   PARROT_BOUNDS_FLAG); }
     else         { Interp_flags_CLEAR(interp, PARROT_BOUNDS_FLAG); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17928,7 +17761,8 @@
 
 opcode_t *
 Parrot_bounds_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 877 "src/ops/core.ops"
     if (cur_opcode[1] != 0) { Parrot_set_flag(interp,   PARROT_BOUNDS_FLAG); }
     else         { Interp_flags_CLEAR(interp, PARROT_BOUNDS_FLAG); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17936,7 +17770,8 @@
 
 opcode_t *
 Parrot_profile_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 892 "src/ops/core.ops"
     if (IREG(1) != 0) { Parrot_set_flag(interp,   PARROT_PROFILE_FLAG); }
     else         { Interp_flags_CLEAR(interp, PARROT_PROFILE_FLAG); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17944,7 +17779,8 @@
 
 opcode_t *
 Parrot_profile_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 892 "src/ops/core.ops"
     if (cur_opcode[1] != 0) { Parrot_set_flag(interp,   PARROT_PROFILE_FLAG); }
     else         { Interp_flags_CLEAR(interp, PARROT_PROFILE_FLAG); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17952,7 +17788,8 @@
 
 opcode_t *
 Parrot_trace_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 907 "src/ops/core.ops"
     if (IREG(1) != 0) { Parrot_set_trace(interp,   IREG(1)); }
     else         { Parrot_clear_trace(interp, PARROT_ALL_TRACE_FLAGS); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17960,7 +17797,8 @@
 
 opcode_t *
 Parrot_trace_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 907 "src/ops/core.ops"
     if (cur_opcode[1] != 0) { Parrot_set_trace(interp,   cur_opcode[1]); }
     else         { Parrot_clear_trace(interp, PARROT_ALL_TRACE_FLAGS); }
     interp->resume_offset = REL_PC + 2; interp->resume_flag = 1; return (opcode_t *)0;
@@ -17968,7 +17806,8 @@
 
 opcode_t *
 Parrot_gc_debug_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 921 "src/ops/core.ops"
     if (IREG(1) != 0) { Interp_flags_SET(interp,   PARROT_GC_DEBUG_FLAG); }
     else         { Interp_flags_CLEAR(interp, PARROT_GC_DEBUG_FLAG); }
 
@@ -17976,7 +17815,8 @@
 
 opcode_t *
 Parrot_gc_debug_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 921 "src/ops/core.ops"
     if (cur_opcode[1] != 0) { Interp_flags_SET(interp,   PARROT_GC_DEBUG_FLAG); }
     else         { Interp_flags_CLEAR(interp, PARROT_GC_DEBUG_FLAG); }
 
@@ -17984,107 +17824,122 @@
 
 opcode_t *
 Parrot_interpinfo_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 955 "src/ops/core.ops"
     IREG(1) = interpinfo(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_interpinfo_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 955 "src/ops/core.ops"
     IREG(1) = interpinfo(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_interpinfo_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 959 "src/ops/core.ops"
     PREG(1) = interpinfo_p(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_interpinfo_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 959 "src/ops/core.ops"
     PREG(1) = interpinfo_p(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_interpinfo_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * s = interpinfo_s(interp, IREG(2));
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 963 "src/ops/core.ops"
+    STRING * const s = interpinfo_s(interp, IREG(2));
     SREG(1) = s;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_interpinfo_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * s = interpinfo_s(interp, cur_opcode[2]);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 963 "src/ops/core.ops"
+    STRING * const s = interpinfo_s(interp, cur_opcode[2]);
     SREG(1) = s;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_warningson_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 983 "src/ops/core.ops"
     PARROT_WARNINGS_on(interp, IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_warningson_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 983 "src/ops/core.ops"
     PARROT_WARNINGS_on(interp, cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_warningsoff_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 995 "src/ops/core.ops"
     PARROT_WARNINGS_off(interp, IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_warningsoff_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 995 "src/ops/core.ops"
     PARROT_WARNINGS_off(interp, cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_errorson_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1030 "src/ops/core.ops"
     PARROT_ERRORS_on(interp, IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_errorson_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1030 "src/ops/core.ops"
     PARROT_ERRORS_on(interp, cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_errorsoff_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1042 "src/ops/core.ops"
     PARROT_ERRORS_off(interp, IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_errorsoff_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1042 "src/ops/core.ops"
     PARROT_ERRORS_off(interp, cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_runinterp_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1058 "src/ops/core.ops"
     Interp * const new_interp = (Interp *)VTABLE_get_pointer(interp, PREG(1));
     Interp_flags_SET(new_interp, PARROT_EXTERN_CODE_FLAG);
     Parrot_switch_to_cs(new_interp, interp->code, 1);
@@ -18094,7 +17949,8 @@
 
 opcode_t *
 Parrot_runinterp_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1058 "src/ops/core.ops"
     Interp * const new_interp = (Interp *)VTABLE_get_pointer(interp, PREG(1));
     Interp_flags_SET(new_interp, PARROT_EXTERN_CODE_FLAG);
     Parrot_switch_to_cs(new_interp, interp->code, 1);
@@ -18104,7 +17960,8 @@
 
 opcode_t *
 Parrot_getinterp_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1065 "src/ops/core.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
            IGLOBALS_INTERPRETER);
 
@@ -18112,7 +17969,8 @@
 
 opcode_t *
 Parrot_sweep_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1109 "src/ops/core.ops"
     if (cur_opcode[1])
         Parrot_gc_mark_and_sweep(interp, 0);
     else
@@ -18123,63 +17981,104 @@
 
 opcode_t *
 Parrot_collect(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1123 "src/ops/core.ops"
     Parrot_gc_compact_memory_pool(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_sweepoff(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1133 "src/ops/core.ops"
     Parrot_block_GC_mark(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_sweepon(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1143 "src/ops/core.ops"
     Parrot_unblock_GC_mark(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_collectoff(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1153 "src/ops/core.ops"
     Parrot_block_GC_sweep(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_collecton(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1163 "src/ops/core.ops"
     Parrot_unblock_GC_sweep(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_needs_destroy_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1174 "src/ops/core.ops"
     Parrot_gc_pmc_needs_early_collection(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_loadlib_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1243 "src/ops/core.ops"
     PREG(1) = Parrot_load_lib(interp, SREG(2), NULL);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_loadlib_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1243 "src/ops/core.ops"
     PREG(1) = Parrot_load_lib(interp, CONST(2)->u.string, NULL);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
+Parrot_loadlib_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1247 "src/ops/core.ops"
+    PREG(1) = Parrot_load_lib(interp, SREG(2), PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_loadlib_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1247 "src/ops/core.ops"
+    PREG(1) = Parrot_load_lib(interp, CONST(2)->u.string, PREG(3));
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_loadlib_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1247 "src/ops/core.ops"
+    PREG(1) = Parrot_load_lib(interp, SREG(2), CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
+Parrot_loadlib_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1247 "src/ops/core.ops"
+    PREG(1) = Parrot_load_lib(interp, CONST(2)->u.string, CONST(3)->u.key);
+
+return (opcode_t *)cur_opcode + 4;}
+
+opcode_t *
 Parrot_dlfunc_p_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1251 "src/ops/core.ops"
     char * const  name      = Parrot_str_to_cstring(interp, (SREG(3)));
     void         *dl_handle = NULL;
     void         *ptr       = NULL;
@@ -18213,7 +18112,8 @@
 
 opcode_t *
 Parrot_dlfunc_p_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1251 "src/ops/core.ops"
     char * const  name      = Parrot_str_to_cstring(interp, (CONST(3)->u.string));
     void         *dl_handle = NULL;
     void         *ptr       = NULL;
@@ -18247,7 +18147,8 @@
 
 opcode_t *
 Parrot_dlfunc_p_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1251 "src/ops/core.ops"
     char * const  name      = Parrot_str_to_cstring(interp, (SREG(3)));
     void         *dl_handle = NULL;
     void         *ptr       = NULL;
@@ -18281,7 +18182,8 @@
 
 opcode_t *
 Parrot_dlfunc_p_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1251 "src/ops/core.ops"
     char * const  name      = Parrot_str_to_cstring(interp, (CONST(3)->u.string));
     void         *dl_handle = NULL;
     void         *ptr       = NULL;
@@ -18315,13 +18217,13 @@
 
 opcode_t *
 Parrot_dlvar_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1282 "src/ops/core.ops"
     char * const  name      = Parrot_str_to_cstring(interp, (SREG(3)));
     void *        p         = NULL;
-    void         *dl_handle = NULL;
 
     if (!PMC_IS_NULL(PREG(2)) && PREG(2)->vtable->base_type == enum_class_ParrotLibrary) {
-        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+        void * const dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
         p         = Parrot_dlsym(PMC_IS_NULL(PREG(2)) ? NULL : dl_handle, name);
     }
     if (p == NULL) {
@@ -18342,13 +18244,13 @@
 
 opcode_t *
 Parrot_dlvar_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1282 "src/ops/core.ops"
     char * const  name      = Parrot_str_to_cstring(interp, (CONST(3)->u.string));
     void *        p         = NULL;
-    void         *dl_handle = NULL;
 
     if (!PMC_IS_NULL(PREG(2)) && PREG(2)->vtable->base_type == enum_class_ParrotLibrary) {
-        dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
+        void * const dl_handle = ((Parrot_ParrotLibrary_attributes*)PMC_data(PREG(2)))->dl_handle;
         p         = Parrot_dlsym(PMC_IS_NULL(PREG(2)) ? NULL : dl_handle, name);
     }
     if (p == NULL) {
@@ -18369,7 +18271,8 @@
 
 opcode_t *
 Parrot_compreg_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1305 "src/ops/core.ops"
     PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
             interp->iglobals, IGLOBALS_COMPREG_HASH);
     VTABLE_set_pmc_keyed_str(interp, compreg_hash, SREG(1), PREG(2));
@@ -18378,7 +18281,8 @@
 
 opcode_t *
 Parrot_compreg_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1305 "src/ops/core.ops"
     PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
             interp->iglobals, IGLOBALS_COMPREG_HASH);
     VTABLE_set_pmc_keyed_str(interp, compreg_hash, CONST(1)->u.string, PREG(2));
@@ -18387,7 +18291,8 @@
 
 opcode_t *
 Parrot_compreg_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1311 "src/ops/core.ops"
     PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
             interp->iglobals, IGLOBALS_COMPREG_HASH);
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, compreg_hash, SREG(2));
@@ -18396,7 +18301,8 @@
 
 opcode_t *
 Parrot_compreg_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1311 "src/ops/core.ops"
     PMC * const compreg_hash = VTABLE_get_pmc_keyed_int(interp,
             interp->iglobals, IGLOBALS_COMPREG_HASH);
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, compreg_hash, CONST(2)->u.string);
@@ -18405,23 +18311,26 @@
 
 opcode_t *
 Parrot_new_callback_p_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1317 "src/ops/core.ops"
     PREG(1) = Parrot_make_cb(interp, PREG(2), PREG(3), SREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_new_callback_p_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1317 "src/ops/core.ops"
     PREG(1) = Parrot_make_cb(interp, PREG(2), PREG(3), CONST(4)->u.string);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_annotations_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1344 "src/ops/core.ops"
     if (interp->code->annotations) {
-        opcode_t const cur_pos = (cur_opcode + 2) - interp->code->base.data;
+        const opcode_t cur_pos = (cur_opcode + 2) - interp->code->base.data;
         PREG(1) = PackFile_Annotations_lookup(interp, interp->code->annotations,
                 cur_pos, NULL);
     }
@@ -18433,9 +18342,10 @@
 
 opcode_t *
 Parrot_annotations_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1362 "src/ops/core.ops"
     if (interp->code->annotations) {
-        opcode_t const cur_pos = (cur_opcode + 3) - interp->code->base.data;
+        const opcode_t cur_pos = (cur_opcode + 3) - interp->code->base.data;
         PREG(1) = PackFile_Annotations_lookup(interp, interp->code->annotations,
                 cur_pos, SREG(2));
     }
@@ -18447,9 +18357,10 @@
 
 opcode_t *
 Parrot_annotations_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1362 "src/ops/core.ops"
     if (interp->code->annotations) {
-        opcode_t const cur_pos = (cur_opcode + 3) - interp->code->base.data;
+        const opcode_t cur_pos = (cur_opcode + 3) - interp->code->base.data;
         PREG(1) = PackFile_Annotations_lookup(interp, interp->code->annotations,
                 cur_pos, CONST(2)->u.string);
     }
@@ -18461,21 +18372,24 @@
 
 opcode_t *
 Parrot_band_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 62 "src/ops/bit.ops"
     IREG(1) &= IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_band_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 62 "src/ops/bit.ops"
     IREG(1) &= cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_band_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 66 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = a & IREG(2);
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -18484,7 +18398,8 @@
 
 opcode_t *
 Parrot_band_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 66 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = a & cur_opcode[2];
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -18493,7 +18408,8 @@
 
 opcode_t *
 Parrot_band_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 72 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = VTABLE_get_integer(interp, PREG(2));
     VTABLE_set_integer_native(interp, PREG(1), a & b);
@@ -18502,28 +18418,32 @@
 
 opcode_t *
 Parrot_band_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/bit.ops"
     IREG(1) = IREG(2) & IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_band_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/bit.ops"
     IREG(1) = cur_opcode[2] & IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_band_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/bit.ops"
     IREG(1) = IREG(2) & cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_band_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 82 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     VTABLE_set_integer_native(interp, PREG(1), a & IREG(3));
 
@@ -18531,7 +18451,8 @@
 
 opcode_t *
 Parrot_band_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 82 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     VTABLE_set_integer_native(interp, PREG(1), a & cur_opcode[3]);
 
@@ -18539,7 +18460,8 @@
 
 opcode_t *
 Parrot_band_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 87 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL b = VTABLE_get_integer(interp, PREG(3));
     VTABLE_set_integer_native(interp, PREG(1), a & b);
@@ -18547,113 +18469,111 @@
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
-Parrot_bands_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_and(interp, SREG(1), SREG(2), &SREG(1));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_bands_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_and(interp, SREG(1), CONST(2)->u.string, &SREG(1));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_bands_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 111 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(1));
-    STRING * const b = Parrot_str_bitwise_and(interp, a, SREG(2), NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, SREG(2));
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bands_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 111 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(1));
-    STRING * const b = Parrot_str_bitwise_and(interp, a, CONST(2)->u.string, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, CONST(2)->u.string);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bands_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 117 "src/ops/bit.ops"
     STRING * a = VTABLE_get_string(interp, PREG(1));
-    STRING * b = VTABLE_get_string(interp, PREG(2));
-    a = Parrot_str_bitwise_and(interp, a, b, NULL);
+    STRING * const b = VTABLE_get_string(interp, PREG(2));
+    a = Parrot_str_bitwise_and(interp, a, b);
     VTABLE_set_string_native(interp, PREG(1), a);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bands_s_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_and(interp, SREG(2), SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 124 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_and(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bands_s_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_and(interp, CONST(2)->u.string, SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 124 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_and(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bands_s_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_and(interp, SREG(2), CONST(3)->u.string, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 124 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_and(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bands_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 128 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(2));
-    STRING * const b = Parrot_str_bitwise_and(interp, a, SREG(3), NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, SREG(3));
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bands_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 128 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(2));
-    STRING * const b = Parrot_str_bitwise_and(interp, a, CONST(3)->u.string, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, CONST(3)->u.string);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bands_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 134 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(2));
     STRING * const b = VTABLE_get_string(interp, PREG(3));
-    STRING * const c = Parrot_str_bitwise_and(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_and(interp, a, b);
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bnot_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 155 "src/ops/bit.ops"
     IREG(1) = ~ IREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_bnot_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 159 "src/ops/bit.ops"
     IREG(1) = ~ IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bnot_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 163 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     VTABLE_set_integer_native(interp, PREG(1), ~a);
 
@@ -18661,7 +18581,8 @@
 
 opcode_t *
 Parrot_bnot_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 168 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     PMC * const b = Parrot_pmc_new(interp, VTABLE_type(interp, PREG(2)));
     VTABLE_set_integer_native(interp, b, ~a);
@@ -18670,61 +18591,61 @@
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_bnots_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_not(interp, SREG(1), &SREG(1));
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
 Parrot_bnots_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_not(interp, SREG(2), &SREG(1));
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 183 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_not(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bnots_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_not(interp, CONST(2)->u.string, &SREG(1));
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 183 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_not(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bnots_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * a = VTABLE_get_string(interp, PREG(1));
-    STRING * b = Parrot_str_bitwise_not(interp, a, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(1));
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_bnots_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * a = VTABLE_get_string(interp, PREG(2));
-    STRING * b = Parrot_str_bitwise_not(interp, a, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(2));
+    STRING * const b = Parrot_str_bitwise_not(interp, a);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bor_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 221 "src/ops/bit.ops"
     IREG(1) |= IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bor_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 221 "src/ops/bit.ops"
     IREG(1) |= cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bor_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 225 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     VTABLE_set_integer_native(interp, PREG(1), a | IREG(2));
 
@@ -18732,7 +18653,8 @@
 
 opcode_t *
 Parrot_bor_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 225 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     VTABLE_set_integer_native(interp, PREG(1), a | cur_opcode[2]);
 
@@ -18740,7 +18662,8 @@
 
 opcode_t *
 Parrot_bor_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 230 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = VTABLE_get_integer(interp, PREG(2));
     VTABLE_set_integer_native(interp, PREG(1), a | b);
@@ -18749,28 +18672,32 @@
 
 opcode_t *
 Parrot_bor_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 236 "src/ops/bit.ops"
     IREG(1) = IREG(2) | IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bor_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 236 "src/ops/bit.ops"
     IREG(1) = cur_opcode[2] | IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bor_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 236 "src/ops/bit.ops"
     IREG(1) = IREG(2) | cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bor_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 240 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     VTABLE_set_integer_native(interp, PREG(1), a | IREG(3));
 
@@ -18778,7 +18705,8 @@
 
 opcode_t *
 Parrot_bor_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 240 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     VTABLE_set_integer_native(interp, PREG(1), a | cur_opcode[3]);
 
@@ -18786,7 +18714,8 @@
 
 opcode_t *
 Parrot_bor_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 245 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL b = VTABLE_get_integer(interp, PREG(3));
     VTABLE_set_integer_native(interp, PREG(1), a | b);
@@ -18794,113 +18723,111 @@
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
-Parrot_bors_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_or(interp, SREG(1), SREG(2), &SREG(1));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_bors_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_or(interp, SREG(1), CONST(2)->u.string, &SREG(1));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_bors_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 269 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(1));
-    STRING * const b = Parrot_str_bitwise_or(interp, a, SREG(2), NULL);
+    STRING * const b = Parrot_str_bitwise_or(interp, a, SREG(2));
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bors_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 269 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(1));
-    STRING * const b = Parrot_str_bitwise_or(interp, a, CONST(2)->u.string, NULL);
+    STRING * const b = Parrot_str_bitwise_or(interp, a, CONST(2)->u.string);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bors_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 275 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(1));
     STRING * const b = VTABLE_get_string(interp, PREG(2));
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bors_s_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_or(interp, SREG(2), SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_or(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bors_s_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_or(interp, CONST(2)->u.string, SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_or(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bors_s_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_or(interp, SREG(2), CONST(3)->u.string, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_or(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bors_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 286 "src/ops/bit.ops"
     STRING * const b = VTABLE_get_string(interp, PREG(2));
-    STRING * const c = Parrot_str_bitwise_or(interp, b, SREG(3), NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, b, SREG(3));
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bors_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 286 "src/ops/bit.ops"
     STRING * const b = VTABLE_get_string(interp, PREG(2));
-    STRING * const c = Parrot_str_bitwise_or(interp, b, CONST(3)->u.string, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, b, CONST(3)->u.string);
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bors_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/bit.ops"
     STRING * const a = VTABLE_get_string(interp, PREG(2));
     STRING * const b = VTABLE_get_string(interp, PREG(3));
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_shl_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 319 "src/ops/bit.ops"
     IREG(1) = bit_shift_left(IREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_shl_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 319 "src/ops/bit.ops"
     IREG(1) = bit_shift_left(IREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_shl_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 323 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = bit_shift_left(a, IREG(2));
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -18909,7 +18836,8 @@
 
 opcode_t *
 Parrot_shl_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 323 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = bit_shift_left(a, cur_opcode[2]);
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -18918,7 +18846,8 @@
 
 opcode_t *
 Parrot_shl_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 329 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = VTABLE_get_integer(interp, PREG(2));
     const INTVAL c = bit_shift_left(a, b);
@@ -18928,28 +18857,32 @@
 
 opcode_t *
 Parrot_shl_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 336 "src/ops/bit.ops"
     IREG(1) = bit_shift_left(IREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_shl_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 336 "src/ops/bit.ops"
     IREG(1) = bit_shift_left(cur_opcode[2], IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_shl_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 336 "src/ops/bit.ops"
     IREG(1) = bit_shift_left(IREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_shl_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 340 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL b = bit_shift_left(a, IREG(3));
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -18958,7 +18891,8 @@
 
 opcode_t *
 Parrot_shl_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 340 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL b = bit_shift_left(a, cur_opcode[3]);
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -18967,7 +18901,8 @@
 
 opcode_t *
 Parrot_shl_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 346 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL b = VTABLE_get_integer(interp, PREG(3));
     const INTVAL c = bit_shift_left(a, b);
@@ -18977,7 +18912,8 @@
 
 opcode_t *
 Parrot_shr_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 373 "src/ops/bit.ops"
     const INTVAL signed_shift = -IREG(2);
     IREG(1) = bit_shift_left(IREG(1), signed_shift);
 
@@ -18985,7 +18921,8 @@
 
 opcode_t *
 Parrot_shr_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 373 "src/ops/bit.ops"
     const INTVAL signed_shift = -cur_opcode[2];
     IREG(1) = bit_shift_left(IREG(1), signed_shift);
 
@@ -18993,7 +18930,8 @@
 
 opcode_t *
 Parrot_shr_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = bit_shift_left(a, -IREG(2));
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -19002,7 +18940,8 @@
 
 opcode_t *
 Parrot_shr_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = bit_shift_left(a, -cur_opcode[2]);
     VTABLE_set_integer_native(interp, PREG(1), b);
@@ -19011,7 +18950,8 @@
 
 opcode_t *
 Parrot_shr_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 384 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(1));
     const INTVAL b = VTABLE_get_integer(interp, PREG(2));
     const INTVAL c = bit_shift_left(a, -b);
@@ -19021,7 +18961,8 @@
 
 opcode_t *
 Parrot_shr_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 391 "src/ops/bit.ops"
     const INTVAL signed_shift = -IREG(3);
     IREG(1) = bit_shift_left(IREG(2), signed_shift);
 
@@ -19029,7 +18970,8 @@
 
 opcode_t *
 Parrot_shr_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 391 "src/ops/bit.ops"
     const INTVAL signed_shift = -IREG(3);
     IREG(1) = bit_shift_left(cur_opcode[2], signed_shift);
 
@@ -19037,7 +18979,8 @@
 
 opcode_t *
 Parrot_shr_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 391 "src/ops/bit.ops"
     const INTVAL signed_shift = -cur_opcode[3];
     IREG(1) = bit_shift_left(IREG(2), signed_shift);
 
@@ -19045,7 +18988,8 @@
 
 opcode_t *
 Parrot_shr_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 396 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL c = bit_shift_left(a, -IREG(3));
     VTABLE_set_integer_native(interp, PREG(1), c);
@@ -19054,7 +18998,8 @@
 
 opcode_t *
 Parrot_shr_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 396 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL c = bit_shift_left(a, -cur_opcode[3]);
     VTABLE_set_integer_native(interp, PREG(1), c);
@@ -19063,7 +19008,8 @@
 
 opcode_t *
 Parrot_shr_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 402 "src/ops/bit.ops"
     const INTVAL a = VTABLE_get_integer(interp, PREG(2));
     const INTVAL b = VTABLE_get_integer(interp, PREG(3));
     const INTVAL c = bit_shift_left(a, -b);
@@ -19073,7 +19019,8 @@
 
 opcode_t *
 Parrot_lsr_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 429 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)IREG(1);
     const UINTVAL b = a >> IREG(2);
     IREG(1) = (INTVAL)b;
@@ -19082,7 +19029,8 @@
 
 opcode_t *
 Parrot_lsr_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 429 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)IREG(1);
     const UINTVAL b = a >> cur_opcode[2];
     IREG(1) = (INTVAL)b;
@@ -19091,7 +19039,8 @@
 
 opcode_t *
 Parrot_lsr_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 435 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(1));
     const UINTVAL b = a >> IREG(2);
     VTABLE_set_integer_native(interp, PREG(1), (INTVAL)b);
@@ -19100,7 +19049,8 @@
 
 opcode_t *
 Parrot_lsr_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 435 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(1));
     const UINTVAL b = a >> cur_opcode[2];
     VTABLE_set_integer_native(interp, PREG(1), (INTVAL)b);
@@ -19109,7 +19059,8 @@
 
 opcode_t *
 Parrot_lsr_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 441 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(1));
     const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL c = a >> b;
@@ -19119,28 +19070,32 @@
 
 opcode_t *
 Parrot_lsr_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 448 "src/ops/bit.ops"
     IREG(1) = (INTVAL)((UINTVAL)IREG(2) >> IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_lsr_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 448 "src/ops/bit.ops"
     IREG(1) = (INTVAL)((UINTVAL)cur_opcode[2] >> IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_lsr_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 448 "src/ops/bit.ops"
     IREG(1) = (INTVAL)((UINTVAL)IREG(2) >> cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_lsr_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 452 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL b = (UINTVAL)IREG(3);
     const UINTVAL c = a >> b;
@@ -19150,7 +19105,8 @@
 
 opcode_t *
 Parrot_lsr_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 452 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL b = (UINTVAL)cur_opcode[3];
     const UINTVAL c = a >> b;
@@ -19160,7 +19116,8 @@
 
 opcode_t *
 Parrot_lsr_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 459 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, PREG(3));
     const UINTVAL c = a >> b;
@@ -19170,7 +19127,8 @@
 
 opcode_t *
 Parrot_rot_i_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 475 "src/ops/bit.ops"
     const INTVAL r = IREG(2);
     INTVAL s = IREG(3);
     const INTVAL w = cur_opcode[4];
@@ -19187,7 +19145,8 @@
 
 opcode_t *
 Parrot_rot_i_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 475 "src/ops/bit.ops"
     const INTVAL r = cur_opcode[2];
     INTVAL s = IREG(3);
     const INTVAL w = cur_opcode[4];
@@ -19204,7 +19163,8 @@
 
 opcode_t *
 Parrot_rot_i_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 475 "src/ops/bit.ops"
     const INTVAL r = IREG(2);
     INTVAL s = cur_opcode[3];
     const INTVAL w = cur_opcode[4];
@@ -19221,21 +19181,24 @@
 
 opcode_t *
 Parrot_bxor_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 511 "src/ops/bit.ops"
     IREG(1) ^= IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bxor_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 511 "src/ops/bit.ops"
     IREG(1) ^= cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bxor_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(1));
     const UINTVAL b = a ^ IREG(2);
     VTABLE_set_integer_native(interp, PREG(1), (INTVAL)b);
@@ -19244,7 +19207,8 @@
 
 opcode_t *
 Parrot_bxor_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(1));
     const UINTVAL b = a ^ cur_opcode[2];
     VTABLE_set_integer_native(interp, PREG(1), (INTVAL)b);
@@ -19253,7 +19217,8 @@
 
 opcode_t *
 Parrot_bxor_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 521 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(1));
     const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL c = a ^ b;
@@ -19263,28 +19228,32 @@
 
 opcode_t *
 Parrot_bxor_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 528 "src/ops/bit.ops"
     IREG(1) = IREG(2) ^ IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxor_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 528 "src/ops/bit.ops"
     IREG(1) = cur_opcode[2] ^ IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxor_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 528 "src/ops/bit.ops"
     IREG(1) = IREG(2) ^ cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxor_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 532 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL b = a ^ IREG(3);
     VTABLE_set_integer_native(interp, PREG(1), (INTVAL)b);
@@ -19293,7 +19262,8 @@
 
 opcode_t *
 Parrot_bxor_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 532 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL b = a ^ cur_opcode[3];
     VTABLE_set_integer_native(interp, PREG(1), (INTVAL)b);
@@ -19302,7 +19272,8 @@
 
 opcode_t *
 Parrot_bxor_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 538 "src/ops/bit.ops"
     const UINTVAL a = (UINTVAL)VTABLE_get_integer(interp, PREG(2));
     const UINTVAL b = (UINTVAL)VTABLE_get_integer(interp, PREG(3));
     const UINTVAL c = a ^ b;
@@ -19311,99 +19282,95 @@
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
-Parrot_bxors_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_xor(interp, SREG(1), SREG(2), &SREG(1));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_bxors_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_bitwise_xor(interp, SREG(1), CONST(2)->u.string, &SREG(1));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_bxors_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *a = VTABLE_get_string(interp, PREG(1));
-    STRING *b = Parrot_str_bitwise_xor(interp, a, SREG(2), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 563 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(1));
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, SREG(2));
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bxors_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *a = VTABLE_get_string(interp, PREG(1));
-    STRING *b = Parrot_str_bitwise_xor(interp, a, CONST(2)->u.string, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 563 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(1));
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, CONST(2)->u.string);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bxors_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *a = VTABLE_get_string(interp, PREG(1));
-    STRING *b = VTABLE_get_string(interp, PREG(2));
-    STRING *c = Parrot_str_bitwise_xor(interp, a, b, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 569 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(1));
+    STRING * const b = VTABLE_get_string(interp, PREG(2));
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bxors_s_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_xor(interp, SREG(2), SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 576 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_xor(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxors_s_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_xor(interp, CONST(2)->u.string, SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 576 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_xor(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxors_s_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_bitwise_xor(interp, SREG(2), CONST(3)->u.string, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 576 "src/ops/bit.ops"
+    SREG(1) = Parrot_str_bitwise_xor(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxors_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *a = VTABLE_get_string(interp, PREG(2));
-    STRING *b = Parrot_str_bitwise_xor(interp, a, SREG(3), NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 580 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(2));
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, SREG(3));
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxors_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *a = VTABLE_get_string(interp, PREG(2));
-    STRING *b = Parrot_str_bitwise_xor(interp, a, CONST(3)->u.string, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 580 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(2));
+    STRING * const b = Parrot_str_bitwise_xor(interp, a, CONST(3)->u.string);
     VTABLE_set_string_native(interp, PREG(1), b);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_bxors_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *a = VTABLE_get_string(interp, PREG(2));
-    STRING *b = VTABLE_get_string(interp, PREG(3));
-    STRING *c = Parrot_str_bitwise_xor(interp, a, b, NULL);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 586 "src/ops/bit.ops"
+    STRING * const a = VTABLE_get_string(interp, PREG(2));
+    STRING * const b = VTABLE_get_string(interp, PREG(3));
+    STRING * const c = Parrot_str_bitwise_xor(interp, a, b);
     VTABLE_set_string_native(interp, PREG(1), c);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_eq_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 66 "src/ops/cmp.ops"
     if (IREG(1) == IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19412,7 +19379,8 @@
 
 opcode_t *
 Parrot_eq_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 66 "src/ops/cmp.ops"
     if (cur_opcode[1] == IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19421,7 +19389,8 @@
 
 opcode_t *
 Parrot_eq_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 66 "src/ops/cmp.ops"
     if (IREG(1) == cur_opcode[2]) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19430,7 +19399,8 @@
 
 opcode_t *
 Parrot_eq_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 72 "src/ops/cmp.ops"
     if (NREG(1) == NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19439,7 +19409,8 @@
 
 opcode_t *
 Parrot_eq_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 72 "src/ops/cmp.ops"
     if (CONST(1)->u.number == NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19448,7 +19419,8 @@
 
 opcode_t *
 Parrot_eq_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 72 "src/ops/cmp.ops"
     if (NREG(1) == CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19457,7 +19429,8 @@
 
 opcode_t *
 Parrot_eq_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/cmp.ops"
     if (Parrot_str_equal(interp, SREG(1), SREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19466,7 +19439,8 @@
 
 opcode_t *
 Parrot_eq_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/cmp.ops"
     if (Parrot_str_equal(interp, CONST(1)->u.string, SREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19475,7 +19449,8 @@
 
 opcode_t *
 Parrot_eq_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/cmp.ops"
     if (Parrot_str_equal(interp, SREG(1), CONST(2)->u.string)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19484,7 +19459,8 @@
 
 opcode_t *
 Parrot_eq_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 84 "src/ops/cmp.ops"
     if (VTABLE_is_equal(interp, PREG(1), PREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19493,8 +19469,9 @@
 
 opcode_t *
 Parrot_eq_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 90 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, IREG(2));
 
     if (VTABLE_is_equal(interp, PREG(1), temp)) {
@@ -19508,8 +19485,9 @@
 
 opcode_t *
 Parrot_eq_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 90 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
 
     if (VTABLE_is_equal(interp, PREG(1), temp)) {
@@ -19523,7 +19501,8 @@
 
 opcode_t *
 Parrot_eq_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 102 "src/ops/cmp.ops"
     /*
      * the get_number and get_string should probably
      * be also replaced with code like above, as
@@ -19538,7 +19517,8 @@
 
 opcode_t *
 Parrot_eq_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 102 "src/ops/cmp.ops"
     /*
      * the get_number and get_string should probably
      * be also replaced with code like above, as
@@ -19553,7 +19533,8 @@
 
 opcode_t *
 Parrot_eq_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 114 "src/ops/cmp.ops"
     if (Parrot_str_equal(interp, VTABLE_get_string(interp, PREG(1)), SREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19562,7 +19543,8 @@
 
 opcode_t *
 Parrot_eq_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 114 "src/ops/cmp.ops"
     if (Parrot_str_equal(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19571,7 +19553,8 @@
 
 opcode_t *
 Parrot_eq_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 120 "src/ops/cmp.ops"
     if (VTABLE_is_equal_string(interp, PREG(1), PREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19580,7 +19563,8 @@
 
 opcode_t *
 Parrot_eq_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 126 "src/ops/cmp.ops"
     if (VTABLE_is_equal_num(interp, PREG(1), PREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19589,7 +19573,8 @@
 
 opcode_t *
 Parrot_eq_addr_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 132 "src/ops/cmp.ops"
     if (SREG(1) == SREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19598,7 +19583,8 @@
 
 opcode_t *
 Parrot_eq_addr_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 132 "src/ops/cmp.ops"
     if (CONST(1)->u.string == SREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19607,7 +19593,8 @@
 
 opcode_t *
 Parrot_eq_addr_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 132 "src/ops/cmp.ops"
     if (SREG(1) == CONST(2)->u.string) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19616,7 +19603,8 @@
 
 opcode_t *
 Parrot_eq_addr_sc_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 132 "src/ops/cmp.ops"
     if (CONST(1)->u.string == CONST(2)->u.string) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19625,7 +19613,8 @@
 
 opcode_t *
 Parrot_eq_addr_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 138 "src/ops/cmp.ops"
     if (PREG(1) == PREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19634,7 +19623,8 @@
 
 opcode_t *
 Parrot_ne_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 172 "src/ops/cmp.ops"
     if (IREG(1) != IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19643,7 +19633,8 @@
 
 opcode_t *
 Parrot_ne_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 172 "src/ops/cmp.ops"
     if (cur_opcode[1] != IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19652,7 +19643,8 @@
 
 opcode_t *
 Parrot_ne_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 172 "src/ops/cmp.ops"
     if (IREG(1) != cur_opcode[2]) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19661,7 +19653,8 @@
 
 opcode_t *
 Parrot_ne_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 178 "src/ops/cmp.ops"
     if (NREG(1) != NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19670,7 +19663,8 @@
 
 opcode_t *
 Parrot_ne_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 178 "src/ops/cmp.ops"
     if (CONST(1)->u.number != NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19679,7 +19673,8 @@
 
 opcode_t *
 Parrot_ne_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 178 "src/ops/cmp.ops"
     if (NREG(1) != CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19688,7 +19683,8 @@
 
 opcode_t *
 Parrot_ne_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 184 "src/ops/cmp.ops"
     if (Parrot_str_not_equal(interp, SREG(1), SREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19697,7 +19693,8 @@
 
 opcode_t *
 Parrot_ne_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 184 "src/ops/cmp.ops"
     if (Parrot_str_not_equal(interp, CONST(1)->u.string, SREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19706,7 +19703,8 @@
 
 opcode_t *
 Parrot_ne_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 184 "src/ops/cmp.ops"
     if (Parrot_str_not_equal(interp, SREG(1), CONST(2)->u.string)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19715,7 +19713,8 @@
 
 opcode_t *
 Parrot_ne_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 190 "src/ops/cmp.ops"
     if (!VTABLE_is_equal(interp, PREG(1), PREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19724,8 +19723,9 @@
 
 opcode_t *
 Parrot_ne_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 196 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, IREG(2));
 
     if (!VTABLE_is_equal(interp, PREG(1), temp)) {
@@ -19739,8 +19739,9 @@
 
 opcode_t *
 Parrot_ne_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 196 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
 
     if (!VTABLE_is_equal(interp, PREG(1), temp)) {
@@ -19754,7 +19755,8 @@
 
 opcode_t *
 Parrot_ne_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 208 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) != NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19763,7 +19765,8 @@
 
 opcode_t *
 Parrot_ne_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 208 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) != CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19772,7 +19775,8 @@
 
 opcode_t *
 Parrot_ne_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 214 "src/ops/cmp.ops"
     if (Parrot_str_not_equal(interp, VTABLE_get_string(interp, PREG(1)), SREG(2))) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19781,7 +19785,8 @@
 
 opcode_t *
 Parrot_ne_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 214 "src/ops/cmp.ops"
     if (Parrot_str_not_equal(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19790,7 +19795,8 @@
 
 opcode_t *
 Parrot_ne_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 220 "src/ops/cmp.ops"
     if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) != 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19799,7 +19805,8 @@
 
 opcode_t *
 Parrot_ne_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 226 "src/ops/cmp.ops"
     if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) != 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19808,7 +19815,8 @@
 
 opcode_t *
 Parrot_ne_addr_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 232 "src/ops/cmp.ops"
     if (SREG(1) != SREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19817,7 +19825,8 @@
 
 opcode_t *
 Parrot_ne_addr_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 232 "src/ops/cmp.ops"
     if (CONST(1)->u.string != SREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19826,7 +19835,8 @@
 
 opcode_t *
 Parrot_ne_addr_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 232 "src/ops/cmp.ops"
     if (SREG(1) != CONST(2)->u.string) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19835,7 +19845,8 @@
 
 opcode_t *
 Parrot_ne_addr_sc_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 232 "src/ops/cmp.ops"
     if (CONST(1)->u.string != CONST(2)->u.string) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19844,7 +19855,8 @@
 
 opcode_t *
 Parrot_ne_addr_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 238 "src/ops/cmp.ops"
     if (PREG(1) != PREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19853,7 +19865,8 @@
 
 opcode_t *
 Parrot_lt_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/cmp.ops"
     if (IREG(1) < IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19862,7 +19875,8 @@
 
 opcode_t *
 Parrot_lt_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/cmp.ops"
     if (cur_opcode[1] < IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19871,7 +19885,8 @@
 
 opcode_t *
 Parrot_lt_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/cmp.ops"
     if (IREG(1) < cur_opcode[2]) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19880,7 +19895,8 @@
 
 opcode_t *
 Parrot_lt_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/cmp.ops"
     if (NREG(1) < NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19889,7 +19905,8 @@
 
 opcode_t *
 Parrot_lt_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/cmp.ops"
     if (CONST(1)->u.number < NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19898,7 +19915,8 @@
 
 opcode_t *
 Parrot_lt_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/cmp.ops"
     if (NREG(1) < CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19907,7 +19925,8 @@
 
 opcode_t *
 Parrot_lt_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 280 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, SREG(1), SREG(2)) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19916,7 +19935,8 @@
 
 opcode_t *
 Parrot_lt_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 280 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, CONST(1)->u.string, SREG(2)) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19925,7 +19945,8 @@
 
 opcode_t *
 Parrot_lt_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 280 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, SREG(1), CONST(2)->u.string) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19934,7 +19955,8 @@
 
 opcode_t *
 Parrot_lt_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 286 "src/ops/cmp.ops"
     if (VTABLE_cmp(interp, PREG(1), PREG(2)) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19943,8 +19965,9 @@
 
 opcode_t *
 Parrot_lt_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, IREG(2));
 
     if (VTABLE_cmp(interp, PREG(1), temp) < 0) {
@@ -19958,8 +19981,9 @@
 
 opcode_t *
 Parrot_lt_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
 
     if (VTABLE_cmp(interp, PREG(1), temp) < 0) {
@@ -19973,7 +19997,8 @@
 
 opcode_t *
 Parrot_lt_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 304 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) < NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19982,7 +20007,8 @@
 
 opcode_t *
 Parrot_lt_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 304 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) < CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -19991,7 +20017,8 @@
 
 opcode_t *
 Parrot_lt_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 310 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20000,7 +20027,8 @@
 
 opcode_t *
 Parrot_lt_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 310 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20009,7 +20037,8 @@
 
 opcode_t *
 Parrot_lt_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 316 "src/ops/cmp.ops"
     if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20018,7 +20047,8 @@
 
 opcode_t *
 Parrot_lt_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 322 "src/ops/cmp.ops"
     if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) < 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20027,7 +20057,8 @@
 
 opcode_t *
 Parrot_le_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 352 "src/ops/cmp.ops"
     if (IREG(1) <= IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20036,7 +20067,8 @@
 
 opcode_t *
 Parrot_le_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 352 "src/ops/cmp.ops"
     if (cur_opcode[1] <= IREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20045,7 +20077,8 @@
 
 opcode_t *
 Parrot_le_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 352 "src/ops/cmp.ops"
     if (IREG(1) <= cur_opcode[2]) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20054,7 +20087,8 @@
 
 opcode_t *
 Parrot_le_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 358 "src/ops/cmp.ops"
     if (NREG(1) <= NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20063,7 +20097,8 @@
 
 opcode_t *
 Parrot_le_nc_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 358 "src/ops/cmp.ops"
     if (CONST(1)->u.number <= NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20072,7 +20107,8 @@
 
 opcode_t *
 Parrot_le_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 358 "src/ops/cmp.ops"
     if (NREG(1) <= CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20081,7 +20117,8 @@
 
 opcode_t *
 Parrot_le_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 364 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, SREG(1), SREG(2)) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20090,7 +20127,8 @@
 
 opcode_t *
 Parrot_le_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 364 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, CONST(1)->u.string, SREG(2)) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20099,7 +20137,8 @@
 
 opcode_t *
 Parrot_le_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 364 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, SREG(1), CONST(2)->u.string) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20108,7 +20147,8 @@
 
 opcode_t *
 Parrot_le_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 370 "src/ops/cmp.ops"
     if (VTABLE_cmp(interp, PREG(1), PREG(2)) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20117,8 +20157,9 @@
 
 opcode_t *
 Parrot_le_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 376 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, IREG(2));
 
     if (VTABLE_cmp(interp, PREG(1), temp) <= 0) {
@@ -20132,8 +20173,9 @@
 
 opcode_t *
 Parrot_le_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 376 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
 
     if (VTABLE_cmp(interp, PREG(1), temp) <= 0) {
@@ -20147,7 +20189,8 @@
 
 opcode_t *
 Parrot_le_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 388 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) <= NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20156,7 +20199,8 @@
 
 opcode_t *
 Parrot_le_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 388 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) <= CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20165,7 +20209,8 @@
 
 opcode_t *
 Parrot_le_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 394 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20174,7 +20219,8 @@
 
 opcode_t *
 Parrot_le_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 394 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20183,7 +20229,8 @@
 
 opcode_t *
 Parrot_le_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 400 "src/ops/cmp.ops"
     if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20192,7 +20239,8 @@
 
 opcode_t *
 Parrot_le_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 406 "src/ops/cmp.ops"
     if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) <= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20201,7 +20249,8 @@
 
 opcode_t *
 Parrot_gt_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 430 "src/ops/cmp.ops"
     if (VTABLE_cmp(interp, PREG(1), PREG(2)) > 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20210,8 +20259,9 @@
 
 opcode_t *
 Parrot_gt_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 436 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, IREG(2));
 
     if (VTABLE_cmp(interp, PREG(1), temp) > 0) {
@@ -20225,8 +20275,9 @@
 
 opcode_t *
 Parrot_gt_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 436 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
 
     if (VTABLE_cmp(interp, PREG(1), temp) > 0) {
@@ -20240,7 +20291,8 @@
 
 opcode_t *
 Parrot_gt_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 448 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) > NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20249,7 +20301,8 @@
 
 opcode_t *
 Parrot_gt_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 448 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) > CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20258,7 +20311,8 @@
 
 opcode_t *
 Parrot_gt_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 454 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) > 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20267,7 +20321,8 @@
 
 opcode_t *
 Parrot_gt_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 454 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) > 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20276,7 +20331,8 @@
 
 opcode_t *
 Parrot_gt_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 460 "src/ops/cmp.ops"
     if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) > 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20285,7 +20341,8 @@
 
 opcode_t *
 Parrot_gt_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 466 "src/ops/cmp.ops"
     if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) > 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20294,7 +20351,8 @@
 
 opcode_t *
 Parrot_ge_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 490 "src/ops/cmp.ops"
     if (VTABLE_cmp(interp, PREG(1), PREG(2)) >= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20303,8 +20361,9 @@
 
 opcode_t *
 Parrot_ge_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 496 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, IREG(2));
 
     if (VTABLE_cmp(interp, PREG(1), temp) >= 0) {
@@ -20318,8 +20377,9 @@
 
 opcode_t *
 Parrot_ge_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    PMC * temp  = Parrot_pmc_new_temporary(interp, enum_class_Integer);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 496 "src/ops/cmp.ops"
+    PMC * const temp = Parrot_pmc_new_temporary(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, temp, cur_opcode[2]);
 
     if (VTABLE_cmp(interp, PREG(1), temp) >= 0) {
@@ -20333,7 +20393,8 @@
 
 opcode_t *
 Parrot_ge_p_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 508 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) >= NREG(2)) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20342,7 +20403,8 @@
 
 opcode_t *
 Parrot_ge_p_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 508 "src/ops/cmp.ops"
     if (VTABLE_get_number(interp, PREG(1)) >= CONST(2)->u.number) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20351,7 +20413,8 @@
 
 opcode_t *
 Parrot_ge_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 514 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), SREG(2)) >= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20360,7 +20423,8 @@
 
 opcode_t *
 Parrot_ge_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 514 "src/ops/cmp.ops"
     if (Parrot_str_compare(interp, VTABLE_get_string(interp, PREG(1)), CONST(2)->u.string) >= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20369,7 +20433,8 @@
 
 opcode_t *
 Parrot_ge_str_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 520 "src/ops/cmp.ops"
     if (VTABLE_cmp_string(interp, PREG(1), PREG(2)) >= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20378,7 +20443,8 @@
 
 opcode_t *
 Parrot_ge_num_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 526 "src/ops/cmp.ops"
     if (VTABLE_cmp_num(interp, PREG(1), PREG(2)) >= 0) {
         return (opcode_t *)cur_opcode + cur_opcode[3];
     }
@@ -20387,7 +20453,8 @@
 
 opcode_t *
 Parrot_if_null_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 544 "src/ops/cmp.ops"
     if (PMC_IS_NULL(PREG(1))) {
         return (opcode_t *)cur_opcode + cur_opcode[2];
     }
@@ -20396,7 +20463,8 @@
 
 opcode_t *
 Parrot_if_null_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 550 "src/ops/cmp.ops"
     if (STRING_IS_NULL(SREG(1))) {
         return (opcode_t *)cur_opcode + cur_opcode[2];
     }
@@ -20405,7 +20473,8 @@
 
 opcode_t *
 Parrot_unless_null_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 568 "src/ops/cmp.ops"
     if (!PMC_IS_NULL(PREG(1))) {
         return (opcode_t *)cur_opcode + cur_opcode[2];
     }
@@ -20414,7 +20483,8 @@
 
 opcode_t *
 Parrot_unless_null_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 574 "src/ops/cmp.ops"
     if (!STRING_IS_NULL(SREG(1))) {
         return (opcode_t *)cur_opcode + cur_opcode[2];
     }
@@ -20423,7 +20493,8 @@
 
 opcode_t *
 Parrot_cmp_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 615 "src/ops/cmp.ops"
     IREG(1) = IREG(2) < IREG(3) ? -1 :
          IREG(2) > IREG(3) ? +1 :
          0;
@@ -20432,7 +20503,8 @@
 
 opcode_t *
 Parrot_cmp_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 615 "src/ops/cmp.ops"
     IREG(1) = cur_opcode[2] < IREG(3) ? -1 :
          cur_opcode[2] > IREG(3) ? +1 :
          0;
@@ -20441,7 +20513,8 @@
 
 opcode_t *
 Parrot_cmp_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 615 "src/ops/cmp.ops"
     IREG(1) = IREG(2) < cur_opcode[3] ? -1 :
          IREG(2) > cur_opcode[3] ? +1 :
          0;
@@ -20450,7 +20523,8 @@
 
 opcode_t *
 Parrot_cmp_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 621 "src/ops/cmp.ops"
     IREG(1) = NREG(2) < NREG(3) ? -1 :
          NREG(2) > NREG(3) ? +1 :
          0;
@@ -20459,7 +20533,8 @@
 
 opcode_t *
 Parrot_cmp_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 621 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.number < NREG(3) ? -1 :
          CONST(2)->u.number > NREG(3) ? +1 :
          0;
@@ -20468,7 +20543,8 @@
 
 opcode_t *
 Parrot_cmp_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 621 "src/ops/cmp.ops"
     IREG(1) = NREG(2) < CONST(3)->u.number ? -1 :
          NREG(2) > CONST(3)->u.number ? +1 :
          0;
@@ -20477,35 +20553,40 @@
 
 opcode_t *
 Parrot_cmp_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 627 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmp_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 627 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmp_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 627 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmp_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 631 "src/ops/cmp.ops"
     IREG(1) = VTABLE_cmp(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmp_i_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 635 "src/ops/cmp.ops"
     const INTVAL l = VTABLE_get_integer(interp, PREG(2));
     IREG(1) = l < IREG(3) ? -1 :
          l > IREG(3) ? +1 :
@@ -20515,7 +20596,8 @@
 
 opcode_t *
 Parrot_cmp_i_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 635 "src/ops/cmp.ops"
     const INTVAL l = VTABLE_get_integer(interp, PREG(2));
     IREG(1) = l < cur_opcode[3] ? -1 :
          l > cur_opcode[3] ? +1 :
@@ -20525,7 +20607,8 @@
 
 opcode_t *
 Parrot_cmp_i_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 642 "src/ops/cmp.ops"
     const FLOATVAL l = VTABLE_get_number(interp, PREG(2));
     IREG(1) = l < NREG(3) ? -1 :
          l > NREG(3) ? +1 :
@@ -20535,7 +20618,8 @@
 
 opcode_t *
 Parrot_cmp_i_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 642 "src/ops/cmp.ops"
     const FLOATVAL l = VTABLE_get_number(interp, PREG(2));
     IREG(1) = l < CONST(3)->u.number ? -1 :
          l > CONST(3)->u.number ? +1 :
@@ -20545,7 +20629,8 @@
 
 opcode_t *
 Parrot_cmp_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 649 "src/ops/cmp.ops"
     STRING* const l = VTABLE_get_string(interp, PREG(2));
     IREG(1) = Parrot_str_compare(interp, l, SREG(3));
 
@@ -20553,7 +20638,8 @@
 
 opcode_t *
 Parrot_cmp_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 649 "src/ops/cmp.ops"
     STRING* const l = VTABLE_get_string(interp, PREG(2));
     IREG(1) = Parrot_str_compare(interp, l, CONST(3)->u.string);
 
@@ -20561,28 +20647,32 @@
 
 opcode_t *
 Parrot_cmp_str_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 654 "src/ops/cmp.ops"
     IREG(1) = VTABLE_cmp_string(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmp_num_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 658 "src/ops/cmp.ops"
     IREG(1) = VTABLE_cmp_num(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmp_pmc_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 670 "src/ops/cmp.ops"
     PREG(1) = VTABLE_cmp_pmc(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_issame_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 707 "src/ops/cmp.ops"
     if (PREG(2) == PREG(3))
         IREG(1) = 1;
     else
@@ -20592,35 +20682,40 @@
 
 opcode_t *
 Parrot_issame_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 714 "src/ops/cmp.ops"
     IREG(1) = SREG(2) == SREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_issame_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 714 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.string == SREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_issame_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 714 "src/ops/cmp.ops"
     IREG(1) = SREG(2) == CONST(3)->u.string;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_issame_i_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 714 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.string == CONST(3)->u.string;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isntsame_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 718 "src/ops/cmp.ops"
     if (PREG(2) == PREG(3))
         IREG(1) = 0;
     else
@@ -20630,294 +20725,336 @@
 
 opcode_t *
 Parrot_isntsame_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 725 "src/ops/cmp.ops"
     IREG(1) = SREG(2) != SREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isntsame_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 725 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.string != SREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isntsame_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 725 "src/ops/cmp.ops"
     IREG(1) = SREG(2) != CONST(3)->u.string;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isntsame_i_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 725 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.string != CONST(3)->u.string;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_istrue_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 729 "src/ops/cmp.ops"
     IREG(1) = VTABLE_get_bool(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_isfalse_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 733 "src/ops/cmp.ops"
     IREG(1) = !VTABLE_get_bool(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_isnull_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 737 "src/ops/cmp.ops"
     IREG(1) = PMC_IS_NULL(PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_isnull_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 737 "src/ops/cmp.ops"
     IREG(1) = PMC_IS_NULL(CONST(2)->u.key);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_isnull_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 741 "src/ops/cmp.ops"
     IREG(1) = STRING_IS_NULL(SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_isnull_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 741 "src/ops/cmp.ops"
     IREG(1) = STRING_IS_NULL(CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_isgt_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 759 "src/ops/cmp.ops"
     IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) > 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isge_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 777 "src/ops/cmp.ops"
     IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) >= 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 793 "src/ops/cmp.ops"
     IREG(1) = IREG(2) <= IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 793 "src/ops/cmp.ops"
     IREG(1) = cur_opcode[2] <= IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 793 "src/ops/cmp.ops"
     IREG(1) = IREG(2) <= cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 797 "src/ops/cmp.ops"
     IREG(1) = NREG(2) <= NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 797 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.number <= NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 797 "src/ops/cmp.ops"
     IREG(1) = NREG(2) <= CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 801 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, SREG(2), SREG(3)) <= 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 801 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, CONST(2)->u.string, SREG(3)) <= 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 801 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, SREG(2), CONST(3)->u.string) <= 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isle_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 805 "src/ops/cmp.ops"
     IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) <= 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 821 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) < IREG(3)) ? 1 : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 821 "src/ops/cmp.ops"
     IREG(1) = (cur_opcode[2] < IREG(3)) ? 1 : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 821 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) < cur_opcode[3]) ? 1 : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 825 "src/ops/cmp.ops"
     IREG(1) = NREG(2) < NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 825 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.number < NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 825 "src/ops/cmp.ops"
     IREG(1) = NREG(2) < CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 829 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, SREG(2), SREG(3)) < 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 829 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, CONST(2)->u.string, SREG(3)) < 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 829 "src/ops/cmp.ops"
     IREG(1) = Parrot_str_compare(interp, SREG(2), CONST(3)->u.string) < 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_islt_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 833 "src/ops/cmp.ops"
     IREG(1) = (VTABLE_cmp(interp, PREG(2), PREG(3)) < 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 849 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) == IREG(3)) ? 1 : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 849 "src/ops/cmp.ops"
     IREG(1) = (cur_opcode[2] == IREG(3)) ? 1 : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 849 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) == cur_opcode[3]) ? 1 : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 853 "src/ops/cmp.ops"
     IREG(1) = NREG(2) == NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 853 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.number == NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 853 "src/ops/cmp.ops"
     IREG(1) = NREG(2) == CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 857 "src/ops/cmp.ops"
     IREG(1) = (Parrot_str_equal(interp, SREG(2), SREG(3)) ? 1 : 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 857 "src/ops/cmp.ops"
     IREG(1) = (Parrot_str_equal(interp, CONST(2)->u.string, SREG(3)) ? 1 : 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 857 "src/ops/cmp.ops"
     IREG(1) = (Parrot_str_equal(interp, SREG(2), CONST(3)->u.string) ? 1 : 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_iseq_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 861 "src/ops/cmp.ops"
     if (&PREG(2) == &PREG(3))
         IREG(1) = 1;
     else
@@ -20927,70 +21064,80 @@
 
 opcode_t *
 Parrot_isne_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 880 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) == IREG(3)) ? 0 : 1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 880 "src/ops/cmp.ops"
     IREG(1) = (cur_opcode[2] == IREG(3)) ? 0 : 1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 880 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) == cur_opcode[3]) ? 0 : 1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 884 "src/ops/cmp.ops"
     IREG(1) = NREG(2) != NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 884 "src/ops/cmp.ops"
     IREG(1) = CONST(2)->u.number != NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 884 "src/ops/cmp.ops"
     IREG(1) = NREG(2) != CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 888 "src/ops/cmp.ops"
     IREG(1) = (Parrot_str_not_equal(interp, SREG(2), SREG(3)) ? 1 : 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 888 "src/ops/cmp.ops"
     IREG(1) = (Parrot_str_not_equal(interp, CONST(2)->u.string, SREG(3)) ? 1 : 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 888 "src/ops/cmp.ops"
     IREG(1) = (Parrot_str_not_equal(interp, SREG(2), CONST(3)->u.string) ? 1 : 0);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isne_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 892 "src/ops/cmp.ops"
     if (&PREG(2) == &PREG(3))
         IREG(1) = 0;
     else
@@ -21000,140 +21147,160 @@
 
 opcode_t *
 Parrot_and_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 924 "src/ops/cmp.ops"
     IREG(1) = IREG(2) ? IREG(3) : IREG(2);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_and_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 924 "src/ops/cmp.ops"
     IREG(1) = cur_opcode[2] ? IREG(3) : cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_and_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 924 "src/ops/cmp.ops"
     IREG(1) = IREG(2) ? cur_opcode[3] : IREG(2);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_and_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 928 "src/ops/cmp.ops"
     PREG(1) = VTABLE_logical_and(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_not_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 946 "src/ops/cmp.ops"
     IREG(1) = ! IREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_not_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 950 "src/ops/cmp.ops"
     IREG(1) = ! IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_not_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 954 "src/ops/cmp.ops"
     VTABLE_i_logical_not(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_not_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 958 "src/ops/cmp.ops"
     PREG(1) = VTABLE_logical_not(interp, PREG(2), PREG(1));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_or_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 972 "src/ops/cmp.ops"
     IREG(1) = IREG(2) ? IREG(2) : IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_or_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 972 "src/ops/cmp.ops"
     IREG(1) = cur_opcode[2] ? cur_opcode[2] : IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_or_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 972 "src/ops/cmp.ops"
     IREG(1) = IREG(2) ? IREG(2) : cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_or_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 976 "src/ops/cmp.ops"
     PREG(1) = VTABLE_logical_or(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_xor_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 991 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) && ! IREG(3)) ? IREG(2) : (IREG(3) && ! IREG(2)) ? IREG(3) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_xor_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 991 "src/ops/cmp.ops"
     IREG(1) = (cur_opcode[2] && ! IREG(3)) ? cur_opcode[2] : (IREG(3) && ! cur_opcode[2]) ? IREG(3) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_xor_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 991 "src/ops/cmp.ops"
     IREG(1) = (IREG(2) && ! cur_opcode[3]) ? IREG(2) : (cur_opcode[3] && ! IREG(2)) ? cur_opcode[3] : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_xor_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 995 "src/ops/cmp.ops"
     PREG(1) = VTABLE_logical_xor(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_debug_init(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 45 "src/ops/debug.ops"
     Parrot_debugger_init(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_debug_load_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 57 "src/ops/debug.ops"
     Parrot_debugger_load(interp, CONST(1)->u.string);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_debug_break(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 74 "src/ops/debug.ops"
     Parrot_debugger_break(interp, cur_opcode);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_debug_print(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 86 "src/ops/debug.ops"
     if (!interp->pdb) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 1,
             EXCEPTION_INVALID_OPERATION,
@@ -21152,14 +21319,16 @@
 
 opcode_t *
 Parrot_backtrace(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 108 "src/ops/debug.ops"
     PDB_backtrace(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_getline_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 120 "src/ops/debug.ops"
     Parrot_Context_info info;
     Parrot_Context_get_info(interp, CURRENT_CONTEXT(interp), &info);
     IREG(1) = info.line;
@@ -21168,7 +21337,8 @@
 
 opcode_t *
 Parrot_getfile_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 132 "src/ops/debug.ops"
     Parrot_Context_info info;
     Parrot_Context_get_info(interp, CURRENT_CONTEXT(interp), &info);
     SREG(1) = info.file;
@@ -21176,15 +21346,34 @@
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
+Parrot_set_label_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 71 "src/ops/experimental.ops"
+    VTABLE_set_pointer(interp, PREG(1), (CUR_OPCODE + cur_opcode[2]));
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
+Parrot_get_label_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 75 "src/ops/experimental.ops"
+    void * const ptr = VTABLE_get_pointer(interp, PREG(2));
+    IREG(1) =  PTR2INTVAL(ptr);
+
+return (opcode_t *)cur_opcode + 3;}
+
+opcode_t *
 Parrot_close_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 43 "src/ops/io.ops"
     Parrot_io_close(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_fdopen_p_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/io.ops"
     PREG(1) = Parrot_io_fdopen(interp, PMCNULL, (PIOHANDLE)IREG(2), SREG(3));
     if (!PREG(1))
         PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
@@ -21193,7 +21382,8 @@
 
 opcode_t *
 Parrot_fdopen_p_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/io.ops"
     PREG(1) = Parrot_io_fdopen(interp, PMCNULL, (PIOHANDLE)cur_opcode[2], SREG(3));
     if (!PREG(1))
         PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
@@ -21202,7 +21392,8 @@
 
 opcode_t *
 Parrot_fdopen_p_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/io.ops"
     PREG(1) = Parrot_io_fdopen(interp, PMCNULL, (PIOHANDLE)IREG(2), CONST(3)->u.string);
     if (!PREG(1))
         PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
@@ -21211,7 +21402,8 @@
 
 opcode_t *
 Parrot_fdopen_p_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/io.ops"
     PREG(1) = Parrot_io_fdopen(interp, PMCNULL, (PIOHANDLE)cur_opcode[2], CONST(3)->u.string);
     if (!PREG(1))
         PREG(1) = Parrot_pmc_new(interp, enum_class_Undef);
@@ -21220,49 +21412,56 @@
 
 opcode_t *
 Parrot_getstdin_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 78 "src/ops/io.ops"
     PREG(1) = _PIO_STDIN(interp);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_getstdout_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 82 "src/ops/io.ops"
     PREG(1) = _PIO_STDOUT(interp);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_getstderr_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 86 "src/ops/io.ops"
     PREG(1) = _PIO_STDERR(interp);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_setstdin_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 109 "src/ops/io.ops"
     _PIO_STDIN(interp) = PREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_setstdout_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 113 "src/ops/io.ops"
     _PIO_STDOUT(interp) = PREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_setstderr_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 117 "src/ops/io.ops"
     _PIO_STDERR(interp) = PREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_open_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 142 "src/ops/io.ops"
     if (STRING_IS_NULL(SREG(2)) || STRING_IS_NULL(SREG(3))) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_UNEXPECTED_NULL, "Invalid open");
@@ -21277,7 +21476,8 @@
 
 opcode_t *
 Parrot_open_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 142 "src/ops/io.ops"
     if (STRING_IS_NULL(CONST(2)->u.string) || STRING_IS_NULL(SREG(3))) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_UNEXPECTED_NULL, "Invalid open");
@@ -21292,7 +21492,8 @@
 
 opcode_t *
 Parrot_open_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 142 "src/ops/io.ops"
     if (STRING_IS_NULL(SREG(2)) || STRING_IS_NULL(CONST(3)->u.string)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_UNEXPECTED_NULL, "Invalid open");
@@ -21307,7 +21508,8 @@
 
 opcode_t *
 Parrot_open_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 142 "src/ops/io.ops"
     if (STRING_IS_NULL(CONST(2)->u.string) || STRING_IS_NULL(CONST(3)->u.string)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_UNEXPECTED_NULL, "Invalid open");
@@ -21322,7 +21524,8 @@
 
 opcode_t *
 Parrot_open_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 154 "src/ops/io.ops"
     if (STRING_IS_NULL(SREG(2))) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
             EXCEPTION_UNEXPECTED_NULL, "Invalid open");
@@ -21337,7 +21540,8 @@
 
 opcode_t *
 Parrot_open_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 154 "src/ops/io.ops"
     if (STRING_IS_NULL(CONST(2)->u.string)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
             EXCEPTION_UNEXPECTED_NULL, "Invalid open");
@@ -21352,21 +21556,24 @@
 
 opcode_t *
 Parrot_print_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 180 "src/ops/io.ops"
     Parrot_io_printf(interp, INTVAL_FMT, (INTVAL)IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_print_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 180 "src/ops/io.ops"
     Parrot_io_printf(interp, INTVAL_FMT, (INTVAL)cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_print_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 184 "src/ops/io.ops"
 #ifdef PARROT_HAS_NEGATIVE_ZERO
     Parrot_io_printf(interp, FLOATVAL_FMT, NREG(1));
 #else
@@ -21383,7 +21590,8 @@
 
 opcode_t *
 Parrot_print_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 184 "src/ops/io.ops"
 #ifdef PARROT_HAS_NEGATIVE_ZERO
     Parrot_io_printf(interp, FLOATVAL_FMT, CONST(1)->u.number);
 #else
@@ -21400,7 +21608,8 @@
 
 opcode_t *
 Parrot_print_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 198 "src/ops/io.ops"
     STRING * const s = SREG(1);
     if (s && Parrot_str_byte_length(interp, s))
         Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
@@ -21409,7 +21618,8 @@
 
 opcode_t *
 Parrot_print_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 198 "src/ops/io.ops"
     STRING * const s = CONST(1)->u.string;
     if (s && Parrot_str_byte_length(interp, s))
         Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
@@ -21418,7 +21628,8 @@
 
 opcode_t *
 Parrot_print_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 204 "src/ops/io.ops"
     PMC * const p = PREG(1);
     STRING * const s = (VTABLE_get_string(interp, p));
     if (s)
@@ -21428,21 +21639,24 @@
 
 opcode_t *
 Parrot_say_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 223 "src/ops/io.ops"
     Parrot_io_printf(interp, INTVAL_FMT "\n", (INTVAL)IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_say_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 223 "src/ops/io.ops"
     Parrot_io_printf(interp, INTVAL_FMT "\n", (INTVAL)cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_say_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 227 "src/ops/io.ops"
 #ifdef PARROT_HAS_NEGATIVE_ZERO
     Parrot_io_printf(interp, FLOATVAL_FMT "\n", NREG(1));
 #else
@@ -21459,7 +21673,8 @@
 
 opcode_t *
 Parrot_say_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 227 "src/ops/io.ops"
 #ifdef PARROT_HAS_NEGATIVE_ZERO
     Parrot_io_printf(interp, FLOATVAL_FMT "\n", CONST(1)->u.number);
 #else
@@ -21476,7 +21691,8 @@
 
 opcode_t *
 Parrot_say_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 241 "src/ops/io.ops"
     STRING * const s = SREG(1);
     if (s && Parrot_str_byte_length(interp, s))
         Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
@@ -21486,7 +21702,8 @@
 
 opcode_t *
 Parrot_say_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 241 "src/ops/io.ops"
     STRING * const s = CONST(1)->u.string;
     if (s && Parrot_str_byte_length(interp, s))
         Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
@@ -21496,7 +21713,8 @@
 
 opcode_t *
 Parrot_say_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 248 "src/ops/io.ops"
     PMC * const p = PREG(1);
 
     if (PMC_IS_NULL(p)) {
@@ -21516,35 +21734,40 @@
 
 opcode_t *
 Parrot_printerr_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/io.ops"
     Parrot_io_eprintf(interp, INTVAL_FMT, IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_printerr_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/io.ops"
     Parrot_io_eprintf(interp, INTVAL_FMT, cur_opcode[1]);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_printerr_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 286 "src/ops/io.ops"
     Parrot_io_eprintf(interp, FLOATVAL_FMT, NREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_printerr_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 286 "src/ops/io.ops"
     Parrot_io_eprintf(interp, FLOATVAL_FMT, CONST(1)->u.number);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_printerr_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 290 "src/ops/io.ops"
     STRING * const s = SREG(1);
     if (s && Parrot_str_byte_length(interp, s))
         Parrot_io_putps(interp, _PIO_STDERR(interp), s);
@@ -21553,7 +21776,8 @@
 
 opcode_t *
 Parrot_printerr_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 290 "src/ops/io.ops"
     STRING * const s = CONST(1)->u.string;
     if (s && Parrot_str_byte_length(interp, s))
         Parrot_io_putps(interp, _PIO_STDERR(interp), s);
@@ -21562,7 +21786,8 @@
 
 opcode_t *
 Parrot_printerr_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/io.ops"
     PMC * const p = PREG(1);
     STRING * const s = (VTABLE_get_string(interp, p));
     if (s)
@@ -21572,7 +21797,8 @@
 
 opcode_t *
 Parrot_print_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/io.ops"
     if (PREG(1)) {
         STRING * const s = Parrot_str_from_int(interp, IREG(2));
         Parrot_io_putps(interp, PREG(1), s);
@@ -21582,7 +21808,8 @@
 
 opcode_t *
 Parrot_print_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/io.ops"
     if (PREG(1)) {
         STRING * const s = Parrot_str_from_int(interp, cur_opcode[2]);
         Parrot_io_putps(interp, PREG(1), s);
@@ -21592,7 +21819,8 @@
 
 opcode_t *
 Parrot_print_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 324 "src/ops/io.ops"
     if (PREG(1)) {
         STRING * const s = Parrot_sprintf_c(interp, FLOATVAL_FMT, NREG(2));
         Parrot_io_putps(interp, PREG(1), s);
@@ -21602,7 +21830,8 @@
 
 opcode_t *
 Parrot_print_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 324 "src/ops/io.ops"
     if (PREG(1)) {
         STRING * const s = Parrot_sprintf_c(interp, FLOATVAL_FMT, CONST(2)->u.number);
         Parrot_io_putps(interp, PREG(1), s);
@@ -21612,7 +21841,8 @@
 
 opcode_t *
 Parrot_print_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 331 "src/ops/io.ops"
     if (SREG(2) && PREG(1)) {
         Parrot_io_putps(interp, PREG(1), SREG(2));
     }
@@ -21621,7 +21851,8 @@
 
 opcode_t *
 Parrot_print_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 331 "src/ops/io.ops"
     if (CONST(2)->u.string && PREG(1)) {
         Parrot_io_putps(interp, PREG(1), CONST(2)->u.string);
     }
@@ -21630,7 +21861,8 @@
 
 opcode_t *
 Parrot_print_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 337 "src/ops/io.ops"
     if (PREG(2) && PREG(1)) {
         STRING * const s = VTABLE_get_string(interp, PREG(2));
         Parrot_io_putps(interp, PREG(1), s);
@@ -21640,42 +21872,48 @@
 
 opcode_t *
 Parrot_read_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 356 "src/ops/io.ops"
     SREG(1) = Parrot_io_reads(interp, _PIO_STDIN(interp), (size_t)IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_read_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 356 "src/ops/io.ops"
     SREG(1) = Parrot_io_reads(interp, _PIO_STDIN(interp), (size_t)cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_read_s_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 360 "src/ops/io.ops"
     SREG(1) = Parrot_io_reads(interp, PREG(2), (size_t)IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_read_s_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 360 "src/ops/io.ops"
     SREG(1) = Parrot_io_reads(interp, PREG(2), (size_t)cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_readline_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 371 "src/ops/io.ops"
     SREG(1) = Parrot_io_readline(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_peek_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 389 "src/ops/io.ops"
     STRING ** const s = &SREG(1);
 
     *s = NULL;
@@ -21687,7 +21925,8 @@
 
 opcode_t *
 Parrot_peek_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 398 "src/ops/io.ops"
     STRING ** const s = &SREG(1);
 
     *s = NULL;
@@ -21699,63 +21938,72 @@
 
 opcode_t *
 Parrot_stat_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/io.ops"
     IREG(1) = Parrot_stat_info_intval(interp, SREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/io.ops"
     IREG(1) = Parrot_stat_info_intval(interp, CONST(2)->u.string, IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/io.ops"
     IREG(1) = Parrot_stat_info_intval(interp, SREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/io.ops"
     IREG(1) = Parrot_stat_info_intval(interp, CONST(2)->u.string, cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 435 "src/ops/io.ops"
     IREG(1) = Parrot_fstat_info_intval(interp, IREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 435 "src/ops/io.ops"
     IREG(1) = Parrot_fstat_info_intval(interp, cur_opcode[2], IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 435 "src/ops/io.ops"
     IREG(1) = Parrot_fstat_info_intval(interp, IREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_stat_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 435 "src/ops/io.ops"
     IREG(1) = Parrot_fstat_info_intval(interp, cur_opcode[2], cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_seek_p_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 465 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset(IREG(2)), IREG(3)) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -21769,7 +22017,8 @@
 
 opcode_t *
 Parrot_seek_p_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 465 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset(cur_opcode[2]), IREG(3)) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -21783,7 +22032,8 @@
 
 opcode_t *
 Parrot_seek_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 465 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset(IREG(2)), cur_opcode[3]) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -21797,7 +22047,8 @@
 
 opcode_t *
 Parrot_seek_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 465 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset(cur_opcode[2]), cur_opcode[3]) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -21811,7 +22062,8 @@
 
 opcode_t *
 Parrot_seek_p_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(IREG(2), IREG(3)), IREG(4)) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21825,7 +22077,8 @@
 
 opcode_t *
 Parrot_seek_p_ic_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(cur_opcode[2], IREG(3)), IREG(4)) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21839,7 +22092,8 @@
 
 opcode_t *
 Parrot_seek_p_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(IREG(2), cur_opcode[3]), IREG(4)) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21853,7 +22107,8 @@
 
 opcode_t *
 Parrot_seek_p_ic_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(cur_opcode[2], cur_opcode[3]), IREG(4)) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21867,7 +22122,8 @@
 
 opcode_t *
 Parrot_seek_p_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(IREG(2), IREG(3)), cur_opcode[4]) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21881,7 +22137,8 @@
 
 opcode_t *
 Parrot_seek_p_ic_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(cur_opcode[2], IREG(3)), cur_opcode[4]) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21895,7 +22152,8 @@
 
 opcode_t *
 Parrot_seek_p_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(IREG(2), cur_opcode[3]), cur_opcode[4]) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21909,7 +22167,8 @@
 
 opcode_t *
 Parrot_seek_p_ic_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 476 "src/ops/io.ops"
     if (PREG(1)) {
         if (Parrot_io_seek(interp, PREG(1), Parrot_io_make_offset32(cur_opcode[2], cur_opcode[3]), cur_opcode[4]) < 0) {
             opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 5,
@@ -21923,7 +22182,8 @@
 
 opcode_t *
 Parrot_tell_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 502 "src/ops/io.ops"
     if (PREG(2))
         IREG(1) = (INTVAL)Parrot_io_tell(interp, PREG(2));
 
@@ -21931,7 +22191,8 @@
 
 opcode_t *
 Parrot_tell_i_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 507 "src/ops/io.ops"
     if (PREG(3)) {
         PIOOFF_T pos;
         pos = Parrot_io_tell(interp, PREG(3));
@@ -21943,21 +22204,24 @@
 
 opcode_t *
 Parrot_abs_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 47 "src/ops/math.ops"
     IREG(1) = abs(IREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_abs_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 51 "src/ops/math.ops"
     NREG(1) = fabs(NREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_abs_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/math.ops"
     if (IREG(2) < 0)
         IREG(1) = - (INTVAL)IREG(2);
     else
@@ -21967,7 +22231,8 @@
 
 opcode_t *
 Parrot_abs_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 62 "src/ops/math.ops"
     if (NREG(2) < 0)
         NREG(1) = - (FLOATVAL)NREG(2);
     else
@@ -21977,161 +22242,184 @@
 
 opcode_t *
 Parrot_abs_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 69 "src/ops/math.ops"
     VTABLE_i_absolute(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_abs_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 73 "src/ops/math.ops"
     PREG(1) = VTABLE_absolute(interp, PREG(2), PREG(1));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 105 "src/ops/math.ops"
     IREG(1) += IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 105 "src/ops/math.ops"
     IREG(1) += cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 109 "src/ops/math.ops"
     NREG(1) += NREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 109 "src/ops/math.ops"
     NREG(1) += CONST(2)->u.number;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 113 "src/ops/math.ops"
     VTABLE_i_add(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 117 "src/ops/math.ops"
     VTABLE_i_add_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 117 "src/ops/math.ops"
     VTABLE_i_add_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 121 "src/ops/math.ops"
     VTABLE_i_add_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 121 "src/ops/math.ops"
     VTABLE_i_add_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 125 "src/ops/math.ops"
     IREG(1) = IREG(2) + IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 125 "src/ops/math.ops"
     IREG(1) = cur_opcode[2] + IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 125 "src/ops/math.ops"
     IREG(1) = IREG(2) + cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 129 "src/ops/math.ops"
     NREG(1) = NREG(2) + NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 129 "src/ops/math.ops"
     NREG(1) = CONST(2)->u.number + NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 129 "src/ops/math.ops"
     NREG(1) = NREG(2) + CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 133 "src/ops/math.ops"
     PREG(1) = VTABLE_add(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 137 "src/ops/math.ops"
     PREG(1) = VTABLE_add_int(interp, PREG(2), IREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 137 "src/ops/math.ops"
     PREG(1) = VTABLE_add_int(interp, PREG(2), cur_opcode[3], PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 141 "src/ops/math.ops"
     PREG(1) = VTABLE_add_float(interp, PREG(2), NREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 141 "src/ops/math.ops"
     PREG(1) = VTABLE_add_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cmod_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 186 "src/ops/math.ops"
     INTVAL den = IREG(3);
     if (IREG(3) == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22145,7 +22433,8 @@
 
 opcode_t *
 Parrot_cmod_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 186 "src/ops/math.ops"
     INTVAL den = IREG(3);
     if (IREG(3) == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22159,7 +22448,8 @@
 
 opcode_t *
 Parrot_cmod_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 186 "src/ops/math.ops"
     INTVAL den = cur_opcode[3];
     if (cur_opcode[3] == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22173,7 +22463,8 @@
 
 opcode_t *
 Parrot_cmod_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 197 "src/ops/math.ops"
     INTVAL result;
 
     if (IREG(3) == 0) {
@@ -22192,7 +22483,8 @@
 
 opcode_t *
 Parrot_cmod_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 197 "src/ops/math.ops"
     INTVAL result;
 
     if (cur_opcode[3] == 0) {
@@ -22211,7 +22503,8 @@
 
 opcode_t *
 Parrot_cmod_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 213 "src/ops/math.ops"
     INTVAL result;
     INTVAL value = VTABLE_get_integer(interp, PREG(3));
 
@@ -22231,7 +22524,8 @@
 
 opcode_t *
 Parrot_cmod_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 263 "src/ops/math.ops"
     FLOATVAL den = NREG(3);
     if (FLOAT_IS_ZERO(NREG(3))) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22245,7 +22539,8 @@
 
 opcode_t *
 Parrot_cmod_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 263 "src/ops/math.ops"
     FLOATVAL den = NREG(3);
     if (FLOAT_IS_ZERO(NREG(3))) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22259,7 +22554,8 @@
 
 opcode_t *
 Parrot_cmod_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 263 "src/ops/math.ops"
     FLOATVAL den = CONST(3)->u.number;
     if (FLOAT_IS_ZERO(CONST(3)->u.number)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22273,7 +22569,8 @@
 
 opcode_t *
 Parrot_cmod_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/math.ops"
     FLOATVAL result;
     FLOATVAL value = NREG(3);
 
@@ -22293,7 +22590,8 @@
 
 opcode_t *
 Parrot_cmod_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/math.ops"
     FLOATVAL result;
     FLOATVAL value = CONST(3)->u.number;
 
@@ -22313,28 +22611,32 @@
 
 opcode_t *
 Parrot_dec_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 303 "src/ops/math.ops"
     IREG(1)--;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_dec_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 307 "src/ops/math.ops"
     NREG(1)--;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_dec_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 311 "src/ops/math.ops"
     VTABLE_decrement(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_div_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 345 "src/ops/math.ops"
     INTVAL den = IREG(2);
     if (den == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
@@ -22348,7 +22650,8 @@
 
 opcode_t *
 Parrot_div_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 345 "src/ops/math.ops"
     INTVAL den = cur_opcode[2];
     if (den == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
@@ -22362,7 +22665,8 @@
 
 opcode_t *
 Parrot_div_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 356 "src/ops/math.ops"
     FLOATVAL den = NREG(2);
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
@@ -22376,7 +22680,8 @@
 
 opcode_t *
 Parrot_div_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 356 "src/ops/math.ops"
     FLOATVAL den = CONST(2)->u.number;
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
@@ -22390,42 +22695,48 @@
 
 opcode_t *
 Parrot_div_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 367 "src/ops/math.ops"
     VTABLE_i_divide(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_div_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 371 "src/ops/math.ops"
     VTABLE_i_divide_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_div_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 371 "src/ops/math.ops"
     VTABLE_i_divide_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_div_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 375 "src/ops/math.ops"
     VTABLE_i_divide_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_div_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 375 "src/ops/math.ops"
     VTABLE_i_divide_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_div_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/math.ops"
     INTVAL den = IREG(3);
     if (den == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22439,7 +22750,8 @@
 
 opcode_t *
 Parrot_div_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/math.ops"
     INTVAL den = IREG(3);
     if (den == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22453,7 +22765,8 @@
 
 opcode_t *
 Parrot_div_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/math.ops"
     INTVAL den = cur_opcode[3];
     if (den == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22467,7 +22780,8 @@
 
 opcode_t *
 Parrot_div_i_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/math.ops"
     INTVAL den = cur_opcode[3];
     if (den == 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22481,7 +22795,8 @@
 
 opcode_t *
 Parrot_div_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 389 "src/ops/math.ops"
     FLOATVAL den = NREG(3);
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22495,7 +22810,8 @@
 
 opcode_t *
 Parrot_div_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 389 "src/ops/math.ops"
     FLOATVAL den = NREG(3);
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22509,7 +22825,8 @@
 
 opcode_t *
 Parrot_div_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 389 "src/ops/math.ops"
     FLOATVAL den = CONST(3)->u.number;
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22523,7 +22840,8 @@
 
 opcode_t *
 Parrot_div_n_nc_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 389 "src/ops/math.ops"
     FLOATVAL den = CONST(3)->u.number;
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22537,42 +22855,48 @@
 
 opcode_t *
 Parrot_div_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 400 "src/ops/math.ops"
     PREG(1) = VTABLE_divide(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_div_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 404 "src/ops/math.ops"
     PREG(1) = VTABLE_divide_int(interp, PREG(2), IREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_div_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 404 "src/ops/math.ops"
     PREG(1) = VTABLE_divide_int(interp, PREG(2), cur_opcode[3], PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_div_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 408 "src/ops/math.ops"
     PREG(1) = VTABLE_divide_float(interp, PREG(2), NREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_div_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 408 "src/ops/math.ops"
     PREG(1) = VTABLE_divide_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_fdiv_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 441 "src/ops/math.ops"
     INTVAL   den = IREG(2);
     FLOATVAL f;
 
@@ -22590,7 +22914,8 @@
 
 opcode_t *
 Parrot_fdiv_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 441 "src/ops/math.ops"
     INTVAL   den = cur_opcode[2];
     FLOATVAL f;
 
@@ -22608,7 +22933,8 @@
 
 opcode_t *
 Parrot_fdiv_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 456 "src/ops/math.ops"
     FLOATVAL den = NREG(2);
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
@@ -22622,7 +22948,8 @@
 
 opcode_t *
 Parrot_fdiv_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 456 "src/ops/math.ops"
     FLOATVAL den = CONST(2)->u.number;
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
@@ -22636,42 +22963,48 @@
 
 opcode_t *
 Parrot_fdiv_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 467 "src/ops/math.ops"
     VTABLE_i_floor_divide(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_fdiv_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 471 "src/ops/math.ops"
     VTABLE_i_floor_divide_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_fdiv_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 471 "src/ops/math.ops"
     VTABLE_i_floor_divide_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_fdiv_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 475 "src/ops/math.ops"
     VTABLE_i_floor_divide_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_fdiv_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 475 "src/ops/math.ops"
     VTABLE_i_floor_divide_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_fdiv_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 479 "src/ops/math.ops"
     INTVAL   den = IREG(3);
     FLOATVAL f;
 
@@ -22689,7 +23022,8 @@
 
 opcode_t *
 Parrot_fdiv_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 479 "src/ops/math.ops"
     INTVAL   den = IREG(3);
     FLOATVAL f;
 
@@ -22707,7 +23041,8 @@
 
 opcode_t *
 Parrot_fdiv_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 479 "src/ops/math.ops"
     INTVAL   den = cur_opcode[3];
     FLOATVAL f;
 
@@ -22725,7 +23060,8 @@
 
 opcode_t *
 Parrot_fdiv_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 494 "src/ops/math.ops"
     FLOATVAL den = NREG(3);
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22739,7 +23075,8 @@
 
 opcode_t *
 Parrot_fdiv_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 494 "src/ops/math.ops"
     FLOATVAL den = NREG(3);
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22753,7 +23090,8 @@
 
 opcode_t *
 Parrot_fdiv_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 494 "src/ops/math.ops"
     FLOATVAL den = CONST(3)->u.number;
     if (FLOAT_IS_ZERO(den)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
@@ -22767,49 +23105,56 @@
 
 opcode_t *
 Parrot_fdiv_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 505 "src/ops/math.ops"
     PREG(1) = VTABLE_floor_divide(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_fdiv_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 509 "src/ops/math.ops"
     PREG(1) = VTABLE_floor_divide_int(interp, PREG(2), IREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_fdiv_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 509 "src/ops/math.ops"
     PREG(1) = VTABLE_floor_divide_int(interp, PREG(2), cur_opcode[3], PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_fdiv_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 513 "src/ops/math.ops"
     PREG(1) = VTABLE_floor_divide_float(interp, PREG(2), NREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_fdiv_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 513 "src/ops/math.ops"
     PREG(1) = VTABLE_floor_divide_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_ceil_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 531 "src/ops/math.ops"
     NREG(1) = ceil(NREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_ceil_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 535 "src/ops/math.ops"
     FLOATVAL f = ceil(NREG(2));
     IREG(1)         = (INTVAL)f;
 
@@ -22817,21 +23162,24 @@
 
 opcode_t *
 Parrot_ceil_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 540 "src/ops/math.ops"
     NREG(1) = ceil(NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_floor_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 558 "src/ops/math.ops"
     NREG(1) = floor(NREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_floor_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 562 "src/ops/math.ops"
     FLOATVAL f = floor(NREG(2));
     IREG(1)         = (INTVAL)f;
 
@@ -22839,378 +23187,432 @@
 
 opcode_t *
 Parrot_floor_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 567 "src/ops/math.ops"
     NREG(1) = floor(NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_inc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 583 "src/ops/math.ops"
     IREG(1)++;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_inc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/math.ops"
     NREG(1)++;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_inc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 591 "src/ops/math.ops"
     VTABLE_increment(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_mod_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 643 "src/ops/math.ops"
     IREG(1) = intval_mod(IREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 643 "src/ops/math.ops"
     IREG(1) = intval_mod(IREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 647 "src/ops/math.ops"
     NREG(1) = floatval_mod(NREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 647 "src/ops/math.ops"
     NREG(1) = floatval_mod(NREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 651 "src/ops/math.ops"
     VTABLE_i_modulus(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 655 "src/ops/math.ops"
     VTABLE_i_modulus_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 655 "src/ops/math.ops"
     VTABLE_i_modulus_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 659 "src/ops/math.ops"
     VTABLE_i_modulus_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 659 "src/ops/math.ops"
     VTABLE_i_modulus_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mod_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 663 "src/ops/math.ops"
     IREG(1) = intval_mod(IREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 663 "src/ops/math.ops"
     IREG(1) = intval_mod(cur_opcode[2], IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 663 "src/ops/math.ops"
     IREG(1) = intval_mod(IREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 667 "src/ops/math.ops"
     NREG(1) = floatval_mod(NREG(2), NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 667 "src/ops/math.ops"
     NREG(1) = floatval_mod(CONST(2)->u.number, NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 667 "src/ops/math.ops"
     NREG(1) = floatval_mod(NREG(2), CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 671 "src/ops/math.ops"
     PREG(1) = VTABLE_modulus(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 675 "src/ops/math.ops"
     PREG(1) = VTABLE_modulus_int(interp, PREG(2), IREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 675 "src/ops/math.ops"
     PREG(1) = VTABLE_modulus_int(interp, PREG(2), cur_opcode[3], PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 679 "src/ops/math.ops"
     PREG(1) = VTABLE_modulus_float(interp, PREG(2), NREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mod_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 679 "src/ops/math.ops"
     PREG(1) = VTABLE_modulus_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 711 "src/ops/math.ops"
     IREG(1) *= IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 711 "src/ops/math.ops"
     IREG(1) *= cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 715 "src/ops/math.ops"
     NREG(1) *= NREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 715 "src/ops/math.ops"
     NREG(1) *= CONST(2)->u.number;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 719 "src/ops/math.ops"
     VTABLE_i_multiply(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 723 "src/ops/math.ops"
     VTABLE_i_multiply_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 723 "src/ops/math.ops"
     VTABLE_i_multiply_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 727 "src/ops/math.ops"
     VTABLE_i_multiply_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 727 "src/ops/math.ops"
     VTABLE_i_multiply_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_mul_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 731 "src/ops/math.ops"
     IREG(1) = IREG(2) * IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 731 "src/ops/math.ops"
     IREG(1) = cur_opcode[2] * IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 731 "src/ops/math.ops"
     IREG(1) = IREG(2) * cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 735 "src/ops/math.ops"
     NREG(1) = NREG(2) * NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 735 "src/ops/math.ops"
     NREG(1) = CONST(2)->u.number * NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 735 "src/ops/math.ops"
     NREG(1) = NREG(2) * CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 739 "src/ops/math.ops"
     PREG(1) = VTABLE_multiply(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 743 "src/ops/math.ops"
     PREG(1) = VTABLE_multiply_int(interp, PREG(2), IREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 743 "src/ops/math.ops"
     PREG(1) = VTABLE_multiply_int(interp, PREG(2), cur_opcode[3], PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 747 "src/ops/math.ops"
     PREG(1) = VTABLE_multiply_float(interp, PREG(2), NREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_mul_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 747 "src/ops/math.ops"
     PREG(1) = VTABLE_multiply_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_neg_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 771 "src/ops/math.ops"
     IREG(1) = - IREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_neg_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 775 "src/ops/math.ops"
     NREG(1) = - NREG(1);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_neg_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 779 "src/ops/math.ops"
     VTABLE_i_neg(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_neg_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 783 "src/ops/math.ops"
     IREG(1) = - IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_neg_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 787 "src/ops/math.ops"
     NREG(1) = - NREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_neg_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 791 "src/ops/math.ops"
     PREG(1) = VTABLE_neg(interp, PREG(2), PREG(1));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_pow_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/math.ops"
     NREG(1) = pow((FLOATVAL)NREG(2), (FLOATVAL)NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_pow_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/math.ops"
     NREG(1) = pow((FLOATVAL)CONST(2)->u.number, (FLOATVAL)NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_pow_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 811 "src/ops/math.ops"
     NREG(1) = pow((FLOATVAL)NREG(2), (FLOATVAL)CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_pow_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 815 "src/ops/math.ops"
     const FLOATVAL a = VTABLE_get_number(interp, PREG(2));
     const FLOATVAL b = VTABLE_get_number(interp, PREG(3));
     const FLOATVAL c = pow(a, b);
@@ -23224,7 +23626,8 @@
 
 opcode_t *
 Parrot_pow_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 826 "src/ops/math.ops"
     const FLOATVAL a = VTABLE_get_number(interp, PREG(2));
     const FLOATVAL b = (FLOATVAL)IREG(3);
     const FLOATVAL c = pow(a, b);
@@ -23238,7 +23641,8 @@
 
 opcode_t *
 Parrot_pow_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 826 "src/ops/math.ops"
     const FLOATVAL a = VTABLE_get_number(interp, PREG(2));
     const FLOATVAL b = (FLOATVAL)cur_opcode[3];
     const FLOATVAL c = pow(a, b);
@@ -23252,7 +23656,8 @@
 
 opcode_t *
 Parrot_pow_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 837 "src/ops/math.ops"
     const FLOATVAL a = VTABLE_get_number(interp, PREG(2));
     const FLOATVAL c = pow(a, NREG(3));
     if (PMC_IS_NULL(PREG(1)))
@@ -23265,7 +23670,8 @@
 
 opcode_t *
 Parrot_pow_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 837 "src/ops/math.ops"
     const FLOATVAL a = VTABLE_get_number(interp, PREG(2));
     const FLOATVAL c = pow(a, CONST(3)->u.number);
     if (PMC_IS_NULL(PREG(1)))
@@ -23278,7 +23684,8 @@
 
 opcode_t *
 Parrot_pow_n_n_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 847 "src/ops/math.ops"
     FLOATVAL n2 = NREG(2);
     FLOATVAL res = 1.0;
     INTVAL   e  = IREG(3);
@@ -23305,7 +23712,8 @@
 
 opcode_t *
 Parrot_pow_n_nc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 847 "src/ops/math.ops"
     FLOATVAL n2 = CONST(2)->u.number;
     FLOATVAL res = 1.0;
     INTVAL   e  = IREG(3);
@@ -23332,7 +23740,8 @@
 
 opcode_t *
 Parrot_pow_n_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 847 "src/ops/math.ops"
     FLOATVAL n2 = NREG(2);
     FLOATVAL res = 1.0;
     INTVAL   e  = cur_opcode[3];
@@ -23359,7 +23768,8 @@
 
 opcode_t *
 Parrot_pow_n_nc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 847 "src/ops/math.ops"
     FLOATVAL n2 = CONST(2)->u.number;
     FLOATVAL res = 1.0;
     INTVAL   e  = cur_opcode[3];
@@ -23386,238 +23796,272 @@
 
 opcode_t *
 Parrot_sub_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 899 "src/ops/math.ops"
     IREG(1) -= IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 899 "src/ops/math.ops"
     IREG(1) -= cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 903 "src/ops/math.ops"
     NREG(1) -= NREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 903 "src/ops/math.ops"
     NREG(1) -= CONST(2)->u.number;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 907 "src/ops/math.ops"
     VTABLE_i_subtract(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 911 "src/ops/math.ops"
     VTABLE_i_subtract_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 911 "src/ops/math.ops"
     VTABLE_i_subtract_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 915 "src/ops/math.ops"
     VTABLE_i_subtract_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 915 "src/ops/math.ops"
     VTABLE_i_subtract_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sub_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 919 "src/ops/math.ops"
     IREG(1) = IREG(2) - IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 919 "src/ops/math.ops"
     IREG(1) = cur_opcode[2] - IREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 919 "src/ops/math.ops"
     IREG(1) = IREG(2) - cur_opcode[3];
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 923 "src/ops/math.ops"
     NREG(1) = NREG(2) - NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 923 "src/ops/math.ops"
     NREG(1) = CONST(2)->u.number - NREG(3);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 923 "src/ops/math.ops"
     NREG(1) = NREG(2) - CONST(3)->u.number;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 927 "src/ops/math.ops"
     PREG(1) = VTABLE_subtract(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 931 "src/ops/math.ops"
     PREG(1) = VTABLE_subtract_int(interp, PREG(2), IREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 931 "src/ops/math.ops"
     PREG(1) = VTABLE_subtract_int(interp, PREG(2), cur_opcode[3], PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_p_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 935 "src/ops/math.ops"
     PREG(1) = VTABLE_subtract_float(interp, PREG(2), NREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sub_p_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 935 "src/ops/math.ops"
     PREG(1) = VTABLE_subtract_float(interp, PREG(2), CONST(3)->u.number, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sqrt_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 947 "src/ops/math.ops"
     NREG(1) = sqrt((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_acos_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 976 "src/ops/math.ops"
     NREG(1) = acos((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_asec_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 988 "src/ops/math.ops"
     NREG(1) = acos(((FLOATVAL)1) / ((FLOATVAL)NREG(2)));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_asin_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1001 "src/ops/math.ops"
     NREG(1) = asin((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_atan_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1019 "src/ops/math.ops"
     NREG(1) = atan((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_atan_n_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1023 "src/ops/math.ops"
     NREG(1) = atan2((FLOATVAL)NREG(2), (FLOATVAL)NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_atan_n_nc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1023 "src/ops/math.ops"
     NREG(1) = atan2((FLOATVAL)CONST(2)->u.number, (FLOATVAL)NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_atan_n_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1023 "src/ops/math.ops"
     NREG(1) = atan2((FLOATVAL)NREG(2), (FLOATVAL)CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_cos_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1035 "src/ops/math.ops"
     NREG(1) = cos((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_cosh_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1047 "src/ops/math.ops"
     NREG(1) = cosh((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_exp_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1060 "src/ops/math.ops"
     NREG(1) = exp((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_ln_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1072 "src/ops/math.ops"
     NREG(1) = log((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_log10_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1084 "src/ops/math.ops"
     NREG(1) = log10((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_log2_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1096 "src/ops/math.ops"
     FLOATVAL temp = log((FLOATVAL)2.0);
     NREG(1) = log((FLOATVAL)NREG(2)) / temp;
 
@@ -23625,49 +24069,56 @@
 
 opcode_t *
 Parrot_sec_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1109 "src/ops/math.ops"
     NREG(1) = ((FLOATVAL)1) / cos((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sech_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1121 "src/ops/math.ops"
     NREG(1) = ((FLOATVAL)1) / cosh((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sin_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1133 "src/ops/math.ops"
     NREG(1) = sin((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sinh_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1145 "src/ops/math.ops"
     NREG(1) = sinh((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_tan_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1157 "src/ops/math.ops"
     NREG(1) = tan((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_tanh_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1169 "src/ops/math.ops"
     NREG(1) = tanh((FLOATVAL)NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_gcd_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1195 "src/ops/math.ops"
     INTVAL p = 0;
     INTVAL a = IREG(2) < 0 ? -IREG(2) : IREG(2);
     INTVAL b = IREG(3) < 0 ? -IREG(3) : IREG(3);
@@ -23694,7 +24145,8 @@
 
 opcode_t *
 Parrot_gcd_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1195 "src/ops/math.ops"
     INTVAL p = 0;
     INTVAL a = cur_opcode[2] < 0 ? -cur_opcode[2] : cur_opcode[2];
     INTVAL b = IREG(3) < 0 ? -IREG(3) : IREG(3);
@@ -23721,7 +24173,8 @@
 
 opcode_t *
 Parrot_gcd_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1195 "src/ops/math.ops"
     INTVAL p = 0;
     INTVAL a = IREG(2) < 0 ? -IREG(2) : IREG(2);
     INTVAL b = cur_opcode[3] < 0 ? -cur_opcode[3] : cur_opcode[3];
@@ -23748,7 +24201,8 @@
 
 opcode_t *
 Parrot_lcm_i_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1228 "src/ops/math.ops"
     INTVAL gcd = 0;
     INTVAL p = 0;
     INTVAL a = IREG(2) < 0 ? -IREG(2) : IREG(2);
@@ -23778,7 +24232,8 @@
 
 opcode_t *
 Parrot_lcm_i_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1228 "src/ops/math.ops"
     INTVAL gcd = 0;
     INTVAL p = 0;
     INTVAL a = cur_opcode[2] < 0 ? -cur_opcode[2] : cur_opcode[2];
@@ -23808,7 +24263,8 @@
 
 opcode_t *
 Parrot_lcm_i_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1228 "src/ops/math.ops"
     INTVAL gcd = 0;
     INTVAL p = 0;
     INTVAL a = IREG(2) < 0 ? -IREG(2) : IREG(2);
@@ -23838,7 +24294,8 @@
 
 opcode_t *
 Parrot_fact_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1265 "src/ops/math.ops"
     /* Coercing a negative to a UINT can get pretty ugly
      * in this situation. */
     INTVAL i = IREG(2);
@@ -23853,7 +24310,8 @@
 
 opcode_t *
 Parrot_fact_n_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 1277 "src/ops/math.ops"
     /* Coercing a negative to a UINT can get pretty ugly
      * in this situation. */
     INTVAL i = IREG(2);
@@ -23868,13 +24326,16 @@
 
 opcode_t *
 Parrot_callmethodcc_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 50 "src/ops/object.ops"
     PMC      * const object     = PREG(1);
     STRING   * const meth       = SREG(2);
     opcode_t * const next       = cur_opcode + 3;
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
+    PMC      * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     if (PMC_IS_NULL(method_pmc)) {
         PMC * const _class = VTABLE_get_class(interp, object);
@@ -23891,7 +24352,8 @@
         }
     }
     else {
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         interp->current_cont   = NEED_CONTINUATION;
         dest                   = VTABLE_invoke(interp, method_pmc, next);
     }
@@ -23900,13 +24362,16 @@
 
 opcode_t *
 Parrot_callmethodcc_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 50 "src/ops/object.ops"
     PMC      * const object     = PREG(1);
     STRING   * const meth       = CONST(2)->u.string;
     opcode_t * const next       = cur_opcode + 3;
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
+    PMC      * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     if (PMC_IS_NULL(method_pmc)) {
         PMC * const _class = VTABLE_get_class(interp, object);
@@ -23923,7 +24388,8 @@
         }
     }
     else {
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         interp->current_cont   = NEED_CONTINUATION;
         dest                   = VTABLE_invoke(interp, method_pmc, next);
     }
@@ -23932,11 +24398,15 @@
 
 opcode_t *
 Parrot_callmethodcc_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 83 "src/ops/object.ops"
     opcode_t        *dest;
     opcode_t * const next  = cur_opcode + 3;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = PREG(1);
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, PREG(1));
     interp->current_cont   = NEED_CONTINUATION;
     dest                   = VTABLE_invoke(interp, PREG(2), next);
 
@@ -23945,13 +24415,16 @@
 
 opcode_t *
 Parrot_callmethod_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 97 "src/ops/object.ops"
     PMC      * const object     = PREG(1);
     STRING   * const meth       = SREG(2);
     opcode_t * const next       = cur_opcode + 4;
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
 
     if (PMC_IS_NULL(method_pmc)) {
@@ -23960,7 +24433,8 @@
             VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
     }
     else {
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         interp->current_cont = PREG(3);
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
@@ -23969,13 +24443,16 @@
 
 opcode_t *
 Parrot_callmethod_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 97 "src/ops/object.ops"
     PMC      * const object     = PREG(1);
     STRING   * const meth       = CONST(2)->u.string;
     opcode_t * const next       = cur_opcode + 4;
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
 
     if (PMC_IS_NULL(method_pmc)) {
@@ -23984,7 +24461,8 @@
             VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
     }
     else {
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         interp->current_cont = PREG(3);
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
@@ -23993,14 +24471,18 @@
 
 opcode_t *
 Parrot_callmethod_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 122 "src/ops/object.ops"
     PMC      * const object     = PREG(1);
     PMC      * const method_pmc = PREG(2);
     opcode_t * const next       = cur_opcode + 4;
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = object;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, object);
     interp->current_cont = PREG(3);
     dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     return (opcode_t *)dest;
@@ -24008,13 +24490,16 @@
 
 opcode_t *
 Parrot_tailcallmethod_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 138 "src/ops/object.ops"
     opcode_t * const next       = cur_opcode + 3;
     PMC      * const object     = PREG(1);
     STRING   * const meth       = SREG(2);
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     if (PMC_IS_NULL(method_pmc)) {
         dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
@@ -24024,7 +24509,8 @@
     else {
         interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
         PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
     return (opcode_t *)dest;
@@ -24032,13 +24518,16 @@
 
 opcode_t *
 Parrot_tailcallmethod_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 138 "src/ops/object.ops"
     opcode_t * const next       = cur_opcode + 3;
     PMC      * const object     = PREG(1);
     STRING   * const meth       = CONST(2)->u.string;
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     if (PMC_IS_NULL(method_pmc)) {
         dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
@@ -24048,7 +24537,8 @@
     else {
         interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
         PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
     return (opcode_t *)dest;
@@ -24056,108 +24546,125 @@
 
 opcode_t *
 Parrot_tailcallmethod_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 163 "src/ops/object.ops"
     opcode_t * const next       = cur_opcode + 3;
     PMC      * const object     = PREG(1);
     PMC      * const method_pmc = PREG(2);
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
     PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
 
-    interp->current_object = object;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, object);
     dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     return (opcode_t *)dest;
 }
 
 opcode_t *
 Parrot_addmethod_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/object.ops"
     VTABLE_add_method(interp, PREG(1), SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_addmethod_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/object.ops"
     VTABLE_add_method(interp, PREG(1), CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_can_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 199 "src/ops/object.ops"
     IREG(1) = VTABLE_can(interp, PREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_can_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 199 "src/ops/object.ops"
     IREG(1) = VTABLE_can(interp, PREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_does_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 211 "src/ops/object.ops"
     IREG(1) = SREG(3) ? VTABLE_does(interp, PREG(2), SREG(3)) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_does_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 211 "src/ops/object.ops"
     IREG(1) = CONST(3)->u.string ? VTABLE_does(interp, PREG(2), CONST(3)->u.string) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_does_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 222 "src/ops/object.ops"
     IREG(1) = PREG(3) ? VTABLE_does_pmc(interp, PREG(2), PREG(3)) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_does_i_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 222 "src/ops/object.ops"
     IREG(1) = CONST(3)->u.key ? VTABLE_does_pmc(interp, PREG(2), CONST(3)->u.key) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isa_i_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 235 "src/ops/object.ops"
     IREG(1) = SREG(3) ? VTABLE_isa(interp, PREG(2), SREG(3)) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isa_i_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 235 "src/ops/object.ops"
     IREG(1) = CONST(3)->u.string ? VTABLE_isa(interp, PREG(2), CONST(3)->u.string) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isa_i_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 239 "src/ops/object.ops"
     IREG(1) = PREG(3) ? VTABLE_isa_pmc(interp, PREG(2), PREG(3)) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_isa_i_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 239 "src/ops/object.ops"
     IREG(1) = CONST(3)->u.key ? VTABLE_isa_pmc(interp, PREG(2), CONST(3)->u.key) : 0;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_newclass_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 257 "src/ops/object.ops"
     PMC * const name = Parrot_pmc_new(interp, enum_class_String);
     VTABLE_set_string_native(interp, name, SREG(2));
     PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, name);
@@ -24166,7 +24673,8 @@
 
 opcode_t *
 Parrot_newclass_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 257 "src/ops/object.ops"
     PMC * const name = Parrot_pmc_new(interp, enum_class_String);
     VTABLE_set_string_native(interp, name, CONST(2)->u.string);
     PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, name);
@@ -24175,21 +24683,24 @@
 
 opcode_t *
 Parrot_newclass_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 263 "src/ops/object.ops"
     PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_newclass_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 263 "src/ops/object.ops"
     PREG(1) = Parrot_pmc_new_init(interp, enum_class_Class, CONST(2)->u.key);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_subclass_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 279 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
     opcode_t * const next         = cur_opcode + 3;
 
@@ -24206,7 +24717,8 @@
 
 opcode_t *
 Parrot_subclass_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 279 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
     opcode_t * const next         = cur_opcode + 3;
 
@@ -24223,7 +24735,8 @@
 
 opcode_t *
 Parrot_subclass_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 294 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24240,7 +24753,8 @@
 
 opcode_t *
 Parrot_subclass_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 294 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24257,7 +24771,8 @@
 
 opcode_t *
 Parrot_subclass_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 294 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24274,7 +24789,8 @@
 
 opcode_t *
 Parrot_subclass_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 294 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24291,7 +24807,8 @@
 
 opcode_t *
 Parrot_subclass_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 309 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24308,7 +24825,8 @@
 
 opcode_t *
 Parrot_subclass_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 309 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24325,7 +24843,8 @@
 
 opcode_t *
 Parrot_subclass_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 309 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, PREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24342,7 +24861,8 @@
 
 opcode_t *
 Parrot_subclass_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 309 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class(interp, CONST(2)->u.key);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24359,7 +24879,8 @@
 
 opcode_t *
 Parrot_subclass_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 337 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
     opcode_t * const next         = cur_opcode + 3;
 
@@ -24377,7 +24898,8 @@
 
 opcode_t *
 Parrot_subclass_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 337 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
     opcode_t * const next         = cur_opcode + 3;
 
@@ -24395,7 +24917,8 @@
 
 opcode_t *
 Parrot_subclass_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 353 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24413,7 +24936,8 @@
 
 opcode_t *
 Parrot_subclass_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 353 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24431,7 +24955,8 @@
 
 opcode_t *
 Parrot_subclass_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 353 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24449,7 +24974,8 @@
 
 opcode_t *
 Parrot_subclass_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 353 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24467,7 +24993,8 @@
 
 opcode_t *
 Parrot_subclass_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 369 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24485,7 +25012,8 @@
 
 opcode_t *
 Parrot_subclass_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 369 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24503,7 +25031,8 @@
 
 opcode_t *
 Parrot_subclass_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 369 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, SREG(2));
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24521,7 +25050,8 @@
 
 opcode_t *
 Parrot_subclass_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 369 "src/ops/object.ops"
     PMC      * const parent_class = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
     opcode_t * const next         = cur_opcode + 4;
 
@@ -24539,63 +25069,72 @@
 
 opcode_t *
 Parrot_get_class_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 395 "src/ops/object.ops"
     PREG(1) = Parrot_oo_get_class_str(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_get_class_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 395 "src/ops/object.ops"
     PREG(1) = Parrot_oo_get_class_str(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_get_class_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 399 "src/ops/object.ops"
     PREG(1) = Parrot_oo_get_class(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_get_class_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 399 "src/ops/object.ops"
     PREG(1) = Parrot_oo_get_class(interp, CONST(2)->u.key);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_class_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 411 "src/ops/object.ops"
     PREG(1) = VTABLE_get_class(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_addparent_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 424 "src/ops/object.ops"
     VTABLE_add_parent(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_removeparent_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 434 "src/ops/object.ops"
     VTABLE_remove_parent(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_addrole_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 444 "src/ops/object.ops"
     VTABLE_add_role(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_addattribute_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 454 "src/ops/object.ops"
     STRING * const class_name  = string_from_literal(interp, "Class");
     STRING * const role_name   = string_from_literal(interp, "Role");
 
@@ -24612,7 +25151,8 @@
 
 opcode_t *
 Parrot_addattribute_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 454 "src/ops/object.ops"
     STRING * const class_name  = string_from_literal(interp, "Class");
     STRING * const role_name   = string_from_literal(interp, "Role");
 
@@ -24629,147 +25169,168 @@
 
 opcode_t *
 Parrot_removeattribute_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 474 "src/ops/object.ops"
     VTABLE_remove_attribute(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_removeattribute_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 474 "src/ops/object.ops"
     VTABLE_remove_attribute(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_getattribute_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 491 "src/ops/object.ops"
     PREG(1) = VTABLE_get_attr_str(interp, PREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_getattribute_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 491 "src/ops/object.ops"
     PREG(1) = VTABLE_get_attr_str(interp, PREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_getattribute_p_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 495 "src/ops/object.ops"
     PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), PREG(3), SREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_getattribute_p_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 495 "src/ops/object.ops"
     PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), CONST(3)->u.key, SREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_getattribute_p_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 495 "src/ops/object.ops"
     PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), PREG(3), CONST(4)->u.string);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_getattribute_p_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 495 "src/ops/object.ops"
     PREG(1) = VTABLE_get_attr_keyed(interp, PREG(2), CONST(3)->u.key, CONST(4)->u.string);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_setattribute_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 511 "src/ops/object.ops"
     VTABLE_set_attr_str(interp, PREG(1), SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_setattribute_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 511 "src/ops/object.ops"
     VTABLE_set_attr_str(interp, PREG(1), CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_setattribute_p_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/object.ops"
     VTABLE_set_attr_keyed(interp, PREG(1), PREG(2), SREG(3), PREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_setattribute_p_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/object.ops"
     VTABLE_set_attr_keyed(interp, PREG(1), CONST(2)->u.key, SREG(3), PREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_setattribute_p_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/object.ops"
     VTABLE_set_attr_keyed(interp, PREG(1), PREG(2), CONST(3)->u.string, PREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_setattribute_p_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 515 "src/ops/object.ops"
     VTABLE_set_attr_keyed(interp, PREG(1), CONST(2)->u.key, CONST(3)->u.string, PREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_inspect_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 533 "src/ops/object.ops"
     PREG(1) = VTABLE_inspect(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_inspect_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 533 "src/ops/object.ops"
     PREG(1) = VTABLE_inspect(interp, CONST(2)->u.key);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_inspect_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 537 "src/ops/object.ops"
     PREG(1) = VTABLE_inspect_str(interp, PREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_inspect_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 537 "src/ops/object.ops"
     PREG(1) = VTABLE_inspect_str(interp, CONST(2)->u.key, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_inspect_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 537 "src/ops/object.ops"
     PREG(1) = VTABLE_inspect_str(interp, PREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_inspect_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 537 "src/ops/object.ops"
     PREG(1) = VTABLE_inspect_str(interp, CONST(2)->u.key, CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_new_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 53 "src/ops/pmc.ops"
     STRING * const name   = SREG(2);
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -24780,7 +25341,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             return (opcode_t *)dest;
@@ -24792,7 +25353,8 @@
 
 opcode_t *
 Parrot_new_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 53 "src/ops/pmc.ops"
     STRING * const name   = CONST(2)->u.string;
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -24803,7 +25365,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             return (opcode_t *)dest;
@@ -24815,7 +25377,8 @@
 
 opcode_t *
 Parrot_new_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 73 "src/ops/pmc.ops"
     STRING * const name   = SREG(2);
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -24826,7 +25389,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             return (opcode_t *)dest;
@@ -24838,7 +25401,8 @@
 
 opcode_t *
 Parrot_new_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 73 "src/ops/pmc.ops"
     STRING * const name   = CONST(2)->u.string;
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -24849,7 +25413,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             return (opcode_t *)dest;
@@ -24861,7 +25425,8 @@
 
 opcode_t *
 Parrot_new_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 73 "src/ops/pmc.ops"
     STRING * const name   = SREG(2);
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -24872,7 +25437,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             return (opcode_t *)dest;
@@ -24884,7 +25449,8 @@
 
 opcode_t *
 Parrot_new_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 73 "src/ops/pmc.ops"
     STRING * const name   = CONST(2)->u.string;
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -24895,7 +25461,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             return (opcode_t *)dest;
@@ -24907,7 +25473,8 @@
 
 opcode_t *
 Parrot_new_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 93 "src/ops/pmc.ops"
     PMC * const name_key = PREG(2);
     PMC * const _class   = Parrot_oo_get_class(interp, name_key);
 
@@ -24916,7 +25483,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             return (opcode_t *)dest;
@@ -24928,7 +25495,8 @@
 
 opcode_t *
 Parrot_new_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 93 "src/ops/pmc.ops"
     PMC * const name_key = CONST(2)->u.key;
     PMC * const _class   = Parrot_oo_get_class(interp, name_key);
 
@@ -24937,7 +25505,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             return (opcode_t *)dest;
@@ -24949,7 +25517,8 @@
 
 opcode_t *
 Parrot_new_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 111 "src/ops/pmc.ops"
     PMC * const name_key = PREG(2);
     PMC * const _class   = Parrot_oo_get_class(interp, name_key);
 
@@ -24958,7 +25527,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             return (opcode_t *)dest;
@@ -24970,7 +25539,8 @@
 
 opcode_t *
 Parrot_new_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 111 "src/ops/pmc.ops"
     PMC * const name_key = CONST(2)->u.key;
     PMC * const _class   = Parrot_oo_get_class(interp, name_key);
 
@@ -24979,7 +25549,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             return (opcode_t *)dest;
@@ -24991,7 +25561,8 @@
 
 opcode_t *
 Parrot_new_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 111 "src/ops/pmc.ops"
     PMC * const name_key = PREG(2);
     PMC * const _class   = Parrot_oo_get_class(interp, name_key);
 
@@ -25000,7 +25571,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             return (opcode_t *)dest;
@@ -25012,7 +25583,8 @@
 
 opcode_t *
 Parrot_new_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 111 "src/ops/pmc.ops"
     PMC * const name_key = CONST(2)->u.key;
     PMC * const _class   = Parrot_oo_get_class(interp, name_key);
 
@@ -25021,7 +25593,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             return (opcode_t *)dest;
@@ -25033,7 +25605,8 @@
 
 opcode_t *
 Parrot_root_new_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 144 "src/ops/pmc.ops"
     PMC * const key      = PREG(2);
     PMC * const root_ns  = interp->root_namespace;
     PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
@@ -25044,7 +25617,7 @@
     if (!PMC_IS_NULL(classobj))
         PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         return (opcode_t *)dest;
@@ -25054,7 +25627,8 @@
 
 opcode_t *
 Parrot_root_new_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 144 "src/ops/pmc.ops"
     PMC * const key      = CONST(2)->u.key;
     PMC * const root_ns  = interp->root_namespace;
     PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
@@ -25065,7 +25639,7 @@
     if (!PMC_IS_NULL(classobj))
         PREG(1) = VTABLE_instantiate(interp, classobj, PMCNULL);
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 3,
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         return (opcode_t *)dest;
@@ -25075,7 +25649,8 @@
 
 opcode_t *
 Parrot_root_new_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 162 "src/ops/pmc.ops"
     PMC * const key      = PREG(2);
     PMC * const root_ns  = interp->root_namespace;
     PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
@@ -25086,7 +25661,7 @@
     if (!PMC_IS_NULL(classobj))
         PREG(1) = VTABLE_instantiate(interp, classobj, PREG(3));
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         return (opcode_t *)dest;
@@ -25096,7 +25671,8 @@
 
 opcode_t *
 Parrot_root_new_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 162 "src/ops/pmc.ops"
     PMC * const key      = CONST(2)->u.key;
     PMC * const root_ns  = interp->root_namespace;
     PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
@@ -25107,7 +25683,7 @@
     if (!PMC_IS_NULL(classobj))
         PREG(1) = VTABLE_instantiate(interp, classobj, PREG(3));
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         return (opcode_t *)dest;
@@ -25117,7 +25693,8 @@
 
 opcode_t *
 Parrot_root_new_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 162 "src/ops/pmc.ops"
     PMC * const key      = PREG(2);
     PMC * const root_ns  = interp->root_namespace;
     PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
@@ -25128,7 +25705,7 @@
     if (!PMC_IS_NULL(classobj))
         PREG(1) = VTABLE_instantiate(interp, classobj, CONST(3)->u.key);
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         return (opcode_t *)dest;
@@ -25138,7 +25715,8 @@
 
 opcode_t *
 Parrot_root_new_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 162 "src/ops/pmc.ops"
     PMC * const key      = CONST(2)->u.key;
     PMC * const root_ns  = interp->root_namespace;
     PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, key);
@@ -25149,7 +25727,7 @@
     if (!PMC_IS_NULL(classobj))
         PREG(1) = VTABLE_instantiate(interp, classobj, CONST(3)->u.key);
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, cur_opcode + 4,
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         return (opcode_t *)dest;
@@ -25159,32 +25737,36 @@
 
 opcode_t *
 Parrot_typeof_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 191 "src/ops/pmc.ops"
     SREG(1) = VTABLE_name(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_typeof_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 195 "src/ops/pmc.ops"
     PREG(1) = VTABLE_get_class(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_get_repr_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 207 "src/ops/pmc.ops"
     SREG(1) = VTABLE_get_repr(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_find_method_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 234 "src/ops/pmc.ops"
     opcode_t * const resume = cur_opcode + 4;
     PREG(1) = VTABLE_find_method(interp, PREG(2), SREG(3));
     if (PMC_IS_NULL(PREG(1)) || !VTABLE_defined(interp, PREG(1))) {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, resume,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, resume,
             EXCEPTION_METHOD_NOT_FOUND,
             "Method '%Ss' not found for invocant of class '%Ss'", SREG(3),
             VTABLE_get_string(interp, VTABLE_get_class(interp, PREG(2))));
@@ -25195,11 +25777,12 @@
 
 opcode_t *
 Parrot_find_method_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 234 "src/ops/pmc.ops"
     opcode_t * const resume = cur_opcode + 4;
     PREG(1) = VTABLE_find_method(interp, PREG(2), CONST(3)->u.string);
     if (PMC_IS_NULL(PREG(1)) || !VTABLE_defined(interp, PREG(1))) {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, resume,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, resume,
             EXCEPTION_METHOD_NOT_FOUND,
             "Method '%Ss' not found for invocant of class '%Ss'", CONST(3)->u.string,
             VTABLE_get_string(interp, VTABLE_get_class(interp, PREG(2))));
@@ -25210,427 +25793,488 @@
 
 opcode_t *
 Parrot_defined_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 266 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_defined_i_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 270 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed_int(interp, PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_defined_i_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 270 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed_int(interp, PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_defined_i_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_defined_i_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_defined_keyed(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_exists_i_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 278 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_exists_keyed_int(interp, PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_exists_i_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 278 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0 : VTABLE_exists_keyed_int(interp, PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_exists_i_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0: VTABLE_exists_keyed(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_exists_i_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 282 "src/ops/pmc.ops"
     IREG(1) = PMC_IS_NULL(PREG(2)) ? 0: VTABLE_exists_keyed(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_delete_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/pmc.ops"
     VTABLE_delete_keyed(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_delete_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/pmc.ops"
     VTABLE_delete_keyed(interp, PREG(1), CONST(2)->u.key);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_delete_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 300 "src/ops/pmc.ops"
     VTABLE_delete_keyed_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_delete_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 300 "src/ops/pmc.ops"
     VTABLE_delete_keyed_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_elements_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 312 "src/ops/pmc.ops"
     IREG(1) = VTABLE_elements(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 344 "src/ops/pmc.ops"
     VTABLE_push_integer(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 344 "src/ops/pmc.ops"
     VTABLE_push_integer(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 348 "src/ops/pmc.ops"
     VTABLE_push_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 348 "src/ops/pmc.ops"
     VTABLE_push_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 352 "src/ops/pmc.ops"
     VTABLE_push_string(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 352 "src/ops/pmc.ops"
     VTABLE_push_string(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_push_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 356 "src/ops/pmc.ops"
     VTABLE_push_pmc(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_pop_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 374 "src/ops/pmc.ops"
     IREG(1) = VTABLE_pop_integer(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_pop_n_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/pmc.ops"
     NREG(1) = VTABLE_pop_float(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_pop_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 382 "src/ops/pmc.ops"
     SREG(1) = VTABLE_pop_string(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_pop_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 386 "src/ops/pmc.ops"
     PREG(1) = VTABLE_pop_pmc(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 404 "src/ops/pmc.ops"
     VTABLE_unshift_integer(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 404 "src/ops/pmc.ops"
     VTABLE_unshift_integer(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 408 "src/ops/pmc.ops"
     VTABLE_unshift_float(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 408 "src/ops/pmc.ops"
     VTABLE_unshift_float(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 412 "src/ops/pmc.ops"
     VTABLE_unshift_string(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 412 "src/ops/pmc.ops"
     VTABLE_unshift_string(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_unshift_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 416 "src/ops/pmc.ops"
     VTABLE_unshift_pmc(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_shift_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 434 "src/ops/pmc.ops"
     IREG(1) = VTABLE_shift_integer(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_shift_n_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 438 "src/ops/pmc.ops"
     NREG(1) = VTABLE_shift_float(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_shift_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 442 "src/ops/pmc.ops"
     SREG(1) = VTABLE_shift_string(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_shift_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 446 "src/ops/pmc.ops"
     PREG(1) = VTABLE_shift_pmc(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_splice_p_p_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 458 "src/ops/pmc.ops"
     VTABLE_splice(interp, PREG(1), PREG(2), IREG(3), IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_splice_p_p_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 458 "src/ops/pmc.ops"
     VTABLE_splice(interp, PREG(1), PREG(2), cur_opcode[3], IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_splice_p_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 458 "src/ops/pmc.ops"
     VTABLE_splice(interp, PREG(1), PREG(2), IREG(3), cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_splice_p_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 458 "src/ops/pmc.ops"
     VTABLE_splice(interp, PREG(1), PREG(2), cur_opcode[3], cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_setprop_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 485 "src/ops/pmc.ops"
     VTABLE_setprop(interp, PREG(1), SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_setprop_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 485 "src/ops/pmc.ops"
     VTABLE_setprop(interp, PREG(1), CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_getprop_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 497 "src/ops/pmc.ops"
     PREG(1) = VTABLE_getprop(interp, PREG(3), SREG(2));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_getprop_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 497 "src/ops/pmc.ops"
     PREG(1) = VTABLE_getprop(interp, PREG(3), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_delprop_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 509 "src/ops/pmc.ops"
     VTABLE_delprop(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_delprop_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 509 "src/ops/pmc.ops"
     VTABLE_delprop(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_prophash_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 522 "src/ops/pmc.ops"
     PREG(1) = VTABLE_getprops(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_freeze_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 552 "src/ops/pmc.ops"
     SREG(1) = Parrot_freeze(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_thaw_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 556 "src/ops/pmc.ops"
     PREG(1) = Parrot_thaw(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_thaw_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 556 "src/ops/pmc.ops"
     PREG(1) = Parrot_thaw(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_add_multi_s_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/pmc.ops"
     Parrot_mmd_add_multi_from_long_sig(interp, SREG(1), SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_multi_sc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/pmc.ops"
     Parrot_mmd_add_multi_from_long_sig(interp, CONST(1)->u.string, SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_multi_s_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/pmc.ops"
     Parrot_mmd_add_multi_from_long_sig(interp, SREG(1), CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_add_multi_sc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/pmc.ops"
     Parrot_mmd_add_multi_from_long_sig(interp, CONST(1)->u.string, CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_find_multi_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 597 "src/ops/pmc.ops"
     PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_find_multi_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 597 "src/ops/pmc.ops"
     PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_find_multi_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 597 "src/ops/pmc.ops"
     PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_find_multi_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 597 "src/ops/pmc.ops"
     PREG(1) = Parrot_mmd_find_multi_from_long_sig(interp, CONST(2)->u.string, CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_register_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 630 "src/ops/pmc.ops"
     Parrot_pmc_gc_register(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_unregister_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 634 "src/ops/pmc.ops"
     Parrot_pmc_gc_unregister(interp, PREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_box_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 651 "src/ops/pmc.ops"
     PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
     VTABLE_set_integer_native(interp, PREG(1), IREG(2));
 
@@ -25638,7 +26282,8 @@
 
 opcode_t *
 Parrot_box_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 651 "src/ops/pmc.ops"
     PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
     VTABLE_set_integer_native(interp, PREG(1), cur_opcode[2]);
 
@@ -25646,7 +26291,8 @@
 
 opcode_t *
 Parrot_box_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 656 "src/ops/pmc.ops"
     PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
     VTABLE_set_number_native(interp, PREG(1), NREG(2));
 
@@ -25654,7 +26300,8 @@
 
 opcode_t *
 Parrot_box_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 656 "src/ops/pmc.ops"
     PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
     VTABLE_set_number_native(interp, PREG(1), CONST(2)->u.number);
 
@@ -25662,7 +26309,8 @@
 
 opcode_t *
 Parrot_box_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 661 "src/ops/pmc.ops"
     PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
     VTABLE_set_string_native(interp, PREG(1), SREG(2));
 
@@ -25670,7 +26318,8 @@
 
 opcode_t *
 Parrot_box_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 661 "src/ops/pmc.ops"
     PREG(1) = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
     VTABLE_set_string_native(interp, PREG(1), CONST(2)->u.string);
 
@@ -25678,48 +26327,54 @@
 
 opcode_t *
 Parrot_iter_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 674 "src/ops/pmc.ops"
     PREG(1) = VTABLE_get_iter(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_morph_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 686 "src/ops/pmc.ops"
     VTABLE_morph(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_morph_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 686 "src/ops/pmc.ops"
     VTABLE_morph(interp, PREG(1), CONST(2)->u.key);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_clone_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 28 "src/ops/set.ops"
     /* cloning a NULL STRING produces an empty STRING; TT #964 */
     SREG(1) = SREG(2)
-       ? Parrot_str_copy(interp, SREG(2))
+       ? SREG(2)
        : Parrot_str_new(interp, NULL, 0);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_clone_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 28 "src/ops/set.ops"
     /* cloning a NULL STRING produces an empty STRING; TT #964 */
     SREG(1) = CONST(2)->u.string
-       ? Parrot_str_copy(interp, CONST(2)->u.string)
+       ? CONST(2)->u.string
        : Parrot_str_new(interp, NULL, 0);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_exchange_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 51 "src/ops/set.ops"
     const INTVAL temp = IREG(1);
     IREG(1) = IREG(2);
     IREG(2) = temp;
@@ -25728,7 +26383,8 @@
 
 opcode_t *
 Parrot_exchange_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 57 "src/ops/set.ops"
     PMC * const temp = PREG(1);
     PREG(1) = PREG(2);
     PREG(2) = temp;
@@ -25737,7 +26393,8 @@
 
 opcode_t *
 Parrot_exchange_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 63 "src/ops/set.ops"
     FLOATVAL temp = NREG(1);
     NREG(1) = NREG(2);
     NREG(2) = temp;
@@ -25746,7 +26403,8 @@
 
 opcode_t *
 Parrot_exchange_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 69 "src/ops/set.ops"
     STRING * const temp = SREG(1);
     SREG(1) = SREG(2);
     SREG(2) = temp;
@@ -25755,288 +26413,328 @@
 
 opcode_t *
 Parrot_set_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 121 "src/ops/set.ops"
     IREG(1) = IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 121 "src/ops/set.ops"
     IREG(1) = cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 125 "src/ops/set.ops"
     IREG(1) = (INTVAL)(NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_i_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 125 "src/ops/set.ops"
     IREG(1) = (INTVAL)(CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 129 "src/ops/set.ops"
     IREG(1) = Parrot_str_to_int(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 129 "src/ops/set.ops"
     IREG(1) = Parrot_str_to_int(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 133 "src/ops/set.ops"
     NREG(1) = NREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 133 "src/ops/set.ops"
     NREG(1) = CONST(2)->u.number;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 137 "src/ops/set.ops"
     NREG(1) = (FLOATVAL)IREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 137 "src/ops/set.ops"
     NREG(1) = (FLOATVAL)cur_opcode[2];
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 141 "src/ops/set.ops"
     NREG(1) = Parrot_str_to_num(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 141 "src/ops/set.ops"
     NREG(1) = Parrot_str_to_num(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_n_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 145 "src/ops/set.ops"
     NREG(1) = VTABLE_get_number(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 149 "src/ops/set.ops"
     SREG(1) = VTABLE_get_string(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 153 "src/ops/set.ops"
     SREG(1) = SREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_copy(interp, CONST(2)->u.string);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 157 "src/ops/set.ops"
+    SREG(1) = CONST(2)->u.string;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 161 "src/ops/set.ops"
     SREG(1) = Parrot_str_from_int(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 161 "src/ops/set.ops"
     SREG(1) = Parrot_str_from_int(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 165 "src/ops/set.ops"
     SREG(1) = Parrot_str_from_num(interp, NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_s_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 165 "src/ops/set.ops"
     SREG(1) = Parrot_str_from_num(interp, CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 169 "src/ops/set.ops"
     PREG(1) = CONST(2)->u.key;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 173 "src/ops/set.ops"
     PREG(1) = PREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 177 "src/ops/set.ops"
     VTABLE_set_integer_native(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 177 "src/ops/set.ops"
     VTABLE_set_integer_native(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 181 "src/ops/set.ops"
     VTABLE_set_number_native(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 181 "src/ops/set.ops"
     VTABLE_set_number_native(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 185 "src/ops/set.ops"
     VTABLE_set_string_native(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    VTABLE_set_string_native(interp, PREG(1),
-        Parrot_str_copy(interp, CONST(2)->u.string));
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 189 "src/ops/set.ops"
+    VTABLE_set_string_native(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_set_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 192 "src/ops/set.ops"
     IREG(1) = VTABLE_get_integer(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 233 "src/ops/set.ops"
     VTABLE_assign_pmc(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 237 "src/ops/set.ops"
     VTABLE_set_integer_native(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 237 "src/ops/set.ops"
     VTABLE_set_integer_native(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 241 "src/ops/set.ops"
     VTABLE_set_number_native(interp, PREG(1), NREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 241 "src/ops/set.ops"
     VTABLE_set_number_native(interp, PREG(1), CONST(2)->u.number);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 245 "src/ops/set.ops"
     VTABLE_assign_string_native(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 245 "src/ops/set.ops"
     VTABLE_assign_string_native(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_set(interp, SREG(1), SREG(2));
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 249 "src/ops/set.ops"
+    SREG(1) = SREG(2);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_assign_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_set(interp, SREG(1), CONST(2)->u.string);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 249 "src/ops/set.ops"
+    SREG(1) = CONST(2)->u.string;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_setref_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 253 "src/ops/set.ops"
     VTABLE_set_pmc(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_deref_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 257 "src/ops/set.ops"
     PREG(1) = VTABLE_get_pmc(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_setp_ind_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 275 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_PMC(interp, IREG(1)) = PREG(2);
@@ -26045,7 +26743,8 @@
 
 opcode_t *
 Parrot_setp_ind_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 275 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_PMC(interp, cur_opcode[1]) = PREG(2);
@@ -26054,7 +26753,8 @@
 
 opcode_t *
 Parrot_setn_ind_i_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 289 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_NUM(interp, IREG(1)) = NREG(2);
@@ -26063,7 +26763,8 @@
 
 opcode_t *
 Parrot_setn_ind_ic_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 289 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_NUM(interp, cur_opcode[1]) = NREG(2);
@@ -26072,7 +26773,8 @@
 
 opcode_t *
 Parrot_setn_ind_i_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 289 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_NUM(interp, IREG(1)) = CONST(2)->u.number;
@@ -26081,7 +26783,8 @@
 
 opcode_t *
 Parrot_setn_ind_ic_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 289 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_NUM(interp, cur_opcode[1]) = CONST(2)->u.number;
@@ -26090,7 +26793,8 @@
 
 opcode_t *
 Parrot_sets_ind_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 303 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_STR(interp, IREG(1)) = SREG(2);
@@ -26099,7 +26803,8 @@
 
 opcode_t *
 Parrot_sets_ind_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 303 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_STR(interp, cur_opcode[1]) = SREG(2);
@@ -26108,7 +26813,8 @@
 
 opcode_t *
 Parrot_sets_ind_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 303 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_STR(interp, IREG(1)) = CONST(2)->u.string;
@@ -26117,7 +26823,8 @@
 
 opcode_t *
 Parrot_sets_ind_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 303 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_STR(interp, cur_opcode[1]) = CONST(2)->u.string;
@@ -26126,7 +26833,8 @@
 
 opcode_t *
 Parrot_seti_ind_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_INT(interp, IREG(1)) = IREG(2);
@@ -26135,7 +26843,8 @@
 
 opcode_t *
 Parrot_seti_ind_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_INT(interp, cur_opcode[1]) = IREG(2);
@@ -26144,7 +26853,8 @@
 
 opcode_t *
 Parrot_seti_ind_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/set.ops"
     if (IREG(1) < 0 || IREG(1) >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_INT(interp, IREG(1)) = cur_opcode[2];
@@ -26153,7 +26863,8 @@
 
 opcode_t *
 Parrot_seti_ind_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/set.ops"
     if (cur_opcode[1] < 0 || cur_opcode[1] >= NUM_REGISTERS)
         PANIC(interp, "Out of bound register access");
     REG_INT(interp, cur_opcode[1]) = cur_opcode[2];
@@ -26162,339 +26873,387 @@
 
 opcode_t *
 Parrot_set_p_ki_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/set.ops"
     VTABLE_set_integer_keyed_int(interp, PREG(1), IREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/set.ops"
     VTABLE_set_integer_keyed_int(interp, PREG(1), cur_opcode[2], IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_ki_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/set.ops"
     VTABLE_set_integer_keyed_int(interp, PREG(1), IREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/set.ops"
     VTABLE_set_integer_keyed_int(interp, PREG(1), cur_opcode[2], cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_ki_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 347 "src/ops/set.ops"
     VTABLE_set_number_keyed_int(interp, PREG(1), IREG(2), NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 347 "src/ops/set.ops"
     VTABLE_set_number_keyed_int(interp, PREG(1), cur_opcode[2], NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_ki_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 347 "src/ops/set.ops"
     VTABLE_set_number_keyed_int(interp, PREG(1), IREG(2), CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 347 "src/ops/set.ops"
     VTABLE_set_number_keyed_int(interp, PREG(1), cur_opcode[2], CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_ki_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 351 "src/ops/set.ops"
     VTABLE_set_string_keyed_int(interp, PREG(1), IREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 351 "src/ops/set.ops"
     VTABLE_set_string_keyed_int(interp, PREG(1), cur_opcode[2], SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_ki_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 351 "src/ops/set.ops"
     VTABLE_set_string_keyed_int(interp, PREG(1), IREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 351 "src/ops/set.ops"
     VTABLE_set_string_keyed_int(interp, PREG(1), cur_opcode[2], CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_ki_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 355 "src/ops/set.ops"
     VTABLE_set_pmc_keyed_int(interp, PREG(1), IREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 355 "src/ops/set.ops"
     VTABLE_set_pmc_keyed_int(interp, PREG(1), cur_opcode[2], PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_i_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 379 "src/ops/set.ops"
     IREG(1) = VTABLE_get_integer_keyed_int(interp, PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_i_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 379 "src/ops/set.ops"
     IREG(1) = VTABLE_get_integer_keyed_int(interp, PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_n_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 383 "src/ops/set.ops"
     NREG(1) = VTABLE_get_number_keyed_int(interp, PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_n_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 383 "src/ops/set.ops"
     NREG(1) = VTABLE_get_number_keyed_int(interp, PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_s_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 387 "src/ops/set.ops"
     SREG(1) = VTABLE_get_string_keyed_int(interp, PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_s_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 387 "src/ops/set.ops"
     SREG(1) = VTABLE_get_string_keyed_int(interp, PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_p_ki(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 391 "src/ops/set.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_p_kic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 391 "src/ops/set.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 415 "src/ops/set.ops"
     VTABLE_set_integer_keyed(interp, PREG(1), PREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 415 "src/ops/set.ops"
     VTABLE_set_integer_keyed(interp, PREG(1), CONST(2)->u.key, IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 415 "src/ops/set.ops"
     VTABLE_set_integer_keyed(interp, PREG(1), PREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 415 "src/ops/set.ops"
     VTABLE_set_integer_keyed(interp, PREG(1), CONST(2)->u.key, cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 419 "src/ops/set.ops"
     VTABLE_set_number_keyed(interp, PREG(1), PREG(2), NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 419 "src/ops/set.ops"
     VTABLE_set_number_keyed(interp, PREG(1), CONST(2)->u.key, NREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 419 "src/ops/set.ops"
     VTABLE_set_number_keyed(interp, PREG(1), PREG(2), CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 419 "src/ops/set.ops"
     VTABLE_set_number_keyed(interp, PREG(1), CONST(2)->u.key, CONST(3)->u.number);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 423 "src/ops/set.ops"
     VTABLE_set_string_keyed(interp, PREG(1), PREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 423 "src/ops/set.ops"
     VTABLE_set_string_keyed(interp, PREG(1), CONST(2)->u.key, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 423 "src/ops/set.ops"
     VTABLE_set_string_keyed(interp, PREG(1), PREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 423 "src/ops/set.ops"
     VTABLE_set_string_keyed(interp, PREG(1), CONST(2)->u.key, CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_k_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 427 "src/ops/set.ops"
     VTABLE_set_pmc_keyed(interp, PREG(1), PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_kc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 427 "src/ops/set.ops"
     VTABLE_set_pmc_keyed(interp, PREG(1), CONST(2)->u.key, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_i_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 451 "src/ops/set.ops"
     IREG(1) = VTABLE_get_integer_keyed(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_i_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 451 "src/ops/set.ops"
     IREG(1) = VTABLE_get_integer_keyed(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_n_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 455 "src/ops/set.ops"
     NREG(1) = VTABLE_get_number_keyed(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_n_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 455 "src/ops/set.ops"
     NREG(1) = VTABLE_get_number_keyed(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_s_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 459 "src/ops/set.ops"
     SREG(1) = VTABLE_get_string_keyed(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_s_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 459 "src/ops/set.ops"
     SREG(1) = VTABLE_get_string_keyed(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_p_k(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 463 "src/ops/set.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_set_p_p_kc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 463 "src/ops/set.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_clone_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 473 "src/ops/set.ops"
     PREG(1) = VTABLE_clone(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_clone_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 483 "src/ops/set.ops"
     PREG(1) = VTABLE_clone_pmc(interp, PREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_clone_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 483 "src/ops/set.ops"
     PREG(1) = VTABLE_clone_pmc(interp, PREG(2), CONST(3)->u.key);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_copy_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 493 "src/ops/set.ops"
     if (PMC_IS_NULL(PREG(1))) {
-        opcode_t *dest = cur_opcode + 3;
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const dest = cur_opcode + 3;
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
                 EXCEPTION_NULL_REG_ACCESS, "Null PMC in copy");
         return (opcode_t *)handler;
     }
@@ -26513,7 +27272,6 @@
         /* don't let the clone's destruction destroy the destination's data */
         PObj_custom_destroy_CLEAR(clone);
         PMC_data(clone)        = NULL;
-        PMC_sync(clone)        = NULL;
         PMC_metadata(clone)    = NULL;
 
         /* Restore metadata. */
@@ -26531,105 +27289,120 @@
 
 opcode_t *
 Parrot_null_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = NULL;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 561 "src/ops/set.ops"
+    SREG(1) = STRINGNULL;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_null_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 565 "src/ops/set.ops"
     IREG(1) = 0;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_null_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 569 "src/ops/set.ops"
     PREG(1) = PMCNULL;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_null_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/set.ops"
     NREG(1) = 0;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_cleari(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 595 "src/ops/set.ops"
     Parrot_clear_i(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_clearn(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 599 "src/ops/set.ops"
     Parrot_clear_n(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_clears(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 603 "src/ops/set.ops"
     Parrot_clear_s(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_clearp(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 607 "src/ops/set.ops"
     Parrot_clear_p(interp);
 
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
 Parrot_ord_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 40 "src/ops/string.ops"
     IREG(1) = string_ord(interp, SREG(2), 0);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_ord_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 40 "src/ops/string.ops"
     IREG(1) = string_ord(interp, CONST(2)->u.string, 0);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_ord_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 44 "src/ops/string.ops"
     IREG(1) = string_ord(interp, SREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_ord_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 44 "src/ops/string.ops"
     IREG(1) = string_ord(interp, CONST(2)->u.string, IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_ord_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 44 "src/ops/string.ops"
     IREG(1) = string_ord(interp, SREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_ord_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 44 "src/ops/string.ops"
     IREG(1) = string_ord(interp, CONST(2)->u.string, cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_chr_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/string.ops"
     STRING * const s = string_chr(interp, (UINTVAL)IREG(2));
     SREG(1) = s;
 
@@ -26637,134 +27410,141 @@
 
 opcode_t *
 Parrot_chr_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 55 "src/ops/string.ops"
     STRING * const s = string_chr(interp, (UINTVAL)cur_opcode[2]);
     SREG(1) = s;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_chopn_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_chopn_inplace(interp, SREG(1), IREG(2));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_chopn_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_chopn_inplace(interp, SREG(1), cur_opcode[2]);
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_chopn_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 69 "src/ops/string.ops"
     SREG(1) = Parrot_str_chopn(interp, SREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_chopn_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 69 "src/ops/string.ops"
     SREG(1) = Parrot_str_chopn(interp, CONST(2)->u.string, IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_chopn_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 69 "src/ops/string.ops"
     SREG(1) = Parrot_str_chopn(interp, SREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_chopn_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 69 "src/ops/string.ops"
     SREG(1) = Parrot_str_chopn(interp, CONST(2)->u.string, cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_concat_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_append(interp, SREG(1), SREG(2));
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 92 "src/ops/string.ops"
+INTVAL unused = PARROT_WARNINGS_test(interp,PARROT_WARNINGS_DEPRECATED_FLAG) &&
+  fprintf(stderr,"Warning: instruction 'concat' is deprecated\n");
+    SREG(1) = Parrot_str_concat(interp, SREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_concat_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_append(interp, SREG(1), CONST(2)->u.string);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 92 "src/ops/string.ops"
+INTVAL unused = PARROT_WARNINGS_test(interp,PARROT_WARNINGS_DEPRECATED_FLAG) &&
+  fprintf(stderr,"Warning: instruction 'concat' is deprecated\n");
+    SREG(1) = Parrot_str_concat(interp, SREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_concat_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 96 "src/ops/string.ops"
     VTABLE_i_concatenate(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_concat_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 100 "src/ops/string.ops"
     VTABLE_i_concatenate_str(interp, PREG(1), SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_concat_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 100 "src/ops/string.ops"
     VTABLE_i_concatenate_str(interp, PREG(1), CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_concat_s_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_concat(interp, SREG(2), SREG(3), 1);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 104 "src/ops/string.ops"
+    SREG(1) = Parrot_str_concat(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_concat_s_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_concat(interp, CONST(2)->u.string, SREG(3), 1);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 104 "src/ops/string.ops"
+    SREG(1) = Parrot_str_concat(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_concat_s_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_concat(interp, SREG(2), CONST(3)->u.string, 1);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 104 "src/ops/string.ops"
+    SREG(1) = Parrot_str_concat(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_concat_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 108 "src/ops/string.ops"
     PREG(1) = VTABLE_concatenate_str(interp, PREG(2), SREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_concat_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 108 "src/ops/string.ops"
     PREG(1) = VTABLE_concatenate_str(interp, PREG(2), CONST(3)->u.string, PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_concat_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 112 "src/ops/string.ops"
     PREG(1) = VTABLE_concatenate(interp, PREG(2), PREG(3), PREG(1));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_repeat_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 127 "src/ops/string.ops"
     if (IREG(3) < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26777,7 +27557,8 @@
 
 opcode_t *
 Parrot_repeat_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 127 "src/ops/string.ops"
     if (IREG(3) < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26790,7 +27571,8 @@
 
 opcode_t *
 Parrot_repeat_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 127 "src/ops/string.ops"
     if (cur_opcode[3] < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26803,7 +27585,8 @@
 
 opcode_t *
 Parrot_repeat_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 127 "src/ops/string.ops"
     if (cur_opcode[3] < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26816,7 +27599,8 @@
 
 opcode_t *
 Parrot_repeat_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 137 "src/ops/string.ops"
     if (IREG(3) < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26829,7 +27613,8 @@
 
 opcode_t *
 Parrot_repeat_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 137 "src/ops/string.ops"
     if (cur_opcode[3] < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26842,7 +27627,8 @@
 
 opcode_t *
 Parrot_repeat_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 147 "src/ops/string.ops"
     if (VTABLE_get_integer(interp, PREG(3)) < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_NEG_REPEAT,
@@ -26855,45 +27641,51 @@
 
 opcode_t *
 Parrot_repeat_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 166 "src/ops/string.ops"
     VTABLE_i_repeat_int(interp, PREG(1), IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_repeat_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 166 "src/ops/string.ops"
     VTABLE_i_repeat_int(interp, PREG(1), cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_repeat_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/string.ops"
     VTABLE_i_repeat(interp, PREG(1), PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_length_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/string.ops"
     IREG(1) = SREG(2) ? Parrot_str_byte_length(interp, SREG(2)) : 0;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_length_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/string.ops"
     IREG(1) = CONST(2)->u.string ? Parrot_str_byte_length(interp, CONST(2)->u.string) : 0;
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_bytelength_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 191 "src/ops/string.ops"
     UINTVAL n;
-    STRING * const s = SREG(2);
-    if (!s)
+    const STRING * const s = SREG(2);
+    if (STRING_IS_NULL(s))
         n = 0;
     else {
         n = s->bufused;
@@ -26905,10 +27697,11 @@
 
 opcode_t *
 Parrot_bytelength_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 191 "src/ops/string.ops"
     UINTVAL n;
-    STRING * const s = CONST(2)->u.string;
-    if (!s)
+    const STRING * const s = CONST(2)->u.string;
+    if (STRING_IS_NULL(s))
         n = 0;
     else {
         n = s->bufused;
@@ -26920,347 +27713,396 @@
 
 opcode_t *
 Parrot_pin_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 214 "src/ops/string.ops"
     Parrot_str_pin(interp, SREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_unpin_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 226 "src/ops/string.ops"
     Parrot_str_unpin(interp, SREG(1));
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_substr_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 259 "src/ops/string.ops"
     const INTVAL len = Parrot_str_byte_length(interp, SREG(2));
-    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), len, &SREG(1), 0);
+    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), len);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_substr_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 259 "src/ops/string.ops"
     const INTVAL len = Parrot_str_byte_length(interp, CONST(2)->u.string);
-    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), len, &SREG(1), 0);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), len);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_substr_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 259 "src/ops/string.ops"
     const INTVAL len = Parrot_str_byte_length(interp, SREG(2));
-    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], len, &SREG(1), 0);
+    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], len);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_substr_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 259 "src/ops/string.ops"
     const INTVAL len = Parrot_str_byte_length(interp, CONST(2)->u.string);
-    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], len, &SREG(1), 0);
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], len);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_substr_s_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), IREG(4), &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), IREG(4), &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], IREG(4), &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], IREG(4), &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), cur_opcode[4], &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, SREG(2), IREG(3), cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), cur_opcode[4], &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, IREG(3), cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], cur_opcode[4], &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, SREG(2), cur_opcode[3], cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_substr_s_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4], &SREG(1), 0);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 264 "src/ops/string.ops"
+    SREG(1) = Parrot_str_substr(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
-Parrot_substr_s_s_i_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), IREG(4), SREG(5), &SREG(1));
+Parrot_substr_s_p_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/string.ops"
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), IREG(3), IREG(4));
 
-return (opcode_t *)cur_opcode + 6;}
+return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
-Parrot_substr_s_s_ic_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], IREG(4), SREG(5), &SREG(1));
+Parrot_substr_s_p_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/string.ops"
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), cur_opcode[3], IREG(4));
 
-return (opcode_t *)cur_opcode + 6;}
+return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
-Parrot_substr_s_s_i_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), cur_opcode[4], SREG(5), &SREG(1));
+Parrot_substr_s_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/string.ops"
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), IREG(3), cur_opcode[4]);
 
-return (opcode_t *)cur_opcode + 6;}
+return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
-Parrot_substr_s_s_ic_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], cur_opcode[4], SREG(5), &SREG(1));
+Parrot_substr_s_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 268 "src/ops/string.ops"
+    SREG(1) = VTABLE_substr_str(interp, PREG(2), cur_opcode[3], cur_opcode[4]);
 
-return (opcode_t *)cur_opcode + 6;}
+return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
-Parrot_substr_s_s_i_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), IREG(4), CONST(5)->u.string, &SREG(1));
+Parrot_replace_s_s_i_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), IREG(4), SREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_s_ic_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], IREG(4), CONST(5)->u.string, &SREG(1));
+Parrot_replace_s_sc_i_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), IREG(4), SREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_s_i_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), cur_opcode[4], CONST(5)->u.string, &SREG(1));
+Parrot_replace_s_s_ic_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], IREG(4), SREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_s_ic_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], cur_opcode[4], CONST(5)->u.string, &SREG(1));
+Parrot_replace_s_sc_ic_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], IREG(4), SREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_i_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), IREG(2), IREG(3), SREG(4), NULL);
+Parrot_replace_s_s_i_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), cur_opcode[4], SREG(5));
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_ic_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), cur_opcode[2], IREG(3), SREG(4), NULL);
+Parrot_replace_s_sc_i_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), cur_opcode[4], SREG(5));
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_i_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), IREG(2), cur_opcode[3], SREG(4), NULL);
+Parrot_replace_s_s_ic_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], cur_opcode[4], SREG(5));
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_ic_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), cur_opcode[2], cur_opcode[3], SREG(4), NULL);
+Parrot_replace_s_sc_ic_ic_s(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4], SREG(5));
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_i_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), IREG(2), IREG(3), CONST(4)->u.string, NULL);
+Parrot_replace_s_s_i_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), IREG(4), CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_ic_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), cur_opcode[2], IREG(3), CONST(4)->u.string, NULL);
+Parrot_replace_s_sc_i_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), IREG(4), CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_i_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), IREG(2), cur_opcode[3], CONST(4)->u.string, NULL);
+Parrot_replace_s_s_ic_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], IREG(4), CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_ic_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    (void)Parrot_str_replace(interp, SREG(1), cur_opcode[2], cur_opcode[3], CONST(4)->u.string, NULL);
+Parrot_replace_s_sc_ic_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], IREG(4), CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_p_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = VTABLE_substr_str(interp, PREG(2), IREG(3), IREG(4));
+Parrot_replace_s_s_i_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), IREG(3), cur_opcode[4], CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_p_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = VTABLE_substr_str(interp, PREG(2), cur_opcode[3], IREG(4));
+Parrot_replace_s_sc_i_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, IREG(3), cur_opcode[4], CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_p_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = VTABLE_substr_str(interp, PREG(2), IREG(3), cur_opcode[4]);
+Parrot_replace_s_s_ic_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, SREG(2), cur_opcode[3], cur_opcode[4], CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
-Parrot_substr_s_p_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = VTABLE_substr_str(interp, PREG(2), cur_opcode[3], cur_opcode[4]);
+Parrot_replace_s_sc_ic_ic_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 272 "src/ops/string.ops"
+    SREG(1) = Parrot_str_replace(interp, CONST(2)->u.string, cur_opcode[3], cur_opcode[4], CONST(5)->u.string);
 
-return (opcode_t *)cur_opcode + 5;}
+return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_index_i_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/string.ops"
     IREG(1) = (SREG(2) && SREG(3)) ? Parrot_str_find_index(interp, SREG(2), SREG(3), 0) : -1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_index_i_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/string.ops"
     IREG(1) = (CONST(2)->u.string && SREG(3)) ? Parrot_str_find_index(interp, CONST(2)->u.string, SREG(3), 0) : -1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_index_i_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/string.ops"
     IREG(1) = (SREG(2) && CONST(3)->u.string) ? Parrot_str_find_index(interp, SREG(2), CONST(3)->u.string, 0) : -1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_index_i_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 292 "src/ops/string.ops"
     IREG(1) = (CONST(2)->u.string && CONST(3)->u.string) ? Parrot_str_find_index(interp, CONST(2)->u.string, CONST(3)->u.string, 0) : -1;
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_index_i_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (SREG(2) && SREG(3)) ? Parrot_str_find_index(interp, SREG(2), SREG(3), IREG(4)) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_sc_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (CONST(2)->u.string && SREG(3)) ? Parrot_str_find_index(interp, CONST(2)->u.string, SREG(3), IREG(4)) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (SREG(2) && CONST(3)->u.string) ? Parrot_str_find_index(interp, SREG(2), CONST(3)->u.string, IREG(4)) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_sc_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (CONST(2)->u.string && CONST(3)->u.string) ? Parrot_str_find_index(interp, CONST(2)->u.string, CONST(3)->u.string, IREG(4)) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (SREG(2) && SREG(3)) ? Parrot_str_find_index(interp, SREG(2), SREG(3), cur_opcode[4]) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_sc_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (CONST(2)->u.string && SREG(3)) ? Parrot_str_find_index(interp, CONST(2)->u.string, SREG(3), cur_opcode[4]) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (SREG(2) && CONST(3)->u.string) ? Parrot_str_find_index(interp, SREG(2), CONST(3)->u.string, cur_opcode[4]) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_index_i_sc_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 296 "src/ops/string.ops"
     IREG(1) = (CONST(2)->u.string && CONST(3)->u.string) ? Parrot_str_find_index(interp, CONST(2)->u.string, CONST(3)->u.string, cur_opcode[4]) : -1;
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_sprintf_s_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 316 "src/ops/string.ops"
     SREG(1)=Parrot_psprintf(interp, SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sprintf_s_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 316 "src/ops/string.ops"
     SREG(1)=Parrot_psprintf(interp, CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_sprintf_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 320 "src/ops/string.ops"
     VTABLE_set_string_native(interp, PREG(1),
         Parrot_psprintf(interp, VTABLE_get_string(interp, PREG(2)), PREG(3)));
 
@@ -27268,28 +28110,32 @@
 
 opcode_t *
 Parrot_new_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 334 "src/ops/string.ops"
     SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_new_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 338 "src/ops/string.ops"
     SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_new_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 338 "src/ops/string.ops"
     SREG(1) = Parrot_str_new_noinit(interp, enum_stringrep_one, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_stringinfo_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 368 "src/ops/string.ops"
     if (SREG(2) == NULL)
         IREG(1) = 0;
     else {
@@ -27326,7 +28172,8 @@
 
 opcode_t *
 Parrot_stringinfo_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 368 "src/ops/string.ops"
     if (CONST(2)->u.string == NULL)
         IREG(1) = 0;
     else {
@@ -27363,7 +28210,8 @@
 
 opcode_t *
 Parrot_stringinfo_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 368 "src/ops/string.ops"
     if (SREG(2) == NULL)
         IREG(1) = 0;
     else {
@@ -27400,7 +28248,8 @@
 
 opcode_t *
 Parrot_stringinfo_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 368 "src/ops/string.ops"
     if (CONST(2)->u.string == NULL)
         IREG(1) = 0;
     else {
@@ -27437,142 +28286,136 @@
 
 opcode_t *
 Parrot_upcase_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 409 "src/ops/string.ops"
     SREG(1) = Parrot_str_upcase(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_upcase_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 409 "src/ops/string.ops"
     SREG(1) = Parrot_str_upcase(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_upcase_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_upcase_inplace(interp, SREG(1));
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
 Parrot_downcase_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 419 "src/ops/string.ops"
     SREG(1) = Parrot_str_downcase(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_downcase_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 419 "src/ops/string.ops"
     SREG(1) = Parrot_str_downcase(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_downcase_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_downcase_inplace(interp, SREG(1));
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
 Parrot_titlecase_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 429 "src/ops/string.ops"
     SREG(1) = Parrot_str_titlecase(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_titlecase_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 429 "src/ops/string.ops"
     SREG(1) = Parrot_str_titlecase(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_titlecase_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    Parrot_str_titlecase_inplace(interp, SREG(1));
-
-return (opcode_t *)cur_opcode + 2;}
-
-opcode_t *
 Parrot_join_s_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 451 "src/ops/string.ops"
     SREG(1) = Parrot_str_join(interp, SREG(2), PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_join_s_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 451 "src/ops/string.ops"
     SREG(1) = Parrot_str_join(interp, CONST(2)->u.string, PREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_split_p_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 455 "src/ops/string.ops"
     PREG(1) = Parrot_str_split(interp, SREG(2), SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_split_p_sc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 455 "src/ops/string.ops"
     PREG(1) = Parrot_str_split(interp, CONST(2)->u.string, SREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_split_p_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 455 "src/ops/string.ops"
     PREG(1) = Parrot_str_split(interp, SREG(2), CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_split_p_sc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 455 "src/ops/string.ops"
     PREG(1) = Parrot_str_split(interp, CONST(2)->u.string, CONST(3)->u.string);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_charset_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 482 "src/ops/string.ops"
     IREG(1) = Parrot_charset_number_of_str(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_charset_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 482 "src/ops/string.ops"
     IREG(1) = Parrot_charset_number_of_str(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_charsetname_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const name = Parrot_charset_name(interp, IREG(2));
-    SREG(1) = name ? Parrot_str_copy(interp, name) : NULL;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 486 "src/ops/string.ops"
+    SREG(1) = Parrot_charset_name(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_charsetname_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const name = Parrot_charset_name(interp, cur_opcode[2]);
-    SREG(1) = name ? Parrot_str_copy(interp, name) : NULL;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 486 "src/ops/string.ops"
+    SREG(1) = Parrot_charset_name(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_find_charset_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 490 "src/ops/string.ops"
     const INTVAL n = Parrot_charset_number(interp, SREG(2));
     if (n < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
@@ -27586,7 +28429,8 @@
 
 opcode_t *
 Parrot_find_charset_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 490 "src/ops/string.ops"
     const INTVAL n = Parrot_charset_number(interp, CONST(2)->u.string);
     if (n < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
@@ -27599,84 +28443,73 @@
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_trans_charset_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_change_charset(interp, SREG(1), IREG(2), NULL);
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_trans_charset_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_change_charset(interp, SREG(1), cur_opcode[2], NULL);
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_trans_charset_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_charset(interp, SREG(2), IREG(3), dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 501 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_charset(interp, SREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_trans_charset_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_charset(interp, CONST(2)->u.string, IREG(3), dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 501 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_charset(interp, CONST(2)->u.string, IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_trans_charset_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_charset(interp, SREG(2), cur_opcode[3], dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 501 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_charset(interp, SREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_trans_charset_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING *dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_charset(interp, CONST(2)->u.string, cur_opcode[3], dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 501 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_charset(interp, CONST(2)->u.string, cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_encoding_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 528 "src/ops/string.ops"
     IREG(1) = Parrot_encoding_number_of_str(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_encoding_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 528 "src/ops/string.ops"
     IREG(1) = Parrot_encoding_number_of_str(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_encodingname_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const name = Parrot_encoding_name(interp, IREG(2));
-    SREG(1) = name ? Parrot_str_copy(interp, name) : NULL;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 532 "src/ops/string.ops"
+    SREG(1) = Parrot_encoding_name(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_encodingname_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const name = Parrot_encoding_name(interp, cur_opcode[2]);
-    SREG(1) = name ? Parrot_str_copy(interp, name) : NULL;
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 532 "src/ops/string.ops"
+    SREG(1) = Parrot_encoding_name(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_find_encoding_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 536 "src/ops/string.ops"
     const INTVAL n = Parrot_encoding_number(interp, SREG(2));
     if (n < 0) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
@@ -27690,7 +28523,8 @@
 
 opcode_t *
 Parrot_find_encoding_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 536 "src/ops/string.ops"
     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,
@@ -27703,383 +28537,417 @@
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
-Parrot_trans_encoding_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_change_encoding(interp, SREG(1), IREG(2), NULL);
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_trans_encoding_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    SREG(1) = Parrot_str_change_encoding(interp, SREG(1), cur_opcode[2], NULL);
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_trans_encoding_s_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_encoding(interp, SREG(2), IREG(3), dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 547 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_encoding(interp, SREG(2), IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_trans_encoding_s_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_encoding(interp, CONST(2)->u.string, IREG(3), dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 547 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_encoding(interp, CONST(2)->u.string, IREG(3));
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_trans_encoding_s_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_encoding(interp, SREG(2), cur_opcode[3], dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 547 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_encoding(interp, SREG(2), cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_trans_encoding_s_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    STRING * const dest = Parrot_gc_new_string_header(interp, 0);
-    SREG(1) = Parrot_str_change_encoding(interp, CONST(2)->u.string, cur_opcode[3], dest);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 547 "src/ops/string.ops"
+    SREG(1) = Parrot_str_change_encoding(interp, CONST(2)->u.string, cur_opcode[3]);
 
 return (opcode_t *)cur_opcode + 4;}
 
 opcode_t *
 Parrot_is_cclass_i_i_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, IREG(2), SREG(3), IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_ic_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], SREG(3), IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_i_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_ic_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4));
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_i_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, IREG(2), SREG(3), cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_ic_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_i_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_is_cclass_i_ic_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 559 "src/ops/string.ops"
     IREG(1) = Parrot_str_is_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4]);
 
 return (opcode_t *)cur_opcode + 5;}
 
 opcode_t *
 Parrot_find_cclass_i_i_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), SREG(3), cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_i_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_cclass_i_ic_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 573 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_s_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_sc_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_s_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_sc_ic_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], IREG(5));
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_s_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_sc_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, IREG(4), cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), SREG(3), cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_s_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], SREG(3), cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_i_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, IREG(2), CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_find_not_cclass_i_ic_sc_ic_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 587 "src/ops/string.ops"
     IREG(1) = Parrot_str_find_not_cclass(interp, cur_opcode[2], CONST(3)->u.string, cur_opcode[4], cur_opcode[5]);
 
 return (opcode_t *)cur_opcode + 6;}
 
 opcode_t *
 Parrot_escape_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 603 "src/ops/string.ops"
     SREG(1) = Parrot_str_escape(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_compose_s_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 607 "src/ops/string.ops"
     SREG(1) = Parrot_str_compose(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_compose_s_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 607 "src/ops/string.ops"
     SREG(1) = Parrot_str_compose(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_spawnw_i_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 42 "src/ops/sys.ops"
     IREG(1) = Parrot_Run_OS_Command(interp, SREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_spawnw_i_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 42 "src/ops/sys.ops"
     IREG(1) = Parrot_Run_OS_Command(interp, CONST(2)->u.string);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_spawnw_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 46 "src/ops/sys.ops"
     IREG(1) = Parrot_Run_OS_Command_Argv(interp, PREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_err_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 67 "src/ops/sys.ops"
     IREG(1) = errno;
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_err_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 71 "src/ops/sys.ops"
     const char * const tmp = strerror(errno);
     SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
 
@@ -28087,7 +28955,8 @@
 
 opcode_t *
 Parrot_err_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 76 "src/ops/sys.ops"
     const char * const tmp = strerror(IREG(2));
     SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
 
@@ -28095,7 +28964,8 @@
 
 opcode_t *
 Parrot_err_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 76 "src/ops/sys.ops"
     const char * const tmp = strerror(cur_opcode[2]);
     SREG(1) = string_make(interp, tmp, strlen(tmp), "ascii", 0);
 
@@ -28103,21 +28973,24 @@
 
 opcode_t *
 Parrot_time_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 91 "src/ops/sys.ops"
     IREG(1) = Parrot_intval_time();
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_time_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 105 "src/ops/sys.ops"
     NREG(1) = Parrot_floatval_time();
 
 return (opcode_t *)cur_opcode + 2;}
 
 opcode_t *
 Parrot_gmtime_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 178 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) IREG(2);
     char resultbuffer[26];
@@ -28129,7 +29002,8 @@
 
 opcode_t *
 Parrot_gmtime_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 178 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) cur_opcode[2];
     char resultbuffer[26];
@@ -28141,7 +29015,8 @@
 
 opcode_t *
 Parrot_localtime_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) IREG(2);
     char resultbuffer[26];
@@ -28153,7 +29028,8 @@
 
 opcode_t *
 Parrot_localtime_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 187 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) cur_opcode[2];
     char resultbuffer[26];
@@ -28165,7 +29041,8 @@
 
 opcode_t *
 Parrot_decodetime_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 196 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) IREG(2);
     Parrot_gmtime_r(&t, &tm);
@@ -28175,7 +29052,8 @@
 
 opcode_t *
 Parrot_decodetime_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 196 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) cur_opcode[2];
     Parrot_gmtime_r(&t, &tm);
@@ -28185,7 +29063,8 @@
 
 opcode_t *
 Parrot_decodelocaltime_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 203 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) IREG(2);
     Parrot_localtime_r(&t, &tm);
@@ -28195,7 +29074,8 @@
 
 opcode_t *
 Parrot_decodelocaltime_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 203 "src/ops/sys.ops"
     struct tm tm;
     const time_t t = (time_t) cur_opcode[2];
     Parrot_localtime_r(&t, &tm);
@@ -28205,35 +29085,40 @@
 
 opcode_t *
 Parrot_sysinfo_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 267 "src/ops/sys.ops"
     SREG(1) = sysinfo_s(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sysinfo_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 267 "src/ops/sys.ops"
     SREG(1) = sysinfo_s(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sysinfo_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 271 "src/ops/sys.ops"
     IREG(1) = sysinfo_i(interp, IREG(2));
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sysinfo_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 271 "src/ops/sys.ops"
     IREG(1) = sysinfo_i(interp, cur_opcode[2]);
 
 return (opcode_t *)cur_opcode + 3;}
 
 opcode_t *
 Parrot_sleep_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 285 "src/ops/sys.ops"
     opcode_t *next = cur_opcode + 2;
     if (IREG(1) < 0) {
         opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
@@ -28247,7 +29132,8 @@
 
 opcode_t *
 Parrot_sleep_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 285 "src/ops/sys.ops"
     opcode_t *next = cur_opcode + 2;
     if (cur_opcode[1] < 0) {
         opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
@@ -28261,7 +29147,8 @@
 
 opcode_t *
 Parrot_sleep_n(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 297 "src/ops/sys.ops"
     opcode_t *next = cur_opcode + 2;
     if (NREG(1) < 0.0) {
         opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
@@ -28275,7 +29162,8 @@
 
 opcode_t *
 Parrot_sleep_nc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 297 "src/ops/sys.ops"
     opcode_t *next = cur_opcode + 2;
     if (CONST(1)->u.number < 0.0) {
         opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, next,
@@ -28289,7 +29177,8 @@
 
 opcode_t *
 Parrot_sizeof_i_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/sys.ops"
 INTVAL unused = PARROT_WARNINGS_test(interp,PARROT_WARNINGS_DEPRECATED_FLAG) &&
   fprintf(stderr,"Warning: instruction 'sizeof' is deprecated\n");
     if (IREG(2) < enum_first_type || IREG(2) >= enum_last_type)
@@ -28301,7 +29190,8 @@
 
 opcode_t *
 Parrot_sizeof_i_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 317 "src/ops/sys.ops"
 INTVAL unused = PARROT_WARNINGS_test(interp,PARROT_WARNINGS_DEPRECATED_FLAG) &&
   fprintf(stderr,"Warning: instruction 'sizeof' is deprecated\n");
     if (cur_opcode[2] < enum_first_type || cur_opcode[2] >= enum_last_type)
@@ -28313,7 +29203,8 @@
 
 opcode_t *
 Parrot_store_lex_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 40 "src/ops/var.ops"
     PMC     * const ctx      = CURRENT_CONTEXT(interp);
     STRING  * const lex_name = SREG(1);
     PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
@@ -28330,7 +29221,8 @@
 
 opcode_t *
 Parrot_store_lex_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 40 "src/ops/var.ops"
     PMC     * const ctx      = CURRENT_CONTEXT(interp);
     STRING  * const lex_name = CONST(1)->u.string;
     PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
@@ -28347,7 +29239,8 @@
 
 opcode_t *
 Parrot_store_dynamic_lex_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 65 "src/ops/var.ops"
     STRING  * const lex_name = SREG(1);
     PMC     * const ctx      =
         Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
@@ -28368,7 +29261,8 @@
 
 opcode_t *
 Parrot_store_dynamic_lex_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 65 "src/ops/var.ops"
     STRING  * const lex_name = CONST(1)->u.string;
     PMC     * const ctx      =
         Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
@@ -28389,7 +29283,8 @@
 
 opcode_t *
 Parrot_find_lex_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 94 "src/ops/var.ops"
     PMC     * const ctx      = CURRENT_CONTEXT(interp);
     STRING  * const lex_name = SREG(2);
     PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
@@ -28410,7 +29305,8 @@
 
 opcode_t *
 Parrot_find_lex_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 94 "src/ops/var.ops"
     PMC     * const ctx      = CURRENT_CONTEXT(interp);
     STRING  * const lex_name = CONST(2)->u.string;
     PMC     * const lex_pad  = Parrot_find_pad(interp, lex_name, ctx);
@@ -28431,7 +29327,8 @@
 
 opcode_t *
 Parrot_find_dynamic_lex_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 123 "src/ops/var.ops"
     STRING  * const lex_name = SREG(2);
     PMC     * const ctx      =
         Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
@@ -28449,7 +29346,8 @@
 
 opcode_t *
 Parrot_find_dynamic_lex_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 123 "src/ops/var.ops"
     STRING  * const lex_name = CONST(2)->u.string;
     PMC     * const ctx      =
         Parrot_pcc_get_caller_ctx(interp, CURRENT_CONTEXT(interp));
@@ -28467,7 +29365,8 @@
 
 opcode_t *
 Parrot_find_caller_lex_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 147 "src/ops/var.ops"
     STRING  * const lex_name = SREG(2);
     PMC     * ctx            = CURRENT_CONTEXT(interp);
     PMC     * result         = PMCNULL;
@@ -28488,7 +29387,8 @@
 
 opcode_t *
 Parrot_find_caller_lex_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 147 "src/ops/var.ops"
     STRING  * const lex_name = CONST(2)->u.string;
     PMC     * ctx            = CURRENT_CONTEXT(interp);
     PMC     * result         = PMCNULL;
@@ -28509,7 +29409,8 @@
 
 opcode_t *
 Parrot_get_namespace_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 186 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PREG(1) = cur_ns;
 
@@ -28517,7 +29418,8 @@
 
 opcode_t *
 Parrot_get_namespace_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 191 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PMC * const ns     = Parrot_get_namespace_keyed(interp, cur_ns, PREG(2));
 
@@ -28527,7 +29429,8 @@
 
 opcode_t *
 Parrot_get_namespace_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 191 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PMC * const ns     = Parrot_get_namespace_keyed(interp, cur_ns, CONST(2)->u.key);
 
@@ -28537,7 +29440,8 @@
 
 opcode_t *
 Parrot_get_hll_namespace_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 210 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PREG(1) = hll_ns;
 
@@ -28545,7 +29449,8 @@
 
 opcode_t *
 Parrot_get_hll_namespace_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 215 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     if (PMC_IS_NULL(hll_ns))
         PREG(1) = PMCNULL;
@@ -28558,7 +29463,8 @@
 
 opcode_t *
 Parrot_get_hll_namespace_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 215 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     if (PMC_IS_NULL(hll_ns))
         PREG(1) = PMCNULL;
@@ -28571,7 +29477,8 @@
 
 opcode_t *
 Parrot_get_root_namespace_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 236 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PREG(1) = root_ns;
 
@@ -28579,7 +29486,8 @@
 
 opcode_t *
 Parrot_get_root_namespace_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 241 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     if (PMC_IS_NULL(root_ns))
         PREG(1) = PMCNULL;
@@ -28592,7 +29500,8 @@
 
 opcode_t *
 Parrot_get_root_namespace_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 241 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     if (PMC_IS_NULL(root_ns))
         PREG(1) = PMCNULL;
@@ -28605,7 +29514,8 @@
 
 opcode_t *
 Parrot_get_global_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PREG(1) = Parrot_find_global_op(interp, cur_ns, SREG(2), cur_opcode + 3);
 
@@ -28613,7 +29523,8 @@
 
 opcode_t *
 Parrot_get_global_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PREG(1) = Parrot_find_global_op(interp, cur_ns, CONST(2)->u.string, cur_opcode + 3);
 
@@ -28621,7 +29532,8 @@
 
 opcode_t *
 Parrot_get_global_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 279 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     if (PMC_IS_NULL(cur_ns)) {
         PREG(1) = PMCNULL;
@@ -28638,7 +29550,8 @@
 
 opcode_t *
 Parrot_get_global_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 279 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     if (PMC_IS_NULL(cur_ns)) {
         PREG(1) = PMCNULL;
@@ -28655,7 +29568,8 @@
 
 opcode_t *
 Parrot_get_global_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 279 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     if (PMC_IS_NULL(cur_ns)) {
         PREG(1) = PMCNULL;
@@ -28672,7 +29586,8 @@
 
 opcode_t *
 Parrot_get_global_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 279 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     if (PMC_IS_NULL(cur_ns)) {
         PREG(1) = PMCNULL;
@@ -28689,7 +29604,8 @@
 
 opcode_t *
 Parrot_get_hll_global_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 306 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PREG(1) = Parrot_find_global_op(interp, hll_ns, SREG(2), cur_opcode + 3);
 
@@ -28697,7 +29613,8 @@
 
 opcode_t *
 Parrot_get_hll_global_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 306 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PREG(1) = Parrot_find_global_op(interp, hll_ns, CONST(2)->u.string, cur_opcode + 3);
 
@@ -28705,7 +29622,8 @@
 
 opcode_t *
 Parrot_get_hll_global_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 311 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     if (PMC_IS_NULL(hll_ns)) {
         PREG(1) = hll_ns;
@@ -28722,7 +29640,8 @@
 
 opcode_t *
 Parrot_get_hll_global_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 311 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     if (PMC_IS_NULL(hll_ns)) {
         PREG(1) = hll_ns;
@@ -28739,7 +29658,8 @@
 
 opcode_t *
 Parrot_get_hll_global_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 311 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     if (PMC_IS_NULL(hll_ns)) {
         PREG(1) = hll_ns;
@@ -28756,7 +29676,8 @@
 
 opcode_t *
 Parrot_get_hll_global_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 311 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     if (PMC_IS_NULL(hll_ns)) {
         PREG(1) = hll_ns;
@@ -28773,7 +29694,8 @@
 
 opcode_t *
 Parrot_get_root_global_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 338 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PREG(1) = Parrot_find_global_op(interp, root_ns, SREG(2), cur_opcode + 3);
 
@@ -28781,7 +29703,8 @@
 
 opcode_t *
 Parrot_get_root_global_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 338 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PREG(1) = Parrot_find_global_op(interp, root_ns, CONST(2)->u.string, cur_opcode + 3);
 
@@ -28789,7 +29712,8 @@
 
 opcode_t *
 Parrot_get_root_global_p_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     if (PMC_IS_NULL(root_ns))
         PREG(1) = PMCNULL;
@@ -28805,7 +29729,8 @@
 
 opcode_t *
 Parrot_get_root_global_p_pc_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     if (PMC_IS_NULL(root_ns))
         PREG(1) = PMCNULL;
@@ -28821,7 +29746,8 @@
 
 opcode_t *
 Parrot_get_root_global_p_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     if (PMC_IS_NULL(root_ns))
         PREG(1) = PMCNULL;
@@ -28837,7 +29763,8 @@
 
 opcode_t *
 Parrot_get_root_global_p_pc_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 343 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     if (PMC_IS_NULL(root_ns))
         PREG(1) = PMCNULL;
@@ -28853,7 +29780,8 @@
 
 opcode_t *
 Parrot_set_global_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     Parrot_set_global(interp, cur_ns, SREG(1), PREG(2));
 
@@ -28861,7 +29789,8 @@
 
 opcode_t *
 Parrot_set_global_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 378 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     Parrot_set_global(interp, cur_ns, CONST(1)->u.string, PREG(2));
 
@@ -28869,7 +29798,8 @@
 
 opcode_t *
 Parrot_set_global_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 383 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, PREG(1));
 
@@ -28879,7 +29809,8 @@
 
 opcode_t *
 Parrot_set_global_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 383 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, CONST(1)->u.key);
 
@@ -28889,7 +29820,8 @@
 
 opcode_t *
 Parrot_set_global_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 383 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, PREG(1));
 
@@ -28899,7 +29831,8 @@
 
 opcode_t *
 Parrot_set_global_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 383 "src/ops/var.ops"
     PMC * const cur_ns = Parrot_pcc_get_namespace(interp, CURRENT_CONTEXT(interp));
     PMC * const ns     = Parrot_make_namespace_keyed(interp, cur_ns, CONST(1)->u.key);
 
@@ -28909,7 +29842,8 @@
 
 opcode_t *
 Parrot_set_hll_global_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 402 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     Parrot_set_global(interp, hll_ns, SREG(1), PREG(2));
 
@@ -28917,7 +29851,8 @@
 
 opcode_t *
 Parrot_set_hll_global_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 402 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     Parrot_set_global(interp, hll_ns, CONST(1)->u.string, PREG(2));
 
@@ -28925,7 +29860,8 @@
 
 opcode_t *
 Parrot_set_hll_global_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 407 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, PREG(1));
 
@@ -28935,7 +29871,8 @@
 
 opcode_t *
 Parrot_set_hll_global_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 407 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, CONST(1)->u.key);
 
@@ -28945,7 +29882,8 @@
 
 opcode_t *
 Parrot_set_hll_global_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 407 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, PREG(1));
 
@@ -28955,7 +29893,8 @@
 
 opcode_t *
 Parrot_set_hll_global_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 407 "src/ops/var.ops"
     PMC * const hll_ns = Parrot_get_ctx_HLL_namespace(interp);
     PMC * const ns     = Parrot_make_namespace_keyed(interp, hll_ns, CONST(1)->u.key);
 
@@ -28965,7 +29904,8 @@
 
 opcode_t *
 Parrot_set_root_global_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 426 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     Parrot_set_global(interp, root_ns, SREG(1), PREG(2));
 
@@ -28973,7 +29913,8 @@
 
 opcode_t *
 Parrot_set_root_global_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 426 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     Parrot_set_global(interp, root_ns, CONST(1)->u.string, PREG(2));
 
@@ -28981,7 +29922,8 @@
 
 opcode_t *
 Parrot_set_root_global_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, PREG(1));
 
@@ -28991,7 +29933,8 @@
 
 opcode_t *
 Parrot_set_root_global_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, CONST(1)->u.key);
 
@@ -29001,7 +29944,8 @@
 
 opcode_t *
 Parrot_set_root_global_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, PREG(1));
 
@@ -29011,7 +29955,8 @@
 
 opcode_t *
 Parrot_set_root_global_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 431 "src/ops/var.ops"
     PMC * const root_ns = interp->root_namespace;
     PMC * const ns      = Parrot_make_namespace_keyed(interp, root_ns, CONST(1)->u.key);
 
@@ -29021,7 +29966,8 @@
 
 opcode_t *
 Parrot_find_name_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 463 "src/ops/var.ops"
     if (!SREG(2)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_INVALID_OPERATION,
@@ -29035,7 +29981,8 @@
 
 opcode_t *
 Parrot_find_name_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 463 "src/ops/var.ops"
     if (!CONST(2)->u.string) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, NULL,
                 EXCEPTION_INVALID_OPERATION,
@@ -29049,14 +29996,15 @@
 
 opcode_t *
 Parrot_find_sub_not_null_p_s(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 481 "src/ops/var.ops"
     opcode_t *dest = cur_opcode + 3;
     PMC *sub = Parrot_find_name_op(interp, SREG(2), dest);
 
     if (PMC_IS_NULL(sub)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
                        EXCEPTION_GLOBAL_NOT_FOUND,
-                       "Could not find non-existent sub %Ss", SREG(2));
+                       "Could not find sub %Ss", SREG(2));
         return (opcode_t *)handler;
     }
 
@@ -29066,14 +30014,15 @@
 
 opcode_t *
 Parrot_find_sub_not_null_p_sc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 481 "src/ops/var.ops"
     opcode_t *dest = cur_opcode + 3;
     PMC *sub = Parrot_find_name_op(interp, CONST(2)->u.string, dest);
 
     if (PMC_IS_NULL(sub)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
                        EXCEPTION_GLOBAL_NOT_FOUND,
-                       "Could not find non-existent sub %Ss", CONST(2)->u.string);
+                       "Could not find sub %Ss", CONST(2)->u.string);
         return (opcode_t *)handler;
     }
 
@@ -29083,7 +30032,8 @@
 
 opcode_t *
 Parrot_trap(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 46 "src/ops/experimental.ops"
 INTVAL unused = PARROT_WARNINGS_test(interp,PARROT_WARNINGS_DEPRECATED_FLAG) &&
   fprintf(stderr,"Warning: instruction 'trap' is deprecated\n");
 #if defined(__GNUC__) && defined(i386)
@@ -29096,23 +30046,9 @@
 return (opcode_t *)cur_opcode + 1;}
 
 opcode_t *
-Parrot_set_label_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    VTABLE_set_pointer(interp, PREG(1), (CUR_OPCODE + cur_opcode[2]));
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
-Parrot_get_label_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
-    void * const ptr = VTABLE_get_pointer(interp, PREG(2));
-    IREG(1) =  PTR2INTVAL(ptr);
-
-return (opcode_t *)cur_opcode + 3;}
-
-opcode_t *
 Parrot_fetch_p_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29135,7 +30071,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29158,7 +30095,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29181,7 +30119,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29204,7 +30143,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29227,7 +30167,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29250,7 +30191,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29273,7 +30215,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 95 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29296,7 +30239,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29319,7 +30263,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29342,7 +30287,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29365,7 +30311,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29388,7 +30335,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29411,7 +30359,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29434,7 +30383,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29457,7 +30407,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 115 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29480,7 +30431,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29503,7 +30455,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29526,7 +30479,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29549,7 +30503,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, PREG(4));
@@ -29572,7 +30527,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29595,7 +30551,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29618,7 +30575,8 @@
 
 opcode_t *
 Parrot_fetch_p_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29641,7 +30599,8 @@
 
 opcode_t *
 Parrot_fetch_p_pc_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 135 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
     if (PMC_IS_NULL(PREG(1))) {
         PMC * const classobj = Parrot_oo_get_class(interp, CONST(4)->u.key);
@@ -29664,7 +30623,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29690,7 +30650,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_p_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29716,7 +30677,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29742,7 +30704,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_pc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29768,7 +30731,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), PREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29794,7 +30758,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_p_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, PREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29820,7 +30785,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, PREG(2), CONST(3)->u.key);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29846,7 +30812,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_pc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 170 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed(interp, CONST(2)->u.key, CONST(3)->u.key);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29872,7 +30839,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29898,7 +30866,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_i_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29924,7 +30893,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29950,7 +30920,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_ic_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -29976,7 +30947,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), IREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30002,7 +30974,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_i_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, IREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30028,7 +31001,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, PREG(2), cur_opcode[3]);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30054,7 +31028,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_ic_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 193 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_int(interp, CONST(2)->u.key, cur_opcode[3]);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30080,7 +31055,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30106,7 +31082,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_s_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30132,7 +31109,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30158,7 +31136,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_sc_p(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30184,7 +31163,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), SREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30210,7 +31190,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_s_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, SREG(3));
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30236,7 +31217,8 @@
 
 opcode_t *
 Parrot_vivify_p_p_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, PREG(2), CONST(3)->u.string);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30262,7 +31244,8 @@
 
 opcode_t *
 Parrot_vivify_p_pc_sc_pc(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 216 "src/ops/experimental.ops"
     PREG(1) = VTABLE_get_pmc_keyed_str(interp, CONST(2)->u.key, CONST(3)->u.string);
 
     if (PMC_IS_NULL(PREG(1))) {
@@ -30288,7 +31271,8 @@
 
 opcode_t *
 Parrot_new_p_s_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 250 "src/ops/experimental.ops"
     STRING * const name   = SREG(2);
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -30314,7 +31298,8 @@
 
 opcode_t *
 Parrot_new_p_sc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 250 "src/ops/experimental.ops"
     STRING * const name   = CONST(2)->u.string;
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -30340,7 +31325,8 @@
 
 opcode_t *
 Parrot_new_p_s_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 250 "src/ops/experimental.ops"
     STRING * const name   = SREG(2);
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -30366,7 +31352,8 @@
 
 opcode_t *
 Parrot_new_p_sc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 250 "src/ops/experimental.ops"
     STRING * const name   = CONST(2)->u.string;
     PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
                           ? Parrot_oo_get_class_str(interp, name)
@@ -30392,7 +31379,8 @@
 
 opcode_t *
 Parrot_new_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/experimental.ops"
     PMC * const  name_key = PREG(2);
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30425,7 +31413,8 @@
 
 opcode_t *
 Parrot_new_p_pc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/experimental.ops"
     PMC * const  name_key = CONST(2)->u.key;
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30458,7 +31447,8 @@
 
 opcode_t *
 Parrot_new_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/experimental.ops"
     PMC * const  name_key = PREG(2);
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30491,7 +31481,8 @@
 
 opcode_t *
 Parrot_new_p_pc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 274 "src/ops/experimental.ops"
     PMC * const  name_key = CONST(2)->u.key;
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30524,7 +31515,8 @@
 
 opcode_t *
 Parrot_root_new_p_p_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 312 "src/ops/experimental.ops"
     PMC * const  name_key = PREG(2);
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30559,7 +31551,8 @@
 
 opcode_t *
 Parrot_root_new_p_pc_i(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 312 "src/ops/experimental.ops"
     PMC * const  name_key = CONST(2)->u.key;
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30594,7 +31587,8 @@
 
 opcode_t *
 Parrot_root_new_p_p_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 312 "src/ops/experimental.ops"
     PMC * const  name_key = PREG(2);
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30629,7 +31623,8 @@
 
 opcode_t *
 Parrot_root_new_p_pc_ic(opcode_t *cur_opcode, PARROT_INTERP)  {
-    Parrot_Context const * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+    const Parrot_Context * const CUR_CTX = Parrot_pcc_get_context_struct(interp, interp->ctx);
+#line 312 "src/ops/experimental.ops"
     PMC * const  name_key = CONST(2)->u.key;
 
     /* get_class() returns a PMCProxy for core types, so check for core PMCs */
@@ -30662,12 +31657,13 @@
 
 return (opcode_t *)cur_opcode + 4;}
 
+#line 31564 "src/ops/core_ops.c"
 
 /*
 ** Op lookup function:
 */
 
-#define NUM_OPS 1311
+#define NUM_OPS 1296
 
 #define OP_HASH_SIZE 3041
 
@@ -30688,8 +31684,8 @@
 static HOP **hop;
 
 static void hop_init(PARROT_INTERP);
-static size_t hash_str(const char *str);
-static void store_op(PARROT_INTERP, op_info_t *info, int full);
+static size_t hash_str(ARGIN_NULLOK(const char *str));
+static void store_op(PARROT_INTERP, ARGIN(op_info_t *info), int full);
 
 /* XXX on changing interpreters, this should be called,
    through a hook */
@@ -30706,7 +31702,8 @@
  * returns >= 0 (found idx into info_table), -1 if not
  */
 
-static size_t hash_str(const char *str) {
+static size_t hash_str(ARGIN_NULLOK(const char *str))
+{
     size_t      key = 0;
     const char *s   = str;
 
@@ -30718,8 +31715,9 @@
     return key;
 }
 
-static void store_op(PARROT_INTERP, op_info_t *info, int full) {
-    HOP * const p     = mem_gc_allocate_zeroed_typed(interp, HOP);
+static void store_op(PARROT_INTERP, ARGIN(op_info_t *info), int full)
+{
+    HOP * const p     = mem_gc_allocate_typed(interp, HOP);
     const size_t hidx =
         hash_str(full ? info->full_name : info->name) % OP_HASH_SIZE;
 
@@ -30727,30 +31725,40 @@
     p->next   = hop[hidx];
     hop[hidx] = p;
 }
+
 static int get_op(PARROT_INTERP, const char * name, int full) {
-    const HOP * p;
+    const HOP *p;
+
     const size_t hidx = hash_str(name) % OP_HASH_SIZE;
+
     if (!hop) {
-        hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE,HOP *);
+        hop = mem_gc_allocate_n_zeroed_typed(interp, OP_HASH_SIZE, HOP *);
         hop_init(interp);
     }
+
     for (p = hop[hidx]; p; p = p->next) {
         if (STREQ(name, full ? p->info->full_name : p->info->name))
             return p->info - core_op_lib.op_info_table;
     }
+
     return -1;
 }
-static void hop_init(PARROT_INTERP) {
+
+static void hop_init(PARROT_INTERP)
+{
     size_t i;
     op_info_t * const info = core_op_lib.op_info_table;
+
     /* store full names */
     for (i = 0; i < core_op_lib.op_count; i++)
         store_op(interp, info + i, 1);
+
     /* plus one short name */
     for (i = 0; i < core_op_lib.op_count; i++)
         if (get_op(interp, info[i].name, 0) == -1)
             store_op(interp, info + i, 0);
 }
+
 static void hop_deinit(PARROT_INTERP)
 {
     if (hop) {
@@ -30769,7 +31777,7 @@
 }
 
 op_lib_t *
-Parrot_DynOp_core_2_1_0(PARROT_INTERP, long init) {
+Parrot_DynOp_core_2_3_0(PARROT_INTERP, long init) {
     /* initialize and return op_lib ptr */
     if (init == 1) {
 

Modified: branches/ops_pct/src/ops/object.ops
==============================================================================
--- branches/ops_pct/src/ops/object.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/object.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -53,6 +53,8 @@
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
+    PMC      * const signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     if (PMC_IS_NULL(method_pmc)) {
         PMC * const _class = VTABLE_get_class(interp, object);
@@ -69,7 +71,8 @@
         }
     }
     else {
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         interp->current_cont   = NEED_CONTINUATION;
         dest                   = VTABLE_invoke(interp, method_pmc, next);
     }
@@ -79,8 +82,11 @@
 op callmethodcc(invar PMC, invar PMC) :object_base :flow {
     opcode_t        *dest;
     opcode_t * const next  = expr NEXT();
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = $1;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, $1);
     interp->current_cont   = NEED_CONTINUATION;
     dest                   = VTABLE_invoke(interp, $2, next);
 
@@ -94,6 +100,8 @@
 
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
     opcode_t *dest              = NULL;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
 
     if (PMC_IS_NULL(method_pmc)) {
@@ -102,7 +110,8 @@
             VTABLE_get_string(interp, VTABLE_get_class(interp, object)));
     }
     else {
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         interp->current_cont = $3;
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
@@ -115,8 +124,11 @@
     opcode_t * const next       = expr NEXT();
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
-    interp->current_object = object;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, object);
     interp->current_cont = $3;
     dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     goto ADDRESS(dest);
@@ -129,6 +141,8 @@
     PMC      * const method_pmc = VTABLE_find_method(interp, object, meth);
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     if (PMC_IS_NULL(method_pmc)) {
         dest = Parrot_ex_throw_from_op_args(interp, next, EXCEPTION_METHOD_NOT_FOUND,
@@ -138,7 +152,8 @@
     else {
         interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
         PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
-        interp->current_object = object;
+        if (!PMC_IS_NULL(signature))
+            Parrot_pcc_set_object(interp, signature, object);
         dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     }
     goto ADDRESS(dest);
@@ -150,11 +165,14 @@
     PMC      * const method_pmc = $2;
 
     opcode_t *dest;
+    PMC      *       signature  = Parrot_pcc_get_signature(interp,
+                                    CURRENT_CONTEXT(interp));
 
     interp->current_cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
     PObj_get_FLAGS(interp->current_cont) |= SUB_FLAG_TAILCALL;
 
-    interp->current_object = object;
+    if (!PMC_IS_NULL(signature))
+        Parrot_pcc_set_object(interp, signature, object);
     dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
     goto ADDRESS(dest);
 }

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

Modified: branches/ops_pct/src/ops/pmc.ops
==============================================================================
--- branches/ops_pct/src/ops/pmc.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/pmc.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -60,7 +60,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             goto ADDRESS(dest);
@@ -80,7 +80,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type_str(interp, name);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", name);
             goto ADDRESS(dest);
@@ -98,7 +98,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             goto ADDRESS(dest);
@@ -116,7 +116,7 @@
     else {
         const INTVAL type = Parrot_pmc_get_type(interp, name_key);
         if (type <= 0) {
-            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
                 EXCEPTION_NO_CLASS,
                 "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
             goto ADDRESS(dest);
@@ -151,7 +151,7 @@
     if (!PMC_IS_NULL(classobj))
         $1 = VTABLE_instantiate(interp, classobj, PMCNULL);
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         goto ADDRESS(dest);
@@ -169,7 +169,7 @@
     if (!PMC_IS_NULL(classobj))
         $1 = VTABLE_instantiate(interp, classobj, $3);
     else {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
             EXCEPTION_NO_CLASS,
             "Class '%Ss' not found", VTABLE_get_repr(interp, key));
         goto ADDRESS(dest);
@@ -234,7 +234,7 @@
     opcode_t * const resume = expr NEXT();
     $1 = VTABLE_find_method(interp, $2, $3);
     if (PMC_IS_NULL($1) || !VTABLE_defined(interp, $1)) {
-        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, resume,
+        opcode_t * const dest = Parrot_ex_throw_from_op_args(interp, resume,
             EXCEPTION_METHOD_NOT_FOUND,
             "Method '%Ss' not found for invocant of class '%Ss'", $3,
             VTABLE_get_string(interp, VTABLE_get_class(interp, $2)));
@@ -690,7 +690,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/ops_pct/src/ops/set.ops
==============================================================================
--- branches/ops_pct/src/ops/set.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/set.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -19,15 +19,15 @@
 
 =item B<clone>(out STR, in STR)
 
-Make a clone of $2, and put it in $1. Doesn't affect what was in
-$1. Removes the constant flag on the copy, if there was one.
+Effectively the same as set $1, $2, except that if $2 is a null STRING, $1 gets
+a new empty string instead.
 
 =cut
 
 inline op clone(out STR, in STR) :base_mem {
     /* cloning a NULL STRING produces an empty STRING; TT #964 */
     $1 = $2
-       ? Parrot_str_copy(interp, $2)
+       ? $2
        : Parrot_str_new(interp, NULL, 0);
 }
 
@@ -154,7 +154,7 @@
 }
 
 inline op set(out STR, inconst STR) :base_core {
-    $1 = Parrot_str_copy(interp, $2);
+    $1 = $2;
 }
 
 inline op set(out STR, in INT) :base_core {
@@ -186,8 +186,7 @@
 }
 
 inline op set(invar PMC, inconst STR) :base_core {
-    VTABLE_set_string_native(interp, $1,
-        Parrot_str_copy(interp, $2));
+    VTABLE_set_string_native(interp, $1, $2);
 }
 inline op set(out INT, invar PMC) :base_core {
     $1 = VTABLE_get_integer(interp, $2);
@@ -247,7 +246,7 @@
 }
 
 inline op assign(out STR, in STR) :base_core {
-    $1 = Parrot_str_set(interp, $1, $2);
+    $1 = $2;
 }
 
 inline op setref(invar PMC, invar PMC) :base_core {
@@ -492,8 +491,8 @@
 
 inline op copy(inout PMC, invar PMC) :base_mem {
     if (PMC_IS_NULL($1)) {
-        opcode_t *dest = expr NEXT();
-        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+        opcode_t * const dest = expr NEXT();
+        opcode_t * const handler = Parrot_ex_throw_from_op_args(interp, dest,
                 EXCEPTION_NULL_REG_ACCESS, "Null PMC in copy");
         goto ADDRESS(handler);
     }
@@ -512,7 +511,6 @@
         /* don't let the clone's destruction destroy the destination's data */
         PObj_custom_destroy_CLEAR(clone);
         PMC_data(clone)        = NULL;
-        PMC_sync(clone)        = NULL;
         PMC_metadata(clone)    = NULL;
 
         /* Restore metadata. */
@@ -560,7 +558,7 @@
 =cut
 
 inline op null(out STR) :base_core {
-    $1 = NULL;
+    $1 = STRINGNULL;
 }
 
 inline op null(out INT) :base_core {
@@ -617,7 +615,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/ops_pct/src/ops/string.ops
==============================================================================
--- branches/ops_pct/src/ops/string.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/string.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -57,11 +57,6 @@
 }
 
 
-=item B<chopn>(inout STR, in INT)
-
-Remove n characters specified by integer $2 from the tail of string $1.
-If $2 is negative, cut the string after -$2 characters.
-
 =item B<chopn>(out STR, in STR, in INT)
 
 Remove n characters specified by integer $3 from the tail of string $2,
@@ -70,10 +65,6 @@
 
 =cut
 
-inline op chopn(inout STR, in INT) :base_core {
-    Parrot_str_chopn_inplace(interp, $1, $2);
-}
-
 inline op chopn(out STR, in STR, in INT) :base_core {
     $1 = Parrot_str_chopn(interp, $2, $3);
 }
@@ -97,8 +88,8 @@
 
 =cut
 
-inline op concat(inout STR, in STR) :base_mem {
-    $1 = Parrot_str_append(interp, $1, $2);
+inline op concat(inout STR, in STR) :base_mem :deprecated {
+    $1 = Parrot_str_concat(interp, $1, $2);
 }
 
 inline op concat(invar PMC, invar PMC) :base_core {
@@ -110,7 +101,7 @@
 }
 
 inline op concat(out STR, in STR, in STR) :base_mem {
-    $1 = Parrot_str_concat(interp, $2, $3, 1);
+    $1 = Parrot_str_concat(interp, $2, $3);
 }
 
 inline op concat(invar PMC, invar PMC, in STR) :base_core {
@@ -198,8 +189,8 @@
 
 inline op bytelength(out INT, in STR) :base_mem {
     UINTVAL n;
-    STRING * const s = $2;
-    if (!s)
+    const STRING * const s = $2;
+    if (STRING_IS_NULL(s))
         n = 0;
     else {
         n = s->bufused;
@@ -240,17 +231,15 @@
 
 =item B<substr>(out STR, in STR, in INT, in INT)
 
-=item B<substr>(out STR, inout STR, in INT, in INT, in STR)
-
-=item B<substr>(inout STR, in INT, in INT, in STR)
-
 =item B<substr>(out STR, invar PMC, in INT, in INT)
 
 Set $1 to the portion of $2 starting at (zero-based) character position
 $3 and having length $4. If no length ($4) is provided, it is equivalent to
-passing in the length of $2. This creates a COW copy of $2.
+passing in the length of $2.
+
+=item B<replace>(out STR, in STR, in INT, in INT, in STR)
 
-Optionally pass in string $5 for replacement. If the length of $5 is
+Replace part of $2 starting from $3 of length $4 with $5. If the length of $5 is
 different from the length specified in $4, then $2 will grow or shrink
 accordingly. If $3 is one character position larger than the length of
 $2, then $5 is appended to $2 (and the empty string is returned);
@@ -262,32 +251,27 @@
 the end of the string (ie an offset of -1 corresponds to the last
 character).
 
-The third form is optimized for replace only, ignoring the replaced
-substring and does not waste a register to do the string replace.
+New $1 string returned.
 
 =cut
 
 inline op substr(out STR, in STR, in INT) :base_core {
     const INTVAL len = Parrot_str_byte_length(interp, $2);
-    $1 = Parrot_str_substr(interp, $2, $3, len, &$1, 0);
+    $1 = Parrot_str_substr(interp, $2, $3, len);
 }
 
 inline op substr(out STR, in STR, in INT, in INT) :base_core {
-    $1 = Parrot_str_substr(interp, $2, $3, $4, &$1, 0);
-}
-
-inline op substr(out STR, inout STR, in INT, in INT, in STR) :base_core {
-    $1 = Parrot_str_replace(interp, $2, $3, $4, $5, &$1);
-}
-
-inline op substr(inout STR, in INT, in INT, in STR) :base_core {
-    (void)Parrot_str_replace(interp, $1, $2, $3, $4, NULL);
+    $1 = Parrot_str_substr(interp, $2, $3, $4);
 }
 
 inline op substr(out STR, invar PMC, in INT, in INT) :base_core {
     $1 = VTABLE_substr_str(interp, $2, $3, $4);
 }
 
+inline op replace(out STR, in STR, in INT, in INT, in STR) :base_core {
+    $1 = Parrot_str_replace(interp, $2, $3, $4, $5);
+}
+
 
 =item B<index>(out INT, in STR, in STR)
 
@@ -419,58 +403,32 @@
 
 Uppercase $2 and put the result in $1
 
-=item B<upcase>(inout STR)
-
-Uppercase $1 in place
-
 =cut
 
 inline op upcase(out STR, in STR) :base_core {
     $1 = Parrot_str_upcase(interp, $2);
 }
 
-inline op upcase(inout STR) :base_core {
-    Parrot_str_upcase_inplace(interp, $1);
-}
-
-
 =item B<downcase>(out STR, in STR)
 
 Downcase $2 and put the result in $1
 
-=item B<downcase>(inout STR)
-
-Downcase $1 in place
-
 =cut
 
 inline op downcase(out STR, in STR) :base_core {
     $1 = Parrot_str_downcase(interp, $2);
 }
 
-inline op downcase(inout STR) :base_core {
-    Parrot_str_downcase_inplace(interp, $1);
-}
-
-
 =item B<titlecase>(out STR, in STR)
 
 Titlecase $2 and put the result in $1
 
-=item B<titlecase>(inout STR)
-
-Titlecase $1 in place
-
 =cut
 
 inline op titlecase(out STR, in STR) :base_core {
     $1 = Parrot_str_titlecase(interp, $2);
 }
 
-inline op titlecase(inout STR) :base_core {
-    Parrot_str_titlecase_inplace(interp, $1);
-}
-
 
 =item B<join>(out STR, in STR, invar PMC)
 
@@ -512,10 +470,6 @@
 Return the charset number of the charset named $2. If the charset doesn't
 exist, throw an exception.
 
-=item B<trans_charset>(inout STR, in INT)
-
-Change the string to have the specified charset.
-
 =item B<trans_charset>(out STR, in STR, in INT)
 
 Create a string $1 from $2 with the specified charset.
@@ -529,8 +483,7 @@
 }
 
 op charsetname(out STR, in INT) :base_core {
-    STRING * const name = Parrot_charset_name(interp, $2);
-    $1 = name ? Parrot_str_copy(interp, name) : NULL;
+    $1 = Parrot_charset_name(interp, $2);
 }
 
 op find_charset(out INT, in STR) :base_core {
@@ -544,13 +497,8 @@
     $1 = n;
 }
 
-op trans_charset(inout STR, in INT) {
-    $1 = Parrot_str_change_charset(interp, $1, $2, NULL);
-}
-
 op trans_charset(out STR, in STR, in INT) {
-    STRING *dest = Parrot_gc_new_string_header(interp, 0);
-    $1 = Parrot_str_change_charset(interp, $2, $3, dest);
+    $1 = Parrot_str_change_charset(interp, $2, $3);
 }
 
 
@@ -568,10 +516,6 @@
 Return the encoding number of the encoding named $2. If the encoding doesn't
 exist, throw an exception.
 
-=item B<trans_encoding>(inout STR, in INT)
-
-Change the string to have the specified encoding.
-
 =item B<trans_encoding>(out STR, in STR, in INT)
 
 Create a string $1 from $2 with the specified encoding.
@@ -585,8 +529,7 @@
 }
 
 op encodingname(out STR, in INT) :base_core {
-    STRING * const name = Parrot_encoding_name(interp, $2);
-    $1 = name ? Parrot_str_copy(interp, name) : NULL;
+    $1 = Parrot_encoding_name(interp, $2);
 }
 
 op find_encoding(out INT, in STR) :base_core {
@@ -600,13 +543,8 @@
     $1 = n;
 }
 
-op trans_encoding(inout STR, in INT) {
-    $1 = Parrot_str_change_encoding(interp, $1, $2, NULL);
-}
-
 op trans_encoding(out STR, in STR, in INT) {
-    STRING * const dest = Parrot_gc_new_string_header(interp, 0);
-    $1 = Parrot_str_change_encoding(interp, $2, $3, dest);
+    $1 = Parrot_str_change_encoding(interp, $2, $3);
 }
 
 
@@ -674,7 +612,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/ops_pct/src/ops/var.ops
==============================================================================
--- branches/ops_pct/src/ops/var.ops	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/ops/var.ops	Wed May  5 08:45:29 2010	(r46302)
@@ -484,7 +484,7 @@
     if (PMC_IS_NULL(sub)) {
         opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
                        EXCEPTION_GLOBAL_NOT_FOUND,
-                       "Could not find non-existent sub %Ss", $2);
+                       "Could not find sub %Ss", $2);
         goto ADDRESS(handler);
     }
 

Modified: branches/ops_pct/src/packdump.c
==============================================================================
--- branches/ops_pct/src/packdump.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/packdump.c	Wed May  5 08:45:29 2010	(r46302)
@@ -67,7 +67,7 @@
     ASSERT_ARGS(PackFile_ConstTable_dump)
     opcode_t i;
 
-    for (i = 0; i < self->const_count; i++) {
+    for (i = 0; i < self->const_count; ++i) {
         Parrot_io_printf(interp, "    # %ld:\n", (long)i);
         PackFile_Constant_dump(interp, self, self->constants[i]);
     }
@@ -144,9 +144,9 @@
             if (printed_flag_p)
                 Parrot_io_printf(interp, ",");
             Parrot_io_printf(interp, "%s", flag_bit_names[idx]);
-            printed_flag_p++;
+            ++printed_flag_p;
         }
-        idx++;
+        ++idx;
         flags >>= 1;
     }
     Parrot_io_printf(interp, ")\n");
@@ -181,7 +181,7 @@
         break;
 
       case PFC_KEY:
-        for (i = 0, key = self->u.key; key; i++) {
+        for (i = 0, key = self->u.key; key; ++i) {
             GETATTR_Key_next_key(interp, key, key);
         }
         /* number of key components */
@@ -299,10 +299,10 @@
                     switch (sub->namespace_name->vtable->base_type) {
                       case enum_class_String:
                         namespace_description = Parrot_str_new(interp, "'", 1);
-                        namespace_description = Parrot_str_append(interp,
+                        namespace_description = Parrot_str_concat(interp,
                                         namespace_description,
                                         VTABLE_get_string(interp, sub->namespace_name));
-                        namespace_description = Parrot_str_append(interp,
+                        namespace_description = Parrot_str_concat(interp,
                                         namespace_description,
                                         Parrot_str_new(interp, "'", 1));
                         break;
@@ -376,20 +376,20 @@
     ASSERT_ARGS(PackFile_Fixup_dump)
     opcode_t i;
 
-    for (i = 0; i < ft->fixup_count; i++) {
+    for (i = 0; i < ft->fixup_count; ++i) {
         Parrot_io_printf(interp, "\t#%d\n", (int) i);
-        switch (ft->fixups[i]->type) {
+        switch (ft->fixups[i].type) {
           case enum_fixup_label:
           case enum_fixup_sub:
             Parrot_io_printf(interp,
                         "\ttype => %d offs => %8d name => '%s',\n",
-                        (int)ft->fixups[i]->type,
-                        (int)ft->fixups[i]->offset,
-                        ft->fixups[i]->name);
+                        (int)ft->fixups[i].type,
+                        (int)ft->fixups[i].offset,
+                        ft->fixups[i].name);
             break;
           default:
             Parrot_io_printf(interp, "\ttype => %d ???,\n",
-                        (int) ft->fixups[i]->type);
+                        (int) ft->fixups[i].type);
             break;
         }
     }

Modified: branches/ops_pct/src/packfile.c
==============================================================================
--- branches/ops_pct/src/packfile.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/packfile.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 This program is free software. It is subject to the same license as
 Parrot itself.
 $Id$
@@ -93,10 +93,10 @@
         __attribute__nonnull__(5)
         FUNC_MODIFIES(*dir);
 
-static void default_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+static void default_destroy(PARROT_INTERP,
+    ARGFREE_NOTNULL(PackFile_Segment *self))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*self);
+        __attribute__nonnull__(2);
 
 static void default_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *self))
         __attribute__nonnull__(1)
@@ -293,9 +293,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static opcode_t * pf_debug_pack(SHIM_INTERP,
+static opcode_t * pf_debug_pack(PARROT_INTERP,
     ARGMOD(PackFile_Segment *self),
     ARGOUT(opcode_t *cursor))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*self)
@@ -454,7 +455,8 @@
 #define ASSERT_ARGS_pf_debug_new __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pf_debug_pack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(self) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_pf_debug_packed_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(self))
@@ -481,6 +483,15 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/* Segment header:
+  1 op - Segment size
+  1 op - Internal type
+  1 op - Internal id
+  1 op - Size of theop array
+  See pdd13_bytecode: Packfile Segment Header
+*/
+#define SEGMENT_HEADER_SIZE 4
+
 /* offset not in ptr diff, but in byte */
 #define OFFS(pf, cursor) ((pf) ? ((const char *)(cursor) - (const char *)((pf)->src)) : 0)
 /**
@@ -534,13 +545,9 @@
 
 PARROT_EXPORT
 void
-PackFile_destroy(PARROT_INTERP, ARGMOD_NULLOK(PackFile *pf))
+PackFile_destroy(PARROT_INTERP, ARGMOD(PackFile *pf))
 {
     ASSERT_ARGS(PackFile_destroy)
-    if (!pf) {
-        Parrot_io_eprintf(NULL, "PackFile_destroy: pf == NULL!\n");
-        return;
-    }
 
 #ifdef PARROT_HAS_HEADER_SYSMMAN
     if (pf->is_mmap_ped) {
@@ -688,12 +695,6 @@
     Parrot_runcore_t *old_core = interp->run_core;
     PMC              *retval   = PMCNULL;
 
-    /* turn off JIT and prederef - both would act on the whole
-     * PackFile which probably isn't worth the effort */
-    if (PARROT_RUNCORE_JIT_OPS_TEST(interp->run_core)
-    ||  PARROT_RUNCORE_PREDEREF_OPS_TEST(interp->run_core))
-        Parrot_runcore_switch(interp, CONST_STRING(interp, "fast"));
-
     Parrot_pcc_set_constants(interp, CURRENT_CONTEXT(interp),
             interp->code->const_table->constants);
 
@@ -817,7 +818,7 @@
     PackFile_Constant ** const constants = find_constants(interp, ct);
     opcode_t i;
 
-    for (i = 0; i < ct->const_count; i++) {
+    for (i = 0; i < ct->const_count; ++i) {
         PMC    * pmc;
         STRING * string;
         switch (constants[i]->type) {
@@ -928,14 +929,14 @@
 
     TRACE_PRINTF(("PackFile: do_sub_pragmas (action=%d)\n", action));
 
-    for (i = 0; i < ft->fixup_count; i++) {
-        switch (ft->fixups[i]->type) {
+    for (i = 0; i < ft->fixup_count; ++i) {
+        switch (ft->fixups[i].type) {
             case enum_fixup_sub:
             {
                 /* offset is an index into const_table holding the Sub PMC */
                 PMC           *sub_pmc;
                 Parrot_Sub_attributes    *sub;
-                const opcode_t ci = ft->fixups[i]->offset;
+                const opcode_t ci = ft->fixups[i].offset;
 
                 if (ci < 0 || ci >= ct->const_count)
                     Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -953,7 +954,7 @@
 
                     /* replace Sub PMC with computation results */
                     if (action == PBC_IMMEDIATE && !PMC_IS_NULL(result)) {
-                        ft->fixups[i]->type      = enum_fixup_none;
+                        ft->fixups[i].type      = enum_fixup_none;
                         ct->constants[ci]->u.key = result;
                     }
                 }
@@ -1175,7 +1176,7 @@
     ASSERT_ARGS(PackFile_map_segments)
     size_t i;
 
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         const INTVAL ret = callback(interp, dir->segments[i], user_data);
         if (ret)
             return ret;
@@ -1200,13 +1201,13 @@
 PARROT_EXPORT
 void
 PackFile_add_segment(PARROT_INTERP, ARGMOD(PackFile_Directory *dir),
-        ARGIN(PackFile_Segment *seg))
+        ARGMOD(PackFile_Segment *seg))
 {
     ASSERT_ARGS(PackFile_add_segment)
     dir->segments = mem_gc_realloc_n_typed_zeroed(interp, dir->segments,
-            dir->num_segments+1, dir->num_segments, PackFile_Segment *);
+            dir->num_segments + 1, dir->num_segments, PackFile_Segment *);
     dir->segments[dir->num_segments] = seg;
-    dir->num_segments++;
+    ++dir->num_segments;
     seg->dir = dir;
 
     return;
@@ -1216,7 +1217,7 @@
 /*
 
 =item C<PackFile_Segment * PackFile_find_segment(PARROT_INTERP,
-PackFile_Directory *dir, STRING *name, int sub_dir)>
+PackFile_Directory *dir, const STRING *name, int sub_dir)>
 
 Finds the segment with the name C<name> in the C<PackFile_Directory> if
 C<sub_dir> is true, searches directories recursively.  The returned segment is
@@ -1231,13 +1232,13 @@
 PARROT_CAN_RETURN_NULL
 PackFile_Segment *
 PackFile_find_segment(PARROT_INTERP, ARGIN_NULLOK(PackFile_Directory *dir),
-    ARGIN(STRING *name), int sub_dir)
+    ARGIN(const STRING *name), int sub_dir)
 {
     ASSERT_ARGS(PackFile_find_segment)
     if (dir) {
         size_t i;
 
-        for (i = 0; i < dir->num_segments; i++) {
+        for (i = 0; i < dir->num_segments; ++i) {
             PackFile_Segment *seg = dir->segments[i];
 
             if (seg) {
@@ -1281,7 +1282,7 @@
     ASSERT_ARGS(PackFile_remove_segment_by_name)
     size_t i;
 
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         PackFile_Segment * const seg = dir->segments[i];
         if (Parrot_str_equal(interp, seg->name, name)) {
             dir->num_segments--;
@@ -1536,7 +1537,7 @@
         int i;
         TRACE_PRINTF(("default_unpack: pre-fetch %d ops into data\n",
                       self->size));
-        for (i = 0; i < (int)self->size; i++) {
+        for (i = 0; i < (int)self->size; ++i) {
             self->data[i] = PF_fetch_opcode(self->pf, &cursor);
             TRACE_PRINTF(("default_unpack: transformed op[#%d]/%d %u\n",
                           i, self->size, self->data[i]));
@@ -1583,7 +1584,7 @@
 default_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *self))
 {
     ASSERT_ARGS(default_dump)
-    size_t i = self->data ? 0: self->file_offset + 4;
+    size_t i = self->data ? 0: self->file_offset + SEGMENT_HEADER_SIZE;
 
     default_dump_header(interp, self);
 
@@ -1591,7 +1592,7 @@
         Parrot_io_printf(interp, "\n %04x:  ", (int) i);
 
     for (; i < (self->data ? self->size :
-            self->file_offset + self->op_count); i++) {
+            self->file_offset + self->op_count); ++i) {
 
         if (i % 8 == 0)
             Parrot_io_printf(interp, "\n %04x:  ", (int) i);
@@ -2026,7 +2027,7 @@
 
     Parrot_io_printf(interp, "\n\t# %d segments\n", dir->num_segments);
 
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         const PackFile_Segment * const seg = dir->segments[i];
 
         Parrot_io_printf(interp,
@@ -2041,7 +2042,7 @@
 
     Parrot_io_printf(interp, "]\n");
 
-    for (i = 0; i < dir->num_segments; i++)
+    for (i = 0; i < dir->num_segments; ++i)
         PackFile_Segment_dump(interp, dir->segments[i]);
 }
 
@@ -2063,7 +2064,7 @@
 directory_unpack(PARROT_INTERP, ARGMOD(PackFile_Segment *segp), ARGIN(const opcode_t *cursor))
 {
     ASSERT_ARGS(directory_unpack)
-    PackFile_Directory * const dir = (PackFile_Directory *) segp;
+    PackFile_Directory * const dir = (PackFile_Directory *)segp;
     PackFile           * const pf  = dir->base.pf;
     const opcode_t            *pos;
     size_t                     i;
@@ -2075,7 +2076,7 @@
     dir->segments = mem_gc_allocate_n_zeroed_typed(interp,
             dir->num_segments, PackFile_Segment *);
 
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         PackFile_Segment *seg;
         char             *buf;
         STRING           *name;
@@ -2094,7 +2095,7 @@
 
         /* create it */
         name = Parrot_str_new(interp, buf, strlen(buf));
-        seg = PackFile_Segment_new_seg(interp, dir, type, name, 0);
+        seg  = PackFile_Segment_new_seg(interp, dir, type, name, 0);
         mem_gc_free(interp, buf);
 
         seg->file_offset = PF_fetch_opcode(pf, &cursor);
@@ -2133,7 +2134,7 @@
         }
 
         if (i) {
-            PackFile_Segment *last = dir->segments[i-1];
+            PackFile_Segment *last = dir->segments[i - 1];
             if (last->file_offset + last->op_count != seg->file_offset)
                 fprintf(stderr, "section: sections are not back to back\n");
         }
@@ -2154,7 +2155,7 @@
                       offs, pf->src, cursor));
 
     /* and now unpack contents of dir */
-    for (i = 0; cursor && i < dir->num_segments; i++) {
+    for (i = 0; cursor && i < dir->num_segments; ++i) {
         const opcode_t * const csave = cursor;
 
         /* check len again */
@@ -2222,23 +2223,18 @@
     PackFile_Directory * const dir = (PackFile_Directory *)self;
     size_t i;
 
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         PackFile_Segment *segment = dir->segments[i];
         /* Prevent repeated destruction */
         dir->segments[i] = NULL;
 
-        /* XXX Black magic here.
-         * There are some failures that looks like a segment directory
-         * inserted into another. Until that problems gets fixed,
-         * these checks are a workaround.
-         */
-        if (segment && segment != self && segment->type != PF_DIR_SEG)
+        if (segment && segment != self)
             PackFile_Segment_destroy(interp, segment);
     }
 
     if (dir->segments) {
         mem_gc_free(interp, dir->segments);
-        dir->segments = NULL;
+        dir->segments     = NULL;
         dir->num_segments = 0;
     }
 }
@@ -2264,7 +2260,7 @@
     if (seg->type != PF_BYTEC_SEG) {
         size_t i;
 
-        for (i = 1; i < num_segs; i++) {
+        for (i = 1; i < num_segs; ++i) {
             PackFile_Segment * const s2 = dir->segments[i];
             if (s2->type == PF_BYTEC_SEG) {
                 dir->segments[0] = s2;
@@ -2279,7 +2275,7 @@
     if (seg->type != PF_FIXUP_SEG) {
         size_t i;
 
-        for (i = 2; i < num_segs; i++) {
+        for (i = 2; i < num_segs; ++i) {
             PackFile_Segment * const s2 = dir->segments[i];
             if (s2->type == PF_FIXUP_SEG) {
                 dir->segments[1] = s2;
@@ -2299,7 +2295,7 @@
     if (seg->type != PF_CONST_SEG) {
         size_t i;
 
-        for (i = 3; i < num_segs; i++) {
+        for (i = 3; i < num_segs; ++i) {
             PackFile_Segment * const s2 = dir->segments[i];
             if (s2->type == PF_CONST_SEG) {
                 dir->segments[2] = s2;
@@ -2338,8 +2334,8 @@
     /* number of segments + default, we need it for the offsets */
     size = 1 + default_packed_size(self);
 
-    for (i = 0; i < dir->num_segments; i++) {
-        char *name = Parrot_str_to_cstring(interp, dir->segments[i]->name);
+    for (i = 0; i < dir->num_segments; ++i) {
+        char * const name = Parrot_str_to_cstring(interp, dir->segments[i]->name);
         /* type, offset, size */
         size += 3;
         size += PF_size_cstring(name);
@@ -2350,7 +2346,7 @@
     if (align && size % align)
         size += (align - size % align);
 
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         size_t seg_size;
 
         dir->segments[i]->file_offset = size + self->file_offset;
@@ -2395,7 +2391,8 @@
 
     for (i = 0; i < num_segs; i++) {
         const PackFile_Segment * const seg = dir->segments[i];
-        char *name = Parrot_str_to_cstring(interp, seg->name);
+        char * const name = Parrot_str_to_cstring(interp, seg->name);
+
         *cursor++ = seg->type;
         cursor = PF_store_cstring(cursor, name);
         *cursor++ = seg->file_offset;
@@ -2416,9 +2413,8 @@
       cursor += align - (cursor - self->pf->src) % align;*/
 
     /* now pack all segments into new format */
-    for (i = 0; i < dir->num_segments; i++) {
+    for (i = 0; i < dir->num_segments; ++i) {
         PackFile_Segment * const seg = dir->segments[i];
-
         cursor = PackFile_Segment_pack(interp, seg, cursor);
     }
 
@@ -2457,7 +2453,7 @@
     self->size        = 0;
     self->data        = NULL;
     self->id          = 0;
-    self->name        = Parrot_str_copy(interp, name);
+    self->name        = name;
 }
 
 
@@ -2505,7 +2501,7 @@
 */
 
 static void
-default_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+default_destroy(PARROT_INTERP, ARGFREE_NOTNULL(PackFile_Segment *self))
 {
     ASSERT_ARGS(default_destroy)
     if (!self->pf->is_mmap_ped && self->data) {
@@ -2531,10 +2527,7 @@
 default_packed_size(ARGIN(const PackFile_Segment *self))
 {
     ASSERT_ARGS(default_packed_size)
-    /* op_count, itype, id, size */
-    /* XXX There should be a constant defining this 4, and why */
-    /* This is the 2nd place in the file that has this */
-    return 4 + self->size;
+    return SEGMENT_HEADER_SIZE + self->size;
 }
 
 
@@ -2589,16 +2582,6 @@
     ASSERT_ARGS(byte_code_destroy)
     PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
 
-    if (byte_code->prederef.code) {
-        Parrot_free_memalign(byte_code->prederef.code);
-        byte_code->prederef.code = NULL;
-
-        if (byte_code->prederef.branches) {
-            mem_gc_free(interp, byte_code->prederef.branches);
-            byte_code->prederef.branches = NULL;
-        }
-    }
-
     byte_code->fixups      = NULL;
     byte_code->const_table = NULL;
     byte_code->debugs      = NULL;
@@ -2649,11 +2632,6 @@
 {
     ASSERT_ARGS(pf_debug_destroy)
     PackFile_Debug * const debug = (PackFile_Debug *) self;
-    int i;
-
-    /* Free each mapping. */
-    for (i = 0; i < debug->num_mappings; i++)
-        mem_gc_free(interp, debug->mappings[i]);
 
     /* Free mappings pointer array. */
     mem_gc_free(interp, debug->mappings);
@@ -2682,9 +2660,7 @@
     ASSERT_ARGS(pf_debug_new)
     PackFile_Debug * const debug = mem_gc_allocate_zeroed_typed(interp, PackFile_Debug);
 
-    debug->mappings              = mem_gc_allocate_zeroed_typed(interp,
-            PackFile_DebugFilenameMapping *);
-    debug->mappings[0]           = NULL;
+    /* don't create initial mappings here; they'll get overwritten later */
 
     return (PackFile_Segment *)debug;
 }
@@ -2726,21 +2702,25 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static opcode_t *
-pf_debug_pack(SHIM_INTERP, ARGMOD(PackFile_Segment *self), ARGOUT(opcode_t *cursor))
+pf_debug_pack(PARROT_INTERP, ARGMOD(PackFile_Segment *self), ARGOUT(opcode_t *cursor))
 {
     ASSERT_ARGS(pf_debug_pack)
     PackFile_Debug * const debug = (PackFile_Debug *)self;
     const              int n     = debug->num_mappings;
     int i;
 
+    if (n > 0 && debug->mappings == NULL)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                                    "No mappings but non zero num mappings(%I)", n);
+
     /* Store number of mappings. */
     *cursor++ = n;
 
     /* Now store each mapping. */
-    for (i = 0; i < n; i++) {
+    for (i = 0; i < n; ++i) {
         /* Bytecode offset and filename. */
-        *cursor++ = debug->mappings[i]->offset;
-        *cursor++ = debug->mappings[i]->filename;
+        *cursor++ = debug->mappings[i].offset;
+        *cursor++ = debug->mappings[i].filename;
     }
 
     return cursor;
@@ -2780,20 +2760,18 @@
 
     /* Allocate space for mappings vector. */
     debug->mappings = mem_gc_allocate_n_zeroed_typed(interp,
-            debug->num_mappings + 1, PackFile_DebugFilenameMapping *);
+            debug->num_mappings, PackFile_DebugFilenameMapping);
 
     /* Read in each mapping. */
-    for (i = 0; i < debug->num_mappings; i++) {
-        /* Allocate struct and get offset and filename type. */
-        debug->mappings[i]           =
-                mem_gc_allocate_zeroed_typed(interp, PackFile_DebugFilenameMapping);
-        debug->mappings[i]->offset   = PF_fetch_opcode(self->pf, &cursor);
-        debug->mappings[i]->filename = PF_fetch_opcode(self->pf, &cursor);
+    for (i = 0; i < debug->num_mappings; ++i) {
+        /* Get offset and filename type. */
+        debug->mappings[i].offset   = PF_fetch_opcode(self->pf, &cursor);
+        debug->mappings[i].filename = PF_fetch_opcode(self->pf, &cursor);
     }
 
     /* find seg e.g. CODE_DB => CODE and attach it */
     str_len     = Parrot_str_length(interp, debug->base.name);
-    code_name   = Parrot_str_substr(interp, debug->base.name, 0, str_len - 3, NULL, 1);
+    code_name   = Parrot_str_substr(interp, debug->base.name, 0, str_len - 3);
     code        = (PackFile_ByteCode *)PackFile_find_segment(interp, self->dir, code_name, 0);
 
     if (!code || code->base.type != PF_BYTEC_SEG) {
@@ -2830,12 +2808,12 @@
     default_dump_header(interp, self);
 
     Parrot_io_printf(interp, "\n  mappings => [\n");
-    for (i = 0; i < debug->num_mappings; i++) {
+    for (i = 0; i < debug->num_mappings; ++i) {
         Parrot_io_printf(interp, "    #%d\n    [\n", i);
         Parrot_io_printf(interp, "        OFFSET => %d,\n",
-                   debug->mappings[i]->offset);
+                   debug->mappings[i].offset);
         Parrot_io_printf(interp, "        FILENAME => %Ss\n",
-                PF_CONST(debug->code, debug->mappings[i]->filename)->u.string);
+                PF_CONST(debug->code, debug->mappings[i].filename)->u.string);
         Parrot_io_printf(interp, "    ],\n");
     }
 
@@ -2918,7 +2896,7 @@
 
     /* If the previous mapping has the same filename, don't record it. */
     if (debug->num_mappings) {
-        prev_filename_n = debug->mappings[debug->num_mappings-1]->filename;
+        prev_filename_n = debug->mappings[debug->num_mappings-1].filename;
         filename_pstr = Parrot_str_new(interp, filename, 0);
         if (ct->constants[prev_filename_n]->type == PFC_STRING &&
                 Parrot_str_equal(interp, filename_pstr,
@@ -2930,18 +2908,18 @@
     /* Allocate space for the extra entry. */
     debug->mappings = mem_gc_realloc_n_typed(interp,
             debug->mappings, debug->num_mappings + 1,
-            PackFile_DebugFilenameMapping *);
+            PackFile_DebugFilenameMapping);
 
     /* Can it just go on the end? */
     if (debug->num_mappings == 0
-    ||  offset              >= debug->mappings[debug->num_mappings - 1]->offset)
+    ||  offset              >= debug->mappings[debug->num_mappings - 1].offset)
         insert_pos = debug->num_mappings;
     else {
         /* Find the right place and shift stuff that's after it. */
         int i;
 
-        for (i = 0; i < debug->num_mappings; i++) {
-            if (debug->mappings[i]->offset > offset) {
+        for (i = 0; i < debug->num_mappings; ++i) {
+            if (debug->mappings[i].offset > offset) {
                 insert_pos = i;
                 memmove(debug->mappings + i + 1, debug->mappings + i,
                     debug->num_mappings - i);
@@ -2953,14 +2931,13 @@
     /* Need to put filename in constants table. */
     {
         /* Set up new entry and insert it. */
-        PackFile_DebugFilenameMapping *mapping =
-                mem_gc_allocate_zeroed_typed(interp, PackFile_DebugFilenameMapping);
+        PackFile_DebugFilenameMapping *mapping = debug->mappings + insert_pos;
         STRING *namestr = Parrot_str_new_init(interp, filename, strlen(filename),
                 PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, 0);
         size_t count = ct->const_count;
         size_t i;
 
-        mapping->offset       = offset;
+        mapping->offset = offset;
 
         /* Check if there is already a constant with this filename */
         for (i= 0; i < count; ++i) {
@@ -2988,8 +2965,7 @@
         }
 
         /* Set the mapped value */
-        mapping->filename     = count;
-        debug->mappings[insert_pos] = mapping;
+        mapping->filename = count;
         debug->num_mappings         = debug->num_mappings + 1;
     }
 }
@@ -3018,18 +2994,18 @@
        bytecode offset. */
 
     int i;
-    for (i = 0; i < debug->num_mappings; i++) {
+    for (i = 0; i < debug->num_mappings; ++i) {
         /* If this is the last mapping or the current position is
            between this mapping and the next one, return a filename. */
        if (i + 1                          == debug->num_mappings
-       || (debug->mappings[i]->offset     <= pc
-       &&  debug->mappings[i + 1]->offset >  pc))
+       || (debug->mappings[i].offset     <= pc
+       &&  debug->mappings[i + 1].offset >  pc))
             return PF_CONST(debug->code,
-                    debug->mappings[i]->filename)->u.string;
+                    debug->mappings[i].filename)->u.string;
     }
 
     /* Otherwise, no mappings == no filename. */
-    return string_from_literal(interp, "(unknown file)");
+    return CONST_STRING(interp, "(unknown file)");
 }
 
 
@@ -3055,14 +3031,14 @@
     opcode_t n;
 
     /* TODO make an index of code segments for faster look up */
-    for (i = n = 0; i < num_segs; i++) {
+    for (i = n = 0; i < num_segs; ++i) {
         if (dir->segments[i]->type == PF_BYTEC_SEG) {
             if (n == seg) {
                 Parrot_switch_to_cs(interp, (PackFile_ByteCode *)
                         dir->segments[i], 1);
                 return;
             }
-            n++;
+            ++n;
         }
     }
 
@@ -3109,10 +3085,6 @@
                                ? find_constants(interp, new_cs->const_table)
                                : new_cs->const_table->constants);
 
-    /* new_cs->const_table->constants; */
-    Parrot_pcc_set_pred_offset(interp, CURRENT_CONTEXT(interp),
-        new_cs->base.data - (opcode_t*) new_cs->prederef.code);
-
     if (really)
         prepare_for_run(interp);
 
@@ -3297,26 +3269,20 @@
 PackFile_FixupTable_clear(PARROT_INTERP, ARGMOD(PackFile_FixupTable *self))
 {
     ASSERT_ARGS(PackFile_FixupTable_clear)
-    opcode_t i;
 
     if (!self) {
         Parrot_io_eprintf(interp, "PackFile_FixupTable_clear: self == NULL!\n");
         return;
     }
 
-    for (i = 0; i < self->fixup_count; i++) {
-        mem_gc_free(interp, self->fixups[i]->name);
-        self->fixups[i]->name = NULL;
-
-        mem_gc_free(interp, self->fixups[i]);
-        self->fixups[i] = NULL;
-    }
-
     if (self->fixup_count) {
+        opcode_t i;
+        for (i = 0; i < self->fixup_count; ++i) {
+            mem_gc_free(interp, self->fixups[i].name);
+            self->fixups[i].name = NULL;
+        }
         mem_gc_free(interp, self->fixups);
-        self->fixups = NULL;
     }
-
     self->fixups      = NULL;
     self->fixup_count = 0;
 
@@ -3361,14 +3327,14 @@
     size_t                      size = 1;
     opcode_t i;
 
-    for (i = 0; i < ft->fixup_count; i++) {
+    for (i = 0; i < ft->fixup_count; ++i) {
         /* fixup_entry type */
-        size++;
-        switch (ft->fixups[i]->type) {
+        ++size;
+        switch (ft->fixups[i].type) {
           case enum_fixup_label:
           case enum_fixup_sub:
-            size += PF_size_cstring(ft->fixups[i]->name);
-            size ++; /* offset */
+            size += PF_size_cstring(ft->fixups[i].name);
+            ++size; /* offset */
             break;
           case enum_fixup_none:
             break;
@@ -3404,13 +3370,13 @@
 
     *cursor++ = ft->fixup_count;
 
-    for (i = 0; i < ft->fixup_count; i++) {
-        *cursor++ = (opcode_t) ft->fixups[i]->type;
-        switch (ft->fixups[i]->type) {
+    for (i = 0; i < ft->fixup_count; ++i) {
+        *cursor++ = (opcode_t) ft->fixups[i].type;
+        switch (ft->fixups[i].type) {
           case enum_fixup_label:
           case enum_fixup_sub:
-            cursor    = PF_store_cstring(cursor, ft->fixups[i]->name);
-            *cursor++ = ft->fixups[i]->offset;
+            cursor    = PF_store_cstring(cursor, ft->fixups[i].name);
+            *cursor++ = ft->fixups[i].offset;
             break;
           case enum_fixup_none:
             break;
@@ -3487,7 +3453,7 @@
 
     if (self->fixup_count) {
         self->fixups = mem_gc_allocate_n_zeroed_typed(interp,
-            self->fixup_count, PackFile_FixupEntry *);
+            self->fixup_count, PackFile_FixupEntry);
 
         if (!self->fixups) {
             Parrot_io_eprintf(interp,
@@ -3498,10 +3464,8 @@
         }
     }
 
-    for (i = 0; i < self->fixup_count; i++) {
-        PackFile_FixupEntry * const entry           =
-                                    self->fixups[i] =
-                                    mem_gc_allocate_zeroed_typed(interp, PackFile_FixupEntry);
+    for (i = 0; i < self->fixup_count; ++i) {
+        PackFile_FixupEntry * const entry = self->fixups + i;
 
         entry->type = PF_fetch_opcode(pf, &cursor);
 
@@ -3560,12 +3524,11 @@
 
     i = self->fixup_count++;
     self->fixups = mem_gc_realloc_n_typed_zeroed(interp,
-            self->fixups, self->fixup_count, i, PackFile_FixupEntry *);
+            self->fixups, self->fixup_count, i, PackFile_FixupEntry);
 
-    self->fixups[i]         = mem_gc_allocate_zeroed_typed(interp, PackFile_FixupEntry);
-    self->fixups[i]->type   = type;
-    self->fixups[i]->name   = mem_sys_strdup(label);
-    self->fixups[i]->offset = offs;
+    self->fixups[i].type   = type;
+    self->fixups[i].name   = mem_sys_strdup(label);
+    self->fixups[i].offset = offs;
 }
 
 
@@ -3591,10 +3554,10 @@
 {
     ASSERT_ARGS(find_fixup)
     opcode_t i;
-    for (i = 0; i < ft->fixup_count; i++) {
-        if ((INTVAL)((enum_fixup_t)ft->fixups[i]->type) == type
-        &&  STREQ(ft->fixups[i]->name, name)) {
-            return ft->fixups[i];
+    for (i = 0; i < ft->fixup_count; ++i) {
+        if ((INTVAL)((enum_fixup_t)ft->fixups[i].type) == type
+        &&  STREQ(ft->fixups[i].name, name)) {
+            return ft->fixups + i;
         }
     }
 
@@ -3698,7 +3661,7 @@
     ASSERT_ARGS(PackFile_ConstTable_clear)
     opcode_t i;
 
-    for (i = 0; i < self->const_count; i++) {
+    for (i = 0; i < self->const_count; ++i) {
         PackFile_Constant_destroy(interp, self->constants[i]);
         self->constants[i] = NULL;
     }
@@ -3762,7 +3725,7 @@
         return NULL;
     }
 
-    for (i = 0; i < self->const_count; i++) {
+    for (i = 0; i < self->const_count; ++i) {
         TRACE_PRINTF(("PackFile_ConstTable_unpack(): Unpacking constant %ld/%ld\n",
             i, self->const_count));
         self->constants[i] = PackFile_Constant_new(interp);
@@ -3843,7 +3806,7 @@
 PackFile_Constant_new(PARROT_INTERP)
 {
     ASSERT_ARGS(PackFile_Constant_new)
-    PackFile_Constant * const self = mem_gc_allocate_zeroed_typed(interp,
+    PackFile_Constant * const self = mem_gc_allocate_typed(interp,
             PackFile_Constant);
 
     self->type = PFC_NONE;
@@ -3876,7 +3839,7 @@
 /*
 
 =item C<size_t PackFile_Constant_pack_size(PARROT_INTERP, const
-PackFile_Constant *self)>
+PackFile_Constant *self, const PackFile_ConstTable *ct)>
 
 Determines the size of the buffer needed in order to pack the PackFile Constant
 into a contiguous region of memory.
@@ -3888,7 +3851,8 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 size_t
-PackFile_Constant_pack_size(PARROT_INTERP, ARGIN(const PackFile_Constant *self))
+PackFile_Constant_pack_size(PARROT_INTERP, ARGIN(const PackFile_Constant *self), ARGIN(const
+    PackFile_ConstTable *ct))
 {
     ASSERT_ARGS(PackFile_Constant_pack_size)
     PMC    *component;
@@ -3914,7 +3878,7 @@
 
       case PFC_PMC:
         component = self->u.key; /* the pmc (Sub, ...) */
-        packed_size = PF_size_strlen(Parrot_freeze_size(interp, component));
+        packed_size = PF_size_strlen(Parrot_freeze_pbc_size(interp, component, ct));
         break;
 
       default:
@@ -4017,7 +3981,7 @@
     interp->code                      = pf->cur_cs;
     image                             = PF_fetch_string(interp, pf, &cursor);
 
-    pmc         = Parrot_thaw_constants(interp, image);
+    pmc         = Parrot_thaw_pbc(interp, image, constt);
 
     /* place item in const_table */
     self->type  = PFC_PMC;
@@ -4159,7 +4123,7 @@
 
     /* Free any keys. */
     if (self->keys) {
-        for (i = 0; i < self->num_keys; i++)
+        for (i = 0; i < self->num_keys; ++i)
             mem_gc_free(interp, self->keys[i]);
 
         mem_gc_free(interp, self->keys);
@@ -4167,14 +4131,14 @@
 
     /* Free any groups. */
     if (self->groups) {
-        for (i = 0; i < self->num_groups; i++)
+        for (i = 0; i < self->num_groups; ++i)
             mem_gc_free(interp, self->groups[i]);
         mem_gc_free(interp, self->groups);
     }
 
     /* Free any entries. */
     if (self->entries) {
-        for (i = 0; i < self->num_entries; i++)
+        for (i = 0; i < self->num_entries; ++i)
             mem_gc_free(interp, self->entries[i]);
         mem_gc_free(interp, self->entries);
     }
@@ -4220,7 +4184,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 opcode_t *
-PackFile_Annotations_pack(PARROT_INTERP, ARGIN(PackFile_Segment *seg),
+PackFile_Annotations_pack(SHIM_INTERP, ARGIN(PackFile_Segment *seg),
         ARGMOD(opcode_t *cursor))
 {
     ASSERT_ARGS(PackFile_Annotations_pack)
@@ -4230,7 +4194,7 @@
     /* Write key count and any keys. */
     *cursor++ = self->num_keys;
 
-    for (i = 0; i < self->num_keys; i++) {
+    for (i = 0; i < self->num_keys; ++i) {
         const PackFile_Annotations_Key * const key = self->keys[i];
         *cursor++ = key->name;
         *cursor++ = key->type;
@@ -4239,7 +4203,7 @@
     /* Write group count and any groups. */
     *cursor++ = self->num_groups;
 
-    for (i = 0; i < self->num_groups; i++) {
+    for (i = 0; i < self->num_groups; ++i) {
         const PackFile_Annotations_Group * const group = self->groups[i];
         *cursor++ = group->bytecode_offset;
         *cursor++ = group->entries_offset;
@@ -4248,7 +4212,7 @@
     /* Write entry count and any entries. */
     *cursor++ = self->num_entries;
 
-    for (i = 0; i < self->num_entries; i++) {
+    for (i = 0; i < self->num_entries; ++i) {
         const PackFile_Annotations_Entry * const entry = self->entries[i];
         *cursor++ = entry->bytecode_offset;
         *cursor++ = entry->key;
@@ -4276,7 +4240,7 @@
         ARGIN(const opcode_t *cursor))
 {
     ASSERT_ARGS(PackFile_Annotations_unpack)
-    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    PackFile_Annotations * const self = (PackFile_Annotations *)seg;
     PackFile_ByteCode    *code;
     STRING               *code_name;
 #if TRACE_PACKFILE
@@ -4293,7 +4257,7 @@
     self->keys     = mem_gc_allocate_n_zeroed_typed(interp,
             self->num_keys, PackFile_Annotations_Key *);
 
-    for (i = 0; i < self->num_keys; i++) {
+    for (i = 0; i < self->num_keys; ++i) {
         PackFile_Annotations_Key * const key = self->keys[i] =
                 mem_gc_allocate_zeroed_typed(interp, PackFile_Annotations_Key);
         key->name = PF_fetch_opcode(seg->pf, &cursor);
@@ -4307,7 +4271,7 @@
     self->groups     = mem_gc_allocate_n_zeroed_typed(interp,
             self->num_groups, PackFile_Annotations_Group *);
 
-    for (i = 0; i < self->num_groups; i++) {
+    for (i = 0; i < self->num_groups; ++i) {
         PackFile_Annotations_Group * const group =
             self->groups[i] = mem_gc_allocate_zeroed_typed(interp,
                     PackFile_Annotations_Group);
@@ -4323,7 +4287,7 @@
     self->num_entries = PF_fetch_opcode(seg->pf, &cursor);
     self->entries     = mem_gc_allocate_n_zeroed_typed(interp,
             self->num_entries, PackFile_Annotations_Entry *);
-    for (i = 0; i < self->num_entries; i++) {
+    for (i = 0; i < self->num_entries; ++i) {
         PackFile_Annotations_Entry * const entry =
             self->entries[i]   = mem_gc_allocate_zeroed_typed(interp,
                     PackFile_Annotations_Entry);
@@ -4334,7 +4298,7 @@
 
     /* Need to associate this segment with the applicable code segment. */
     str_len     = Parrot_str_length(interp, self->base.name);
-    code_name   = Parrot_str_substr(interp, self->base.name, 0, str_len - 4, NULL, 1);
+    code_name   = Parrot_str_substr(interp, self->base.name, 0, str_len - 4);
     code        = (PackFile_ByteCode *)PackFile_find_segment(interp,
                                 self->base.dir, code_name, 0);
 
@@ -4366,14 +4330,14 @@
 PackFile_Annotations_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *seg))
 {
     ASSERT_ARGS(PackFile_Annotations_dump)
-    const PackFile_Annotations *self = (const PackFile_Annotations *)seg;
+    const PackFile_Annotations * const self = (const PackFile_Annotations *)seg;
     INTVAL                      i;
 
     default_dump_header(interp, (const PackFile_Segment *)self);
 
     /* Dump keys. */
     Parrot_io_printf(interp, "\n  keys => [\n");
-    for (i = 0; i < self->num_keys; i++) {
+    for (i = 0; i < self->num_keys; ++i) {
         const PackFile_Annotations_Key * const key = self->keys[i];
         Parrot_io_printf(interp, "    #%d\n    [\n", i);
         Parrot_io_printf(interp, "        NAME => %Ss\n",
@@ -4390,7 +4354,7 @@
 
     /* Dump groups. */
     Parrot_io_printf(interp, "\n  groups => [\n");
-    for (i = 0; i < self->num_groups; i++) {
+    for (i = 0; i < self->num_groups; ++i) {
         const PackFile_Annotations_Group * const group = self->groups[i];
         Parrot_io_printf(interp, "    #%d\n    [\n", i);
         Parrot_io_printf(interp, "        BYTECODE_OFFSET => %d\n",
@@ -4405,7 +4369,7 @@
     /* Dump entries. */
     Parrot_io_printf(interp, "\n  entries => [\n");
 
-    for (i = 0; i < self->num_entries; i++) {
+    for (i = 0; i < self->num_entries; ++i) {
         const PackFile_Annotations_Entry * const entry = self->entries[i];
         Parrot_io_printf(interp, "    #%d\n    [\n", i);
         Parrot_io_printf(interp, "        BYTECODE_OFFSET => %d\n",
@@ -4439,25 +4403,24 @@
         opcode_t offset)
 {
     ASSERT_ARGS(PackFile_Annotations_add_group)
+    PackFile_Annotations_Group *group;
 
     /* Allocate extra space for the group in the groups array. */
     if (self->groups)
-        self->groups =
-            self->groups = mem_gc_realloc_n_typed_zeroed(interp, self->groups,
-                1 + self->num_groups, self->num_groups, PackFile_Annotations_Group *);
+        self->groups = mem_gc_realloc_n_typed_zeroed(interp, self->groups,
+            1 + self->num_groups, self->num_groups, PackFile_Annotations_Group *);
     else
         self->groups = mem_gc_allocate_n_typed(interp,
                 1 + self->num_groups, PackFile_Annotations_Group *);
 
     /* Store details. */
-    self->groups[self->num_groups]                  =
-                            mem_gc_allocate_zeroed_typed(interp,
-                                    PackFile_Annotations_Group);
-    self->groups[self->num_groups]->bytecode_offset = offset;
-    self->groups[self->num_groups]->entries_offset  = self->num_entries;
+    group = self->groups[self->num_groups] =
+                mem_gc_allocate_zeroed_typed(interp, PackFile_Annotations_Group);
+    group->bytecode_offset = offset;
+    group->entries_offset  = self->num_entries;
 
     /* Increment group count. */
-    self->num_groups++;
+    ++self->num_groups;
 }
 
 
@@ -4484,12 +4447,12 @@
 {
     ASSERT_ARGS(PackFile_Annotations_add_entry)
     /* See if we already have this key. */
-    STRING  *key_name = PF_CONST(self->code, key)->u.string;
+    STRING  * const key_name = PF_CONST(self->code, key)->u.string;
     opcode_t key_id   = -1;
     INTVAL   i;
 
-    for (i = 0; i < self->num_keys; i++) {
-        STRING *test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
+    for (i = 0; i < self->num_keys; ++i) {
+        STRING * const test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
         if (Parrot_str_equal(interp, test_key, key_name)) {
             key_id = i;
             break;
@@ -4507,7 +4470,7 @@
 
         key_id             = self->num_keys;
         self->keys[key_id] = mem_gc_allocate_typed(interp, PackFile_Annotations_Key);
-        self->num_keys++;
+        ++self->num_keys;
 
         /* Populate it. */
         self->keys[key_id]->name = key;
@@ -4536,7 +4499,7 @@
     self->entries[self->num_entries]->key             = key_id;
     self->entries[self->num_entries]->value           = value;
 
-    self->num_entries++;
+    ++self->num_entries;
 }
 
 
@@ -4562,8 +4525,7 @@
 
     switch (type) {
       case PF_ANNOTATION_KEY_TYPE_INT:
-        result = Parrot_pmc_new(interp, enum_class_Integer);
-        VTABLE_set_integer_native(interp, result, value);
+        result = Parrot_pmc_new_init_int(interp, enum_class_Integer, value);
         break;
       case PF_ANNOTATION_KEY_TYPE_NUM:
         result = Parrot_pmc_new(interp, enum_class_Float);
@@ -4608,8 +4570,8 @@
     /* If we have a key, look up its ID; if we don't find one. */
     opcode_t key_id = -1;
 
-    if (key) {
-        for (i = 0; i < self->num_keys; i++) {
+    if (!STRING_IS_NULL(key)) {
+        for (i = 0; i < self->num_keys; ++i) {
             STRING * const test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
             if (Parrot_str_equal(interp, test_key, key)) {
                 key_id = i;
@@ -4622,7 +4584,7 @@
     }
 
     /* Use groups to find search start point. */
-    for (i = 0; i < self->num_groups; i++)
+    for (i = 0; i < self->num_groups; ++i)
         if (offset < self->groups[i]->bytecode_offset)
             break;
         else
@@ -4636,7 +4598,7 @@
         opcode_t *have_values   = mem_gc_allocate_n_zeroed_typed(interp,
                 self->num_keys, opcode_t);
 
-        for (i = start_entry; i < self->num_entries; i++) {
+        for (i = start_entry; i < self->num_entries; ++i) {
             if (self->entries[i]->bytecode_offset >= offset)
                 break;
 
@@ -4647,7 +4609,7 @@
         /* Create hash of values we have. */
         result = Parrot_pmc_new(interp, enum_class_Hash);
 
-        for (i = 0; i < self->num_keys; i++) {
+        for (i = 0; i < self->num_keys; ++i) {
             if (have_values[i]) {
                 STRING * const key_name = PF_CONST(self->code, self->keys[i]->name)->u.string;
                 VTABLE_set_pmc_keyed_str(interp, result, key_name,
@@ -4664,7 +4626,7 @@
         opcode_t latest_value = 0;
         opcode_t found_value  = 0;
 
-        for (i = start_entry; i < self->num_entries; i++) {
+        for (i = start_entry; i < self->num_entries; ++i) {
             if (self->entries[i]->bytecode_offset >= offset)
                 break;
 
@@ -4723,7 +4685,7 @@
         pf->header = NULL;
         mem_gc_free(interp, pf->dirp);
         pf->dirp   = NULL;
-
+        /* no need to free pf here, as directory_destroy will get it */
     }
     else {
         STRING *err;
@@ -4770,10 +4732,10 @@
 
     /* Full path to language library is "abc/abc.pbc". */
     pbc = CONST_STRING(interp, "pbc");
-    wo_ext   = Parrot_str_concat(interp, lang_name, CONST_STRING(interp, "/"), 0);
-    wo_ext   = Parrot_str_append(interp, wo_ext, lang_name);
-    file_str = Parrot_str_concat(interp, wo_ext, CONST_STRING(interp, "."), 0);
-    file_str = Parrot_str_append(interp, file_str, pbc);
+    wo_ext   = Parrot_str_concat(interp, lang_name, CONST_STRING(interp, "/"));
+    wo_ext   = Parrot_str_concat(interp, wo_ext, lang_name);
+    file_str = Parrot_str_concat(interp, wo_ext, CONST_STRING(interp, "."));
+    file_str = Parrot_str_concat(interp, file_str, pbc);
 
     /* Check if the language is already loaded */
     is_loaded_hash = VTABLE_get_pmc_keyed_int(interp,
@@ -4798,13 +4760,13 @@
     parrot_split_path_ext(interp, path, &found_path, &found_ext);
     name_length = Parrot_str_length(interp, lang_name);
     found_path = Parrot_str_substr(interp, found_path, 0,
-            Parrot_str_length(interp, found_path)-name_length, NULL, 0);
+            Parrot_str_length(interp, found_path)-name_length);
 
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "include/")),
             PARROT_LIB_PATH_INCLUDE);
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "dynext/")),
             PARROT_LIB_PATH_DYNEXT);
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "library/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "library/")),
             PARROT_LIB_PATH_LIBRARY);
 
 
@@ -4840,6 +4802,12 @@
     PackFile * const pf = Parrot_pbc_read(interp, filename, 0);
 
     if (pf) {
+        /* An embedder can try to load_bytecode without having an initial_pf */
+        if (!interp->initial_pf) {
+            interp->initial_pf = PackFile_new_dummy(interp, CONST_STRING(interp, "dummy"));
+            /* PackFile_new_dummy must never fail */
+            PARROT_ASSERT(interp->initial_pf);
+        }
         PackFile_add_segment(interp, &interp->initial_pf->directory,
                 &pf->directory.base);
 

Modified: branches/ops_pct/src/packfile/pf_items.c
==============================================================================
--- branches/ops_pct/src/packfile/pf_items.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/packfile/pf_items.c	Wed May  5 08:45:29 2010	(r46302)
@@ -153,14 +153,6 @@
 static opcode_t fetch_op_le_8(ARGIN(const unsigned char *b))
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
-static opcode_t fetch_op_mixed_be(ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-static opcode_t fetch_op_mixed_le(ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1);
-
 #define ASSERT_ARGS_cvt_num12_num16 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest) \
     , PARROT_ASSERT_ARG(src))
@@ -211,10 +203,6 @@
        PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_fetch_op_le_8 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_op_mixed_be __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_op_mixed_le __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(b))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -323,7 +311,7 @@
         dest[7] |= 0x80;
     /* long double frac 63 bits => 52 bits
        src[7] &= 0x7f; reset integer bit */
-    for (i = 0; i < 6; i++) {
+    for (i = 0; i < 6; ++i) {
         dest[i+1] |= (i==5 ? src[7]&0x7f : src[i+2]) >> 3;
         dest[i] |= (src[i+2] & 0x1f) << 5;
     }
@@ -552,7 +540,7 @@
             dest[7] |= 0x80;
         /* long double frac 112 bits => 52 bits
            src[13] &= 0x7f; reset integer bit */
-        for (i = 0; i < 6; i++) {
+        for (i = 0; i < 6; ++i) {
             dest[i+1] |= (i==5 ? src[13]&0x7f : src[i+7]) >> 3;
             dest[i] |= (src[i+7] & 0x1f) << 5;
         }
@@ -819,86 +807,6 @@
 }
 #endif
 
-#if 0
-
-/*
-
-=item C<static opcode_t fetch_op_mixed_le(const unsigned char *b)>
-
-opcode fetch helper function
-
-This is mostly wrong or at least untested
-
-Fetch an opcode and convert to LE
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static opcode_t
-fetch_op_mixed_le(ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_op_mixed_le)
-#  if OPCODE_T_SIZE == 4
-    union {
-        unsigned char buf[8];
-        opcode_t o[2];
-    } u;
-    /* wordsize = 8 then */
-    fetch_buf_le_8(u.buf, b);
-    return u.o[0]; /* or u.o[1] */
-#  else
-    union {
-        unsigned char buf[4];
-        opcode_t o;
-    } u;
-
-    /* wordsize = 4 */
-    u.o = 0;
-    fetch_buf_le_4(u.buf, b);
-    return u.o;
-#  endif
-}
-
-/*
-
-=item C<static opcode_t fetch_op_mixed_be(const unsigned char *b)>
-
-Fetch an opcode and convert to BE. Determines size of opcode from
-C<OPCODE_T_SIZE> macro, and proceeds accordingly.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static opcode_t
-fetch_op_mixed_be(ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_op_mixed_be)
-#  if OPCODE_T_SIZE == 4
-    union {
-        unsigned char buf[8];
-        opcode_t o[2];
-    } u;
-    /* wordsize = 8 then */
-    fetch_buf_be_8(u.buf, b);
-    return u.o[1]; /* or u.o[0] */
-#  else
-    union {
-        unsigned char buf[4];
-        opcode_t o;
-    } u;
-    /* wordsize = 4 */
-    u.o = 0;
-    fetch_buf_be_4(u.buf, b);
-    return u.o;
-#  endif
-}
-
-#endif
-
 /*
 
 =item C<static opcode_t fetch_op_be_4(const unsigned char *b)>
@@ -984,14 +892,16 @@
         unsigned char buf[4];
         opcode_t o;
     } u;
-    fetch_buf_le_4(u.buf, b);
 #if PARROT_BIGENDIAN
+    fetch_buf_le_4(u.buf, b);
 #  if OPCODE_T_SIZE == 8
     return (Parrot_Int4)(u.o >> 32);
 #  else
     return (opcode_t) fetch_iv_be((INTVAL)u.o);
 #  endif
 #else
+    /* inlining the effects of the fetch_buf_le_4() call is worth it */
+    memcpy(u.buf, b, 4);
 #  if OPCODE_T_SIZE == 8
     /* without the cast we would not get a negative int, the vtable indices */
     return (Parrot_Int4)(u.o & 0xffffffff);
@@ -1288,9 +1198,7 @@
 
 Opcode format is:
 
-    opcode_t flags
-    opcode_t encoding
-    opcode_t type
+    opcode_t flags8 | encoding
     opcode_t size
     * data
 
@@ -1307,23 +1215,28 @@
 {
     ASSERT_ARGS(PF_fetch_string)
     STRING   *s;
-    UINTVAL   flags    = PF_fetch_opcode(pf, cursor);
-    const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
+    UINTVAL   flags;
+    UINTVAL   charset_nr;
     size_t    size;
-    opcode_t  charset_nr;
+    const int wordsize          = pf ? pf->header->wordsize : sizeof (opcode_t);
+    opcode_t  flag_charset_word = PF_fetch_opcode(pf, cursor);
+
+    if (flag_charset_word == -1)
+        return STRINGNULL;
 
-    /* don't let PBC mess our internals - only constant or not */
-    flags      &= (PObj_constant_FLAG | PObj_private7_FLAG);
-    charset_nr  = PF_fetch_opcode(pf, cursor);
+    /* decode flags and charset */
+    flags         = (flag_charset_word & 0x1 ? PObj_constant_FLAG : 0) |
+                    (flag_charset_word & 0x2 ? PObj_private7_FLAG : 0) ;
+    charset_nr    = flag_charset_word >> 8;
 
-    /* These may need to be separate */
-    size        = (size_t)PF_fetch_opcode(pf, cursor);
+
+    size = (size_t)PF_fetch_opcode(pf, cursor);
 
     TRACE_PRINTF(("PF_fetch_string(): flags=0x%04x, ", flags));
     TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
     TRACE_PRINTF(("size=%ld.\n", size));
 
-    s            = string_make_from_charset(interp, (const char *)*cursor,
+    s = string_make_from_charset(interp, (const char *)*cursor,
                         size, charset_nr, flags);
 
     /* print only printable characters */
@@ -1370,7 +1283,12 @@
         padded_size += sizeof (opcode_t) - (padded_size % sizeof (opcode_t));
     }
 
-    *cursor++ = PObj_get_FLAGS(s); /* only constant_FLAG and private7 */
+    if (STRING_IS_NULL(s)) {
+        /* preserve NULL-ness of strings */
+        *cursor++ = -1;
+        return cursor;
+    }
+
     /*
      * TODO as soon as we have dynamically loadable charsets
      *      we have to store the charset name, not the number
@@ -1379,7 +1297,11 @@
      *
      * see also PF_fetch_string
      */
-    *cursor++ = Parrot_charset_number_of_str(NULL, s);
+
+    /* encode charset_nr and flags into the same word for a 33% savings on constant overhead */
+    *cursor++ = (Parrot_charset_number_of_str(NULL, s) << 8)         |
+                (PObj_get_FLAGS(s) & PObj_constant_FLAG ? 0x1 : 0x0) |
+                (PObj_get_FLAGS(s) & PObj_private7_FLAG ? 0x2 : 0x0) ;
     *cursor++ = s->bufused;
 
     /* Switch to char * since rest of string is addressed by
@@ -1417,7 +1339,10 @@
     ASSERT_ARGS(PF_size_string)
     /* TODO: don't break encapsulation on strings */
     const UINTVAL len = s->bufused;
-    return PF_size_strlen(len);
+    if (STRING_IS_NULL(s))
+        return 1;
+    else
+        return PF_size_strlen(len);
 }
 
 /*
@@ -1442,7 +1367,7 @@
     }
 
     /* Include space for flags, representation, and size fields.  */
-    return 3 + (size_t)padded_size / sizeof (opcode_t);
+    return 2 + (size_t)padded_size / sizeof (opcode_t);
 }
 
 /*

Modified: branches/ops_pct/src/packout.c
==============================================================================
--- branches/ops_pct/src/packout.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/packout.c	Wed May  5 08:45:29 2010	(r46302)
@@ -112,7 +112,7 @@
     padding_size = 16 - (PACKFILE_HEADER_BYTES + self->header->uuid_size) % 16;
     if (padding_size < 16) {
         int i;
-        for (i = 0; i < padding_size; i++)
+        for (i = 0; i < padding_size; ++i)
             *byte_cursor++ = 0;
     }
     else {
@@ -162,8 +162,8 @@
     const PackFile_ConstTable* const self = (const PackFile_ConstTable *) seg;
     size_t size = 1;    /* const_count */
 
-    for (i = 0; i < self->const_count; i++)
-        size += PackFile_Constant_pack_size(interp, self->constants[i]);
+    for (i = 0; i < self->const_count; ++i)
+        size += PackFile_Constant_pack_size(interp, self->constants[i], self);
     return size;
 }
 
@@ -197,7 +197,7 @@
 
     *cursor++ = self->const_count;
 
-    for (i = 0; i < self->const_count; i++)
+    for (i = 0; i < self->const_count; ++i)
         cursor = PackFile_Constant_pack(interp, self, self->constants[i], cursor);
 
     return cursor;
@@ -228,7 +228,7 @@
     GETATTR_Key_str_key(interp, key, key_str);
     GETATTR_Key_num_key(interp, key, key_num);
 
-    for (i = 0; i < ct->const_count; i++) {
+    for (i = 0; i < ct->const_count; ++i) {
         if (type == PFC_STRING && ct->constants[i]->u.string == key_str)
             return i;
         if (type == PFC_NUMBER && ct->constants[i]->u.number == key_num)
@@ -286,12 +286,12 @@
 
       case PFC_PMC:
         key = self->u.key;      /* the (Sub) PMC */
-        image = Parrot_freeze(interp, key);
+        image = Parrot_freeze_pbc(interp, key, const_table);
         cursor = PF_store_string(cursor, image);
         break;
 
       case PFC_KEY:
-        for (i = 0, key = self->u.key; key; i++){
+        for (i = 0, key = self->u.key; key; ++i){
             GETATTR_Key_next_key(interp, key, key);
         }
 

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

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

Modified: branches/ops_pct/src/pbc_merge.c
==============================================================================
--- branches/ops_pct/src/pbc_merge.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pbc_merge.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2005-2009, Parrot Foundation.
+Copyright (C) 2005-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -126,14 +126,11 @@
 static void pbc_merge_fixups(PARROT_INTERP,
     ARGIN(pbc_merge_input **inputs),
     int num_inputs,
-    ARGMOD(PackFile *pf),
-    ARGMOD(PackFile_ByteCode *bc))
+    ARGMOD(PackFile *pf))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*pf)
-        FUNC_MODIFIES(*bc);
+        FUNC_MODIFIES(*pf);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
@@ -176,8 +173,7 @@
 #define ASSERT_ARGS_pbc_merge_fixups __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(inputs) \
-    , PARROT_ASSERT_ARG(pf) \
-    , PARROT_ASSERT_ARG(bc))
+    , PARROT_ASSERT_ARG(pf))
 #define ASSERT_ARGS_pbc_merge_loadpbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(fullname))
@@ -329,7 +325,7 @@
     }
 
     /* Loop over input files. */
-    for (i = 0; i < num_inputs; i++) {
+    for (i = 0; i < num_inputs; ++i) {
         /* Get the bytecode segment from the input file. */
         PackFile_ByteCode * const in_seg = inputs[i]->pf->cur_cs;
         if (in_seg == NULL) {
@@ -397,7 +393,7 @@
     }
 
     /* Loop over input files. */
-    for (i = 0; i < num_inputs; i++) {
+    for (i = 0; i < num_inputs; ++i) {
 
         /* Get the constant table segment from the input file. */
         PackFile_ConstTable * const in_seg = inputs[i]->pf->cur_cs->const_table;
@@ -418,7 +414,7 @@
                     cursor + in_seg->const_count, PackFile_Constant*);
 
         /* Loop over the constants and copy them to the output PBC. */
-        for (j = 0; j < in_seg->const_count; j++) {
+        for (j = 0; j < in_seg->const_count; ++j) {
             /* Get the entry and allocate space for copy. */
             PackFile_Constant *cur_entry = in_seg->constants[j];
             PackFile_Constant *copy      = mem_gc_allocate_typed(interp,
@@ -428,27 +424,27 @@
             /* If it's a sub PMC, need to deal with offsets. */
             if (copy->type == PFC_PMC) {
                 switch (copy->u.key->vtable->base_type) {
-                  case enum_class_Sub:
-                  case enum_class_Coroutine:
-                    {
-                        Parrot_Sub_attributes *sub;
-                        PMC_get_sub(interp, copy->u.key, sub);
-                        sub->start_offs += inputs[i]->code_start;
-                        sub->end_offs += inputs[i]->code_start;
-                    }
-                    break;
-                  default:
-                    break;
+                    case enum_class_Sub:
+                    case enum_class_Coroutine:
+                        {
+                            Parrot_Sub_attributes *sub;
+                            PMC_get_sub(interp, copy->u.key, sub);
+                            sub->start_offs += inputs[i]->code_start;
+                            sub->end_offs += inputs[i]->code_start;
+                        }
+                        break;
+                    default:
+                        break;
                 }
             }
 
             inputs[i]->const_map[input_const_num] = output_const_num;
-            input_const_num++;
-            output_const_num++;
+            ++input_const_num;
+            ++output_const_num;
 
             /* Slot it into the list. */
             constants[cursor] = copy;
-            cursor++;
+            ++cursor;
         }
     }
 
@@ -464,7 +460,7 @@
 /*
 
 =item C<static void pbc_merge_fixups(PARROT_INTERP, pbc_merge_input **inputs,
-int num_inputs, PackFile *pf, PackFile_ByteCode *bc)>
+int num_inputs, PackFile *pf)>
 
 This function merges the fixups tables from the input PBC files.
 
@@ -474,14 +470,13 @@
 
 static void
 pbc_merge_fixups(PARROT_INTERP, ARGIN(pbc_merge_input **inputs),
-                 int num_inputs, ARGMOD(PackFile *pf), ARGMOD(PackFile_ByteCode *bc))
+                 int num_inputs, ARGMOD(PackFile *pf))
 {
     ASSERT_ARGS(pbc_merge_fixups)
     PackFile_FixupTable  *fixup_seg;
-    PackFile_FixupEntry **fixups = mem_gc_allocate_typed(interp,
-            PackFile_FixupEntry *);
+    PackFile_FixupEntry  *fixups = NULL;
     opcode_t              cursor = 0;
-    int                   i, j;
+    int                   i;
 
     /* Add a fixup table segment. */
     fixup_seg = (PackFile_FixupTable*)PackFile_Segment_new_seg(
@@ -493,9 +488,11 @@
     }
 
     /* Loop over input files. */
-    for (i = 0; i < num_inputs; i++) {
+    for (i = 0; i < num_inputs; ++i) {
         /* Get the fixup segment from the input file. */
         PackFile_FixupTable * const in_seg = inputs[i]->pf->cur_cs->fixups;
+        int j;
+
         if (in_seg == NULL) {
             Parrot_io_eprintf(interp,
                 "PBC Merge: Cannot locate fixup segment in %s",
@@ -506,17 +503,17 @@
         /* Allocate space for these fixups, provided we have some. */
         if (in_seg->fixup_count > 0) {
             fixups = mem_gc_realloc_n_typed(interp, fixups,
-                    cursor + in_seg->fixup_count, PackFile_FixupEntry*);
+                    cursor + in_seg->fixup_count, PackFile_FixupEntry);
         }
 
         /* Loop over the fixups and copy them to the output PBC, correcting
            the offsets into the bytecode. */
-        for (j = 0; j < in_seg->fixup_count; j++) {
+        for (j = 0; j < in_seg->fixup_count; ++j) {
             /* Get the entry and allocate space for copies. */
-            PackFile_FixupEntry *cur_entry = in_seg->fixups[j];
-            PackFile_FixupEntry *copy      = mem_gc_allocate_typed(interp,
-                    PackFile_FixupEntry);
-            char *name_copy = mem_gc_allocate_n_typed(interp,
+            const PackFile_FixupEntry * const cur_entry = in_seg->fixups + j;
+            PackFile_FixupEntry * const copy =
+                mem_gc_allocate_typed(interp, PackFile_FixupEntry);
+            char * const name_copy = mem_gc_allocate_n_typed(interp,
                     strlen(cur_entry->name) + 1, char);
 
             /* Copy type and name. */
@@ -526,20 +523,20 @@
 
             /* Set new offset and bytecode pointer. */
             switch (copy->type) {
-              case enum_fixup_label:
-                copy->offset = cur_entry->offset + inputs[i]->code_start;
-                break;
-              case enum_fixup_sub:
-                copy->offset = cur_entry->offset + inputs[i]->const_start;
-                break;
-              default:
-                Parrot_io_eprintf(interp, "PBC Merge: Unknown fixup type");
-                Parrot_exit(interp, 1);
+                case enum_fixup_label:
+                    copy->offset = cur_entry->offset + inputs[i]->code_start;
+                    break;
+                case enum_fixup_sub:
+                    copy->offset = cur_entry->offset + inputs[i]->const_start;
+                    break;
+                default:
+                    Parrot_io_eprintf(interp, "PBC Merge: Unknown fixup type");
+                    Parrot_exit(interp, 1);
             }
 
             /* Slot it into the list. */
-            fixups[cursor] = copy;
-            cursor++;
+            fixups[cursor] = *copy;
+            ++cursor;
         }
     }
 
@@ -568,19 +565,20 @@
     PackFile_Debug                 *debug_seg;
     opcode_t                       *lines    = mem_gc_allocate_typed(interp,
                                                 opcode_t);
-    PackFile_DebugFilenameMapping **mappings =
-        mem_gc_allocate_typed(interp, PackFile_DebugFilenameMapping *);
+    PackFile_DebugFilenameMapping *mappings =
+        mem_gc_allocate_typed(interp, PackFile_DebugFilenameMapping);
 
     opcode_t num_mappings = 0;
     opcode_t num_lines    = 0;
 
-    int      i, j;
+    int i;
 
     /* We need to merge both the mappings and the list of line numbers.
        The line numbers can just be concatenated. The mappings must have
        their offsets fixed up. */
-    for (i = 0; i < num_inputs; i++) {
-        PackFile_Debug *in_seg = inputs[i]->pf->cur_cs->debugs;
+    for (i = 0; i < num_inputs; ++i) {
+        const PackFile_Debug * const in_seg = inputs[i]->pf->cur_cs->debugs;
+        int j;
 
         /* Concatenate line numbers. */
         lines = mem_gc_realloc_n_typed(interp, lines,
@@ -592,15 +590,14 @@
         /* Concatenate mappings. */
         mappings = mem_gc_realloc_n_typed(interp, mappings,
                 num_mappings + in_seg->num_mappings,
-                PackFile_DebugFilenameMapping*);
+                PackFile_DebugFilenameMapping);
 
-        for (j = 0; j < in_seg->num_mappings; j++) {
-            PackFile_DebugFilenameMapping *mapping = mem_gc_allocate_typed(
-                    interp, PackFile_DebugFilenameMapping);
-            STRUCT_COPY(mapping, in_seg->mappings[j]);
+        for (j = 0; j < in_seg->num_mappings; ++j) {
+            PackFile_DebugFilenameMapping *mapping = mappings + num_mappings + j;
+
+            STRUCT_COPY_FROM_STRUCT(mapping, in_seg->mappings[j]);
             mapping->offset   += num_lines;
             mapping->filename += inputs[i]->const_start;
-            mappings[num_mappings + j] = mapping;
         }
 
         num_lines    += in_seg->base.size - 1;
@@ -650,31 +647,31 @@
         /* Keep track of the current input file. */
         if (cur_input + 1 < num_inputs &&
             cur_op >= inputs[cur_input + 1]->code_start)
-            cur_input++;
+            ++cur_input;
 
         /* Get info about this op and jump over it. */
         op_num = ops[cur_op];
         op     = &interp->op_info_table[op_num];
         op_ptr = ops + cur_op;
-        cur_op++;
+        ++cur_op;
 
         /* Loop over the arguments. */
-        for (cur_arg = 1; cur_arg < op->op_count; cur_arg++) {
+        for (cur_arg = 1; cur_arg < op->op_count; ++cur_arg) {
             /* Pick out any indexes into the constant table and correct them. */
             switch (op->types[cur_arg - 1]) {
-              case PARROT_ARG_NC:
-              case PARROT_ARG_PC:
-              case PARROT_ARG_SC:
-              case PARROT_ARG_NAME_SC:
-              case PARROT_ARG_KC:
-                ops[cur_op] = inputs[cur_input]->const_map[ ops[cur_op] ];
-                break;
-              default:
-                break;
+                case PARROT_ARG_NC:
+                case PARROT_ARG_PC:
+                case PARROT_ARG_SC:
+                case PARROT_ARG_NAME_SC:
+                case PARROT_ARG_KC:
+                    ops[cur_op] = inputs[cur_input]->const_map[ ops[cur_op] ];
+                    break;
+                default:
+                    break;
             }
 
             /* Move along the bytecode array. */
-            cur_op++;
+            ++cur_op;
         }
 
         /* Handle special case variable argument opcodes. */
@@ -687,19 +684,19 @@
 
             /* Loop over the arguments to locate any that need a fixup. */
             const int sig_items = VTABLE_elements(interp, sig);
-            for (cur_arg = 0; cur_arg < sig_items; cur_arg++) {
+            for (cur_arg = 0; cur_arg < sig_items; ++cur_arg) {
                 switch (VTABLE_get_integer_keyed_int(interp, sig, cur_arg)) {
-                  case PARROT_ARG_NC:
-                  case PARROT_ARG_PC:
-                  case PARROT_ARG_SC:
-                  case PARROT_ARG_NAME_SC:
-                  case PARROT_ARG_KC:
-                    ops[cur_op] = inputs[cur_input]->const_map[ ops[cur_op] ];
-                    break;
-                  default:
-                    break;
+                    case PARROT_ARG_NC:
+                    case PARROT_ARG_PC:
+                    case PARROT_ARG_SC:
+                    case PARROT_ARG_NAME_SC:
+                    case PARROT_ARG_KC:
+                        ops[cur_op] = inputs[cur_input]->const_map[ ops[cur_op] ];
+                        break;
+                    default:
+                        break;
                 }
-                cur_op++;
+                ++cur_op;
             }
         }
     }
@@ -734,10 +731,10 @@
     }
 
     /* calculate how many constants are stored in the packfiles to be merged */
-    for (i = 0; i < num_inputs; i++) {
+    for (i = 0; i < num_inputs; ++i) {
         PackFile_Directory *pf_dir = &inputs[i]->pf->directory;
         unsigned int j = 0;
-        for (j = 0; j < pf_dir->num_segments; j++) {
+        for (j = 0; j < pf_dir->num_segments; ++j) {
             PackFile_Segment *seg = (PackFile_Segment *)pf_dir->segments[j];
             if (seg->type == PF_CONST_SEG) {
                 opcode_t const_count = ((PackFile_ConstTable *)seg)->const_count;
@@ -752,13 +749,13 @@
     ct = pbc_merge_constants(interp, inputs, num_inputs, merged, bc);
     UNUSED(ct);
 
-    pbc_merge_fixups(interp, inputs, num_inputs, merged, bc);
+    pbc_merge_fixups(interp, inputs, num_inputs, merged);
     pbc_merge_debugs(interp, inputs, num_inputs, merged, bc);
 
     /* Walk bytecode and fix ops that reference the constants table. */
     pbc_merge_ctpointers(interp, inputs, num_inputs, bc);
 
-    for (i = 0; i < num_inputs; i++) {
+    for (i = 0; i < num_inputs; ++i) {
         mem_gc_free(interp, inputs[i]->const_map);
     }
 
@@ -841,17 +838,17 @@
     }
     while ((status = longopt_get(interp, argc, argv, options, &opt)) > 0) {
         switch (opt.opt_id) {
-          case 'o':
-            if (output_file == NULL)
-                output_file = opt.opt_arg;
-            else
+            case 'o':
+                if (output_file == NULL)
+                    output_file = opt.opt_arg;
+                else
+                    help(interp);
+                break;
+            case '?':
                 help(interp);
-            break;
-          case '?':
-            help(interp);
-            break;
-          default:
-            break;
+                break;
+            default:
+                break;
         }
     }
     if (status == -1 || !output_file) {
@@ -864,7 +861,7 @@
        structure for each of them. */
     input_files = mem_gc_allocate_n_typed(interp, argc, pbc_merge_input*);
 
-    for (i = 0; i < argc; i++) {
+    for (i = 0; i < argc; ++i) {
         /* Allocate a struct. */
         input_files[i] = mem_gc_allocate_typed(interp, pbc_merge_input);
 
@@ -882,7 +879,7 @@
         }
 
         /* Next file. */
-        argv++;
+        ++argv;
     }
 
     /* Merge. */

Modified: branches/ops_pct/src/pmc.c
==============================================================================
--- branches/ops_pct/src/pmc.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc.c	Wed May  5 08:45:29 2010	(r46302)
@@ -48,8 +48,7 @@
 PARROT_CANNOT_RETURN_NULL
 static PMC* Parrot_pmc_reuse_noinit(PARROT_INTERP,
     ARGIN(PMC *pmc),
-    INTVAL new_type,
-    SHIM(UINTVAL flags))
+    INTVAL new_type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -81,10 +80,13 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_HOT
 INTVAL
 Parrot_pmc_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc))
 {
     ASSERT_ARGS(Parrot_pmc_is_null)
+    /* We can't use PMC_IS_NULL() because that calls us here in some cases */
 #if PARROT_CATCH_NULL
     return pmc == PMCNULL || pmc == NULL;
 #else
@@ -117,9 +119,6 @@
 
     PObj_gc_CLEAR(pmc);
 
-    if (PObj_is_PMC_shared_TEST(pmc) && PMC_sync(pmc))
-        Parrot_gc_free_pmc_sync(interp, pmc);
-
     if (pmc->vtable->attr_size)
         Parrot_gc_free_pmc_attributes(interp, pmc);
     else
@@ -189,10 +188,10 @@
 PARROT_IGNORABLE_RESULT
 PMC *
 Parrot_pmc_reuse(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    UINTVAL flags)
+    SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse)
-    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type, flags);
+    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
 
     /* Call the base init for the redone pmc. Warning, this should not
        be called on Object PMCs. */
@@ -223,10 +222,10 @@
 PARROT_IGNORABLE_RESULT
 PMC *
 Parrot_pmc_reuse_init(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type, ARGIN(PMC *init),
-          UINTVAL flags)
+          SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse_init)
-    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type, flags);
+    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
 
     /* Call the base init for the redone pmc. Warning, this should not
        be called on Object PMCs. */
@@ -238,43 +237,39 @@
 /*
 
 =item C<static PMC* Parrot_pmc_reuse_noinit(PARROT_INTERP, PMC *pmc, INTVAL
-new_type, UINTVAL flags)>
+new_type)>
 
 Prepare pmc for reuse. Do all scuffolding except initing.
 
 =cut
 
 */
+
 PARROT_CANNOT_RETURN_NULL
 static PMC*
-Parrot_pmc_reuse_noinit(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    SHIM(UINTVAL flags)) {
-
+Parrot_pmc_reuse_noinit(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type)
+{
     ASSERT_ARGS(Parrot_pmc_reuse_noinit)
-    VTABLE *new_vtable;
-    INTVAL  new_flags = 0;
 
-    if (pmc->vtable->base_type == new_type)
-        return pmc;
+    if (pmc->vtable->base_type != new_type) {
+        VTABLE * const new_vtable = interp->vtables[new_type];
 
-    new_vtable = interp->vtables[new_type];
+        /* Singleton/const PMCs/types are not eligible */
+        check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
 
-    /* Singleton/const PMCs/types are not eligible */
-    check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
+        /* Free the old PMC resources. */
+        Parrot_pmc_destroy(interp, pmc);
 
-    /* Free the old PMC resources. */
-    Parrot_pmc_destroy(interp, pmc);
+        PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG);
 
-    PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | new_flags);
+        /* Set the right vtable */
+        pmc->vtable = new_vtable;
 
-    /* Set the right vtable */
-    pmc->vtable = new_vtable;
-
-    if (new_vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
-
-    else
-        PMC_data(pmc) = NULL;
+        if (new_vtable->attr_size)
+            Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        else
+            PMC_data(pmc) = NULL;
+    }
 
     return pmc;
 }
@@ -302,26 +297,25 @@
 {
     ASSERT_ARGS(Parrot_pmc_reuse_by_class)
     const INTVAL   new_type   = PARROT_CLASS(class_)->id;
-    VTABLE * const new_vtable = interp->vtables[new_type];
-    INTVAL         new_flags  = flags;
 
-    if (pmc->vtable->base_type == new_type)
-        return pmc;
+    if (pmc->vtable->base_type != new_type) {
+        VTABLE * const new_vtable = interp->vtables[new_type];
 
-    /* Singleton/const PMCs/types are not eligible */
-    check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
+        /* Singleton/const PMCs/types are not eligible */
+        check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
 
-    Parrot_pmc_destroy(interp, pmc);
+        Parrot_pmc_destroy(interp, pmc);
 
-    PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | new_flags);
+        PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | flags);
 
-    /* Set the right vtable */
-    pmc->vtable = new_vtable;
+        /* Set the right vtable */
+        pmc->vtable = new_vtable;
 
-    if (new_vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
-    else
-        PMC_data(pmc) = NULL;
+        if (new_vtable->attr_size)
+            Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        else
+            PMC_data(pmc) = NULL;
+    }
 
     return pmc;
 }
@@ -392,7 +386,7 @@
 get_new_pmc_header(PARROT_INTERP, INTVAL base_type, UINTVAL flags)
 {
     ASSERT_ARGS(get_new_pmc_header)
-    PMC    *pmc;
+    PMC    *newpmc;
     VTABLE *vtable = interp->vtables[base_type];
     UINTVAL vtable_flags;
 
@@ -444,9 +438,6 @@
          * const PMC is const too
          * see e.g. t/pmc/sarray_13.pir
          */
-#if 0
-        flags |= PObj_constant_FLAG;
-#endif
         --base_type;
         vtable = interp->vtables[base_type];
     }
@@ -454,13 +445,13 @@
     if (vtable_flags & VTABLE_IS_SHARED_FLAG)
         flags |= PObj_is_PMC_shared_FLAG;
 
-    pmc            = Parrot_gc_new_pmc_header(interp, flags);
-    pmc->vtable    = vtable;
+    newpmc         = Parrot_gc_new_pmc_header(interp, flags);
+    newpmc->vtable = vtable;
 
     if (vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        Parrot_gc_allocate_pmc_attributes(interp, newpmc);
 
-    return pmc;
+    return newpmc;
 }
 
 
@@ -582,9 +573,10 @@
     PMC *const classobj = interp->vtables[base_type]->pmc_class;
 
     if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj)) {
-        PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        PMC * const initial =
+          Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
         VTABLE_set_integer_native(interp, initial, init);
-        VTABLE_instantiate(interp, classobj, initial);
+        return VTABLE_instantiate(interp, classobj, initial);
     }
     else {
         PMC * const pmc = get_new_pmc_header(interp, base_type, 0);
@@ -621,13 +613,37 @@
 
 /*
 
+=item C<PMC * Parrot_pmc_new_constant_init_int(PARROT_INTERP, INTVAL base_type,
+INTVAL init)>
+
+As C<Parrot_pmc_new_constant>, but passes C<init> to the PMC's C<init_int> vtable
+entry.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC *
+Parrot_pmc_new_constant_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+{
+    ASSERT_ARGS(Parrot_pmc_new_constant_init_int)
+    PMC * const pmc = get_new_pmc_header(interp, base_type, PObj_constant_FLAG);
+    VTABLE_init_int(interp, pmc, init);
+    return pmc;
+}
+
+
+/*
+
 =item C<PMC * Parrot_pmc_new_temporary(PARROT_INTERP, INTVAL base_type)>
 
 Creates a new temporary PMC of type C<base_type>, then call C<init>. Cannot
 be used to create PMC Objects which have been defined from PIR.
 
 B<You> are responsible for freeing this PMC when it goes out of scope with
-C<free_temporary_pmc()>.  B<Do not> store this PMC in any other PMCs, or
+C<Parrot_pmc_free_temporary()>.  B<Do not> store this PMC in any other PMCs, or
 allow it to be stored.  B<Do not> store any regular PMC in this PMC, or
 allow the storage of any regular PMC in this PMC. Temporary PMCs do not
 participate in garbage collection, and mixing them with PMCs that are
@@ -791,9 +807,7 @@
 {
     ASSERT_ARGS(Parrot_pmc_get_type)
     PMC * const classname_hash = interp->class_hash;
-    PMC * item;
-
-    item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
+    PMC * const item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
 
     if (!PMC_IS_NULL(item))
         return VTABLE_get_integer(interp, item);
@@ -835,7 +849,6 @@
     &&  (_class == _class->vtable->pmc_class))
         interp->vtables[type]->pmc_class = _class;
     else {
-        Parrot_gc_free_pmc_sync(interp, _class);
         gc_flag_CLEAR(is_special_PMC, _class);
         PObj_is_PMC_shared_CLEAR(_class);
         interp->vtables[type]->pmc_class = _class;
@@ -860,9 +873,9 @@
 Parrot_pmc_create_mro(PARROT_INTERP, INTVAL type)
 {
     ASSERT_ARGS(Parrot_pmc_create_mro)
-    PMC    *_class, *mro;
+    PMC    *mro;
     VTABLE *vtable   = interp->vtables[type];
-    PMC    *mro_list = vtable->mro;
+    PMC    * const mro_list = vtable->mro;
     INTVAL  i, count;
 
     /* this should never be PMCNULL */
@@ -881,8 +894,9 @@
     count = VTABLE_elements(interp, mro_list);
 
     for (i = 0; i < count; ++i) {
-        STRING *class_name  = VTABLE_get_string_keyed_int(interp, mro_list, i);
-        INTVAL  parent_type = Parrot_pmc_get_type_str(interp, class_name);
+        STRING * const class_name = VTABLE_get_string_keyed_int(interp, mro_list, i);
+        const INTVAL parent_type  = Parrot_pmc_get_type_str(interp, class_name);
+        PMC *_class;
 
         /* abstract classes don't have a vtable */
         if (!parent_type)
@@ -962,6 +976,52 @@
 
 /*
 
+=item C<INTVAL Parrot_pmc_type_does(PARROT_INTERP, STRING *role, INTVAL type)>
+
+Checks to see if PMCs of the given type does the given role. Checks
+C<<vtable->provides_str>> to find a match.
+Returns true (1) if B<role> is found, false (0) otherwise.
+
+=cut
+
+*/
+
+INTVAL
+Parrot_pmc_type_does(PARROT_INTERP, ARGIN(STRING *role), INTVAL type)
+{
+    ASSERT_ARGS(Parrot_pmc_type_does)
+
+    INTVAL pos = 0;
+    STRING * const what = interp->vtables[type]->provides_str;
+    INTVAL length = Parrot_str_byte_length(interp, what);
+
+    do {
+        INTVAL len;
+        const INTVAL idx = Parrot_str_find_index(interp, what, role, (INTVAL)pos);
+
+        if ((idx < 0) || (idx >= length))
+            return 0;
+
+        pos = idx;
+        len = Parrot_str_byte_length(interp, role);
+
+        if (pos && (Parrot_str_indexed(interp, what, pos - 1) != 32)) {
+            pos += len;
+            continue;
+        }
+
+        if (pos + len < length) {
+            pos += len;
+            if (Parrot_str_indexed(interp, what, pos) != 32)
+                continue;
+        }
+
+        return 1;
+    } while (1);
+}
+
+/*
+
 =back
 
 =head1 SEE ALSO
@@ -971,10 +1031,6 @@
 C<5.1.0.14.2.20011008152120.02158148 at pop.sidhe.org>
 (http://www.nntp.perl.org/group/perl.perl6.internals/5516).
 
-=head1 HISTORY
-
-Initial version by Simon on 2001.10.20.
-
 =cut
 
 */

Modified: branches/ops_pct/src/pmc/addrregistry.pmc
==============================================================================
--- branches/ops_pct/src/pmc/addrregistry.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/addrregistry.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -28,6 +28,10 @@
 #include "parrot/hash.h"
 #include "pmc/pmc_hash.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass AddrRegistry extends Hash provides hash auto_attrs {
 /*
 
@@ -73,7 +77,7 @@
         Hash       *hash;
         const void *value;
 
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
         value = parrot_hash_get(INTERP, hash, key);
 
         if (value)
@@ -85,7 +89,7 @@
     VTABLE INTVAL elements() {
         const Hash *hash;
 
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
 
         return parrot_hash_size(INTERP, hash);
     }
@@ -93,7 +97,7 @@
     VTABLE INTVAL get_bool() {
         const Hash *hash;
 
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
 
         return parrot_hash_size(INTERP, hash) != 0;
     }
@@ -124,7 +128,7 @@
         Hash       *hash;
         UNUSED(value);
 
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
 
         oldval = parrot_hash_get(INTERP, hash, key);
 
@@ -136,7 +140,7 @@
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
         Hash *hash;
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
         parrot_hash_put(INTERP, hash, key, (void *)value);
     }
 
@@ -144,7 +148,7 @@
         Hash       *hash;
         void       *value;
 
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
         value = parrot_hash_get(INTERP, hash, key);
 
         /* these casts look bad, but they avoid type punning warnings with -O */

Modified: branches/ops_pct/src/pmc/arrayiterator.pmc
==============================================================================
--- branches/ops_pct/src/pmc/arrayiterator.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/arrayiterator.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -40,7 +40,7 @@
 
 NB: for different direction you have to use different ops!
 
-TODO: Discuss idea of having separate get_iter/get_reverse_iter VTABLE methods
+TODO: Discuss idea of having separate get_iter/get_reverse_iter VTABLEs
 to avoid this caveat.
 
 =head1 Methods
@@ -51,6 +51,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ArrayIterator extends Iterator no_ro auto_attrs {
     ATTR PMC    *array;     /* the array which this Iterator iterates */
     ATTR INTVAL  pos;       /* Current position of iterator for forward iterator */
@@ -86,7 +90,7 @@
 
     VTABLE void init_pmc(PMC *array) {
 
-        SET_ATTR_array(interp, SELF, array);
+        SET_ATTR_array(INTERP, SELF, array);
 
         PObj_custom_mark_SET(SELF);
 
@@ -124,14 +128,14 @@
         PMC   *array;
         PMC   *clone;
 
-        GET_ATTR_array(interp, SELF, array);
-        GET_ATTR_pos(interp, SELF, pos);
-        GET_ATTR_reverse(interp, SELF, reverse);
+        GET_ATTR_array(INTERP, SELF, array);
+        GET_ATTR_pos(INTERP, SELF, pos);
+        GET_ATTR_reverse(INTERP, SELF, reverse);
 
         clone = Parrot_pmc_new_init(INTERP, enum_class_ArrayIterator, array);
 
-        SET_ATTR_pos(interp, clone, pos);
-        SET_ATTR_reverse(interp, clone, reverse);
+        SET_ATTR_pos(INTERP, clone, pos);
+        SET_ATTR_reverse(INTERP, clone, reverse);
 
         return clone;
     }
@@ -163,15 +167,15 @@
     VTABLE INTVAL elements() {
         INTVAL reverse, pos, length;
 
-        GET_ATTR_reverse(interp, SELF, reverse);
+        GET_ATTR_reverse(INTERP, SELF, reverse);
 
         if (reverse) {
-            GET_ATTR_pos(interp, SELF, pos);
+            GET_ATTR_pos(INTERP, SELF, pos);
             return pos;
         }
         else {
-            GET_ATTR_length(interp, SELF, length);
-            GET_ATTR_pos(interp, SELF, pos);
+            GET_ATTR_length(INTERP, SELF, length);
+            GET_ATTR_pos(INTERP, SELF, pos);
             return length - pos;
         }
     }
@@ -197,18 +201,18 @@
         PMC *array;
 
         if (value == ITERATE_FROM_START) {
-            GET_ATTR_array(interp, SELF, array);
-            SET_ATTR_reverse(interp, SELF, 0);
-            SET_ATTR_pos(interp, SELF, 0);
-            SET_ATTR_length(interp, SELF, VTABLE_elements(INTERP, array));
+            GET_ATTR_array(INTERP, SELF, array);
+            SET_ATTR_reverse(INTERP, SELF, 0);
+            SET_ATTR_pos(INTERP, SELF, 0);
+            SET_ATTR_length(INTERP, SELF, VTABLE_elements(INTERP, array));
         }
         else if (value == ITERATE_FROM_END) {
             INTVAL element;
-            GET_ATTR_array(interp, SELF, array);
+            GET_ATTR_array(INTERP, SELF, array);
             element = VTABLE_elements(INTERP, array);
-            SET_ATTR_reverse(interp, SELF, 1);
-            SET_ATTR_length(interp, SELF, element);
-            SET_ATTR_pos(interp, SELF, element);
+            SET_ATTR_reverse(INTERP, SELF, 1);
+            SET_ATTR_length(INTERP, SELF, element);
+            SET_ATTR_pos(INTERP, SELF, element);
         }
         else
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,

Modified: branches/ops_pct/src/pmc/bigint.pmc
==============================================================================
--- branches/ops_pct/src/pmc/bigint.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/bigint.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -14,9 +14,9 @@
 
 =over 4
 
-=item C<static void bigint_set_long(Interp*, PMC *, long value)>
+=item C<static void bigint_set_long(PARROT_INTERP, PMC *self, long value)>
 
-=item C<static void bigint_set_double(Interp*, PMC *, double value)>
+=item C<static void bigint_set_double(PARROT_INTERP, PMC *self, double value)>
 
 =cut
 
@@ -35,15 +35,370 @@
 } BIGINT;
 
 
-static void
-bigint_init(PARROT_INTERP, PMC *self) {
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void bigint_abs(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_add_bigint(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_add_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bigint_clear(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL bigint_cmp(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL bigint_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bigint_div_bigint(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_div_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_fdiv_bigint(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGMOD(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*value)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_fdiv_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+PARROT_WARN_UNUSED_RESULT
+static int bigint_get_bool(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static double bigint_get_double(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static long bigint_get_long(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static BIGINT* bigint_get_self(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char * bigint_get_string(PARROT_INTERP, ARGIN(PMC *self), int base)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bigint_init(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bigint_mod_bigint(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGMOD(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*value)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_mod_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_mul_bigint(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_mul_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_neg(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_pow_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_set(PARROT_INTERP, ARGMOD(PMC *dest), ARGIN(PMC *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_set_double(PARROT_INTERP,
+    ARGMOD(PMC *self),
+    double value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+static void bigint_set_long(PARROT_INTERP, ARGMOD(PMC *self), long value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+static void bigint_set_self(PARROT_INTERP,
+    ARGMOD(PMC *self),
+    ARGIN(BIGINT *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*self);
+
+static void bigint_set_str(PARROT_INTERP,
+    ARGMOD(PMC *self),
+    ARGIN(const char *value),
+    int base)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*self);
+
+static void bigint_sub_bigint(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bigint_sub_bigint_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void int_check_divide_zero(PARROT_INTERP, INTVAL value)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_bigint_abs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_add_bigint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_add_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_check_divide_zero __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_bigint_clear __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_bigint_cmp_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_div_bigint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_div_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_fdiv_bigint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_fdiv_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_get_bool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_get_double __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_get_long __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_get_self __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_get_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_mod_bigint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_mod_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_mul_bigint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_mul_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_neg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_pow_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_set __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(dest) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_bigint_set_double __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_set_long __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bigint_set_self __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_bigint_set_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_bigint_sub_bigint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bigint_sub_bigint_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_int_check_divide_zero __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 */
+/* HEADERIZER HFILE: none */
+
+static void
+bigint_init(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(bigint_init)
+
     BIGINT * const bi = mem_gc_allocate_zeroed_typed(interp, BIGINT);
     SETATTR_BigInt_bi(interp, self, bi);
     mpz_init(bi->b);
 }
 
 static void
-bigint_clear(PARROT_INTERP, PMC *self) {
+bigint_clear(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(bigint_clear)
+
     BIGINT * bi;
     GETATTR_BigInt_bi(interp, self, bi);
     mpz_clear(bi->b);
@@ -51,7 +406,10 @@
 }
 
 static void
-bigint_set(PARROT_INTERP, PMC *dest, PMC *src) {
+bigint_set(PARROT_INTERP, ARGMOD(PMC *dest), ARGIN(PMC *src))
+{
+    ASSERT_ARGS(bigint_set)
+
     BIGINT *bi_dest, *bi_src;
     GETATTR_BigInt_bi(interp, dest, bi_dest);
     GETATTR_BigInt_bi(interp, src,  bi_src);
@@ -61,42 +419,63 @@
 }
 
 static void
-bigint_set_long(PARROT_INTERP, PMC *self, long value) {
+bigint_set_long(PARROT_INTERP, ARGMOD(PMC *self), long value)
+{
+    ASSERT_ARGS(bigint_set_long)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     mpz_set_si(bi->b, value);
 }
 
 static void
-bigint_set_double(PARROT_INTERP, PMC *self, double value) {
+bigint_set_double(PARROT_INTERP, ARGMOD(PMC *self), double value)
+{
+    ASSERT_ARGS(bigint_set_double)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     mpz_set_d(bi->b, value);
 }
 
 static void
-bigint_set_str(PARROT_INTERP, PMC *self, char *value, int base) {
+bigint_set_str(PARROT_INTERP, ARGMOD(PMC *self), ARGIN(const char *value), int base)
+{
+    ASSERT_ARGS(bigint_set_str)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     mpz_set_str(bi->b, value, base);
 }
 
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static BIGINT*
-bigint_get_self(PARROT_INTERP, PMC *self) {
+bigint_get_self(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(bigint_get_self)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     return bi;
 }
 
 static void
-bigint_set_self(PARROT_INTERP, PMC *self, BIGINT *value) {
+bigint_set_self(PARROT_INTERP, ARGMOD(PMC *self), ARGIN(BIGINT *value))
+{
+    ASSERT_ARGS(bigint_set_self)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     mpz_set(bi->b, (mpz_srcptr)((BIGINT*)value)->b);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static long
-bigint_get_long(PARROT_INTERP, PMC *self) {
+bigint_get_long(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(bigint_get_long)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     if (mpz_fits_slong_p(bi->b))
@@ -105,8 +484,12 @@
     Parrot_ex_throw_from_c_args(interp, NULL, 1, "bigint_get_long: number too big");
 }
 
+PARROT_WARN_UNUSED_RESULT
 static int
-bigint_get_bool(PARROT_INTERP, PMC *self) {
+bigint_get_bool(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(bigint_get_bool)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     if (mpz_sgn(bi->b) != 0)
@@ -115,8 +498,13 @@
         return 0;
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 static char *
-bigint_get_string(PARROT_INTERP, PMC *self, int base) {
+bigint_get_string(PARROT_INTERP, ARGIN(PMC *self), int base)
+{
+    ASSERT_ARGS(bigint_get_string)
+
     BIGINT *bi;
     size_t  n;
     char   *s;
@@ -127,15 +515,22 @@
     return mpz_get_str(s, base, bi->b);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static double
-bigint_get_double(PARROT_INTERP, PMC *self) {
+bigint_get_double(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(bigint_get_double)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     return mpz_get_d(bi->b);
 }
 
 static void
-bigint_add_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_add_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_add_bigint)
+
     BIGINT *bi_self, *bi_value, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, value, bi_value);
@@ -144,7 +539,10 @@
 }
 
 static void
-bigint_add_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_add_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_add_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -155,7 +553,10 @@
 }
 
 static void
-bigint_sub_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_sub_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_sub_bigint)
+
     BIGINT *bi_self, *bi_value, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, value, bi_value);
@@ -164,7 +565,10 @@
 }
 
 static void
-bigint_sub_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_sub_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_sub_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -175,7 +579,10 @@
 }
 
 static void
-bigint_mul_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_mul_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_mul_bigint)
+
     BIGINT *bi_self, *bi_value, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, value, bi_value);
@@ -184,7 +591,10 @@
 }
 
 static void
-bigint_mul_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_mul_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_mul_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -192,7 +602,10 @@
 }
 
 static void
-bigint_pow_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_pow_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_pow_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -200,14 +613,18 @@
 }
 
 static void
-int_check_divide_zero(PARROT_INTERP, INTVAL value) {
+int_check_divide_zero(PARROT_INTERP, INTVAL value)
+{
     if (value == 0)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_DIV_BY_ZERO,
             "Divide by zero");
 }
 
 static void
-bigint_check_divide_zero(PARROT_INTERP, PMC *value) {
+bigint_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
+{
+    ASSERT_ARGS(bigint_check_divide_zero)
+
     /* Throw an exception if we are dividing by zero. */
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, value, bi);
@@ -217,7 +634,10 @@
 }
 
 static void
-bigint_div_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_div_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_div_bigint)
+
     BIGINT *bi_self, *bi_value, *bi_dest;
     bigint_check_divide_zero(interp, value);
     GETATTR_BigInt_bi(interp, self, bi_self);
@@ -228,7 +648,10 @@
 }
 
 static void
-bigint_div_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_div_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_div_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -244,7 +667,10 @@
 }
 
 static void
-bigint_fdiv_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_fdiv_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *value), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_fdiv_bigint)
+
     BIGINT *bi_self, *bi_value, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, value, bi_value);
@@ -254,7 +680,10 @@
 }
 
 static void
-bigint_fdiv_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_fdiv_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_fdiv_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -269,7 +698,10 @@
 }
 
 static void
-bigint_mod_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_mod_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *value), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_mod_bigint)
+
     BIGINT *bi_self, *bi_value, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, value, bi_value);
@@ -279,7 +711,10 @@
 }
 
 static void
-bigint_mod_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_mod_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_mod_bigint_int)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -292,23 +727,34 @@
         mpz_mod_ui(bi_dest->b, bi_self->b, (unsigned long int)value);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-bigint_cmp(PARROT_INTERP, PMC *self, PMC *value) {
+bigint_cmp(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value))
+{
+    ASSERT_ARGS(bigint_cmp)
+
     BIGINT *bi_self, *bi_value;
     GETATTR_BigInt_bi(interp, self,  bi_self);
     GETATTR_BigInt_bi(interp, value, bi_value);
     return mpz_cmp(bi_self->b, bi_value->b);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-bigint_cmp_int(PARROT_INTERP, PMC *self, INTVAL value) {
+bigint_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value)
+{
+    ASSERT_ARGS(bigint_cmp_int)
+
     BIGINT *bi;
     GETATTR_BigInt_bi(interp, self, bi);
     return mpz_cmp_si(bi->b, value);
 }
 
 static void
-bigint_abs(PARROT_INTERP, PMC *self, PMC *dest) {
+bigint_abs(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_abs)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
@@ -316,13 +762,18 @@
 }
 
 static void
-bigint_neg(PARROT_INTERP, PMC *self, PMC *dest) {
+bigint_neg(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
+{
+    ASSERT_ARGS(bigint_neg)
+
     BIGINT *bi_self, *bi_dest;
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
     mpz_neg(bi_dest->b, bi_self->b);
 }
 
+/* HEADERIZER STOP */
+
 #else /* ifdef PARROT_HAS_GMP */
 
 typedef struct BIGINT {
@@ -330,19 +781,19 @@
 } BIGINT;
 
 static void
-bigint_init(PARROT_INTERP, PMC *self) {
+bigint_init(PARROT_INTERP, ARGIN(PMC *self)) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_clear(PARROT_INTERP, PMC *self) {
+bigint_clear(PARROT_INTERP, ARGIN(PMC *self)) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_set_long(PARROT_INTERP, PMC *self, long value) {
+bigint_set_long(PARROT_INTERP, ARGIN(PMC *self), long value) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
@@ -354,151 +805,151 @@
 }
 
 static void
-bigint_set_double(PARROT_INTERP, PMC *self, double value) {
+bigint_set_double(PARROT_INTERP, ARGIN(PMC *self), double value) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_set_str(PARROT_INTERP, PMC *self, char *value, int base) {
+bigint_set_str(PARROT_INTERP, ARGIN(PMC *self), char *value, int base) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_set_self(PARROT_INTERP, PMC *self, BIGINT *value) {
+bigint_set_self(PARROT_INTERP, ARGIN(PMC *self), BIGINT *value) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static BIGINT*
-bigint_get_self(PARROT_INTERP, PMC *self) {
+bigint_get_self(PARROT_INTERP, ARGIN(PMC *self)) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static char *
-bigint_get_string(PARROT_INTERP, PMC *self, int base) {
+bigint_get_string(PARROT_INTERP, ARGIN(PMC *self), int base) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static long
-bigint_get_long(PARROT_INTERP, PMC *self) {
+bigint_get_long(PARROT_INTERP, ARGIN(PMC *self)) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
-static long
-bigint_get_bool(PARROT_INTERP, PMC *self) {
+static int
+bigint_get_bool(PARROT_INTERP, ARGIN(PMC *self)) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static double
-bigint_get_double(PARROT_INTERP, PMC *self) {
+bigint_get_double(PARROT_INTERP, ARGIN(PMC *self)) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_add_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_add_bigint(PARROT_INTERP, ARGIN(PMC *self), PMC *value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_add_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_add_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_sub_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_sub_bigint(PARROT_INTERP, ARGIN(PMC *self), PMC *value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_sub_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_sub_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_mul_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_mul_bigint(PARROT_INTERP, ARGIN(PMC *self), PMC *value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_mul_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_mul_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_pow_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_pow_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_div_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_div_bigint(PARROT_INTERP, ARGIN(PMC *self), PMC *value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_div_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_div_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_fdiv_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_fdiv_bigint(PARROT_INTERP, ARGIN(PMC *self), PMC *value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_fdiv_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_fdiv_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_mod_bigint(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bigint_mod_bigint(PARROT_INTERP, ARGIN(PMC *self), PMC *value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_mod_bigint_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bigint_mod_bigint_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static INTVAL
-bigint_cmp(PARROT_INTERP, PMC *self, PMC *value) {
+bigint_cmp(PARROT_INTERP, ARGIN(PMC *self), PMC *value) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static INTVAL
-bigint_cmp_int(PARROT_INTERP, PMC *self, INTVAL value) {
+bigint_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_abs(PARROT_INTERP, PMC *self, PMC *dest) {
+bigint_abs(PARROT_INTERP, ARGIN(PMC *self), PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
 
 static void
-bigint_neg(PARROT_INTERP, PMC *self, PMC *dest) {
+bigint_neg(PARROT_INTERP, ARGIN(PMC *self), PMC *dest) {
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no bigint lib loaded");
 }
@@ -692,7 +1143,7 @@
 
     VTABLE STRING *get_repr() {
         STRING * const s = SELF.get_string();
-        return Parrot_str_append(INTERP, s, CONST_STRING(INTERP, "L"));
+        return Parrot_str_concat(INTERP, s, CONST_STRING(INTERP, "L"));
     }
 /*
 
@@ -732,7 +1183,7 @@
     MULTI PMC *add(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -741,7 +1192,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'add' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *add_int(INTVAL value, PMC *dest) {
@@ -756,14 +1207,14 @@
     }
 
     MULTI void i_add(Integer value) {
-        bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
 
     MULTI void i_add(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'i_add' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_add_int(INTVAL value) {
@@ -788,7 +1239,7 @@
     MULTI PMC *subtract(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -797,7 +1248,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'subtract' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
@@ -812,14 +1263,14 @@
     }
 
     MULTI void i_subtract(Integer value) {
-        bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
 
     MULTI void i_subtract(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'i_subtract' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_subtract_int(INTVAL value) {
@@ -844,7 +1295,7 @@
     MULTI PMC *multiply(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -853,7 +1304,7 @@
          Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'multiply' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
@@ -867,13 +1318,13 @@
         bigint_mul_bigint(INTERP, SELF, value, SELF);
     }
     MULTI void i_multiply(Integer value) {
-        bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
     MULTI void i_multiply(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'i_multiply' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_multiply_int(INTVAL value) {
@@ -901,22 +1352,13 @@
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_div_bigint(INTERP, SELF, value, dest);
-#if 0
-        /* to downgrade or not that's the question */
-        GETATTR_BigInt_bi(interp, dest, bi);
-        if (mpz_fits_slong_p(bi->b)) {
-            long iresult = mpz_get_si(bi->b);
-            VTABLE_morph(interp, dest, enum_class_Integer);
-            VTABLE_set_integer_native(interp, dest, iresult);
-        }
-#endif
         return dest;
     }
 
     MULTI PMC *divide(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -925,7 +1367,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
@@ -939,13 +1381,13 @@
         bigint_div_bigint(INTERP, SELF, value, SELF);
     }
     MULTI void i_divide(Integer value) {
-        bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
     MULTI void i_divide(DEFAULT value) {
          Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'i_divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_divide_int(INTVAL value) {
@@ -962,7 +1404,7 @@
     MULTI PMC *floor_divide(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -971,7 +1413,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'floor_divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
@@ -986,14 +1428,14 @@
     }
 
     MULTI void i_floor_divide(Integer value) {
-        bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
 
     MULTI void i_floor_divide(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'i_floor_divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_floor_divide_int(INTVAL value) {
@@ -1010,7 +1452,7 @@
     MULTI PMC *modulus(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -1019,20 +1461,20 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'modulus' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     MULTI void i_modulus(BigInt value) {
         bigint_mod_bigint(INTERP, SELF, value, SELF);
     }
     MULTI void i_modulus(Integer value) {
-        bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
     MULTI void i_modulus(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'i_modulus' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     MULTI INTVAL cmp(BigInt value) {
@@ -1040,14 +1482,14 @@
     }
 
     MULTI INTVAL cmp(Integer value) {
-        return bigint_cmp_int(INTERP, SELF, VTABLE_get_integer(interp, value));
+        return bigint_cmp_int(INTERP, SELF, VTABLE_get_integer(INTERP, value));
     }
 
     MULTI INTVAL cmp(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'cmp' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     MULTI INTVAL is_equal(BigInt value) {
@@ -1055,14 +1497,14 @@
     }
 
     MULTI INTVAL is_equal(Integer value) {
-        return bigint_cmp_int(INTERP, SELF, VTABLE_get_integer(interp, value)) == 0;
+        return bigint_cmp_int(INTERP, SELF, VTABLE_get_integer(INTERP, value)) == 0;
     }
 
     MULTI INTVAL is_equal(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigInt: no multiple dispatch variant 'is_equal' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
 /*

Modified: branches/ops_pct/src/pmc/bignum.pmc
==============================================================================
--- branches/ops_pct/src/pmc/bignum.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/bignum.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -41,91 +41,112 @@
 
 =over 4
 
-=item C<static void bignum_init(Interp*, PMC *self)>
+=item C<static void bignum_init(PARROT_INTERP, PMC *self)>
 
-=item C<static void bignum_clear(Interp*, PMC *self)>
+=item C<static void bignum_clear(PARROT_INTERP, PMC *self)>
 
-=item C<static void bignum_set(Interp*, PMC *dest, PMC *src)>
+=item C<static void bignum_set(PARROT_INTERP, PMC *dest, PMC *src)>
 
-=item C<static void bignum_set_si(Interp*, PMC *self, long value)>
+=item C<static void bignum_set_si(PARROT_INTERP, PMC *self, long value)>
 
-=item C<static void bignum_set_ui(Interp*, PMC *self, unsigned long value)>
+=item C<static void bignum_set_ui(PARROT_INTERP, PMC *self, unsigned long
+value)>
 
-=item C<static void bignum_set_float(Interp*, PMC *self, FLOATVAL value)>
+=item C<static void bignum_set_float(PARROT_INTERP, PMC *self, FLOATVAL value)>
 
-=item C<static void bignum_set_double(Interp*, PMC *self, double value)>
+=item C<static void bignum_set_double(PARROT_INTERP, PMC *self, double value)>
 
-=item C<static void bignum_set_str(Interp*, PMC *self, char *value, int base)>
+=item C<static void bignum_set_str(PARROT_INTERP, PMC *self, const char *value,
+int base)>
 
-=item C<static void bignum_set_bigint(Interp*, PMC *self, struct BIGINT *value)>
+=item C<static void bignum_set_bigint(PARROT_INTERP, PMC *self, struct BIGINT
+*value)>
 
-=item C<static BIGNUM* bignum_get_self(Interp*, PMC *self)>
+=item C<static BIGNUM* bignum_get_self(PARROT_INTERP, PMC *self)>
 
-=item C<static void bignum_set_self(Interp*, PMC *self, BIGNUM *value)>
+=item C<static void bignum_set_self(PARROT_INTERP, PMC *self, BIGNUM *value)>
 
-=item C<static long bignum_get_si(Interp*, PMC *self)>
+=item C<static long bignum_get_si(PARROT_INTERP, PMC *self)>
 
-=item C<static unsigned long bignum_get_ui(Interp*, PMC *self)>
+=item C<static unsigned long bignum_get_ui(PARROT_INTERP, PMC *self)>
 
-=item C<static int bignum_get_bool(Interp*, PMC *self)>
+=item C<static INTVAL bignum_get_bool(PARROT_INTERP, ARGIN(PMC *self))>
 
-=item C<static char* bignum_get_string(Interp*, PMC *self, int base)>
+=item C<static char * bignum_get_string(PARROT_INTERP, PMC *self, int base)>
 
-=item C<static char* bignum_get_string_size(Interp*, PMC *self, int base, int digits)>
+=item C<static char * bignum_get_string_size(PARROT_INTERP, PMC *self, int base,
+int digits)>
 
-=item C<static double bignum_get_double(Interp*, PMC *self)>
+=item C<static double bignum_get_double(PARROT_INTERP, PMC *self)>
 
-=item C<static FLOATVAL bignum_get_float(Interp*, PMC *self)>
+=item C<static FLOATVAL bignum_get_float(PARROT_INTERP, PMC *self)>
 
-=item C<static BIGINT bignum_get_bigint(Interp*, PMC *self)>
+=item C<static BIGINT bignum_get_bigint(Interp*, ARGIN(PMC *self))>
 
-=item C<static void bignum_add_bignum(Interp*, PMC *self, PMC *value, PMC *dest)>
+=item C<static void bignum_add_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
 
-=item C<static void bignum_add_bignum_int(Interp*, PMC *self, INTVAL value, PMC *dest)>
+=item C<static void bignum_add_bignum_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
 
-=item C<static void bignum_add_bignum_float(Interp*, PMC *self, FLOATVAL value, PMC *dest)>
+=item C<static void bignum_add_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL
+value, PMC *dest)>
 
-=item C<static void bignum_sub_bignum(Interp*, PMC *self, PMC *value, PMC *dest)>
+=item C<static void bignum_sub_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
 
-=item C<static void bignum_sub_bignum_int(Interp*, PMC *self, INTVAL value, PMC *dest)>
+=item C<static void bignum_sub_bignum_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
 
-=item C<static void bignum_sub_bignum_float(Interp*, PMC *self, FLOATVAL value, PMC *dest)>
+=item C<static void bignum_sub_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL
+value, PMC *dest)>
 
-=item C<static void bignum_mul_bignum(Interp*, PMC *self, PMC *value, PMC *dest)>
+=item C<static void bignum_mul_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
 
-=item C<static void bignum_mul_bignum_int(Interp*, PMC *self, INTVAL value, PMC *dest)>
+=item C<static void bignum_mul_bignum_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
 
-=item C<static void bignum_mul_bignum_float(Interp*, PMC *self, FLOATVAL value, PMC *dest)>
+=item C<static void bignum_mul_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL
+value, PMC *dest)>
 
-=item C<static void bignum_pow_bignum_int(Interp*, PMC *self, INTVAL value, PMC *dest)>
+=item C<static void bignum_pow_bignum_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
 
 =item C<static void bignum_check_divide_zero(Interp*, PMC *value)>
 
-=item C<static void bignum_div_bignum(Interp*, PMC *self, PMC *value, PMC *dest)>
+=item C<static void bignum_div_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
 
-=item C<static void bignum_div_bignum_int(Interp*, PMC *self, INTVAL value, PMC *dest)>
+=item C<static void bignum_div_bignum_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
 
-=item C<static void bignum_div_bignum_float(Interp*, PMC *self, FLOATVAL value, PMC *dest)>
+=item C<static void bignum_div_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL
+value, PMC *dest)>
 
-=item C<static void bignum_fdiv_bignum(Interp*, PMC *self, PMC *value, PMC *dest)>
+=item C<static void bignum_fdiv_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC
+*dest)>
 
-=item C<static void bignum_fdiv_bignum_int(Interp*, PMC *self, INTVAL value, PMC *dest)>
+=item C<static void bignum_fdiv_bignum_int(PARROT_INTERP, PMC *self, INTVAL
+value, PMC *dest)>
 
-=item C<static INTVAL bignum_cmp(Interp*, PMC *self, PMC *value)>
+=item C<static INTVAL bignum_cmp(PARROT_INTERP, PMC *self, PMC *value)>
 
-=item C<static INTVAL bignum_cmp_double(Interp*, PMC *self, double value)>
+=item C<static INTVAL bignum_cmp_double(PARROT_INTERP, PMC *self, double value)>
 
-=item C<static INTVAL bignum_cmp_int(Interp*, PMC *self, INTVAL value)>
+=item C<static INTVAL bignum_cmp_int(PARROT_INTERP, PMC *self, INTVAL value)>
 
-=item C<static INTVAL bignum_cmp_ulong(Interp*, PMC *self, unsigned long value)>
+=item C<static INTVAL bignum_cmp_ulong(PARROT_INTERP, PMC *self, unsigned long
+value)>
 
-=item C<static void bignum_abs(Interp*, PMC *self, PMC *dest)>
+=item C<static void bignum_abs(PARROT_INTERP, PMC *self, PMC *dest)>
 
-=item C<static void bignum_neg(Interp*, PMC *self, PMC *dest)>
+=item C<static void bignum_neg(PARROT_INTERP, PMC *self, PMC *dest)>
 
-=item C<static INTVAL bignum_get_default_prec(Interp*, PMC *self)>
+=item C<static INTVAL bignum_get_default_prec(PARROT_INTERP, PMC *self)>
 
-=item C<static void bignum_set_default_prec(Interp*, PMC *self, INTVAL prec)>
+=item C<static void bignum_set_default_prec(PARROT_INTERP, PMC *self, INTVAL
+prec)>
 
 =cut
 
@@ -135,13 +156,6 @@
 #  undef PARROT_HAS_GMP /* splint barfs on the gmp.h header */
 #endif /* S_SPLINT_S */
 
-/* Uncomment to easily disable it */
-/*
-#ifdef PARROT_HAS_GMP
-#  undef PARROT_HAS_GMP
-#endif
-*/
-#undef PARROT_BIGNUM_CAN_BIGINT
 
 #ifdef PARROT_HAS_GMP
 #  include "pmc_bigint.h"
@@ -151,8 +165,421 @@
 } BIGNUM;
 #endif
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void bignum_abs(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_add_bignum(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_add_bignum_float(PARROT_INTERP,
+    ARGIN(PMC *self),
+    FLOATVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_add_bignum_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_clear(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static INTVAL bignum_cmp(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static INTVAL bignum_cmp_double(PARROT_INTERP,
+    ARGIN(PMC *self),
+    double value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static INTVAL bignum_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static INTVAL bignum_cmp_ulong(PARROT_INTERP,
+    ARGIN(PMC *self),
+    unsigned long value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_div_bignum(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_div_bignum_float(PARROT_INTERP,
+    ARGIN(PMC *self),
+    FLOATVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_div_bignum_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_fdiv_bignum(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_fdiv_bignum_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static INTVAL bignum_get_default_prec(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static double bignum_get_double(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static FLOATVAL bignum_get_float(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static long bignum_get_si(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char * bignum_get_string(PARROT_INTERP, ARGIN(PMC *self), int base)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char * bignum_get_string_size(PARROT_INTERP,
+    ARGIN(PMC *self),
+    int base,
+    int digits)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static unsigned long bignum_get_ui(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_init(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_mul_bignum(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_mul_bignum_float(PARROT_INTERP,
+    ARGIN(PMC *self),
+    FLOATVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_mul_bignum_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_neg(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_pow_bignum_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_set(PARROT_INTERP, ARGMOD(PMC *dest), ARGIN(PMC *src))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_set_default_prec(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL prec)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_set_double(PARROT_INTERP, ARGIN(PMC *self), double value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_set_float(PARROT_INTERP,
+    ARGIN(PMC *self),
+    FLOATVAL value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_set_si(PARROT_INTERP, ARGIN(PMC *self), long value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_set_str(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(const char *value),
+    int base)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void bignum_set_ui(PARROT_INTERP,
+    ARGIN(PMC *self),
+    unsigned long value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void bignum_sub_bignum(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *value),
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_sub_bignum_float(PARROT_INTERP,
+    ARGIN(PMC *self),
+    FLOATVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+static void bignum_sub_bignum_int(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL value,
+    ARGMOD(PMC *dest))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*dest);
+
+#define ASSERT_ARGS_bignum_abs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_add_bignum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_add_bignum_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_add_bignum_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_clear __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_bignum_cmp_double __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_cmp_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_cmp_ulong __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_div_bignum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_div_bignum_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_div_bignum_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_fdiv_bignum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_fdiv_bignum_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_get_default_prec __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_get_double __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_get_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_get_si __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_get_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_get_string_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_get_ui __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_mul_bignum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_mul_bignum_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_mul_bignum_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_neg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_pow_bignum_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_set __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(dest) \
+    , PARROT_ASSERT_ARG(src))
+#define ASSERT_ARGS_bignum_set_default_prec __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_set_double __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_set_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_set_si __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_set_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_bignum_set_ui __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_bignum_sub_bignum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(value) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_sub_bignum_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+#define ASSERT_ARGS_bignum_sub_bignum_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(dest))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+/* Uncomment to easily disable it */
+/*
+#ifdef PARROT_HAS_GMP
+#  undef PARROT_HAS_GMP
+#endif
+*/
+#undef PARROT_BIGNUM_CAN_BIGINT
+
 static void
-bignum_init(PARROT_INTERP, PMC *self) {
+bignum_init(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_init)
+
 #ifdef PARROT_HAS_GMP
     BIGNUM * const bn = mem_gc_allocate_zeroed_typed(interp, BIGNUM);
     SETATTR_BigNum_bn(interp, self, bn);
@@ -165,7 +592,9 @@
 
 
 static void
-bignum_clear(PARROT_INTERP, PMC *self) {
+bignum_clear(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_clear)
+
 #ifdef PARROT_HAS_GMP
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
@@ -178,7 +607,9 @@
 #ifdef PARROT_HAS_GMP
 
 static void
-bignum_set(PARROT_INTERP, PMC *dest, PMC *src) {
+bignum_set(PARROT_INTERP, ARGMOD(PMC *dest), ARGIN(PMC *src)) {
+    ASSERT_ARGS(bignum_set)
+
     BIGNUM *bn_dest, *bn_src;
     GETATTR_BigNum_bn(interp, dest, bn_dest);
     GETATTR_BigNum_bn(interp, src,  bn_src);
@@ -186,65 +617,56 @@
 }
 
 static void
-bignum_set_si(PARROT_INTERP, PMC *self, long value) {
+bignum_set_si(PARROT_INTERP, ARGIN(PMC *self), long value) {
+    ASSERT_ARGS(bignum_set_si)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     mpf_set_si(bn->b, value);
 }
 
 static void
-bignum_set_ui(PARROT_INTERP, PMC *self, unsigned long value) {
+bignum_set_ui(PARROT_INTERP, ARGIN(PMC *self), unsigned long value) {
+    ASSERT_ARGS(bignum_set_ui)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     mpf_set_ui(bn->b, value);
 }
 
 static void
-bignum_set_float(PARROT_INTERP, PMC *self, FLOATVAL value) {
+bignum_set_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value) {
+    ASSERT_ARGS(bignum_set_float)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     mpf_set_d(bn->b, (double)value);
 }
 
 static void
-bignum_set_double(PARROT_INTERP, PMC *self, double value) {
-    BIGNUM *bn;
-    GETATTR_BigNum_bn(interp, self, bn);
-    mpf_set_d(bn->b, value);
-}
+bignum_set_double(PARROT_INTERP, ARGIN(PMC *self), double value) {
+    ASSERT_ARGS(bignum_set_double)
 
-static void
-bignum_set_str(PARROT_INTERP, PMC *self, char *value, int base) {
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
-    mpf_set_str(bn->b, value, base);
+    mpf_set_d(bn->b, value);
 }
 
-#  ifdef PARROT_BIGNUM_CAN_BIGINT
 static void
-bignum_set_bigint(PARROT_INTERP, PMC *self, struct BIGINT *value) {
-    BIGNUM *bn;
-    GETATTR_BigNum_bn(interp, self, bn);
-    mpf_set(bn->b, (mpf_srcptr)value->b);
-}
-#  endif
+bignum_set_str(PARROT_INTERP, ARGIN(PMC *self), ARGIN(const char *value), int base) {
+    ASSERT_ARGS(bignum_set_str)
 
-static BIGNUM*
-bignum_get_self(PARROT_INTERP, PMC *self) {
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
-    return bn;
+    mpf_set_str(bn->b, value, base);
 }
 
-static void
-bignum_set_self(PARROT_INTERP, PMC *self, BIGNUM *value) {
-    BIGNUM *bn;
-    GETATTR_BigNum_bn(interp, self, bn);
-    mpf_set(bn->b, (mpf_srcptr)(value)->b);
-}
 
+PARROT_WARN_UNUSED_RESULT
 static long
-bignum_get_si(PARROT_INTERP, PMC *self) {
+bignum_get_si(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_get_si)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     if (mpf_fits_slong_p(bn->b))
@@ -253,8 +675,11 @@
     Parrot_ex_throw_from_c_args(interp, NULL, 1, "bignum_get_si: number too big");
 }
 
+PARROT_WARN_UNUSED_RESULT
 static unsigned long
-bignum_get_ui(PARROT_INTERP, PMC *self) {
+bignum_get_ui(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_get_ui)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     if (mpf_fits_slong_p(bn->b))
@@ -263,8 +688,9 @@
     Parrot_ex_throw_from_c_args(interp, NULL, 1, "bignum_get_ui: number too big");
 }
 
-static int
-bignum_get_bool(PARROT_INTERP, PMC *self) {
+PARROT_WARN_UNUSED_RESULT
+static INTVAL
+bignum_get_bool(PARROT_INTERP, ARGIN(PMC *self)) {
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     if (mpf_sgn(bn->b) != 0)
@@ -273,8 +699,12 @@
         return 0;
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 static char *
-bignum_get_string(PARROT_INTERP, PMC *self, int base) {
+bignum_get_string(PARROT_INTERP, ARGIN(PMC *self), int base) {
+    ASSERT_ARGS(bignum_get_string)
+
     BIGNUM *bn;
     size_t  n;
     char   *s;
@@ -286,10 +716,13 @@
     return mpf_get_str(s, &exponent, base, 0, bn->b);
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 static char *
-bignum_get_string_size(PARROT_INTERP, PMC *self, int base, int digits) {
+bignum_get_string_size(PARROT_INTERP, ARGIN(PMC *self), int base, int digits) {
+    ASSERT_ARGS(bignum_get_string_size)
+
     BIGNUM *bn;
-    size_t  n;
     char   *s;
     mp_exp_t exponent;
 
@@ -298,41 +731,30 @@
     return mpf_get_str(s, &exponent, base, digits, bn->b);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static double
-bignum_get_double(PARROT_INTERP, PMC *self) {
+bignum_get_double(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_get_double)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     return mpf_get_d(bn->b);
 }
 
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL
-bignum_get_float(PARROT_INTERP, PMC *self) {
-    BIGNUM *bn;
-    GETATTR_BigNum_bn(interp, self, bn);
-    return mpf_get_d(bn->b);
-}
+bignum_get_float(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_get_float)
 
-#  ifdef PARROT_BIGNUM_CAN_BIGINT
-static struct BIGINT
-bignum_get_bigint(PARROT_INTERP, PMC *self) {
     BIGNUM *bn;
-    struct BIGINT *bi_dest;
     GETATTR_BigNum_bn(interp, self, bn);
-    mpz_clear(bi_dest->b);
-    mpz_init(bi_dest->b);
-    if (mpf_fits_slong_p(bn->b)) {
-        bi_dest->b = mpf_get_ui(bn->b);
-    }
-    else {
-        Parrot_ex_throw_from_c_args(interp, NULL, 1,
-            "bignum_get_bigint: Precision loss");
-    }
-    return bi_dest;
+    return mpf_get_d(bn->b);
 }
-#  endif
 
 static void
-bignum_add_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_add_bignum(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_add_bignum)
+
     BIGNUM *bn_self, *bn_value, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, value, bn_value);
@@ -341,7 +763,9 @@
 }
 
 static void
-bignum_add_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_add_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_add_bignum_int)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -352,7 +776,9 @@
 }
 
 static void
-bignum_add_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_add_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_add_bignum_float)
+
     BIGNUM *bn_value, *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_value);
     GETATTR_BigNum_bn(interp, self, bn_self);
@@ -362,7 +788,9 @@
 }
 
 static void
-bignum_sub_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_sub_bignum(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_sub_bignum)
+
     BIGNUM *bn_self, *bn_value, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, value, bn_value);
@@ -371,7 +799,9 @@
 }
 
 static void
-bignum_sub_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_sub_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_sub_bignum_int)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -382,7 +812,9 @@
 }
 
 static void
-bignum_sub_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_sub_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_sub_bignum_float)
+
     BIGNUM *bn_tmp, *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_tmp);
     GETATTR_BigNum_bn(interp, self, bn_self);
@@ -392,7 +824,9 @@
 }
 
 static void
-bignum_mul_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_mul_bignum(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_mul_bignum)
+
     BIGNUM *bn_self, *bn_value, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, value, bn_value);
@@ -401,7 +835,9 @@
 }
 
 static void
-bignum_mul_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_mul_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_mul_bignum_int)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -409,7 +845,9 @@
 }
 
 static void
-bignum_mul_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_mul_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_mul_bignum_float)
+
     BIGNUM *bn_tmp, *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_tmp);
     GETATTR_BigNum_bn(interp, self, bn_self);
@@ -419,7 +857,9 @@
 }
 
 static void
-bignum_pow_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_pow_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_pow_bignum_int)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -434,7 +874,7 @@
 }
 
 static void
-bignum_check_divide_zero(PARROT_INTERP, PMC *value) {
+bignum_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value)) {
     /* Throw an exception if we are dividing by zero. */
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, value, bn);
@@ -444,7 +884,9 @@
 }
 
 static void
-bignum_div_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_div_bignum(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_div_bignum)
+
     BIGNUM *bn_self, *bn_value, *bn_dest;
     bignum_check_divide_zero(interp, value);
     GETATTR_BigNum_bn(interp, self, bn_self);
@@ -454,7 +896,9 @@
 }
 
 static void
-bignum_div_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_div_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_div_bignum_int)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -470,7 +914,9 @@
 }
 
 static void
-bignum_div_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_div_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_div_bignum_float)
+
     BIGNUM bn, *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -491,7 +937,9 @@
 
 /* There's no such mpf_fdiv, only mpz_fdiv and mpf_div */
 static void
-bignum_fdiv_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_fdiv_bignum(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_fdiv_bignum)
+
     BIGNUM *bn_self, *bn_value, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, value, bn_value);
@@ -501,7 +949,9 @@
 }
 
 static void
-bignum_fdiv_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_fdiv_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_fdiv_bignum_int)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -516,7 +966,9 @@
 }
 
 static INTVAL
-bignum_cmp(PARROT_INTERP, PMC *self, PMC *value) {
+bignum_cmp(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *value)) {
+    ASSERT_ARGS(bignum_cmp)
+
     BIGNUM *bn_self, *bn_value;
     GETATTR_BigNum_bn(interp, self,  bn_self);
     GETATTR_BigNum_bn(interp, value, bn_value);
@@ -524,28 +976,36 @@
 }
 
 static INTVAL
-bignum_cmp_double(PARROT_INTERP, PMC *self, double value) {
+bignum_cmp_double(PARROT_INTERP, ARGIN(PMC *self), double value) {
+    ASSERT_ARGS(bignum_cmp_double)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     return mpf_cmp_d(bn->b, value);
 }
 
 static INTVAL
-bignum_cmp_int(PARROT_INTERP, PMC *self, INTVAL value) {
+bignum_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value) {
+    ASSERT_ARGS(bignum_cmp_int)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     return mpf_cmp_si(bn->b, value);
 }
 
 static INTVAL
-bignum_cmp_ulong(PARROT_INTERP, PMC *self, unsigned long value) {
+bignum_cmp_ulong(PARROT_INTERP, ARGIN(PMC *self), unsigned long value) {
+    ASSERT_ARGS(bignum_cmp_ulong)
+
     BIGNUM *bn;
     GETATTR_BigNum_bn(interp, self, bn);
     return mpf_cmp_ui(bn->b, value);
 }
 
 static void
-bignum_abs(PARROT_INTERP, PMC *self, PMC *dest) {
+bignum_abs(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_abs)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -553,7 +1013,9 @@
 }
 
 static void
-bignum_neg(PARROT_INTERP, PMC *self, PMC *dest) {
+bignum_neg(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest)) {
+    ASSERT_ARGS(bignum_neg)
+
     BIGNUM *bn_self, *bn_dest;
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
@@ -561,213 +1023,252 @@
 }
 
 static INTVAL
-bignum_get_default_prec(PARROT_INTERP, PMC *self) {
+bignum_get_default_prec(PARROT_INTERP, ARGIN(PMC *self)) {
+    ASSERT_ARGS(bignum_get_default_prec)
+
     return mpf_get_default_prec();
 }
 
 static void
-bignum_set_default_prec(PARROT_INTERP, PMC *self, INTVAL prec) {
+bignum_set_default_prec(PARROT_INTERP, ARGIN(PMC *self), INTVAL prec) {
+    ASSERT_ARGS(bignum_set_default_prec)
+
     mpf_set_default_prec(prec);
 }
 
-#else /* ifdef PARROT_HAS_GMP */
+/* HEADERIZER STOP */
+/* Don't headerize these BIGINT and BIGNUM funcs */
 
-typedef struct BIGNUM {
-    FLOATVAL b; /* bogus definition for users without libgmp*/
-} BIGNUM;
-
-#  define THROW_NYI Parrot_ex_throw_from_c_args(interp, NULL, \
-                        EXCEPTION_LIBRARY_ERROR, "no bignum lib loaded")
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static BIGNUM*
+bignum_get_self(PARROT_INTERP, ARGIN(PMC *self)) {
+    BIGNUM *bn;
+    GETATTR_BigNum_bn(interp, self, bn);
+    return bn;
+}
 
-#  if 0
 static void
-bignum_init(PARROT_INTERP, PMC *self) {
-    THROW_NYI;
+bignum_set_self(PARROT_INTERP, ARGIN(PMC *self), ARGIN(BIGNUM *value)) {
+    BIGNUM *bn;
+    GETATTR_BigNum_bn(interp, self, bn);
+    mpf_set(bn->b, (mpf_srcptr)(value)->b);
+}
+
+
+#  ifdef PARROT_BIGNUM_CAN_BIGINT
+PARROT_WARN_UNUSED_RESULT
+static struct BIGINT
+bignum_get_bigint(PARROT_INTERP, ARGIN(PMC *self)) {
+    BIGNUM *bn;
+    struct BIGINT *bi_dest;
+    GETATTR_BigNum_bn(interp, self, bn);
+    mpz_clear(bi_dest->b);
+    mpz_init(bi_dest->b);
+    if (mpf_fits_slong_p(bn->b)) {
+        bi_dest->b = mpf_get_ui(bn->b);
+    }
+    else {
+        Parrot_ex_throw_from_c_args(interp, NULL, 1,
+            "bignum_get_bigint: Precision loss");
+    }
+    return bi_dest;
 }
 
 static void
-bignum_clear(PARROT_INTERP, PMC *self) {
-    THROW_NYI;
+bignum_set_bigint(PARROT_INTERP, ARGIN(PMC *self), ARGIN(struct BIGINT *value)) {
+    BIGNUM *bn;
+    GETATTR_BigNum_bn(interp, self, bn);
+    mpf_set(bn->b, (mpf_srcptr)value->b);
 }
 #  endif
 
+#else /* ifdef PARROT_HAS_GMP */
+
+typedef struct BIGNUM {
+    FLOATVAL b; /* bogus definition for users without libgmp*/
+} BIGNUM;
+
+#  define THROW_NYI Parrot_ex_throw_from_c_args(interp, NULL, \
+                        EXCEPTION_LIBRARY_ERROR, "no bignum lib loaded")
+
 static void
-bignum_set(PARROT_INTERP, PMC *dest, PMC *src) {
+bignum_set(PARROT_INTERP, ARGMOD(PMC *dest), PMC *src) {
     THROW_NYI;
 }
 
 static void
-bignum_set_si(PARROT_INTERP, PMC *self, long value) {
+bignum_set_si(PARROT_INTERP, ARGIN(PMC *self), long value) {
     THROW_NYI;
 }
 
 static void
-bignum_set_double(PARROT_INTERP, PMC *self, double value) {
+bignum_set_double(PARROT_INTERP, ARGIN(PMC *self), double value) {
     THROW_NYI;
 }
 
 static void
-bignum_set_str(PARROT_INTERP, PMC *self, char *value, int base) {
+bignum_set_str(PARROT_INTERP, ARGIN(PMC *self), const char *value, int base) {
     THROW_NYI;
 }
 
 static void
-bignum_set_self(PARROT_INTERP, PMC *self, BIGNUM *value) {
+bignum_set_self(PARROT_INTERP, ARGIN(PMC *self), BIGNUM *value) {
     THROW_NYI;
 }
 
 static BIGNUM*
-bignum_get_self(PARROT_INTERP, PMC *self) {
+bignum_get_self(PARROT_INTERP, ARGIN(PMC *self)) {
     THROW_NYI;
 }
 
 static char *
-bignum_get_string(PARROT_INTERP, PMC *self, int base) {
+bignum_get_string(PARROT_INTERP, ARGIN(PMC *self), int base) {
     THROW_NYI;
 }
 
 static char *
-bignum_get_string_size(PARROT_INTERP, PMC *self, int base, int digits) {
+bignum_get_string_size(PARROT_INTERP, ARGIN(PMC *self), int base, int digits) {
     THROW_NYI;
 }
 
 static unsigned long
-bignum_get_ui(PARROT_INTERP, PMC *self) {
+bignum_get_ui(PARROT_INTERP, ARGIN(PMC *self)) {
     THROW_NYI;
 }
 
 static long
-bignum_get_si(PARROT_INTERP, PMC *self) {
+bignum_get_si(PARROT_INTERP, ARGIN(PMC *self)) {
     THROW_NYI;
 }
 
-static long
-bignum_get_bool(PARROT_INTERP, PMC *self) {
+static INTVAL
+bignum_get_bool(PARROT_INTERP, ARGIN(PMC *self)) {
     THROW_NYI;
 }
 
 static double
-bignum_get_double(PARROT_INTERP, PMC *self) {
+bignum_get_double(PARROT_INTERP, ARGIN(PMC *self)) {
     THROW_NYI;
 }
 
 static void
-bignum_add_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_add_bignum(PARROT_INTERP, ARGIN(PMC *self), PMC *value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_add_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_add_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_add_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_add_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_sub_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_sub_bignum(PARROT_INTERP, ARGIN(PMC *self), PMC *value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_sub_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_sub_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_sub_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_sub_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_mul_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_mul_bignum(PARROT_INTERP, ARGIN(PMC *self), PMC *value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_mul_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_mul_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_mul_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_mul_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_pow_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_pow_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_pow_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_pow_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_div_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_div_bignum(PARROT_INTERP, ARGIN(PMC *self), PMC *value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_div_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_div_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_div_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_div_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_fdiv_bignum(PARROT_INTERP, PMC *self, PMC *value, PMC *dest) {
+bignum_fdiv_bignum(PARROT_INTERP, ARGIN(PMC *self), PMC *value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_fdiv_bignum_int(PARROT_INTERP, PMC *self, INTVAL value, PMC *dest) {
+bignum_fdiv_bignum_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_fdiv_bignum_float(PARROT_INTERP, PMC *self, FLOATVAL value, PMC *dest) {
+bignum_fdiv_bignum_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value, ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static INTVAL
-bignum_cmp(PARROT_INTERP, PMC *self, PMC *value) {
+bignum_cmp(PARROT_INTERP, ARGIN(PMC *self), PMC *value) {
     THROW_NYI;
 }
 
 static INTVAL
-bignum_cmp_int(PARROT_INTERP, PMC *self, INTVAL value) {
+bignum_cmp_int(PARROT_INTERP, ARGIN(PMC *self), INTVAL value) {
     THROW_NYI;
 }
 
 static INTVAL
-bignum_cmp_float(PARROT_INTERP, PMC *self, FLOATVAL value) {
+bignum_cmp_float(PARROT_INTERP, ARGIN(PMC *self), FLOATVAL value) {
     THROW_NYI;
 }
 
 static void
-bignum_abs(PARROT_INTERP, PMC *self, PMC *dest) {
+bignum_abs(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static void
-bignum_neg(PARROT_INTERP, PMC *self, PMC *dest) {
+bignum_neg(PARROT_INTERP, ARGIN(PMC *self), ARGMOD(PMC *dest)) {
     THROW_NYI;
 }
 
 static INTVAL
-bignum_get_default_prec(PARROT_INTERP, PMC *self) {
+bignum_get_default_prec(PARROT_INTERP, ARGIN(PMC *self)) {
     THROW_NYI;
 }
 
 static void
-bignum_set_default_prec(PARROT_INTERP, PMC *self, INTVAL prec) {
+bignum_set_default_prec(PARROT_INTERP, ARGIN(PMC *self), INTVAL prec) {
     THROW_NYI;
 }
 
@@ -810,7 +1311,7 @@
     }
 
     VTABLE PMC *clone() {
-        PMC *res = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        PMC * const res = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
         bignum_set(INTERP, res, SELF);
         return res;
     }
@@ -941,8 +1442,8 @@
 #if PARROT_BIGNUM_CAN_BIGINT
         return bignum_get_bigint(INTERP, SELF);
 #else
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
-            "no bigint support in bigint");
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_LIBRARY_ERROR,
+            "no bigint support in bignum");
 #endif
     }
 
@@ -987,27 +1488,27 @@
     VTABLE STRING *get_string() {
         char   *s  = bignum_get_string(INTERP, SELF, 10);
         STRING *ps = Parrot_str_new(INTERP, s, 0);
-        mem_gc_free(interp, s);
+        mem_gc_free(INTERP, s);
         return ps;
     }
 
     VTABLE STRING *get_string_keyed_int(INTVAL base) {
         char   *s  = bignum_get_string(INTERP, SELF, base);
         STRING *ps = Parrot_str_new(INTERP, s, 0);
-        mem_gc_free(interp, s);
+        mem_gc_free(INTERP, s);
         return ps;
     }
 
     VTABLE STRING *get_string_keyed_int_int(INTVAL base, INTVAL digits) {
         char   *s  = bignum_get_string_size(INTERP, SELF, base, digits);
         STRING *ps = Parrot_str_new(INTERP, s, 0);
-        mem_gc_free(interp, s);
+        mem_gc_free(INTERP, s);
         return ps;
     }
 
     VTABLE STRING *get_repr() {
         STRING *s = SELF.get_string();
-        return Parrot_str_append(INTERP, s, Parrot_str_new(interp, "N", 1));
+        return Parrot_str_concat(INTERP, s, Parrot_str_new(INTERP, "N", 1));
     }
 /*
 
@@ -1055,7 +1556,7 @@
     MULTI PMC *add(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
 
-        bignum_add_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bignum_add_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -1063,7 +1564,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'add' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *add_int(INTVAL value, PMC *dest) {
@@ -1089,7 +1590,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'i_add' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_add_int(INTVAL value) {
@@ -1118,7 +1619,7 @@
     MULTI PMC *subtract(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -1126,7 +1627,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'subtract' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
@@ -1152,7 +1653,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'i_subtract' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_subtract_int(INTVAL value) {
@@ -1181,7 +1682,7 @@
     MULTI PMC *multiply(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
 
-        bignum_mul_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bignum_mul_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -1189,7 +1690,7 @@
          Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'multiply' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
@@ -1208,14 +1709,14 @@
     }
 
     MULTI void i_multiply(Integer value) {
-        bignum_mul_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bignum_mul_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
 
     MULTI void i_multiply(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'i_multiply' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_multiply_int(INTVAL value) {
@@ -1258,26 +1759,16 @@
 */
 
     MULTI PMC *divide(BigNum value, PMC *dest) {
-        BIGNUM *bn;
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_div_bignum(INTERP, SELF, value, dest);
-#if 0
-        /* to downgrade or not that's the question */
-        GETATTR_BigNum_bn(interp, dest, bn);
-        if (mpf_fits_slong_p(bn->b)) {
-            long iresult = mpf_get_si(bn->b);
-            VTABLE_morph(interp, dest, enum_class_Integer);
-            VTABLE_set_integer_native(interp, dest, iresult);
-        }
-#endif
         return dest;
     }
 
     MULTI PMC *divide(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -1285,7 +1776,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
@@ -1306,16 +1797,16 @@
         bignum_div_bignum(INTERP, SELF, value, SELF);
     }
     MULTI void i_divide(Integer value) {
-        bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
     MULTI void i_divide(Float value) {
-        bignum_div_bignum_float(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bignum_div_bignum_float(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
     MULTI void i_divide(DEFAULT value) {
          Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'i_divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_divide_int(INTVAL value) {
@@ -1340,7 +1831,7 @@
     MULTI PMC *floor_divide(Integer value, PMC *dest) {
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        bignum_fdiv_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
+        bignum_fdiv_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), dest);
         return dest;
     }
 
@@ -1348,7 +1839,7 @@
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'floor_divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
@@ -1363,14 +1854,14 @@
     }
 
     MULTI void i_floor_divide(Integer value) {
-        bignum_fdiv_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+        bignum_fdiv_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
     }
 
     MULTI void i_floor_divide(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'i_floor_divide' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
     VTABLE void i_floor_divide_int(INTVAL value) {
@@ -1390,14 +1881,14 @@
     }
 
     MULTI INTVAL cmp(Integer value) {
-        return bignum_cmp_int(INTERP, SELF, VTABLE_get_integer(interp, value));
+        return bignum_cmp_int(INTERP, SELF, VTABLE_get_integer(INTERP, value));
     }
 
     MULTI INTVAL cmp(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'cmp' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
 /*
@@ -1413,14 +1904,14 @@
     }
 
     MULTI INTVAL is_equal(Integer value) {
-        return bignum_cmp_int(INTERP, SELF, VTABLE_get_integer(interp, value)) == 0;
+        return bignum_cmp_int(INTERP, SELF, VTABLE_get_integer(INTERP, value)) == 0;
     }
 
     MULTI INTVAL is_equal(DEFAULT value) {
         Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
             "BigNum: no multiple dispatch variant 'is_equal' for %Ss",
-            VTABLE_name(interp, value));
+            VTABLE_name(INTERP, value));
     }
 
 /*

Modified: branches/ops_pct/src/pmc/boolean.pmc
==============================================================================
--- branches/ops_pct/src/pmc/boolean.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/boolean.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -21,6 +21,8 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+
 pmclass Boolean extends Integer provides boolean provides scalar auto_attrs {
 
 /*

Modified: branches/ops_pct/src/pmc/callcontext.pmc
==============================================================================
--- branches/ops_pct/src/pmc/callcontext.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/callcontext.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2008-2009, Parrot Foundation.
+Copyright (C) 2008-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,166 +27,175 @@
         INTVAL   i;
         FLOATVAL n;
     } u;
-    struct Pcc_cell *next;
+    INTVAL type;
 } Pcc_cell;
 
-/* mask off lower two bits (1 + 2 = 3) for pointer tags */
-#define TAG_BITS 3
-#define UNTAG_CELL(c) INTVAL2PTR(Pcc_cell *, (PTR2INTVAL(c)) & ~TAG_BITS)
-
-#define CELL_INT(c)     UNTAG_CELL(c)->u.i
-#define CELL_FLOAT(c)   UNTAG_CELL(c)->u.n
-#define CELL_STRING(c)  UNTAG_CELL(c)->u.s
-#define CELL_PMC(c)     UNTAG_CELL(c)->u.p
-
-#define NEXT_CELL(c) UNTAG_CELL(c)->next
-#define FREE_CELL(i, c) \
-    Parrot_gc_free_fixed_size_storage((i), sizeof (Pcc_cell), (UNTAG_CELL(c)))
-
-#define CELL_TYPE_MASK(c) (PTR2INTVAL(c)) & 3
-#define INTCELL    0
-#define FLOATCELL  1
-#define STRINGCELL 2
-#define PMCCELL    3
+#define NOCELL     0
+#define INTCELL    1
+#define FLOATCELL  2
+#define STRINGCELL 3
+#define PMCCELL    4
 
 #define ALLOC_CELL(i) \
     (Pcc_cell *)Parrot_gc_allocate_fixed_size_storage((i), sizeof (Pcc_cell))
 
-#define INIT_CELL_INT(c)    INTVAL2PTR(Pcc_cell *, PTR2INTVAL(c) | INTCELL)
-#define INIT_CELL_FLOAT(c)  INTVAL2PTR(Pcc_cell *, PTR2INTVAL(c) | FLOATCELL)
-#define INIT_CELL_STRING(c) INTVAL2PTR(Pcc_cell *, PTR2INTVAL(c) | STRINGCELL)
-#define INIT_CELL_PMC(c)    INTVAL2PTR(Pcc_cell *, PTR2INTVAL(c) | PMCCELL)
-
-#define CREATE_INTVAL_CELL(i)   INIT_CELL_INT(ALLOC_CELL(i))
-
-#define CREATE_FLOATVAL_CELL(i) INIT_CELL_FLOAT(ALLOC_CELL(i))
-
-#define CREATE_STRING_CELL(i)   INIT_CELL_STRING(ALLOC_CELL(i))
-
-#define CREATE_PMC_CELL(i)      INIT_CELL_PMC(ALLOC_CELL(i))
-
-#define APPEND_CELL(i, obj, cell) \
-    do { \
-        INTVAL num_positionals; \
-        Pcc_cell *positionals; \
-        GETATTR_CallContext_num_positionals((i), (obj), num_positionals); \
-        GETATTR_CallContext_positionals((i), (obj), positionals); \
-        SETATTR_CallContext_num_positionals((i), (obj), num_positionals+1); \
-        NEXT_CELL(cell) = NULL; \
-        if (positionals) { \
-            while (NEXT_CELL(positionals)) { \
-                positionals = NEXT_CELL(positionals); \
-            } \
-            NEXT_CELL(positionals) = (cell); \
-        } \
-        else \
-            SETATTR_CallContext_positionals((i), (obj), (cell)); \
-    } while (0)
-
-#define PREPEND_CELL(i, obj, cell) \
-    do { \
-        INTVAL num_positionals; \
-        Pcc_cell *positionals; \
-        GETATTR_CallContext_num_positionals((i), (obj), num_positionals); \
-        GETATTR_CallContext_positionals((i), (obj), positionals); \
-        SETATTR_CallContext_num_positionals((i), (obj), num_positionals+1); \
-        NEXT_CELL(cell) = positionals; \
-        SETATTR_CallContext_positionals((i), (obj), (cell)); \
-    } while (0)
-
-#define HLL_TYPE(i) Parrot_get_ctx_HLL_type(interp, (i))
-
-/* TODO: could use get_cell_at */
-static Pcc_cell *
-pop_cell(PARROT_INTERP, ARGIN(PMC *SELF))
-{
-    INTVAL num_positionals;
-    Pcc_cell *cell;
-    Pcc_cell *prev = NULL;
-
-    GETATTR_CallContext_positionals(interp, SELF, cell);
-
-    /* no cells */
-    if (!cell)
-        return NULL;
+#define FREE_CELL(i, c) \
+    Parrot_gc_free_fixed_size_storage((i), sizeof (Pcc_cell), (c))
 
-    GETATTR_CallContext_num_positionals(interp, SELF, num_positionals);
-    SETATTR_CallContext_num_positionals(interp, SELF, num_positionals-1);
+#define CELL_TYPE_MASK(c) (c)->type
 
-    /* one cell */
-    if (!NEXT_CELL(cell)) {
-        SETATTR_CallContext_positionals(interp, SELF, NULL);
-        return cell;
-    }
+#define CELL_INT(c)     (c)->u.i
+#define CELL_FLOAT(c)   (c)->u.n
+#define CELL_STRING(c)  (c)->u.s
+#define CELL_PMC(c)     (c)->u.p
 
-    while (cell) {
-        if (!NEXT_CELL(cell)) {
-            NEXT_CELL(prev) = NULL;
-            return cell;
-        }
-
-        prev = cell;
-        cell = NEXT_CELL(cell);
-    }
+#define HLL_TYPE(i) Parrot_get_ctx_HLL_type(interp, (i))
 
-    /* should abort here */
-    SETATTR_CallContext_num_positionals(interp, SELF, num_positionals+1);
-    return NULL;
-}
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static FLOATVAL autobox_floatval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static INTVAL autobox_intval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static PMC * autobox_pmc(PARROT_INTERP, ARGIN(Pcc_cell *cell))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING * autobox_string(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void ensure_positionals_storage(PARROT_INTERP,
+    ARGIN(PMC *self),
+    INTVAL size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static Pcc_cell* get_cell_at(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+static Hash * get_hash(PARROT_INTERP, ARGIN(PMC *SELF))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CAN_RETURN_NULL
+static PMC * get_named_names(PARROT_INTERP, ARGIN(PMC *SELF))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void mark_cell(PARROT_INTERP, ARGIN(Pcc_cell *c))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void mark_hash(PARROT_INTERP, ARGIN(Hash *h))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void mark_positionals(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_autobox_floatval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cell))
+#define ASSERT_ARGS_autobox_intval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cell))
+#define ASSERT_ARGS_autobox_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cell))
+#define ASSERT_ARGS_autobox_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cell))
+#define ASSERT_ARGS_ensure_positionals_storage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_get_cell_at __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_get_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(SELF))
+#define ASSERT_ARGS_get_named_names __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(SELF))
+#define ASSERT_ARGS_mark_cell __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(c))
+#define ASSERT_ARGS_mark_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(h))
+#define ASSERT_ARGS_mark_positionals __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
 
-static Pcc_cell *
-shift_cell(PARROT_INTERP, ARGIN(PMC *SELF))
+static void
+ensure_positionals_storage(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
 {
-    INTVAL num_positionals;
-    Pcc_cell *cell;
-
-    GETATTR_CallContext_positionals(interp, SELF, cell);
-
-    /* no cells */
-    if (!cell)
-        return NULL;
-
-    GETATTR_CallContext_num_positionals(interp, SELF, num_positionals);
-    SETATTR_CallContext_num_positionals(interp, SELF, num_positionals-1);
-
-    /* one cell */
-    if (!NEXT_CELL(cell))
-        SETATTR_CallContext_positionals(interp, SELF, NULL);
-    else
-        SETATTR_CallContext_positionals(interp, SELF, NEXT_CELL(cell));
+    ASSERT_ARGS(ensure_positionals_storage)
+    INTVAL num_positionals, allocated_positionals;
+    Pcc_cell *array, *new_array;
 
-    return cell;
-}
-
-static Pcc_cell *
-get_cell_at(PARROT_INTERP, ARGIN(PMC *SELF), INTVAL key)
-{
-    INTVAL    i, num_positionals;
-    Pcc_cell *cell;
+    GETATTR_CallContext_allocated_positionals(interp, self, allocated_positionals);
 
-    GETATTR_CallContext_num_positionals(interp, SELF, num_positionals);
+    if (size <= allocated_positionals)
+        return;
 
-    if (key > num_positionals)
-        return NULL;
+    if (size < 8)
+        size = 8;
 
-    GETATTR_CallContext_positionals(interp, SELF, cell);
+    GETATTR_CallContext_positionals(interp, self, array);
 
-    while (key) {
-        /* XXX: shouldn't happen */
-        if (!NEXT_CELL(cell))
-            return NULL;
+    if (size > 8)
+        new_array = (Pcc_cell *)Parrot_gc_allocate_memory_chunk(interp,
+                size * sizeof (Pcc_cell));
+    else
+        new_array = (Pcc_cell *)Parrot_gc_allocate_fixed_size_storage(interp,
+                size * sizeof (Pcc_cell));
 
-        cell = NEXT_CELL(cell);
-        key--;
+    if (array) {
+        GETATTR_CallContext_num_positionals(interp, self, num_positionals);
+        memcpy(new_array, array, num_positionals * sizeof (Pcc_cell));
+
+        if (num_positionals > 8)
+            Parrot_gc_free_memory_chunk(interp, array);
+        else
+            Parrot_gc_free_fixed_size_storage(interp,
+                allocated_positionals * sizeof (Pcc_cell), array);
     }
 
-    return cell;
+    SETATTR_CallContext_allocated_positionals(interp, self, size);
+    SETATTR_CallContext_positionals(interp, self, new_array);
+}
 
+PARROT_CANNOT_RETURN_NULL
+static Pcc_cell*
+get_cell_at(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
+{
+    ASSERT_ARGS(get_cell_at)
+    Pcc_cell *cells;
+    ensure_positionals_storage(interp, self, key + 1);
+    GETATTR_CallContext_positionals(interp, self, cells);
+    return &cells[key];
 }
 
 static INTVAL
-autobox_intval(PARROT_INTERP, Pcc_cell *cell)
+autobox_intval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
+    ASSERT_ARGS(autobox_intval)
     switch (CELL_TYPE_MASK(cell)) {
       case INTCELL:
         return CELL_INT(cell);
@@ -207,8 +216,9 @@
 }
 
 static FLOATVAL
-autobox_floatval(PARROT_INTERP, Pcc_cell *cell)
+autobox_floatval(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
+    ASSERT_ARGS(autobox_floatval)
     switch (CELL_TYPE_MASK(cell)) {
       case INTCELL:
         return (FLOATVAL)CELL_INT(cell);
@@ -228,9 +238,11 @@
     return 0.0;
 }
 
+PARROT_CANNOT_RETURN_NULL
 static STRING *
-autobox_string(PARROT_INTERP, Pcc_cell *cell)
+autobox_string(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
 {
+    ASSERT_ARGS(autobox_string)
     switch (CELL_TYPE_MASK(cell)) {
       case INTCELL:
         return Parrot_str_from_int(interp, CELL_INT(cell));
@@ -250,9 +262,11 @@
     return NULL;
 }
 
+PARROT_CANNOT_RETURN_NULL
 static PMC *
-autobox_pmc(PARROT_INTERP, Pcc_cell *cell)
+autobox_pmc(PARROT_INTERP, ARGIN(Pcc_cell *cell))
 {
+    ASSERT_ARGS(autobox_pmc)
     PMC *result = PMCNULL;
 
     switch (CELL_TYPE_MASK(cell)) {
@@ -269,7 +283,7 @@
         VTABLE_set_string_native(interp, result, CELL_STRING(cell));
         break;
       case PMCCELL:
-        return CELL_PMC(cell);
+        result = CELL_PMC(cell);
       default:
         /* exception */
         break;
@@ -278,9 +292,11 @@
     return result;
 }
 
+PARROT_CANNOT_RETURN_NULL
 static Hash *
 get_hash(PARROT_INTERP, ARGIN(PMC *SELF))
 {
+    ASSERT_ARGS(get_hash)
     Hash   *hash;
 
     GETATTR_CallContext_hash(interp, SELF, hash);
@@ -299,33 +315,45 @@
 }
 
 static void
-mark_positionals(PARROT_INTERP, ARGIN(Pcc_cell *c))
+mark_cell(PARROT_INTERP, ARGIN(Pcc_cell *c))
 {
-    while (c) {
-        switch (CELL_TYPE_MASK(c)) {
-          case STRINGCELL:
+    ASSERT_ARGS(mark_cell)
+    switch (CELL_TYPE_MASK(c)) {
+        case STRINGCELL:
             if (CELL_STRING(c))
                 Parrot_gc_mark_STRING_alive(interp, CELL_STRING(c));
             break;
-          case PMCCELL:
+        case PMCCELL:
             if (!PMC_IS_NULL(CELL_PMC(c)))
                 Parrot_gc_mark_PMC_alive(interp, CELL_PMC(c));
             break;
-          case INTCELL:
-          case FLOATCELL:
-          default:
+        case INTCELL:
+        case FLOATCELL:
+        default:
             break;
-        }
-
-        c = NEXT_CELL(c);
     }
+
+}
+
+static void
+mark_positionals(PARROT_INTERP, ARGIN(PMC *self))
+{
+    ASSERT_ARGS(mark_positionals)
+    INTVAL size, i;
+    Pcc_cell *cells;
+
+    GETATTR_CallContext_num_positionals(interp, self, size);
+    GETATTR_CallContext_positionals(interp, self, cells);
+
+    for (i = 0; i < size; ++i)
+        mark_cell(interp, &cells[i]);
 }
 
 /* don't look now, but here goes encapsulation.... */
 static void
 mark_hash(PARROT_INTERP, ARGIN(Hash *h))
 {
-    UINTVAL entries = h->entries;
+    ASSERT_ARGS(mark_hash)
     INTVAL  i;
 
     for (i = h->mask; i >= 0; --i) {
@@ -333,16 +361,17 @@
 
         while (b) {
             Parrot_gc_mark_STRING_alive(interp, (STRING *)b->key);
-            mark_positionals(interp, (Pcc_cell *)b->value);
+            mark_cell(interp, (Pcc_cell *)b->value);
             b = b->next;
         }
-
     }
 }
 
+PARROT_CAN_RETURN_NULL
 static PMC *
 get_named_names(PARROT_INTERP, ARGIN(PMC *SELF))
 {
+    ASSERT_ARGS(get_named_names)
     Hash *hash;
     PMC  *result = PMCNULL;
 
@@ -351,10 +380,9 @@
     /* yes, this *looks* risky, but it's a Parrot STRING hash internally */
     if (hash && hash->entries) {
         UINTVAL i, j = 0;
-        result  = Parrot_pmc_new(interp, enum_class_FixedStringArray);
-        VTABLE_set_integer_native(interp, result, hash->entries);
+        result = Parrot_pmc_new_init_int(interp, enum_class_FixedStringArray, hash->entries);
 
-        for (i = 0; i <= hash->mask; i++) {
+        for (i = 0; i <= hash->mask; ++i) {
             HashBucket *b = hash->bi[i];
 
             while (b) {
@@ -391,7 +419,6 @@
     ATTR PMC      *current_cont;          /* the return continuation PMC */
     ATTR PMC      *current_object;        /* current object if a method call */
     ATTR PMC      *current_namespace;     /* The namespace we're currently in */
-    ATTR PMC      *results_signature;     /* non-const results signature PMC */
     ATTR opcode_t *current_pc;            /* program counter of Sub invocation */
     ATTR PMC      *current_sig;           /* temporary CallContext PMC for active call */
 
@@ -406,23 +433,17 @@
     ATTR UINTVAL                trace_flags;
     ATTR UINTVAL                recursion_depth; /* Sub call recursion depth */
 
-    /* code->prederefed.code - code->base.data in opcodes
-     * to simplify conversion between code ptrs in e.g. invoke */
-    ATTR size_t pred_offset;
-
     /* Storage for arguments */
-    ATTR struct Pcc_cell *positionals; /* linked list of positionals */
+    ATTR struct Pcc_cell *positionals; /* array of positionals */
+    ATTR INTVAL  num_positionals;      /* count of used positionals */
+    ATTR INTVAL  allocated_positionals;/* count of allocated positionals */
+
     ATTR PMC    *type_tuple;           /* Cached argument types for MDD */
     ATTR STRING *short_sig;            /* Simple string sig args & returns */
     ATTR PMC    *arg_flags;            /* Integer array of argument flags */
     ATTR PMC    *return_flags;         /* Integer array of return flags */
     ATTR Hash   *hash;                 /* Hash of named arguments */
-    ATTR INTVAL  num_positionals;      /* count of positionals */
 
-    /* Storage for returns */
-    ATTR void     **returns_values;             /* stored pointers */
-    ATTR INTVAL     returns_size;               /* number of stored elements */
-    ATTR INTVAL     returns_resize_threshold;   /* max size before resizing array */
 /*
 
 =item C<void init()>
@@ -437,11 +458,7 @@
         SET_ATTR_type_tuple(INTERP, SELF, PMCNULL);
 
         SET_ATTR_positionals(INTERP, SELF, NULL);
-        SET_ATTR_returns_values(INTERP, SELF, NULL);
-
-        SET_ATTR_returns_size(INTERP, SELF, 0);
         SET_ATTR_num_positionals(INTERP, SELF, 0);
-        SET_ATTR_returns_resize_threshold(INTERP, SELF, 0);
 
         PObj_custom_mark_destroy_SETALL(SELF);
     }
@@ -481,8 +498,7 @@
         Parrot_gc_mark_PMC_alive(INTERP, arg_flags);
         Parrot_gc_mark_PMC_alive(INTERP, return_flags);
 
-        if (num_positionals)
-            mark_positionals(INTERP, positionals);
+        mark_positionals(INTERP, SELF);
 
         if (hash)
             mark_hash(INTERP, hash);
@@ -511,9 +527,6 @@
         GET_ATTR_current_namespace(INTERP, SELF, tmp);
         Parrot_gc_mark_PMC_alive(INTERP, tmp);
 
-        GET_ATTR_results_signature(INTERP, SELF, tmp);
-        Parrot_gc_mark_PMC_alive(INTERP, tmp);
-
         GET_ATTR_current_sig(INTERP, SELF, tmp);
         Parrot_gc_mark_PMC_alive(INTERP, tmp);
 
@@ -523,49 +536,88 @@
 
         GET_ATTR_bp_ps(INTERP, SELF, bp_ps);
         for (i = 0; i < n_regs_used[REGNO_PMC]; ++i) {
-            PMC *p = bp_ps.regs_p[-1L-(i)];
+            PMC * const p = bp_ps.regs_p[-1L-(i)];
             /* Original code from CTX_REG_PMC */
             if (p)
-                Parrot_gc_mark_PMC_alive(interp, p);
+                Parrot_gc_mark_PMC_alive(INTERP, p);
         }
 
         for (i = 0; i < n_regs_used[REGNO_STR]; ++i) {
-            STRING *s = bp_ps.regs_s[i];
+            STRING * const s = bp_ps.regs_s[i];
             if (s)
-                Parrot_gc_mark_STRING_alive(interp, s);
+                Parrot_gc_mark_STRING_alive(INTERP, s);
         }
+    }
 
+/*
+
+=item C<void morph(PMC *type)>
+
+Morph the call signature into a return signature. (Currenly ignores
+the type passed in, and resets the named and positional arguments
+stored.)
+
+=cut
+
+*/
+    VTABLE void morph(PMC *type) {
+        Hash     *hash;
+
+        if (!PMC_data(SELF))
+            return;
+
+        SET_ATTR_short_sig(INTERP, SELF, NULL);
+        SET_ATTR_arg_flags(INTERP, SELF, PMCNULL);
+        SET_ATTR_return_flags(INTERP, SELF, PMCNULL);
+        SET_ATTR_type_tuple(INTERP, SELF, PMCNULL);
+
+        /* Don't free positionals. Just reuse them */
+        SET_ATTR_num_positionals(INTERP, SELF, 0);
+
+        GET_ATTR_hash(INTERP, SELF, hash);
+
+        if (hash) {
+            UINTVAL i;
+
+            for (i = 0; i <= hash->mask; ++i) {
+                HashBucket *b = hash->bi[i];
+
+                while (b) {
+                    FREE_CELL(INTERP, (Pcc_cell *)b->value);
+                    b = b->next;
+                }
+            }
+
+            parrot_hash_destroy(INTERP, hash);
+            SET_ATTR_hash(INTERP, SELF, NULL);
+        }
     }
 
     VTABLE void destroy() {
-        INTVAL    num_positionals, returns_resize_threshold;
+        INTVAL    allocated_positionals;
         Hash     *hash;
-        void    **returns_values;
 
         if (!PMC_data(SELF))
             return;
 
         GET_ATTR_hash(INTERP, SELF, hash);
-        GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
-        GET_ATTR_returns_values(INTERP, SELF, returns_values);
-        GET_ATTR_returns_resize_threshold(INTERP, SELF, returns_resize_threshold);
+        GET_ATTR_allocated_positionals(INTERP, SELF, allocated_positionals);
 
-        if (num_positionals) {
+        if (allocated_positionals) {
             Pcc_cell *c;
 
             GET_ATTR_positionals(INTERP, SELF, c);
-
-            while (c) {
-                Pcc_cell *to_free = c;
-                c = NEXT_CELL(c);
-                FREE_CELL(INTERP, to_free);
-            }
+            if (allocated_positionals > 8)
+                Parrot_gc_free_memory_chunk(INTERP, c);
+            else
+                Parrot_gc_free_fixed_size_storage(INTERP,
+                    allocated_positionals * sizeof (Pcc_cell), c);
         }
 
         if (hash) {
             UINTVAL i;
 
-            for (i = 0; i <= hash->mask; i++) {
+            for (i = 0; i <= hash->mask; ++i) {
                 HashBucket *b = hash->bi[i];
 
                 while (b) {
@@ -577,15 +629,6 @@
             parrot_hash_destroy(INTERP, hash);
         }
 
-        /* Destroy returns storage */
-        if (returns_values) {
-            if (returns_resize_threshold == 8)
-                Parrot_gc_free_fixed_size_storage(INTERP,
-                    8 * sizeof (void *), returns_values);
-            else
-                mem_gc_free(INTERP, returns_values);
-        }
-
         Parrot_pcc_free_registers(INTERP, SELF);
     }
 
@@ -614,9 +657,9 @@
 */
 
     VTABLE STRING *get_string() {
-        INTVAL    num_positionals;
         STRING   *res;
         Pcc_cell *c;
+        INTVAL    num_positionals, i;
 
         GET_ATTR_short_sig(INTERP, SELF, res);
 
@@ -628,25 +671,24 @@
 
         res = Parrot_str_new(INTERP, NULL, num_positionals);
 
-        while (c) {
-            switch (CELL_TYPE_MASK(c)) {
+        for (i = 0; i < num_positionals; ++i) {
+            switch (c[i].type) {
               case INTCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "I"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "I"));
                 break;
               case FLOATCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "N"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "N"));
                 break;
               case STRINGCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "S"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "S"));
                 break;
               case PMCCELL:
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "P"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "P"));
                 break;
               default:
                 PARROT_FAILURE("Impossible flag");
                 break;
             }
-            c = NEXT_CELL(c);
         }
         /* TODO Add named args to signature */
         /* After fixind build_MMD_type_tuple to use raw arguments instead of signature */
@@ -694,30 +736,28 @@
             GET_ATTR_positionals(INTERP, SELF, c);
             GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
 
-            type_tuple = Parrot_pmc_new_init_int(interp,
+            type_tuple = Parrot_pmc_new_init_int(INTERP,
                 enum_class_FixedIntegerArray, num_positionals);
 
-            while (c) {
+            for (i = 0; i < num_positionals; ++i) {
                 INTVAL type;
 
-                switch (CELL_TYPE_MASK(c)) {
+                switch (c[i].type) {
                     case INTCELL:    type = enum_type_INTVAL;   break;
                     case FLOATCELL:  type = enum_type_FLOATVAL; break;
                     case STRINGCELL: type = enum_type_STRING;   break;
                     case PMCCELL:
-                        type = PMC_IS_NULL(CELL_PMC(c))
-                             ? enum_type_PMC
-                             : VTABLE_type(interp, CELL_PMC(c));
+                        type = PMC_IS_NULL(c[i].u.p)
+                             ? (INTVAL) enum_type_PMC
+                             : VTABLE_type(INTERP, c[i].u.p);
                         break;
                     default:
-                        Parrot_ex_throw_from_c_args(interp, NULL,
+                        Parrot_ex_throw_from_c_args(INTERP, NULL,
                             EXCEPTION_INVALID_OPERATION,
                             "Multiple Dispatch: invalid argument type!");
                 }
 
-                VTABLE_set_integer_keyed_int(interp, type_tuple, i, type);
-                i++;
-                c = NEXT_CELL(c);
+                VTABLE_set_integer_keyed_int(INTERP, type_tuple, i, type);
             }
 
             SET_ATTR_type_tuple(INTERP, SELF, type_tuple);
@@ -763,11 +803,9 @@
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "return_flags"))) {
             SET_ATTR_return_flags(INTERP, SELF, value);
         }
-        else {
-            /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
-                "No such attribute '%S'", key);
-        }
+        else
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_ATTRIB_NOT_FOUND, "No such attribute '%S'", key);
     }
 
 /*
@@ -860,8 +898,6 @@
             GET_ATTR_current_namespace(INTERP, SELF, value);
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "handlers")))
             GET_ATTR_handlers(INTERP, SELF, value);
-        else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "results_signature")))
-            GET_ATTR_results_signature(INTERP, SELF, value);
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "current_HLL"))) {
             /* This function from src/hash.c. */
             /* We probably have to move it to more suitable place */
@@ -872,11 +908,9 @@
             GET_ATTR_current_HLL(INTERP, SELF, hll);
             value = get_string_pmc(INTERP, Parrot_get_HLL_name(INTERP, hll));
         }
-        else {
-            /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
-                "No such attribute '%S'", key);
-        }
+        else
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_ATTRIB_NOT_FOUND, "No such attribute '%S'", key);
 
         return value;
     }
@@ -893,371 +927,336 @@
     }
 
     VTABLE void push_integer(INTVAL value) {
-        Pcc_cell *cell = CREATE_INTVAL_CELL(INTERP);
-        APPEND_CELL(INTERP, SELF, cell);
-        CELL_INT(cell) = value;
+        Pcc_cell *cells;
+        INTVAL    num_pos, allocated_positionals;
+
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        GET_ATTR_allocated_positionals(INTERP, SELF, allocated_positionals);
+
+        if (num_pos + 1 > allocated_positionals)
+            ensure_positionals_storage(INTERP, SELF, num_pos + 1);
+
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        cells[num_pos].u.i      = value;
+        cells[num_pos].type     = INTCELL;
+        SET_ATTR_num_positionals(INTERP, SELF, num_pos + 1);
     }
 
     VTABLE void push_float(FLOATVAL value) {
-        Pcc_cell *cell = CREATE_FLOATVAL_CELL(INTERP);
-        APPEND_CELL(INTERP, SELF, cell);
-        CELL_FLOAT(cell) = value;
+        Pcc_cell *cells;
+        INTVAL    num_pos;
+
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        ensure_positionals_storage(INTERP, SELF, num_pos + 1);
+
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        cells[num_pos].u.n      = value;
+        cells[num_pos].type     = FLOATCELL;
+        SET_ATTR_num_positionals(INTERP, SELF, num_pos + 1);
     }
 
     VTABLE void push_string(STRING *value) {
-        Pcc_cell *cell = CREATE_STRING_CELL(INTERP);
-        APPEND_CELL(INTERP, SELF, cell);
-        CELL_STRING(cell) = value;
+        Pcc_cell *cells;
+        INTVAL    num_pos;
+
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        ensure_positionals_storage(INTERP, SELF, num_pos + 1);
+
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        cells[num_pos].u.s      = value;
+        cells[num_pos].type     = STRINGCELL;
+        SET_ATTR_num_positionals(INTERP, SELF, num_pos + 1);
     }
 
     VTABLE void push_pmc(PMC *value) {
-        Pcc_cell *cell = CREATE_PMC_CELL(INTERP);
-        APPEND_CELL(INTERP, SELF, cell);
-        CELL_PMC(cell) = value;
-    }
+        Pcc_cell *cells;
+        INTVAL    num_pos, allocated_positionals;
 
-    VTABLE INTVAL pop_integer() {
-        Pcc_cell *cell = pop_cell(INTERP, SELF);
-
-        if (cell) {
-            INTVAL result = autobox_intval(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        GET_ATTR_allocated_positionals(INTERP, SELF, allocated_positionals);
 
-        return 0;
-    }
+        if (num_pos + 1 > allocated_positionals)
+            ensure_positionals_storage(INTERP, SELF, num_pos + 1);
 
-    VTABLE FLOATVAL pop_float() {
-        Pcc_cell *cell = pop_cell(INTERP, SELF);
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        cells[num_pos].u.p      = value;
+        cells[num_pos].type     = PMCCELL;
+        SET_ATTR_num_positionals(INTERP, SELF, num_pos + 1);
+    }
 
-        if (cell) {
-            FLOATVAL result = autobox_floatval(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+    /*
+        TODO It's very naive implementation. But we do unshift _once_ only.
+        So, for speed sake, allocate _one_ Cell upfront. Or store it independent.
+    */
 
-        return 0.0;
+    VTABLE void unshift_pmc(PMC *value) {
+        Pcc_cell *cells;
+        const INTVAL size = STATICSELF.elements();
+        INTVAL    i;
+
+        ensure_positionals_storage(INTERP, SELF, size + 1);
+        GET_ATTR_positionals(INTERP, SELF, cells);
+
+        for (i = size; i; --i)
+            cells[i] = cells[i - 1];
+
+        cells[0].u.p    = value;
+        cells[0].type   = PMCCELL;
+        SET_ATTR_num_positionals(INTERP, SELF, size + 1);
     }
 
-    VTABLE PMC * pop_pmc() {
-        Pcc_cell *cell = pop_cell(INTERP, SELF);
+    VTABLE PMC * shift_pmc() {
+        Pcc_cell *cells;
+        PMC      *retval;
+        const INTVAL size = STATICSELF.elements();
+        INTVAL    i;
+
+        if (size < 1)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Cannot shift PMC from empty CallContext");
+
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        retval = autobox_pmc(INTERP, &cells[0]);
 
-        if (cell) {
-            PMC *result = autobox_pmc(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+        for (i = 1; i < size; ++i)
+            cells[i - 1] = cells[i];
 
-        return PMCNULL;
+        SET_ATTR_num_positionals(INTERP, SELF, size - 1);
+        return retval;
     }
 
-    VTABLE STRING * pop_string() {
-        Pcc_cell *cell = pop_cell(INTERP, SELF);
+    VTABLE STRING * shift_string() {
+        Pcc_cell *cells;
+        STRING   *retval;
+        const INTVAL size = STATICSELF.elements();
+        INTVAL    i;
+
+        if (size < 1)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
+                "Cannot shift PMC from empty CallContext");
 
-        if (cell) {
-            STRING *result = autobox_string(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        retval = autobox_string(INTERP, &cells[0]);
 
-        return NULL;
+        for (i = 1; i < size; ++i)
+            cells[i - 1] = cells[i];
+
+        SET_ATTR_num_positionals(INTERP, SELF, size - 1);
+        return retval;
     }
 
     VTABLE INTVAL get_integer_keyed_int(INTVAL key) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell *cells;
+        INTVAL    num_pos;
 
-        if (!cell)
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        if (key >= num_pos || key < 0)
             return 0;
 
-        return autobox_intval(INTERP, cell);
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        return autobox_intval(INTERP, &cells[key]);
     }
 
     VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell *cells;
+        INTVAL    num_pos;
 
-        if (!cell)
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        if (key >= num_pos || key < 0)
             return 0.0;
 
-        return autobox_floatval(INTERP, cell);
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        return autobox_floatval(INTERP, &cells[key]);
     }
 
     VTABLE STRING * get_string_keyed_int(INTVAL key) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell *cells;
+        INTVAL    num_pos;
 
-        if (!cell)
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        if (key >= num_pos || key < 0)
             return NULL;
 
-        return autobox_string(INTERP, cell);
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        return autobox_string(INTERP, &cells[key]);
     }
 
     VTABLE PMC * get_pmc_keyed_int(INTVAL key) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        Pcc_cell *cells;
+        INTVAL    num_pos;
 
-        if (!cell)
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        if (key >= num_pos || key < 0)
             return PMCNULL;
 
-        return autobox_pmc(INTERP, cell);
-    }
-
-    VTABLE void unshift_integer(INTVAL value) {
-        Pcc_cell *cell = CREATE_INTVAL_CELL(INTERP);
-        PREPEND_CELL(INTERP, SELF, cell);
-        CELL_INT(cell) = value;
-    }
-
-    VTABLE void unshift_float(FLOATVAL value) {
-        Pcc_cell *cell = CREATE_FLOATVAL_CELL(INTERP);
-        PREPEND_CELL(INTERP, SELF, cell);
-        CELL_FLOAT(cell) = value;
-    }
-
-    VTABLE void unshift_string(STRING *value) {
-        Pcc_cell *cell = CREATE_STRING_CELL(INTERP);
-        PREPEND_CELL(INTERP, SELF, cell);
-        CELL_STRING(cell) = value;
-    }
-
-    VTABLE void unshift_pmc(PMC *value) {
-        Pcc_cell *cell = CREATE_PMC_CELL(INTERP);
-        PREPEND_CELL(INTERP, SELF, cell);
-        CELL_PMC(cell) = value;
-    }
-
-    VTABLE INTVAL shift_integer() {
-        Pcc_cell *cell = shift_cell(INTERP, SELF);
-
-        if (cell) {
-            INTVAL result = autobox_intval(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
-
-        return 0;
-    }
-
-    VTABLE FLOATVAL shift_float() {
-        Pcc_cell *cell = shift_cell(INTERP, SELF);
-
-        if (cell) {
-            FLOATVAL result = autobox_floatval(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
-
-        return 0.0;
-    }
-
-    VTABLE STRING * shift_string() {
-        Pcc_cell *cell = shift_cell(INTERP, SELF);
-
-        if (cell) {
-            STRING *result = autobox_string(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
-
-        return NULL;
-    }
-
-    VTABLE PMC * shift_pmc() {
-        Pcc_cell *cell = shift_cell(INTERP, SELF);
-
-        if (cell) {
-            PMC *result = autobox_pmc(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
-
-        return PMCNULL;
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        return autobox_pmc(INTERP, &cells[key]);
     }
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
-
-        if (!cell) {
-            INTVAL num_positionals;
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
+        INTVAL    pos;
 
-            GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
+        cell->u.i   = value;
+        cell->type  = INTCELL;
 
-            if (key == num_positionals)
-                VTABLE_push_integer(INTERP, SELF, value);
-
-            /* XXX: else throw exception? */
-            return;
-        }
-
-        CELL_INT(cell) = value;
+        GET_ATTR_num_positionals(INTERP, SELF, pos);
+        if (pos <= key)
+            SET_ATTR_num_positionals(INTERP, SELF, key + 1);
     }
 
     VTABLE void set_number_keyed_int(INTVAL key, FLOATVAL value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
-
-        if (!cell) {
-            INTVAL num_positionals;
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
+        INTVAL    pos;
 
-            GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
-
-            if (key == num_positionals)
-                VTABLE_push_float(INTERP, SELF, value);
+        cell->u.n   = value;
+        cell->type  = FLOATCELL;
 
-            /* XXX: else throw exception? */
-            return;
-        }
-
-        CELL_FLOAT(cell) = value;
+        GET_ATTR_num_positionals(INTERP, SELF, pos);
+        if (pos <= key)
+            SET_ATTR_num_positionals(INTERP, SELF, key + 1);
     }
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
-
-        if (!cell) {
-            INTVAL num_positionals;
-
-            GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
+        INTVAL    pos;
 
-            if (key == num_positionals)
-                VTABLE_push_string(INTERP, SELF, value);
+        cell->u.s   = value;
+        cell->type  = STRINGCELL;
 
-            /* XXX: else throw exception? */
-            return;
-        }
-
-        CELL_STRING(cell) = value;
+        GET_ATTR_num_positionals(INTERP, SELF, pos);
+        if (pos <= key)
+            SET_ATTR_num_positionals(INTERP, SELF, key + 1);
     }
 
     VTABLE void set_pmc_keyed_int(INTVAL key, PMC *value) {
-        Pcc_cell *cell = get_cell_at(INTERP, SELF, key);
+        INTVAL    pos;
+        Pcc_cell * const cell = get_cell_at(INTERP, SELF, key);
 
-        if (!cell) {
-            INTVAL num_positionals;
-
-            GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
+        cell->u.p   = value;
+        cell->type  = PMCCELL;
 
-            if (key == num_positionals)
-                VTABLE_push_pmc(INTERP, SELF, value);
-
-            /* XXX: else throw exception? */
-            return;
-        }
-
-        CELL_PMC(cell) = value;
+        GET_ATTR_num_positionals(INTERP, SELF, pos);
+        if (pos <= key)
+            SET_ATTR_num_positionals(INTERP, SELF, key + 1);
     }
 
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
-            cell = CREATE_INTVAL_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_INT(cell) = value;
+        cell->u.i       = value;
+        cell->type      = INTCELL;
     }
 
     VTABLE void set_number_keyed_str(STRING *key, FLOATVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
-            cell = CREATE_FLOATVAL_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_FLOAT(cell) = value;
+        cell->u.n       = value;
+        cell->type      = FLOATCELL;
     }
 
     VTABLE void set_string_keyed_str(STRING *key, STRING *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
-            cell = CREATE_STRING_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_STRING(cell) = value;
+        cell->u.s       = value;
+        cell->type      = STRINGCELL;
     }
 
     VTABLE void set_pmc_keyed_str(STRING *key, PMC *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
+        Hash     * const hash = get_hash(INTERP, SELF);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, (void *)key);
 
         if (!cell) {
-            cell = CREATE_PMC_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_PMC(cell) = value;
+        cell->u.p       = value;
+        cell->type      = PMCCELL;
     }
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
-            cell = CREATE_INTVAL_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, k, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_INT(cell) = value;
+        cell->u.i       = value;
+        cell->type      = INTCELL;
     }
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
-            cell = CREATE_FLOATVAL_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, k, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_FLOAT(cell) = value;
+        cell->u.n       = value;
+        cell->type      = FLOATCELL;
     }
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
-            cell = CREATE_STRING_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, k, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_STRING(cell) = value;
+        cell->u.s       = value;
+        cell->type      = STRINGCELL;
     }
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        Hash     *hash = get_hash(INTERP, SELF);
-        void     *k    = hash_key_from_pmc(INTERP, hash, key);
+        Hash     * const hash = get_hash(INTERP, SELF);
+        void     * const k    = hash_key_from_pmc(INTERP, hash, key);
         Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
         if (!cell) {
-            cell = CREATE_PMC_CELL(INTERP);
+            cell = ALLOC_CELL(INTERP);
             parrot_hash_put(INTERP, hash, k, (void *)cell);
-            NEXT_CELL(cell) = NULL;
         }
 
-        CELL_PMC(cell) = value;
+        cell->u.p       = value;
+        cell->type      = PMCCELL;
     }
 
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_intval(INTERP, cell);
@@ -1267,11 +1266,11 @@
     }
 
     VTABLE FLOATVAL get_number_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_floatval(INTERP, cell);
@@ -1282,11 +1281,11 @@
 
 
     VTABLE STRING * get_string_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_string(INTERP, cell);
@@ -1296,11 +1295,11 @@
     }
 
     VTABLE PMC * get_pmc_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_pmc(INTERP, cell);
@@ -1310,11 +1309,11 @@
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_intval(INTERP, cell);
@@ -1324,11 +1323,11 @@
     }
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_floatval(INTERP, cell);
@@ -1338,11 +1337,11 @@
     }
 
     VTABLE STRING * get_string_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_string(INTERP, cell);
@@ -1352,11 +1351,11 @@
     }
 
     VTABLE PMC * get_pmc_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_pmc(INTERP, cell);
@@ -1366,10 +1365,10 @@
     }
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k = hash_key_from_pmc(INTERP, hash, key);
+            void * const k = hash_key_from_pmc(INTERP, hash, key);
             return parrot_hash_exists(INTERP, hash, k);
         }
 
@@ -1377,10 +1376,10 @@
     }
 
     VTABLE INTVAL exists_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k = hash_key_from_string(INTERP, hash, key);
+            void * const k = hash_key_from_string(INTERP, hash, key);
             return parrot_hash_exists(INTERP, hash, k);
         }
 
@@ -1408,61 +1407,30 @@
 
 */
     VTABLE PMC *clone() {
-        Pcc_cell    *cell;
         STRING      *short_sig;
         PMC         *type_tuple, *arg_flags, *return_flags;
-        PMC * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
-
-        GET_ATTR_positionals(INTERP, SELF, cell);
-
-        /* Copy all positional cells (thanks to APPEND_CELL, this also
-         * sets num_positionals). */
-        for (; cell; cell = NEXT_CELL(cell)) {
-            Pcc_cell *cloned_cell;
-
-            switch (CELL_TYPE_MASK(cell)) {
-              case INTCELL:
-                cloned_cell = CREATE_INTVAL_CELL(INTERP);
-                CELL_INT(cloned_cell) = CELL_INT(cell);
-                break;
-              case FLOATCELL:
-                cloned_cell = CREATE_FLOATVAL_CELL(INTERP);
-                CELL_FLOAT(cloned_cell) = CELL_FLOAT(cell);
-                break;
-              case STRINGCELL:
-                cloned_cell = CREATE_STRING_CELL(INTERP);
-                CELL_STRING(cloned_cell) = CELL_STRING(cell);
-                break;
-              case PMCCELL:
-                cloned_cell = CREATE_PMC_CELL(INTERP);
-                CELL_PMC(cloned_cell) = CELL_PMC(cell);
-                break;
-              default:
-                break;
-            }
-            APPEND_CELL(INTERP, dest, cloned_cell);
-        }
-
+        PMC * const  dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        INTVAL       num;
+        Pcc_cell    *our_cells, *dest_cells;
+
+        GET_ATTR_num_positionals(INTERP, SELF, num);
+        /* Copy positionals */
+        ensure_positionals_storage(INTERP, dest, num);
+        GET_ATTR_positionals(INTERP, SELF, our_cells);
+        GET_ATTR_positionals(INTERP, dest, dest_cells);
+        memcpy(dest_cells, our_cells, num * sizeof (Pcc_cell));
+        SET_ATTR_num_positionals(INTERP, dest, num);
 
         GET_ATTR_type_tuple(INTERP, SELF, type_tuple);
         GET_ATTR_short_sig(INTERP, SELF, short_sig);
         GET_ATTR_arg_flags(INTERP, SELF, arg_flags);
         GET_ATTR_return_flags(INTERP, SELF, return_flags);
 
-        /* FIXME
-        PMC *results;
-
-        GET_ATTR_results(INTERP, SELF, results);
-
-        if (!PMC_IS_NULL(results))
-            SET_ATTR_results(INTERP, dest, VTABLE_clone(INTERP, results));
-        */
-
         if (!PMC_IS_NULL(type_tuple))
             SET_ATTR_type_tuple(INTERP, dest, VTABLE_clone(INTERP, type_tuple));
 
         if (short_sig)
-            SET_ATTR_short_sig(INTERP, dest, Parrot_str_copy(INTERP, short_sig));
+            SET_ATTR_short_sig(INTERP, dest, short_sig);
 
         if (!PMC_IS_NULL(arg_flags))
             SET_ATTR_arg_flags(INTERP, dest, VTABLE_clone(INTERP, arg_flags));
@@ -1476,7 +1444,6 @@
         return dest;
     }
 
-
 /*
 
 =item C<PMC *backtrace>
@@ -1493,48 +1460,48 @@
 */
 
     METHOD backtrace(PMC *resume :optional, INTVAL has_resume :opt_flag) {
-        PMC *result  = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+        PMC *result  = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
         PMC *cur_ctx = SELF;
-        Parrot_Continuation_attributes *cont = has_resume ? PMC_cont(resume) : NULL;
+        Parrot_Continuation_attributes * const cont = has_resume ? PMC_cont(resume) : NULL;
 
         /* Get starting context, then loop over them. */
         while (cur_ctx) {
-            PMC        *frame       = Parrot_pmc_new(interp, enum_class_Hash);
+            PMC        * const frame       = Parrot_pmc_new(INTERP, enum_class_Hash);
             PMC        *annotations = NULL;
             Parrot_Sub_attributes *sub;
 
             /* Get sub and put it in the hash. */
-            PMC *sub_pmc = Parrot_pcc_get_sub(interp, cur_ctx);
+            PMC *sub_pmc = Parrot_pcc_get_sub(INTERP, cur_ctx);
 
             if (!sub_pmc)
                 sub_pmc = PMCNULL;
 
-            VTABLE_set_pmc_keyed_str(interp, frame, CONST_STRING(interp, "sub"), sub_pmc);
+            VTABLE_set_pmc_keyed_str(INTERP, frame, CONST_STRING(INTERP, "sub"), sub_pmc);
 
             /* Look up any annotations and put them in the hash. */
             if (!PMC_IS_NULL(sub_pmc)) {
-                PMC_get_sub(interp, sub_pmc, sub);
+                PMC_get_sub(INTERP, sub_pmc, sub);
 
                 if (sub->seg->annotations) {
                     PackFile_ByteCode *seg = sub->seg;
                     opcode_t          *pc  = cont && cur_ctx == cont->to_ctx
                                              ? cont->address
-                                             : Parrot_pcc_get_pc(interp, cur_ctx);
+                                             : Parrot_pcc_get_pc(INTERP, cur_ctx);
 
-                    annotations = PackFile_Annotations_lookup(interp,
+                    annotations = PackFile_Annotations_lookup(INTERP,
                         seg->annotations, pc - seg->base.data,
                         NULL);
                 }
             }
 
             if (!annotations)
-                annotations = Parrot_pmc_new(interp, enum_class_Hash);
+                annotations = Parrot_pmc_new(INTERP, enum_class_Hash);
 
-            VTABLE_set_pmc_keyed_str(interp, frame, CONST_STRING(interp, "annotations"), annotations);
+            VTABLE_set_pmc_keyed_str(INTERP, frame, CONST_STRING(INTERP, "annotations"), annotations);
 
             /* Push frame and go to next caller. */
-            VTABLE_push_pmc(interp, result, frame);
-            cur_ctx = Parrot_pcc_get_caller_ctx(interp, cur_ctx);
+            VTABLE_push_pmc(INTERP, result, frame);
+            cur_ctx = Parrot_pcc_get_caller_ctx(INTERP, cur_ctx);
         }
 
         RETURN(PMC *result);

Modified: branches/ops_pct/src/pmc/capture.pmc
==============================================================================
--- branches/ops_pct/src/pmc/capture.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/capture.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -18,6 +18,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 #define CAPTURE_array_CREATE(i, obj) \
     do { \
         GETATTR_Capture_array((i), (obj), array); \

Modified: branches/ops_pct/src/pmc/class.pmc
==============================================================================
--- branches/ops_pct/src/pmc/class.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/class.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -62,7 +62,7 @@
 
 =item C<vtable_overrides>
 
-A directory of vtable method names and method bodies this class overrides.
+A directory of vtable function names and method bodies this class overrides.
 An empty Hash PMC is allocated during initialization.
 
 =item C<attrib_metadata>
@@ -94,10 +94,93 @@
 #include "pmc/pmc_object.h"
 #include "pmc/pmc_namespace.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void build_attrib_index(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static int cache_class_attribs(PARROT_INTERP,
+    ARGIN(PMC *cur_class),
+    ARGIN(PMC *attrib_index),
+    ARGIN(PMC *cache),
+    int cur_index)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+static void calculate_mro(PARROT_INTERP,
+    ARGIN(PMC *SELF),
+    INTVAL num_parents)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void init_class_from_hash(PARROT_INTERP,
+    ARGMOD(PMC *self),
+    ARGIN_NULLOK(PMC *info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+static void initialize_parents(PARROT_INTERP,
+    ARGIN(PMC *object),
+    ARGIN(PMC *all_parents))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void initialize_parents_pmc(PARROT_INTERP,
+    ARGIN(PMC *object),
+    ARGIN(PMC *all_parents),
+    ARGIN(PMC *init))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+PARROT_CANNOT_RETURN_NULL
+static STRING * make_class_name(PARROT_INTERP, ARGIN(PMC *SELF))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_build_attrib_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_cache_class_attribs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_class) \
+    , PARROT_ASSERT_ARG(attrib_index) \
+    , PARROT_ASSERT_ARG(cache))
+#define ASSERT_ARGS_calculate_mro __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(SELF))
+#define ASSERT_ARGS_init_class_from_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_initialize_parents __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(object) \
+    , PARROT_ASSERT_ARG(all_parents))
+#define ASSERT_ARGS_initialize_parents_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(object) \
+    , PARROT_ASSERT_ARG(all_parents) \
+    , PARROT_ASSERT_ARG(init))
+#define ASSERT_ARGS_make_class_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(SELF))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 static int
-cache_class_attribs(PARROT_INTERP, PMC *cur_class, PMC *attrib_index,
-    PMC *cache, int cur_index)
+cache_class_attribs(PARROT_INTERP,
+        ARGIN(PMC *cur_class), ARGIN(PMC *attrib_index),
+        ARGIN(PMC *cache), int cur_index)
 {
+    ASSERT_ARGS(cache_class_attribs)
     /* The attribute metadata hash. */
     Parrot_Class_attributes * const class_info = PARROT_CLASS(cur_class);
     PMC          * const attribs     = class_info->attrib_metadata;
@@ -120,12 +203,12 @@
         STRING * const attrib_name = VTABLE_get_string_keyed_str(
             interp, cur_attrib, name_str);
 
-        STRING * const full_key    = Parrot_str_append(interp, fq_class, attrib_name);
+        STRING * const full_key    = Parrot_str_concat(interp, fq_class, attrib_name);
 
         /* Insert into hash, along with index. */
         VTABLE_set_integer_keyed_str(interp, attrib_index, full_key, cur_index);
         VTABLE_set_integer_keyed_str(interp, class_cache, attrib_name, cur_index);
-        cur_index++;
+        ++cur_index;
     }
 
     return cur_index;
@@ -134,8 +217,9 @@
 /* This function builds the attribute index (table to map class name and
  * attribute name to an index) for the current class. */
 static void
-build_attrib_index(PARROT_INTERP, PMC *self)
+build_attrib_index(PARROT_INTERP, ARGIN(PMC *self))
 {
+    ASSERT_ARGS(build_attrib_index)
     Parrot_Class_attributes * const _class      = PARROT_CLASS(self);
     int                  cur_index    = 0;
     PMC * const          attrib_index = Parrot_pmc_new(interp, enum_class_Hash);
@@ -144,7 +228,7 @@
     int                  i;
 
     /* Go over the list of all parents to construct the attribute index. */
-    for (i = 0; i < num_classes; i++) {
+    for (i = 0; i < num_classes; ++i) {
        /* Get the class and check that it respects the standard class interface
         * (if not we don't know how it stores its attributes, so we'll have to
         * delegate the lookup). */
@@ -160,10 +244,12 @@
     _class->attrib_index = attrib_index;
     _class->attrib_cache = cache;
 }
+
 /* Takes a hash and initializes the class based on it. */
 static void
-init_class_from_hash(PARROT_INTERP, PMC *self, PMC *info)
+init_class_from_hash(PARROT_INTERP, ARGMOD(PMC *self), ARGIN_NULLOK(PMC *info))
 {
+    ASSERT_ARGS(init_class_from_hash)
     Parrot_Class_attributes * const _class      = PARROT_CLASS(self);
     STRING       * const name_str    = CONST_STRING(interp, "name");
     STRING       * const parents_str = CONST_STRING(interp, "parents");
@@ -266,7 +352,7 @@
         const int  parent_count = VTABLE_elements(interp, parent_list);
         int i;
 
-        for (i = 0; i < parent_count; i++)
+        for (i = 0; i < parent_count; ++i)
             VTABLE_add_parent(interp, self,
                 VTABLE_get_pmc_keyed_int(interp, parent_list, i));
     }
@@ -279,7 +365,7 @@
         const int   role_count = VTABLE_elements(interp, role_list);
         int i;
 
-        for (i = 0; i < role_count; i++)
+        for (i = 0; i < role_count; ++i)
             VTABLE_add_role(interp, self,
                 VTABLE_get_pmc_keyed_int(interp, role_list, i));
     }
@@ -292,7 +378,7 @@
         const int   attrib_count    = VTABLE_elements(interp, attrs_name_list);
         int i;
 
-        for (i = 0; i < attrib_count; i++) {
+        for (i = 0; i < attrib_count; ++i) {
             STRING * const attr_name = VTABLE_get_string_keyed_int(interp,
                 attrs_name_list, i);
             VTABLE_add_attribute(interp, self, attr_name, PMCNULL);
@@ -322,13 +408,14 @@
 }
 
 static void
-initialize_parents(PARROT_INTERP, PMC *object, PMC *all_parents)
+initialize_parents(PARROT_INTERP, ARGIN(PMC *object), ARGIN(PMC *all_parents))
 {
+    ASSERT_ARGS(initialize_parents)
     INTVAL  parent_index = VTABLE_elements(interp, all_parents) - 1;
     STRING * const name  = CONST_STRING(interp, "init");
 
     /* Loop through the parents in reverse MRO order. */
-    for (; parent_index >= 0; parent_index--) {
+    for (; parent_index >= 0; --parent_index) {
         PMC *meth;
         PMC * const parent = VTABLE_get_pmc_keyed_int(interp,
             all_parents, parent_index);
@@ -343,28 +430,22 @@
         meth = Parrot_oo_find_vtable_override_for_class(interp, parent, name);
 
         if (!PMC_IS_NULL(meth)) {
-            /* build an empty signature; it has an invocant but no args/retvals */
-            PMC * const sig_obj = Parrot_pmc_new(interp, enum_class_CallContext);
             /* preserve current_object */
-            PMC * const old_object = interp->current_object;
-            VTABLE_set_string_native(interp, sig_obj, CONST_STRING(interp, "Pi->"));
-            /* add the invocant */
-            VTABLE_unshift_pmc(interp, sig_obj, object);
-            interp->current_object = object;
-            Parrot_pcc_invoke_from_sig_object(interp, meth, sig_obj);
-            interp->current_object = old_object;
+            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->", object);
         }
     }
 }
 
 static void
-initialize_parents_pmc(PARROT_INTERP, PMC *object, PMC *all_parents, PMC *init)
+initialize_parents_pmc(PARROT_INTERP, ARGIN(PMC *object),
+        ARGIN(PMC *all_parents), ARGIN(PMC *init))
 {
+    ASSERT_ARGS(initialize_parents_pmc)
     INTVAL parent_index = VTABLE_elements(interp, all_parents) - 1;
     STRING * const name  = CONST_STRING(interp, "init_pmc");
 
     /* Loop through the parents in reverse MRO order. */
-    for (; parent_index >= 0; parent_index--) {
+    for (; parent_index >= 0; --parent_index) {
         PMC *meth;
         PMC * const parent = VTABLE_get_pmc_keyed_int(interp,
             all_parents, parent_index);
@@ -388,9 +469,11 @@
  * directly.  VTABLE_isa() uses the name without copying it, for efficiency
  * reasons, as it does not modify the STRING.  VTABLE_get_string() makes a copy
  * of the STRING, so its callers are free to modify it. */
+PARROT_CANNOT_RETURN_NULL
 static STRING *
-make_class_name(PARROT_INTERP, PMC *SELF)
+make_class_name(PARROT_INTERP, ARGIN(PMC *SELF))
 {
+    ASSERT_ARGS(make_class_name)
     Parrot_Class_attributes * const  _class    = PARROT_CLASS(SELF);
     PMC          * const _namespace = _class->_namespace;
 
@@ -422,8 +505,9 @@
  * see the documentation associated with C<Parrot_ComputeMRO_C3>.
  */
 static void
-calculate_mro(PARROT_INTERP, PMC *SELF, INTVAL num_parents)
+calculate_mro(PARROT_INTERP, ARGIN(PMC *SELF), INTVAL num_parents)
 {
+    ASSERT_ARGS(calculate_mro)
     Parrot_Class_attributes  * const _class = PARROT_CLASS(SELF);
 
     /* SELF is already on the all_parents */
@@ -502,23 +586,23 @@
         PObj_custom_mark_SET(SELF);
 
         /* Set up the object. */
-        _class->name            = CONST_STRING(interp, "");
+        _class->name            = CONST_STRING(INTERP, "");
         _class->_namespace      = PMCNULL;
-        _class->parents         = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        _class->all_parents     = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        _class->roles           = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        _class->methods         = Parrot_pmc_new(interp, enum_class_Hash);
-        _class->attrib_metadata = Parrot_pmc_new(interp, enum_class_Hash);
+        _class->parents         = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        _class->all_parents     = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        _class->roles           = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        _class->methods         = Parrot_pmc_new(INTERP, enum_class_Hash);
+        _class->attrib_metadata = Parrot_pmc_new(INTERP, enum_class_Hash);
         _class->attrib_index    = PMCNULL;
         _class->attrib_cache    = PMCNULL;
         _class->meth_cache      = PMCNULL;
-        _class->resolve_method  = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+        _class->resolve_method  = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
 
-        _class->vtable_overrides = Parrot_pmc_new(interp, enum_class_Hash);
-        _class->parent_overrides = Parrot_pmc_new(interp, enum_class_Hash);
+        _class->vtable_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
+        _class->parent_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
 
         /* We put ourself on the all parents list. */
-        VTABLE_push_pmc(interp, _class->all_parents, SELF);
+        VTABLE_push_pmc(INTERP, _class->all_parents, SELF);
 
         /* We are a class. */
         PObj_is_class_SET(SELF);
@@ -529,8 +613,8 @@
 
     VTABLE void init_pmc(PMC *init_data) {
         PMC           *arg;
-        const INTVAL   arg_type = VTABLE_type(interp, init_data);
-        STRING * const name_str = CONST_STRING(interp, "name");
+        const INTVAL   arg_type = VTABLE_type(INTERP, init_data);
+        STRING * const name_str = CONST_STRING(INTERP, "name");
 
         /* Set up the object. */
         SELF.init();
@@ -542,8 +626,8 @@
           case enum_class_ResizableStringArray:
           case enum_class_NameSpace:
             /* set only the name property */
-            arg = Parrot_pmc_new(interp, enum_class_Hash);
-            VTABLE_set_pmc_keyed_str(interp, arg, name_str, init_data);
+            arg = Parrot_pmc_new(INTERP, enum_class_Hash);
+            VTABLE_set_pmc_keyed_str(INTERP, arg, name_str, init_data);
             break;
 
           case enum_class_Hash:
@@ -552,15 +636,15 @@
 
             /* slow attempt to determine init_data type */
           default:
-            if (VTABLE_isa(interp, init_data, CONST_STRING(interp, "String"))
-             || VTABLE_isa(interp, init_data, CONST_STRING(interp, "Key"))
-             || VTABLE_isa(interp, init_data, CONST_STRING(interp, "ResizableStringArray"))) {
+            if (VTABLE_isa(INTERP, init_data, CONST_STRING(INTERP, "String"))
+             || VTABLE_isa(INTERP, init_data, CONST_STRING(INTERP, "Key"))
+             || VTABLE_isa(INTERP, init_data, CONST_STRING(INTERP, "ResizableStringArray"))) {
                 /* set only the name property */
-                arg = Parrot_pmc_new(interp, enum_class_Hash);
-                VTABLE_set_pmc_keyed_str(interp, arg, name_str, init_data);
+                arg = Parrot_pmc_new(INTERP, enum_class_Hash);
+                VTABLE_set_pmc_keyed_str(INTERP, arg, name_str, init_data);
             }
 
-            if (VTABLE_isa(interp, init_data, CONST_STRING(interp, "Hash")))
+            if (VTABLE_isa(INTERP, init_data, CONST_STRING(INTERP, "Hash")))
                 arg = init_data;
             else
                 Parrot_ex_throw_from_c_args(INTERP, NULL,
@@ -570,7 +654,7 @@
         }
 
         /* Initialize the class with the supplied data. */
-        init_class_from_hash(interp, SELF, arg);
+        init_class_from_hash(INTERP, SELF, arg);
     }
 
 /*
@@ -584,7 +668,7 @@
 */
 
     VTABLE STRING *get_string() {
-        return Parrot_str_copy(interp, make_class_name(interp, SELF));
+        return make_class_name(INTERP, SELF);
     }
 
 /*
@@ -599,20 +683,20 @@
 
     VTABLE void mark() {
         Parrot_Class_attributes * const _class = PARROT_CLASS(SELF);
-        Parrot_gc_mark_STRING_alive(interp, _class->name);
-        Parrot_gc_mark_STRING_alive(interp, _class->fullname);
-        Parrot_gc_mark_PMC_alive(interp, _class->_namespace);
-        Parrot_gc_mark_PMC_alive(interp, _class->parents);
-        Parrot_gc_mark_PMC_alive(interp, _class->all_parents);
-        Parrot_gc_mark_PMC_alive(interp, _class->roles);
-        Parrot_gc_mark_PMC_alive(interp, _class->methods);
-        Parrot_gc_mark_PMC_alive(interp, _class->vtable_overrides);
-        Parrot_gc_mark_PMC_alive(interp, _class->parent_overrides);
-        Parrot_gc_mark_PMC_alive(interp, _class->attrib_metadata);
-        Parrot_gc_mark_PMC_alive(interp, _class->attrib_index);
-        Parrot_gc_mark_PMC_alive(interp, _class->attrib_cache);
-        Parrot_gc_mark_PMC_alive(interp, _class->resolve_method);
-        Parrot_gc_mark_PMC_alive(interp, _class->meth_cache);
+        Parrot_gc_mark_STRING_alive(INTERP, _class->name);
+        Parrot_gc_mark_STRING_alive(INTERP, _class->fullname);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->_namespace);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->parents);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->all_parents);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->roles);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->methods);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->vtable_overrides);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->parent_overrides);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->attrib_metadata);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->attrib_index);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->attrib_cache);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->resolve_method);
+        Parrot_gc_mark_PMC_alive(INTERP, _class->meth_cache);
     }
 
 
@@ -631,27 +715,27 @@
 
     VTABLE void add_attribute(STRING *name, PMC *type) {
         Parrot_Class_attributes * const _class        = PARROT_CLASS(SELF);
-        PMC          * const new_attribute = Parrot_pmc_new(interp, enum_class_Hash);
+        PMC          * const new_attribute = Parrot_pmc_new(INTERP, enum_class_Hash);
 
         /* If we've been instantiated already, not allowed. */
         if (_class->instantiated)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Modifications to classes are not allowed after instantiation.");
 
         /* If we already have an attribute of this name, it's an error. */
-        if (VTABLE_exists_keyed_str(interp, _class->attrib_metadata, name))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        if (VTABLE_exists_keyed_str(INTERP, _class->attrib_metadata, name))
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Attribute '%Ss' already exists in '%Ss'.", name,
                 VTABLE_get_string(INTERP, SELF));
 
         /* Set name and type. */
-        VTABLE_set_string_keyed_str(interp, new_attribute, CONST_STRING(interp, "name"), name);
+        VTABLE_set_string_keyed_str(INTERP, new_attribute, CONST_STRING(INTERP, "name"), name);
 
         if (!PMC_IS_NULL(type))
-            VTABLE_set_pmc_keyed_str(interp, new_attribute, CONST_STRING(interp, "type"), type);
+            VTABLE_set_pmc_keyed_str(INTERP, new_attribute, CONST_STRING(INTERP, "type"), type);
 
         /* Enter the attribute in the attrib_metadata table. */
-        VTABLE_set_pmc_keyed_str(interp, _class->attrib_metadata, name,
+        VTABLE_set_pmc_keyed_str(INTERP, _class->attrib_metadata, name,
             new_attribute);
     }
 
@@ -672,19 +756,19 @@
 
         /* If we've been instantiated already, not allowed. */
         if (_class->instantiated)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Modifications to classes are not allowed after instantiation.");
 
         /* If we don't have an attribute of this name, it's an error. */
-        if (!VTABLE_exists_keyed_str(interp, _class->attrib_metadata, name))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        if (!VTABLE_exists_keyed_str(INTERP, _class->attrib_metadata, name))
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Attribute '%Ss' cannot be removed, does not exist in '%Ss'.", name,
                 VTABLE_get_string(INTERP, SELF));
 
         /* Remove the attribute from the attrib_metadata table. */
-        VTABLE_delete_keyed_str(interp, _class->attrib_metadata, name);
+        VTABLE_delete_keyed_str(INTERP, _class->attrib_metadata, name);
 
-        build_attrib_index(interp, SELF);
+        build_attrib_index(INTERP, SELF);
     }
 
 /*
@@ -699,21 +783,21 @@
     VTABLE void add_method(STRING *name, PMC *sub) {
         Parrot_Class_attributes * const _class = PARROT_CLASS(SELF);
         PMC                     * const method =
-                 VTABLE_get_pmc_keyed_str(interp, _class->methods, name);
+                 VTABLE_get_pmc_keyed_str(INTERP, _class->methods, name);
 
         /* If we have already added a method with this name... */
         if (!PMC_IS_NULL(method)) {
             if (method == sub)
                 return;
 
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "A method named '%S' already exists in class '%S'. "
                 "It may have been supplied by a role.",
-                name, VTABLE_get_string(interp, SELF));
+                name, VTABLE_get_string(INTERP, SELF));
         }
 
         /* Enter it into the table. */
-        VTABLE_set_pmc_keyed_str(interp, _class->methods, name, sub);
+        VTABLE_set_pmc_keyed_str(INTERP, _class->methods, name, sub);
     }
 
 /*
@@ -727,12 +811,12 @@
 */
     VTABLE void remove_method(STRING *name) {
         Parrot_Class_attributes * const _class = PARROT_CLASS(SELF);
-        if (VTABLE_exists_keyed_str(interp, _class->methods, name))
-            VTABLE_delete_keyed_str(interp, _class->methods, name);
+        if (VTABLE_exists_keyed_str(INTERP, _class->methods, name))
+            VTABLE_delete_keyed_str(INTERP, _class->methods, name);
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "No method named '%S' to remove in class '%S'.",
-                name, VTABLE_get_string(interp, SELF));
+                name, VTABLE_get_string(INTERP, SELF));
     }
 
 /*
@@ -747,28 +831,28 @@
     VTABLE void add_vtable_override(STRING *name, PMC *sub) {
         Parrot_Class_attributes * const _class = PARROT_CLASS(SELF);
         PMC                     * const vtable =
-            VTABLE_get_pmc_keyed_str(interp, _class->vtable_overrides, name);
+            VTABLE_get_pmc_keyed_str(INTERP, _class->vtable_overrides, name);
 
         /* If we have already added a vtable override with this name... */
         if (!PMC_IS_NULL(vtable)) {
             if (vtable == sub)
                 return;
 
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "A vtable override named '%S' already exists in class '%S'. "
                 "It may have been supplied by a role.",
-                name, VTABLE_get_string(interp, SELF));
+                name, VTABLE_get_string(INTERP, SELF));
         }
 
         /* Check that the name is actually valid as a vtable override */
-        if (Parrot_get_vtable_index(interp, name) == -1)
-            Parrot_ex_throw_from_c_args(interp, NULL,
+        if (Parrot_get_vtable_index(INTERP, name) == -1)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_METHOD_NOT_FOUND,
                 "'%S' is not a valid vtable function name.", name);
 
-        /* Add it to vtable methods list. */
-        VTABLE_set_pmc_keyed_str(interp, _class->vtable_overrides, name, sub);
+        /* Add it to vtable list. */
+        VTABLE_set_pmc_keyed_str(INTERP, _class->vtable_overrides, name, sub);
     }
 
 /*
@@ -786,59 +870,59 @@
 
         /* If we've been instantiated already, not allowed. */
         if (_class->instantiated)
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "Modifications to classes are not allowed after instantiation.");
 
         /* Ensure it really is a class. */
         if (!PObj_is_class_TEST(parent))
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION, "Parent isn't a Class.");
 
         /* Check is not self */
         if (parent == SELF)
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                     EXCEPTION_INVALID_OPERATION, "Can't be own parent");
 
         /* get number of direct parents */
-        parent_count = VTABLE_elements(interp, _class->parents);
+        parent_count = VTABLE_elements(INTERP, _class->parents);
 
         /* iterate over all direct parents, check whether this class already has
          * the parent being added. */
-        for (index = 0; index < parent_count; index++) {
+        for (index = 0; index < parent_count; ++index) {
             /* get the next parent */
-            PMC * const current_parent = VTABLE_get_pmc_keyed_int(interp,
+            PMC * const current_parent = VTABLE_get_pmc_keyed_int(INTERP,
                                       _class->parents, index);
 
             /* throw an exception if we already have this parent */
             if (current_parent == parent)
-                Parrot_ex_throw_from_c_args(interp, NULL,
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
                     EXCEPTION_INVALID_OPERATION,
                     "The class '%S' already has a parent class '%S'. "
                     "It may have been supplied by a role.",
-                    VTABLE_get_string(interp, SELF),
-                    VTABLE_get_string(interp, parent));
+                    VTABLE_get_string(INTERP, SELF),
+                    VTABLE_get_string(INTERP, parent));
         }
 
         /* Check that none of the parents is self */
-        parent_count = VTABLE_elements(interp, PARROT_CLASS(parent)->all_parents);
+        parent_count = VTABLE_elements(INTERP, PARROT_CLASS(parent)->all_parents);
 
-        for (index = 0; index < parent_count; index++) {
+        for (index = 0; index < parent_count; ++index) {
             /* get the next parent */
-            PMC * const current_parent = VTABLE_get_pmc_keyed_int(interp,
+            PMC * const current_parent = VTABLE_get_pmc_keyed_int(INTERP,
                 PARROT_CLASS(parent)->all_parents, index);
 
             if (current_parent == SELF)
-                Parrot_ex_throw_from_c_args(interp, NULL,
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
                     EXCEPTION_INVALID_OPERATION,
                     "Loop in class hierarchy: '%S' is an ancestor of '%S'.",
-                    VTABLE_get_string(interp, SELF),
-                    VTABLE_get_string(interp, parent));
+                    VTABLE_get_string(INTERP, SELF),
+                    VTABLE_get_string(INTERP, parent));
         }
 
         /* Add to the lists of our immediate parents and all parents. */
-        VTABLE_push_pmc(interp, _class->parents, parent);
-        calculate_mro(interp, SELF, parent_count + 1);
+        VTABLE_push_pmc(INTERP, _class->parents, parent);
+        calculate_mro(INTERP, SELF, parent_count + 1);
     }
 
 /*
@@ -858,34 +942,34 @@
 
         /* If we've been instantiated already, not allowed. */
         if (_class->instantiated)
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "Modifications to classes are not allowed after instantiation.");
 
         /* Ensure it really is a class. */
         if (!PObj_is_class_TEST(parent))
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION, "Parent isn't a Class.");
 
         /* get number of direct parents */
-        parent_count = VTABLE_elements(interp, _class->parents);
+        parent_count = VTABLE_elements(INTERP, _class->parents);
 
         /* iterate over all direct parents, looking for the parent to remove */
-        for (index = 0; index < parent_count; index++) {
+        for (index = 0; index < parent_count; ++index) {
             /* get the next parent */
-            PMC * const current_parent = VTABLE_get_pmc_keyed_int(interp,
+            PMC * const current_parent = VTABLE_get_pmc_keyed_int(INTERP,
                                       _class->parents, index);
             if (current_parent == parent)
                 break;
         }
 
         if (index >= parent_count)
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "Can't remove_parent: is not a parent.");
 
-        VTABLE_delete_keyed_int(interp, _class->parents, index);
-        calculate_mro(interp, SELF, parent_count - 1);
+        VTABLE_delete_keyed_int(INTERP, _class->parents, index);
+        calculate_mro(INTERP, SELF, parent_count - 1);
     }
 
 /*
@@ -902,7 +986,7 @@
         const Parrot_Class_attributes * const _class = PARROT_CLASS(SELF);
 
         /* Do the composition. */
-        Parrot_ComposeRole(interp, role,
+        Parrot_ComposeRole(INTERP, role,
             _class->resolve_method, !PMC_IS_NULL(_class->resolve_method),
            PMCNULL, 0, _class->methods, _class->roles);
     }
@@ -953,46 +1037,44 @@
         /* What should we return? */
         PMC *found;
 
-        if (Parrot_str_equal(interp, what, CONST_STRING(interp, "attributes"))) {
+        if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "attributes"))) {
             found = _class->attrib_metadata;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "parents"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "parents"))) {
             found = _class->parents;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "name"))) {
-            found = Parrot_pmc_new(interp, enum_class_String);
-            VTABLE_set_string_native(interp, found, _class->name);
-        }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "id"))) {
-            found = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, found, _class->id);
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "name"))) {
+            found = Parrot_pmc_new(INTERP, enum_class_String);
+            VTABLE_set_string_native(INTERP, found, _class->name);
+        }
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "id"))) {
+            found = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, _class->id);
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "namespace"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "namespace"))) {
             /* Should not clone this. */
             return _class->_namespace;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "attrib_index"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "attrib_index"))) {
             found = _class->attrib_index;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "methods"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "methods"))) {
             found = _class->methods;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "vtable_overrides"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "vtable_overrides"))) {
             found = _class->vtable_overrides;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "all_parents"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "all_parents"))) {
             found = _class->all_parents;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "roles"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "roles"))) {
             found = _class->roles;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "flags"))) {
-            found = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, found,
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "flags"))) {
+            found = Parrot_pmc_new_init_int(INTERP, enum_class_Integer,
                 (INTVAL)PObj_get_FLAGS(SELF));
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", what);
 
         /* return found value */
@@ -1002,18 +1084,18 @@
         if (found->vtable->base_type == enum_class_Hash) {
             /* for Hash return values, create and return a shallow
              * clone because the VTABLE_clone does a deep clone */
-            PMC * const hash  = Parrot_pmc_new(interp, enum_class_Hash);
-            PMC * const iter  = VTABLE_get_iter(interp, found);
-            while (VTABLE_get_bool(interp, iter)) {
-                STRING * const key   = VTABLE_shift_string(interp, iter);
-                PMC    * const value = VTABLE_get_pmc_keyed_str(interp, found, key);
-                VTABLE_set_pmc_keyed_str(interp, hash, key, value);
+            PMC * const hash  = Parrot_pmc_new(INTERP, enum_class_Hash);
+            PMC * const iter  = VTABLE_get_iter(INTERP, found);
+            while (VTABLE_get_bool(INTERP, iter)) {
+                STRING * const key   = VTABLE_shift_string(INTERP, iter);
+                PMC    * const value = VTABLE_get_pmc_keyed_str(INTERP, found, key);
+                VTABLE_set_pmc_keyed_str(INTERP, hash, key, value);
             }
 
             return hash;
         }
 
-        return VTABLE_clone(interp, found);
+        return VTABLE_clone(INTERP, found);
     }
 
 /*
@@ -1029,35 +1111,35 @@
     VTABLE PMC *inspect() {
         /* Create a hash, then use inspect_str to get all of the data to
          * fill it up with. */
-        PMC    * const metadata    = Parrot_pmc_new(interp, enum_class_Hash);
-        STRING * const name_str    = CONST_STRING(interp, "name");
-        STRING * const ns_str      = CONST_STRING(interp, "namespace");
-        STRING * const attrs_str   = CONST_STRING(interp, "attributes");
-        STRING * const meths_str   = CONST_STRING(interp, "methods");
-        STRING * const parents_str = CONST_STRING(interp, "parents");
-        STRING * const roles_str   = CONST_STRING(interp, "roles");
-        STRING * const flags_str   = CONST_STRING(interp, "flags");
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, name_str,
-            VTABLE_inspect_str(interp, SELF, name_str));
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, ns_str,
-            VTABLE_inspect_str(interp, SELF, ns_str));
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, attrs_str,
-            VTABLE_inspect_str(interp, SELF, attrs_str));
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, meths_str,
-            VTABLE_inspect_str(interp, SELF, meths_str));
+        PMC    * const metadata    = Parrot_pmc_new(INTERP, enum_class_Hash);
+        STRING * const name_str    = CONST_STRING(INTERP, "name");
+        STRING * const ns_str      = CONST_STRING(INTERP, "namespace");
+        STRING * const attrs_str   = CONST_STRING(INTERP, "attributes");
+        STRING * const meths_str   = CONST_STRING(INTERP, "methods");
+        STRING * const parents_str = CONST_STRING(INTERP, "parents");
+        STRING * const roles_str   = CONST_STRING(INTERP, "roles");
+        STRING * const flags_str   = CONST_STRING(INTERP, "flags");
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, name_str,
+            VTABLE_inspect_str(INTERP, SELF, name_str));
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, ns_str,
+            VTABLE_inspect_str(INTERP, SELF, ns_str));
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, attrs_str,
+            VTABLE_inspect_str(INTERP, SELF, attrs_str));
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, meths_str,
+            VTABLE_inspect_str(INTERP, SELF, meths_str));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, parents_str,
-            VTABLE_inspect_str(interp, SELF, parents_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, parents_str,
+            VTABLE_inspect_str(INTERP, SELF, parents_str));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, roles_str,
-            VTABLE_inspect_str(interp, SELF, roles_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, roles_str,
+            VTABLE_inspect_str(INTERP, SELF, roles_str));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, flags_str,
-            VTABLE_inspect_str(interp, SELF, flags_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, flags_str,
+            VTABLE_inspect_str(INTERP, SELF, flags_str));
 
         return metadata;
     }
@@ -1086,18 +1168,18 @@
 
         Parrot_Class_attributes * const new_class = PARROT_CLASS(copy);
 
-        new_class->name                = CONST_STRING(interp, "");
+        new_class->name                = CONST_STRING(INTERP, "");
         new_class->_namespace          = PMCNULL;
-        new_class->parents             = VTABLE_clone(interp, _class->parents);
-        new_class->roles               = VTABLE_clone(interp, _class->roles);
-        new_class->methods             = VTABLE_clone(interp, _class->methods);
-        new_class->vtable_overrides    = VTABLE_clone(interp,
+        new_class->parents             = VTABLE_clone(INTERP, _class->parents);
+        new_class->roles               = VTABLE_clone(INTERP, _class->roles);
+        new_class->methods             = VTABLE_clone(INTERP, _class->methods);
+        new_class->vtable_overrides    = VTABLE_clone(INTERP,
                                             _class->vtable_overrides);
-        new_class->parent_overrides    = VTABLE_clone(interp,
+        new_class->parent_overrides    = VTABLE_clone(INTERP,
                                             _class->parent_overrides);
-        new_class->attrib_metadata     = VTABLE_clone(interp,
+        new_class->attrib_metadata     = VTABLE_clone(INTERP,
                                             _class->attrib_metadata);
-        new_class->resolve_method      = VTABLE_clone(interp,
+        new_class->resolve_method      = VTABLE_clone(INTERP,
                                             _class->resolve_method);
 
         /* Return cloned class. */
@@ -1121,7 +1203,7 @@
         /* Do the standard clone. */
         PMC * const copy = SELF.clone();
 
-        init_class_from_hash(interp, copy, args);
+        init_class_from_hash(INTERP, copy, args);
 
         return copy;
     }
@@ -1143,39 +1225,39 @@
         /* If we've not been instantiated before... */
         if (!_class->instantiated) {
             /* Check that we have all methods listed in resolve list. */
-            const int resolve_count  = VTABLE_elements(interp,
+            const int resolve_count  = VTABLE_elements(INTERP,
                                                        _class->resolve_method);
-            const INTVAL cur_hll     = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
-            const INTVAL num_parents = VTABLE_elements(interp, _class->parents);
+            const INTVAL cur_hll     = Parrot_pcc_get_HLL(INTERP, CURRENT_CONTEXT(INTERP));
+            const INTVAL num_parents = VTABLE_elements(INTERP, _class->parents);
             INTVAL       mro_length;
             int          i;
 
             /* don't use HLL mappings for internal-only data */
-            Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), 0);
+            Parrot_pcc_set_HLL(INTERP, CURRENT_CONTEXT(INTERP), 0);
 
-            for (i = 0; i < resolve_count; i++) {
+            for (i = 0; i < resolve_count; ++i) {
                 STRING * const check_meth =
-                    VTABLE_get_string_keyed_int(interp, _class->resolve_method, i);
-                if (!VTABLE_exists_keyed_str(interp, _class->methods, check_meth))
-                    Parrot_ex_throw_from_c_args(interp, NULL,
+                    VTABLE_get_string_keyed_int(INTERP, _class->resolve_method, i);
+                if (!VTABLE_exists_keyed_str(INTERP, _class->methods, check_meth))
+                    Parrot_ex_throw_from_c_args(INTERP, NULL,
                         EXCEPTION_METHOD_NOT_FOUND, "The method '%S' was named "
                         "in the resolve list, but not supplied", check_meth);
             }
 
             /* Build full parents list.
              * TT #1256:  Need pluggable MRO, for now always do C3. */
-            calculate_mro(interp, SELF, num_parents);
-            build_attrib_index(interp, SELF);
+            calculate_mro(INTERP, SELF, num_parents);
+            build_attrib_index(INTERP, SELF);
 
             if (PMC_IS_NULL(_class->attrib_index))
                 return PMCNULL;
 
             /* See if we have any parents from other universes and if so set a
              * flag stating so. */
-            mro_length = VTABLE_elements(interp, _class->all_parents);
+            mro_length = VTABLE_elements(INTERP, _class->all_parents);
 
-            for (i = 0; i < mro_length; i++) {
-                PMC * const class_check = VTABLE_get_pmc_keyed_int(interp,
+            for (i = 0; i < mro_length; ++i) {
+                PMC * const class_check = VTABLE_get_pmc_keyed_int(INTERP,
                     _class->all_parents, i);
                 if (class_check->vtable->base_type != enum_class_Class) {
                     /* Found one; that's enough. */
@@ -1184,14 +1266,14 @@
                 }
             }
 
-            Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp), cur_hll);
+            Parrot_pcc_set_HLL(INTERP, CURRENT_CONTEXT(INTERP), cur_hll);
         }
 
         /* Set instantiated flag. */
         _class->instantiated = 1;
 
         /* Create object. */
-        object = Parrot_pmc_new_noinit(interp, enum_class_Object);
+        object = Parrot_pmc_new_noinit(INTERP, enum_class_Object);
 
         /* Set custom GC mark and destroy on the object. */
         PObj_custom_mark_destroy_SETALL(object);
@@ -1207,28 +1289,28 @@
             Parrot_Object_attributes * const objattr =
                 PMC_data_typed(object, Parrot_Object_attributes *);
             objattr->_class       = SELF;
-            objattr->attrib_store = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+            objattr->attrib_store = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
         }
 
         if (!PMC_IS_NULL(init)) {
             /* Initialize attributes with the supplied values. */
-            PMC * const iter = VTABLE_get_iter(interp, init);
+            PMC * const iter = VTABLE_get_iter(INTERP, init);
 
-            while (VTABLE_get_bool(interp, iter)) {
-                STRING * const name  = VTABLE_shift_string(interp, iter);
-                PMC    * const value = VTABLE_get_pmc_keyed_str(interp, init,
+            while (VTABLE_get_bool(INTERP, iter)) {
+                STRING * const name  = VTABLE_shift_string(INTERP, iter);
+                PMC    * const value = VTABLE_get_pmc_keyed_str(INTERP, init,
                                             name);
 
                 /* Set the attribute. */
-                VTABLE_set_attr_str(interp, object, name, value);
+                VTABLE_set_attr_str(INTERP, object, name, value);
             }
 
             /* Check for overrides on the init_pmc vtable function */
-            initialize_parents_pmc(interp, object, _class->all_parents, init);
+            initialize_parents_pmc(INTERP, object, _class->all_parents, init);
         }
         else
             /* Check for overrides on the init vtable function */
-            initialize_parents(interp, object, _class->all_parents);
+            initialize_parents(INTERP, object, _class->all_parents);
 
         return object;
     }
@@ -1255,13 +1337,13 @@
         if (PObj_is_class_TEST(lookup) && lookup == SELF)
             return 1;
 
-        classobj = Parrot_oo_get_class(interp, lookup);
+        classobj = Parrot_oo_get_class(INTERP, lookup);
 
         if (PMC_IS_NULL(classobj))
             return 0;
 
         /* Check if the class object is the same as self's class object */
-        if (VTABLE_is_same(interp, SELF, classobj))
+        if (VTABLE_is_same(INTERP, SELF, classobj))
             return 1;
 
         /* this is effectively what the default PMC's isa_pmc does
@@ -1269,26 +1351,26 @@
          * only in these two, very specific and common cases */
         if (classobj->vtable->base_type == enum_class_Class
         ||  classobj->vtable->base_type == enum_class_PMCProxy) {
-            STRING *classname = make_class_name(interp, classobj);
+            STRING *classname = make_class_name(INTERP, classobj);
 
-            if (Parrot_str_equal(interp, SELF->vtable->whoami, classname))
+            if (Parrot_str_equal(INTERP, SELF->vtable->whoami, classname))
                 return 1;
 
             if (SELF->vtable->isa_hash
-            &&  parrot_hash_exists(interp, SELF->vtable->isa_hash,
+            &&  parrot_hash_exists(INTERP, SELF->vtable->isa_hash,
                                     (void *)classname))
                 return 1;
         }
 
         /* Iterate over all the parents and check if they respond true
          * for 'isa' on the original comparison. */
-        num_classes = VTABLE_elements(interp, _class->parents);
+        num_classes = VTABLE_elements(INTERP, _class->parents);
 
-        for (i = 0; i < num_classes; i++) {
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp,
+        for (i = 0; i < num_classes; ++i) {
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(INTERP,
                     _class->parents, i);
 
-            if (VTABLE_isa_pmc(interp, cur_class, lookup))
+            if (VTABLE_isa_pmc(INTERP, cur_class, lookup))
                 return 1;
         }
 
@@ -1309,10 +1391,10 @@
         PMC *want_class;
 
         /* hard-code this one exception right away */
-        if (Parrot_str_equal(interp, classname, CONST_STRING(interp, "Class")))
+        if (Parrot_str_equal(INTERP, classname, CONST_STRING(INTERP, "Class")))
             return 1;
 
-        want_class = Parrot_oo_get_class_str(interp, classname);
+        want_class = Parrot_oo_get_class_str(INTERP, classname);
 
         if (PMC_IS_NULL(want_class))
             return 0;
@@ -1320,7 +1402,7 @@
         if (SELF == want_class)
             return 1;
 
-        return VTABLE_isa_pmc(interp, SELF, want_class);
+        return VTABLE_isa_pmc(INTERP, SELF, want_class);
     }
 
 /*
@@ -1340,28 +1422,28 @@
         if (!role_list)
             return 0;
 
-        count = VTABLE_elements(interp, role_list);
+        count = VTABLE_elements(INTERP, role_list);
 
-        for (i = 0; i < count; i++) {
-            PMC * const role = VTABLE_get_pmc_keyed_int(interp, role_list, i);
+        for (i = 0; i < count; ++i) {
+            PMC * const role = VTABLE_get_pmc_keyed_int(INTERP, role_list, i);
 
-            if (VTABLE_does(interp, role, role_name))
+            if (VTABLE_does(INTERP, role, role_name))
                 return 1;
         }
 
         /* Iterate over all the parents and check if they respond true
          * for 'does' on the original comparison. */
-        count = VTABLE_elements(interp, _class->parents);
+        count = VTABLE_elements(INTERP, _class->parents);
 
-        for (i = 0; i < count; i++) {
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp,
+        for (i = 0; i < count; ++i) {
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(INTERP,
                     _class->parents, i);
 
-            if (VTABLE_does(interp, cur_class, role_name))
+            if (VTABLE_does(INTERP, cur_class, role_name))
                 return 1;
         }
 
-        return VTABLE_isa(interp, SELF, role_name);
+        return VTABLE_isa(INTERP, SELF, role_name);
     }
 
 /*
@@ -1381,27 +1463,27 @@
         if (!role_list)
             return 0;
 
-        role_count = VTABLE_elements(interp, role_list);
+        role_count = VTABLE_elements(INTERP, role_list);
 
-        for (i = 0; i < role_count; i++) {
-            PMC    * const test_role = VTABLE_get_pmc_keyed_int(interp, role_list, i);
-            if (VTABLE_does_pmc(interp, test_role, role))
+        for (i = 0; i < role_count; ++i) {
+            PMC    * const test_role = VTABLE_get_pmc_keyed_int(INTERP, role_list, i);
+            if (VTABLE_does_pmc(INTERP, test_role, role))
                 return 1;
         }
 
         /* Iterate over all the parents and check if they respond true
          * for 'does' on the original comparison. */
-        count = VTABLE_elements(interp, _class->parents);
+        count = VTABLE_elements(INTERP, _class->parents);
 
-        for (i = 0; i < count; i++) {
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp,
+        for (i = 0; i < count; ++i) {
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(INTERP,
                     _class->parents, i);
 
-            if (VTABLE_does_pmc(interp, cur_class, role))
+            if (VTABLE_does_pmc(INTERP, cur_class, role))
                 return 1;
         }
 
-        return VTABLE_isa_pmc(interp, SELF, role);
+        return VTABLE_isa_pmc(INTERP, SELF, role);
     }
 
 /*
@@ -1463,7 +1545,7 @@
 
     VTABLE void freeze(PMC *info) {
         Parrot_Class_attributes * const class_data = PARROT_CLASS(SELF);
-        STRING       *serial_namespace = CONST_STRING(interp, "");
+        STRING       *serial_namespace = CONST_STRING(INTERP, "");
 
         /* 1) freeze class id */
         VTABLE_push_integer(INTERP, info, class_data->id);
@@ -1473,10 +1555,10 @@
 
         /* 3) serialize namespace name, including HLL */
         if (!PMC_IS_NULL(class_data->_namespace)) {
-            PMC * const names = Parrot_ns_get_name(interp,
+            PMC * const names = Parrot_ns_get_name(INTERP,
                     class_data->_namespace);
             if (!PMC_IS_NULL(names))
-                serial_namespace = Parrot_str_join(interp, CONST_STRING(interp, ";"), names);
+                serial_namespace = Parrot_str_join(INTERP, CONST_STRING(INTERP, ";"), names);
         }
         VTABLE_push_string(INTERP, info, serial_namespace);
     }
@@ -1507,13 +1589,13 @@
         STRING * const semicolon_str = CONST_STRING(INTERP, ";");
         PMC    * const namespace_array =
             Parrot_str_split(INTERP, semicolon_str, serial_namespace);
-        PMC *ns = Parrot_get_namespace_keyed(interp,
+        PMC *ns = Parrot_get_namespace_keyed(INTERP,
                 INTERP->root_namespace, namespace_array);
 
         /* If the namespace doesn't exist, we create it, and initialize
          * ourselves in it */
         if (PMC_IS_NULL(ns)) {
-            ns = Parrot_make_namespace_keyed(interp,
+            ns = Parrot_make_namespace_keyed(INTERP,
                     INTERP->root_namespace, namespace_array);
             SELF.init_pmc(ns);
         }
@@ -1562,15 +1644,15 @@
         UNUSED(info)
 
         /* Recalculate full MRO from thawed parents */
-        _class->all_parents         = Parrot_ComputeMRO_C3(interp, SELF);
-        _class->parent_overrides    = Parrot_pmc_new(interp, enum_class_Hash);
+        _class->all_parents         = Parrot_ComputeMRO_C3(INTERP, SELF);
+        _class->parent_overrides    = Parrot_pmc_new(INTERP, enum_class_Hash);
 
         /* Rebuild attribute index from thawed attribute metadata */
-        build_attrib_index(interp, SELF);
+        build_attrib_index(INTERP, SELF);
     }
 
     /* **********************************************************************
-     * Below here are non-vtable methods that eventually will go in a role
+     * Below here are methods that eventually will go in a role
      * that is composed into here to optionally give a nice interface from
      * PIR (ParrotClass isa Class does ClassMethods or something like this).
      * **********************************************************************/
@@ -1591,11 +1673,11 @@
         if (has_name) {
             /* We'll build a hash just containing the name, then give this to
              * init_class_from_hash - saves some code duplication. */
-            PMC    * const naming_hash = Parrot_pmc_new(interp, enum_class_Hash);
-            STRING * const name_str    = CONST_STRING(interp, "name");
+            PMC    * const naming_hash = Parrot_pmc_new(INTERP, enum_class_Hash);
+            STRING * const name_str    = CONST_STRING(INTERP, "name");
 
-            VTABLE_set_string_keyed_str(interp, naming_hash, name_str, name);
-            init_class_from_hash(interp, SELF, naming_hash);
+            VTABLE_set_string_keyed_str(INTERP, naming_hash, name_str, name);
+            init_class_from_hash(INTERP, SELF, naming_hash);
         }
 
         ret_name = _class->name;
@@ -1655,9 +1737,9 @@
         /* Check if any arguments are in the slurpy hash, don't pass an empty
          * hash to instantiate */
         PMC * const obj =
-            VTABLE_elements(interp, args) > 0
-                ? VTABLE_instantiate(interp, SELF, args)
-                : VTABLE_instantiate(interp, SELF, PMCNULL);
+            VTABLE_elements(INTERP, args) > 0
+                ? VTABLE_instantiate(INTERP, SELF, args)
+                : VTABLE_instantiate(INTERP, SELF, PMCNULL);
 
         RETURN(PMC *obj);
      }
@@ -1673,7 +1755,7 @@
 
 */
     METHOD attributes() {
-        STRING * const attr_str            = CONST_STRING(interp, "attributes");
+        STRING * const attr_str            = CONST_STRING(INTERP, "attributes");
         PMC    * const ret_attrib_metadata = SELF.inspect_str(attr_str);
 
         RETURN(PMC *ret_attrib_metadata);
@@ -1704,7 +1786,7 @@
 
 */
     METHOD methods() {
-        PMC * const ret_methods = SELF.inspect_str(CONST_STRING(interp, "methods"));
+        PMC * const ret_methods = SELF.inspect_str(CONST_STRING(INTERP, "methods"));
 
         RETURN(PMC *ret_methods);
     }
@@ -1714,7 +1796,7 @@
 =item C<void add_method(STRING *name, PMC *sub)>
 
 Adds the given sub PMC as a method with the given name. Delegates to the
-C<add_method> vtable method.
+C<add_method> vtable.
 
 =cut
 
@@ -1728,13 +1810,13 @@
 =item C<void add_vtable_override(STRING *name, PMC *sub)>
 
 Adds the given sub PMC as a vtable override with the given name. Delegates to
-the C<add_vtable_override> vtable method.
+the C<add_vtable_override> vtable.
 
 =cut
 
 */
     METHOD add_vtable_override(STRING *name, PMC *sub) {
-        VTABLE_add_vtable_override(interp, SELF, name, sub);
+        VTABLE_add_vtable_override(INTERP, SELF, name, sub);
     }
 
 /*
@@ -1747,7 +1829,7 @@
 
 */
     METHOD remove_method(STRING *name) {
-        VTABLE_remove_method(interp, SELF, name);
+        VTABLE_remove_method(INTERP, SELF, name);
     }
 
 /*
@@ -1765,17 +1847,17 @@
         int i;
 
         /* Walk and search. One day, we'll use the cache first. */
-        const int num_classes = VTABLE_elements(interp, _class->all_parents);
+        const int num_classes = VTABLE_elements(INTERP, _class->all_parents);
 
-        for (i = 0; i < num_classes; i++) {
+        for (i = 0; i < num_classes; ++i) {
             /* Get the class and see if it has the method. */
             PMC * const cur_class =
-                VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
+                VTABLE_get_pmc_keyed_int(INTERP, _class->all_parents, i);
             const Parrot_Class_attributes * const class_info = PARROT_CLASS(cur_class);
 
             /* Found it! */
-            if (VTABLE_exists_keyed_str(interp, class_info->methods, name)) {
-                PMC * const ret = VTABLE_get_pmc_keyed_str(interp, class_info->methods, name);
+            if (VTABLE_exists_keyed_str(INTERP, class_info->methods, name)) {
+                PMC * const ret = VTABLE_get_pmc_keyed_str(INTERP, class_info->methods, name);
                 RETURN(PMC *ret);
             }
         }
@@ -1793,7 +1875,7 @@
 
 */
     METHOD parents() {
-        PMC * const ret_parents = SELF.inspect_str(CONST_STRING(interp, "parents"));
+        PMC * const ret_parents = SELF.inspect_str(CONST_STRING(INTERP, "parents"));
 
         RETURN(PMC *ret_parents);
     }
@@ -1821,7 +1903,7 @@
 
 */
     METHOD roles() {
-        PMC * const ret_roles = SELF.inspect_str(CONST_STRING(interp, "roles"));
+        PMC * const ret_roles = SELF.inspect_str(CONST_STRING(INTERP, "roles"));
 
         RETURN(PMC *ret_roles);
     }
@@ -1848,24 +1930,24 @@
          * no exclude list, pass along the resolve list in its place if it has
          * any methods listed in it. */
         if (!has_exclude_method) {
-            if (VTABLE_elements(interp, _class->resolve_method) != 0) {
+            if (VTABLE_elements(INTERP, _class->resolve_method) != 0) {
                 exclude_method     = _class->resolve_method;
                 has_exclude_method = 1;
             }
         }
         else {
-            const int resolve_count = VTABLE_elements(interp, _class->resolve_method);
+            const int resolve_count = VTABLE_elements(INTERP, _class->resolve_method);
             int i;
 
-            for (i = 0; i < resolve_count; i++) {
-                STRING * const meth_name = VTABLE_get_string_keyed_int(interp,
+            for (i = 0; i < resolve_count; ++i) {
+                STRING * const meth_name = VTABLE_get_string_keyed_int(INTERP,
                     _class->resolve_method, i);
-                VTABLE_push_string(interp, exclude_method, meth_name);
+                VTABLE_push_string(INTERP, exclude_method, meth_name);
             }
         }
 
         /* Do the composition. */
-        Parrot_ComposeRole(interp, role, exclude_method, has_exclude_method,
+        Parrot_ComposeRole(INTERP, role, exclude_method, has_exclude_method,
                            alias_method, has_alias_method,
                            _class->methods, _class->roles);
     }
@@ -1883,7 +1965,7 @@
     METHOD inspect(STRING *what :optional, int has_what :opt_flag) {
         PMC *found;
 
-        /* Just delegate to the appropriate vtable method. */
+        /* Just delegate to the appropriate vtable. */
         if (has_what)
             found = SELF.inspect_str(what);
         else
@@ -1919,10 +2001,27 @@
 
 */
     METHOD does(STRING *role_name) {
-        const INTVAL does = VTABLE_does(interp, SELF, role_name);
+        const INTVAL does = VTABLE_does(INTERP, SELF, role_name);
         RETURN(INTVAL does);
     }
 
+    METHOD clear_method_cache() {
+        Parrot_Class_attributes * const attrs = PARROT_CLASS(SELF);
+        PMC * const cache = attrs->meth_cache;
+        if (cache)
+            attrs->meth_cache = PMCNULL;
+    }
+
+    METHOD get_method_cache() {
+        Parrot_Class_attributes * const attrs = PARROT_CLASS(SELF);
+        PMC * cache = attrs->meth_cache;
+        if (!cache) {
+            cache = Parrot_pmc_new(INTERP, enum_class_Hash);
+            attrs->meth_cache = cache;
+        }
+        RETURN(PMC *cache);
+    }
+
 } /* END pmclass */
 
 /*

Modified: branches/ops_pct/src/pmc/codestring.pmc
==============================================================================
--- branches/ops_pct/src/pmc/codestring.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/codestring.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -34,6 +34,10 @@
 #  include <unicode/uchar.h>
 #endif
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass CodeString extends String provides string auto_attrs {
     ATTR PMC *linepos;            /* start of line positions */
 
@@ -64,15 +68,14 @@
 */
 
     VTABLE void mark() {
-        PMC *linepos;
-
         SUPER();
-        if (!PMC_data(SELF))
-            return;
+        if (PMC_data(SELF)) {
+            PMC *linepos;
 
-        GET_ATTR_linepos(INTERP, SELF, linepos);
+            GET_ATTR_linepos(INTERP, SELF, linepos);
 
-        Parrot_gc_mark_PMC_alive(INTERP, linepos);
+            Parrot_gc_mark_PMC_alive(INTERP, linepos);
+        }
     }
 
 /*
@@ -105,40 +108,28 @@
     STRING * const comma       = CONST_STRING(INTERP, ",");
     STRING * const comma_space = CONST_STRING(INTERP, ", ");
     STRING * const newline     = CONST_STRING(INTERP, "\n");
-    STRING *key, *repl, *S0, *S1;
+    PMC           *parts       = PMCNULL;
+    STRING *key, *repl, *S1;
     INTVAL pos          = 0;
     INTVAL replen       = 0;
-    INTVAL I0, I1;
-
-    fmt = Parrot_str_new_COW(INTERP, fmt);
 
     while (pos >= 0) {
         pos += replen;
         pos = Parrot_str_find_index(INTERP, fmt, percent, pos);
-        if (pos < 0) break;
+        if (pos < 0)
+            break;
 
-        key = Parrot_str_substr(INTERP, fmt, pos+1, 1, &key, 0);
+        key = Parrot_str_substr(INTERP, fmt, pos+1, 1);
 
         if (VTABLE_exists_keyed_str(INTERP, hash, key)) {
             repl = VTABLE_get_string_keyed_str(INTERP, hash, key);
         }
-        else if (Parrot_str_is_cclass(INTERP, enum_cclass_numeric, fmt,
-                (UINTVAL)pos + 1)) {
-            I0   = Parrot_str_to_int(INTERP, key);
+        else if (Parrot_str_is_cclass(INTERP, enum_cclass_numeric, fmt, (UINTVAL)pos + 1)) {
+            const INTVAL I0 = Parrot_str_to_int(INTERP, key);
             repl = VTABLE_get_string_keyed_int(INTERP, args, I0);
         }
         else if (Parrot_str_equal(INTERP, key, comma)) {
-            repl = VTABLE_get_string_keyed_int(INTERP, args, 0);
-            repl = Parrot_str_new_COW(INTERP, repl);
-            I1   = VTABLE_elements(INTERP, args);
-            I0   = 1;
-
-            while (I0 < I1) {
-                S0   = VTABLE_get_string_keyed_int(INTERP, args, I0);
-                repl = Parrot_str_append(INTERP, repl, comma_space);
-                repl = Parrot_str_append(INTERP, repl, S0);
-                I0++;
-            }
+            repl = Parrot_str_join(INTERP, comma_space, args);
         }
         else if (Parrot_str_equal(INTERP, key, percent)) {
             repl = percent;
@@ -149,16 +140,21 @@
             continue;
         }
 
-        (void) Parrot_str_replace(INTERP, fmt, pos, 2, repl, NULL);
+        fmt    = Parrot_str_replace(INTERP, fmt, pos, 2, repl);
         replen = Parrot_str_byte_length(INTERP, repl);
     }
 
+    GET_ATTR_str_val(INTERP, SELF, S1);
+
+    parts = Parrot_pmc_new_init_int(INTERP, enum_class_FixedStringArray, 3);
+    VTABLE_set_string_keyed_int(INTERP, parts, 0, S1);
+    VTABLE_set_string_keyed_int(INTERP, parts, 1, fmt);
+
     /* Add a newline if necessary */
     if ('\n' != Parrot_str_indexed(INTERP, fmt, Parrot_str_byte_length(INTERP, fmt) - 1))
-        fmt = Parrot_str_concat(INTERP, fmt, newline, 0);
+        VTABLE_set_string_keyed_int(INTERP, parts, 2, newline);
 
-    GET_ATTR_str_val(INTERP, SELF, S1);
-    S1 = Parrot_str_concat(INTERP, S1, fmt, 0);
+    S1 = Parrot_str_join(INTERP, STRINGNULL, parts);
     VTABLE_set_string_native(INTERP, SELF, S1);
 
     RETURN(PMC *SELF);
@@ -197,7 +193,7 @@
         jpos = Parrot_str_find_cclass(INTERP, enum_cclass_newline,
                                       str, 0, eos);
         while (jpos < eos) {
-            jpos++;
+            ++jpos;
             /* add the start of line position */
             VTABLE_push_integer(INTERP, linepos, jpos);
 
@@ -205,7 +201,7 @@
             if (jpos < eos
             && string_ord(INTERP, str, jpos - 1)     == 13
             && string_ord(INTERP, str, jpos)         == 10) {
-                jpos++;
+                ++jpos;
             }
             /* search for the next newline */
             jpos = Parrot_str_find_cclass(INTERP, enum_cclass_newline,
@@ -222,7 +218,7 @@
     count = VTABLE_elements(INTERP, linepos);
     while (line < count
           && VTABLE_get_integer_keyed_int(INTERP, linepos, line) <= pos)
-        line++;
+        ++line;
 
     RETURN(INTVAL line);
   }
@@ -244,17 +240,16 @@
 
   METHOD unique(STRING *format :optional, int has_fmt :opt_flag) {
     static INTVAL counter = 10;
-    STRING *counter_as_string = Parrot_str_from_int(INTERP, counter);
+    STRING * const counter_as_string = Parrot_str_from_int(INTERP, counter);
     UNUSED(SELF);
 
-    counter++;
+    ++counter;
 
     if (!has_fmt) {
         RETURN(STRING *counter_as_string);
     }
     else {
-        STRING *result = Parrot_str_copy(INTERP, format);
-        result         = Parrot_str_concat(INTERP, result, counter_as_string, 1);
+        STRING *result = Parrot_str_concat(INTERP, format, counter_as_string);
         RETURN(STRING *result);
     }
   }
@@ -279,8 +274,8 @@
     INTVAL is_unicode = 0;
     UNUSED(SELF);
 
-    escaped_str = Parrot_str_concat(INTERP, quote, escaped_str, 1);
-    escaped_str = Parrot_str_concat(INTERP, escaped_str, quote, 1);
+    escaped_str = Parrot_str_concat(INTERP, quote, escaped_str);
+    escaped_str = Parrot_str_concat(INTERP, escaped_str, quote);
     x_pos       = Parrot_str_find_index(INTERP, escaped_str, x, 0);
 
     if (x_pos != -1) {
@@ -288,14 +283,14 @@
     }
     else {
         STRING * const u = CONST_STRING(INTERP, "\\u");
-        INTVAL u_pos = Parrot_str_find_index(INTERP, escaped_str, u, 0);
+        const INTVAL u_pos = Parrot_str_find_index(INTERP, escaped_str, u, 0);
         if (u_pos != -1)
             is_unicode = 1;
     }
 
     if (is_unicode) {
         STRING * const unicode = CONST_STRING(INTERP, "unicode:");
-        escaped_str            = Parrot_str_concat(INTERP, unicode, escaped_str, 1);
+        escaped_str            = Parrot_str_concat(INTERP, unicode, escaped_str);
     }
 
     RETURN(STRING *escaped_str);
@@ -342,7 +337,7 @@
 
   METHOD key(PMC *args :slurpy) {
     INTVAL         index;
-    INTVAL         elements      = VTABLE_elements(INTERP, args);
+    const INTVAL   elements      = VTABLE_elements(INTERP, args);
     STRING * const open_bracket  = CONST_STRING(INTERP, "[");
     STRING * const semi          = CONST_STRING(INTERP, ";");
     STRING * const close_bracket = CONST_STRING(INTERP, "]");
@@ -350,30 +345,35 @@
     STRING *       prefix        = NULL;
     STRING *       out           = open_bracket;
 
-    for (index = 0; index < elements; index++) {
-        PMC *P0      = VTABLE_get_pmc_keyed_int(INTERP, args, index);
-        if (PMC_IS_NULL(P0)) continue;
-        else if (VTABLE_does(INTERP, P0, s_array)) {
-            INTVAL elements2, index2;
-            elements2 = VTABLE_elements(INTERP, P0);
-            for (index2 = 0; index2 < elements2; index2++) {
-                STRING *S0   = VTABLE_get_string_keyed_int(INTERP, P0, index2);
+    for (index = 0; index < elements; ++index) {
+        PMC * const P0 = VTABLE_get_pmc_keyed_int(INTERP, args, index);
+
+        if (!PMC_IS_NULL(P0)) {
+            if (VTABLE_does(INTERP, P0, s_array)) {
+                const INTVAL elements2 = VTABLE_elements(INTERP, P0);
+                INTVAL index2;
+
+                for (index2 = 0; index2 < elements2; ++index2) {
+                    STRING *S0   = VTABLE_get_string_keyed_int(INTERP, P0, index2);
+                    (STRING *S0) = PCCINVOKE(INTERP, SELF, "escape", STRING *S0);
+                    if (prefix)
+                        out = Parrot_str_concat(INTERP, out, prefix);
+                    out    = Parrot_str_concat(INTERP, out, S0);
+                    prefix = semi;
+                }
+            }
+            else {
+                STRING *S0   = VTABLE_get_string_keyed_int(INTERP, args, index);
                 (STRING *S0) = PCCINVOKE(INTERP, SELF, "escape", STRING *S0);
-                if (prefix) out = Parrot_str_append(INTERP, out, prefix);
-                out    = Parrot_str_append(INTERP, out, S0);
+                if (prefix)
+                    out = Parrot_str_concat(INTERP, out, prefix);
+                out    = Parrot_str_concat(INTERP, out, S0);
                 prefix = semi;
             }
         }
-        else {
-            STRING *S0   = VTABLE_get_string_keyed_int(INTERP, args, index);
-            (STRING *S0) = PCCINVOKE(INTERP, SELF, "escape", STRING *S0);
-            if (prefix) out = Parrot_str_append(INTERP, out, prefix);
-            out    = Parrot_str_append(INTERP, out, S0);
-            prefix = semi;
-        }
     }
 
-    out = Parrot_str_append(INTERP, out, close_bracket);
+    out = Parrot_str_concat(INTERP, out, close_bracket);
 
     RETURN(STRING *out);
 }

Modified: branches/ops_pct/src/pmc/complex.pmc
==============================================================================
--- branches/ops_pct/src/pmc/complex.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/complex.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -16,16 +16,58 @@
 =over 4
 
 =cut
+    ASSERT_ARGS()
+
 
 Equations used are sometimes listed.  At times, multiple equations are given,
 but those starting with => are the ones used
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void complex_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void complex_parse_string(PARROT_INTERP,
+    ARGOUT(FLOATVAL *re),
+    ARGOUT(FLOATVAL *im),
+    ARGIN(STRING *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*re)
+        FUNC_MODIFIES(*im);
+
+static void float_check_divide_zero(PARROT_INTERP, FLOATVAL value)
+        __attribute__nonnull__(1);
+
+static void int_check_divide_zero(PARROT_INTERP, INTVAL value)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_complex_check_divide_zero __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_complex_parse_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(re) \
+    , PARROT_ASSERT_ARG(im) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_float_check_divide_zero __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_int_check_divide_zero __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<static void
-complex_parse_string(PARROT_INTERP, FLOATVAL *re, FLOATVAL *im, STRING *value)>
+=item C<static void complex_parse_string(PARROT_INTERP, FLOATVAL *re, FLOATVAL
+*im, STRING *value)>
 
 Parses the string in C<value> to produce a complex number, represented
 by the real (C<*re>) and imaginary (C<*im>) parts. Raises an exception
@@ -38,7 +80,11 @@
 */
 
 static void
-complex_parse_string(PARROT_INTERP, FLOATVAL *re, FLOATVAL *im, STRING *value) {
+complex_parse_string(PARROT_INTERP,
+                     ARGOUT(FLOATVAL *re), ARGOUT(FLOATVAL *im), ARGIN(STRING *value))
+{
+    ASSERT_ARGS(complex_parse_string)
+
     char   * const str        = Parrot_str_to_cstring(interp, value);
     char   *t                 = str;
     char   *first_num_offset  = str;
@@ -54,26 +100,26 @@
 
     if (*t == '-') {
         /* first number is negative */
-        t++;
+        ++t;
         first_num_minus = 1;
 
         /* allow for an optional space */
         if (*t == ' ')
-            t++;
+            ++t;
         first_num_offset = t;
     }
 
     /* skip digits */
     while (*t >= '0' && *t <= '9')
-        t++;
+        ++t;
 
     if (*t == '.') {
         /* this number has a decimal point */
-        t++;
+        ++t;
 
         /* skip digits */
         while (*t >= '0' && *t <= '9')
-            t++;
+            ++t;
     }
 
     /* save the length of the real part */
@@ -99,32 +145,32 @@
     else {
         /* skip an optional space */
         if (*t == ' ')
-            t++;
+            ++t;
 
         /* expect "+" or "-" and the imaginary part */
         if (*t == '+' || *t == '-') {
             /* save the sign */
             second_num_minus = (*t == '-');
-            t++;
+            ++t;
 
             /* skip another optional space */
             if (*t == ' ')
-                t++;
+                ++t;
 
             /* save the beginning of the imaginary part */
             second_num_offset = t;
 
             /* skip digits */
             while (*t >= '0' && *t <= '9')
-                t++;
+                ++t;
 
             if (*t == '.') {
                 /* this number has a decimal point */
-                t++;
+                ++t;
 
                 /* skip digits */
                 while (*t >= '0' && *t <= '9')
-                    t++;
+                    ++t;
             }
 
             /* save the length of the imaginary part */
@@ -132,7 +178,7 @@
 
             /* allow for one more optional space */
             if (*t == ' ')
-                t++;
+                ++t;
 
             /* verify that the string ends properly */
             if ((*t != 'i' && *t != 'j') || (*(t+1) != 0)) {
@@ -193,23 +239,33 @@
 }
 
 static void
-int_check_divide_zero(PARROT_INTERP, INTVAL value) {
+int_check_divide_zero(PARROT_INTERP, INTVAL value)
+{
+    ASSERT_ARGS(int_check_divide_zero)
+
     if (value == 0)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_DIV_BY_ZERO,
             "Divide by zero");
 }
 
 static void
-float_check_divide_zero(PARROT_INTERP, FLOATVAL value) {
+float_check_divide_zero(PARROT_INTERP, FLOATVAL value)
+{
+    ASSERT_ARGS(float_check_divide_zero)
+
     if (FLOAT_IS_ZERO(value))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_DIV_BY_ZERO,
             "Divide by zero");
 }
 
 static void
-complex_check_divide_zero(PARROT_INTERP, PMC *value) {
+complex_check_divide_zero(PARROT_INTERP, ARGIN(PMC *value))
+{
+    ASSERT_ARGS(complex_check_divide_zero)
+
     /* Throw an exception if we are dividing by zero. Check both the real part
      * and the imaginary part.*/
+
     if (FLOAT_IS_ZERO(VTABLE_get_number_keyed_int(interp, value, 0))
             && FLOAT_IS_ZERO(VTABLE_get_number_keyed_int(interp, value, 1)))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_DIV_BY_ZERO,
@@ -253,31 +309,31 @@
     }
 
     VTABLE void init_pmc(PMC *initializer) {
-        const INTVAL arg_type = VTABLE_type(interp, initializer);
+        const INTVAL arg_type = VTABLE_type(INTERP, initializer);
         SELF.init();
         switch (arg_type) {
           case enum_class_String:
-            SELF.set_string_native(VTABLE_get_string(interp, initializer));
+            SELF.set_string_native(VTABLE_get_string(INTERP, initializer));
             break;
           case enum_class_FixedFloatArray:
           case enum_class_ResizableFloatArray:
           case enum_class_FixedIntegerArray:
           case enum_class_ResizableIntegerArray:
-            if (VTABLE_get_integer(interp, initializer) == 2) {
-                FLOATVAL re = VTABLE_get_number_keyed_int(interp, initializer, 0);
-                FLOATVAL im = VTABLE_get_number_keyed_int(interp, initializer, 1);
+            if (VTABLE_get_integer(INTERP, initializer) == 2) {
+                const FLOATVAL re = VTABLE_get_number_keyed_int(INTERP, initializer, 0);
+                const FLOATVAL im = VTABLE_get_number_keyed_int(INTERP, initializer, 1);
                 SET_ATTR_re(INTERP, SELF, re);
                 SET_ATTR_im(INTERP, SELF, im);
                 break;
             }
             /* else let it fall to default */
           default:
-            if (VTABLE_isa(interp, initializer, CONST_STRING(interp, "String"))) {
-                STRING * s = VTABLE_get_string(interp, initializer);
+            if (VTABLE_isa(INTERP, initializer, CONST_STRING(INTERP, "String"))) {
+                STRING * const s = VTABLE_get_string(INTERP, initializer);
                 SELF.set_string_native(s);
             }
             else {
-                Parrot_ex_throw_from_c_args(interp, NULL,
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
                         EXCEPTION_INVALID_OPERATION,
                         "Invalid Complex initializer");
             }
@@ -424,14 +480,14 @@
             GET_ATTR_im(INTERP, SELF, value);
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION, "Complex: key is neither 'real' or 'imag'");
         return value;
     }
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        if (VTABLE_isa(interp, key, CONST_STRING(interp, "Integer"))) {
-            const INTVAL i = VTABLE_get_integer(interp, key);
+        if (VTABLE_isa(INTERP, key, CONST_STRING(INTERP, "Integer"))) {
+            const INTVAL i = VTABLE_get_integer(INTERP, key);
             return SELF.get_pmc_keyed_int(i);
         }
         else {
@@ -491,7 +547,7 @@
             GET_ATTR_im(INTERP, SELF, f);
             break;
           default:
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                     EXCEPTION_INVALID_OPERATION, "Complex: key must be 0 or 1");
         }
         return f;
@@ -506,7 +562,7 @@
             SET_ATTR_im(INTERP, SELF, v);
             break;
           default:
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                     EXCEPTION_INVALID_OPERATION, "Complex: key must be 0 or 1");
         }
     }
@@ -592,8 +648,8 @@
     }
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
-        if (VTABLE_isa(interp, key, CONST_STRING(interp, "Integer"))) {
-            const INTVAL i = VTABLE_get_integer(interp, key);
+        if (VTABLE_isa(INTERP, key, CONST_STRING(INTERP, "Integer"))) {
+            const INTVAL i = VTABLE_get_integer(INTERP, key);
             SELF.set_number_keyed_int(i, value);
         }
         else {
@@ -610,7 +666,7 @@
             SET_ATTR_im(INTERP, SELF, value);
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION, "Complex: key is neither 'real' or 'imag'");
     }
 
@@ -1805,12 +1861,12 @@
         PMC *log;
         PMC *dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
-        Parrot_pcc_invoke_method_from_c_args(interp, SELF, CONST_STRING(interp, "ln"),
+        Parrot_pcc_invoke_method_from_c_args(INTERP, SELF, CONST_STRING(INTERP, "ln"),
                     "->P", &log);
 
         l = VTABLE_multiply(INTERP, log, value, l);
 
-        Parrot_pcc_invoke_method_from_c_args(interp, l, CONST_STRING(interp, "exp"),
+        Parrot_pcc_invoke_method_from_c_args(INTERP, l, CONST_STRING(INTERP, "exp"),
                     "->P", &dest);
         RETURN(PMC *dest);
     }

Modified: branches/ops_pct/src/pmc/continuation.pmc
==============================================================================
--- branches/ops_pct/src/pmc/continuation.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/continuation.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -36,6 +36,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 
 /*
  * A Continuation (and RetContinuation, ExceptionHandler) has in its
@@ -53,6 +57,7 @@
     ATTR PMC               *from_ctx;        /* sub, this cont is returning from */
     ATTR int                runloop_id;      /* id of the creating runloop. */
     ATTR int                invoked;         /* flag when a handler has been invoked. */
+
 /*
 
 =item C<void init()>
@@ -74,18 +79,21 @@
         SET_ATTR_address(INTERP, SELF, NULL);
 
         PObj_custom_mark_SET(SELF);
-
-        /* PANIC("don't do that"); */
-        /*
-         * Whenever we create a continuation, all return continuations
-         * up the call chain may be reused due to invoking the
-         * continuation. To avoid that all return continuations are
-         * converted to true continuations.
-         */
-        invalidate_retc_context(INTERP, SELF);
     }
 
-    /*if they pass in a PMC to initialize with*/
+
+/*
+
+=item C<void init_pmc(PMC *continuation)>
+
+Initializes the continuation with values from the provided continuation.
+
+=cut
+
+*/
+
+
+    /* if they pass in a PMC to initialize with */
     VTABLE void init_pmc(PMC *values) {
         PMC               *to_ctx;
         opcode_t          *address;
@@ -105,19 +113,9 @@
         SET_ATTR_address(INTERP, SELF, address);
 
         PObj_custom_mark_SET(SELF);
-
-        /* PANIC("don't do that"); */
-        /*
-         * Whenever we create a continuation, all return continuations
-         * up the call chain may be reused due to invoking the
-         * continuation. To avoid that all return continuations are
-         * converted to true continuations.
-         */
-        invalidate_retc_context(INTERP, SELF);
     }
 
 
-
 /*
 
 =item C<void mark()>
@@ -145,6 +143,7 @@
         Parrot_gc_mark_PMC_alive(INTERP, tmp);
     }
 
+
 /*
 
 =item C<PMC *clone()>
@@ -160,25 +159,27 @@
         return Parrot_pmc_new_init(INTERP, SELF->vtable->base_type, SELF);
     }
 
+
 /*
 
 =item C<PMC *set_pmc()>
 
-Assign context.
+Assigns context.
 
 =cut
 
 */
     VTABLE void set_pmc(PMC *src) {
-        STRUCT_COPY((Parrot_Continuation_attributes *)PMC_data(SELF),
-                (Parrot_Continuation_attributes *)PMC_data(src));
+        STRUCT_COPY(PMC_data_typed(SELF, Parrot_Continuation_attributes *),
+                    PMC_data_typed(src,  Parrot_Continuation_attributes *));
     }
+
 /*
 
 =item C<void set_pointer(void *value)>
 
-Sets the pointer to the return instruction.  Also captures the descriptor
-address for any returned values.
+Sets the pointer to the given return instruction and captures the runloop id
+for any returned values.
 
 =cut
 
@@ -189,6 +190,7 @@
         SET_ATTR_runloop_id(INTERP, SELF, INTERP->current_runloop_id);
     }
 
+
 /*
 
 =item C<void *get_pointer()>
@@ -203,10 +205,10 @@
         opcode_t          *address;
 
         GET_ATTR_address(INTERP, SELF, address);
-
         return address;
     }
 
+
 /*
 
 =item C<INTVAL defined()>
@@ -223,18 +225,18 @@
         opcode_t          *address;
 
         GET_ATTR_address(INTERP, SELF, address);
-
         return address != NULL;
     }
 
+
     VTABLE INTVAL get_bool() {
         opcode_t          *address;
 
         GET_ATTR_address(INTERP, SELF, address);
-
         return address != NULL;
     }
 
+
 /*
 
 =item C<opcode_t *invoke(void *next)>
@@ -261,21 +263,8 @@
         Parrot_continuation_check(INTERP, SELF);
         Parrot_continuation_rewind_environment(INTERP, SELF);
 
-        if (!PMC_IS_NULL(from_obj)) {
-            STRING * const string_sig = VTABLE_get_string(INTERP, from_obj);
-            /* If there is no string - there is no args */
-            if (string_sig) {
-                PMC *raw_sig, *invalid_sig;
-                Parrot_pcc_parse_signature_string(INTERP, string_sig, &raw_sig, &invalid_sig);
-
-                /* Build results signature for continuation */
-                if (*pc == PARROT_OP_get_results_pc)
-                    call_obj = Parrot_pcc_build_sig_object_returns_from_op(INTERP, call_obj,
-                        Parrot_pcc_get_pmc_constant(INTERP, to_ctx, pc[1]), pc);
-
-                Parrot_pcc_fill_returns_from_continuation(INTERP, call_obj, raw_sig, from_obj);
-            }
-        }
+        if (!PMC_IS_NULL(from_obj))
+            Parrot_pcc_set_signature(INTERP, CURRENT_CONTEXT(INTERP), from_obj);
 
         /* switch segment */
         if (INTERP->code != seg)
@@ -284,11 +273,12 @@
         return pc;
     }
 
+
 /*
 
 =item C<STRING *get_string()>
 
-Experimental: return caller info as a STRING.
+Experimental: returns caller info as a STRING.
 
 =cut
 
@@ -298,15 +288,15 @@
         PMC *to_ctx;
 
         GET_ATTR_to_ctx(INTERP, SELF, to_ctx);
-
         return Parrot_Context_infostr(INTERP, to_ctx);
     }
 
+
 /*
 
 =item C<PMC *caller()>
 
-Experimental: return caller PMC or PMCNULL if none.
+Experimental: return callers PMC or PMCNULL if none.
 
 =cut
 
@@ -331,11 +321,13 @@
         RETURN(PMC *caller);
 
     }
+
+
 /*
 
 =item C<PMC *continuation()>
 
-Experimental: return continuation PMC of this Continuation or PMCNULL if none.
+Experimental: returns continuation PMC of this Continuation or PMCNULL if none.
 
 =cut
 
@@ -359,10 +351,6 @@
 
 =back
 
-=head1 HISTORY
-
-Initial revision by sean 2002/08/04.
-
 =cut
 
 */

Modified: branches/ops_pct/src/pmc/coroutine.pmc
==============================================================================
--- branches/ops_pct/src/pmc/coroutine.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/coroutine.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -32,8 +32,23 @@
 
 #include "parrot/oplib/ops.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void print_sub_name(PARROT_INTERP, ARGIN(PMC *sub_pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_print_sub_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(sub_pmc))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+
 static void
-print_sub_name(PARROT_INTERP, PMC *sub_pmc)
+print_sub_name(PARROT_INTERP, ARGIN(PMC *sub_pmc))
 {
     /* It's actually a Parrot_coroutine, but this avoids casting warnings. */
     PMC           *ctx;
@@ -48,7 +63,7 @@
         "Calling" : "yielding from",
         Parrot_full_sub_name(interp, sub_pmc));
 
-    if (ctx && (PObj_get_FLAGS(sub_pmc) & SUB_FLAG_CORO_FF)) {
+    if (!PMC_IS_NULL(ctx) && (PObj_get_FLAGS(sub_pmc) & SUB_FLAG_CORO_FF)) {
         Parrot_io_eprintf(tracer, " to '%Ss'",
                 Parrot_full_sub_name(interp,
                     Parrot_pcc_get_sub(interp, Parrot_pcc_get_caller_ctx(interp, ctx))));
@@ -105,9 +120,6 @@
                 (Parrot_Coroutine_attributes *)PMC_data(SELF),
                 sizeof (Parrot_Coroutine_attributes));
 
-        GET_ATTR_name(INTERP, ret, name);
-        SET_ATTR_name(INTERP, ret, Parrot_str_copy(INTERP, name));
-
         return ret;
     }
 
@@ -140,6 +152,8 @@
         opcode_t          *dest;
         PackFile_ByteCode *wanted_seg;
         opcode_t * const   next_op = (opcode_t *)next;
+        PMC      * const signature = Parrot_pcc_get_signature(INTERP,
+                                            CURRENT_CONTEXT(INTERP));
 
         if (Interp_trace_TEST(INTERP, PARROT_TRACE_SUB_CALL_FLAG))
             print_sub_name(INTERP, SELF);
@@ -155,8 +169,10 @@
             PMC               *ctx        = Parrot_pcc_get_signature(INTERP, caller_ctx);
             PMC               *ccont      = INTERP->current_cont;
 
-            if (ccont == NEED_CONTINUATION)
-                ccont = (PMC *)new_ret_continuation_pmc(INTERP, next_op);
+            if (ccont == NEED_CONTINUATION) {
+                ccont = pmc_new(INTERP, enum_class_Continuation);
+                VTABLE_set_pointer(INTERP, ccont, next_op);
+            }
 
             if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL)
                 Parrot_ex_throw_from_c_args(INTERP, NULL, CONTROL_ERROR,
@@ -181,7 +197,6 @@
             Parrot_pcc_set_continuation(INTERP, ctx, ccont);
             Parrot_pcc_set_object(INTERP, ctx, PMCNULL);
 
-            INTERP->current_object = PMCNULL;
             INTERP->current_cont   = PMCNULL;
 
             GET_ATTR_lex_info(INTERP, SELF, lex_info);
@@ -267,6 +282,8 @@
             CURRENT_CONTEXT(INTERP) = to_ctx;
         }
 
+        Parrot_pcc_set_signature(INTERP, CURRENT_CONTEXT(INTERP), signature);
+
         /* toggle address */
         GET_ATTR_address(INTERP, SELF, dest);
         SET_ATTR_address(INTERP, SELF, (opcode_t *)next);

Deleted: branches/ops_pct/src/pmc/cpointer.pmc
==============================================================================
--- branches/ops_pct/src/pmc/cpointer.pmc	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,511 +0,0 @@
-/*
-Copyright (C) 2008-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/cpointer.pmc - CPointer
-
-=head1 DESCRIPTION
-
-The CPointer PMC creates a PMC abstraction for a typed C pointer. It is
-particularly used by the C<CallSignature> PMC, for the return values of a
-C-level PCC invocation using a C<CallSignature> to pass the arguments and fetch
-the results.
-
-=head2 Attributes
-
-A CPointer PMC has two attributes:
-
-=over 4
-
-=item pointer
-
-A C<void *> pointer to an integer, number, string, or PMC.
-
-=item sig
-
-A string signature for the pointer. The possible signature values follow the
-standard defined for PCC.
-
-  I   a Parrot integer (INTVAL)
-  N   a Parrot number  (FLOATVAL)
-  S   a Parrot string  (STRING *)
-  P   a Parrot object  (PMC *)
-
-=back
-
-
-=head2 Vtable Functions
-
-These are the vtable functions for the CPointer class.
-
-=over 4
-
-=cut
-
-*/
-
-pmclass CPointer auto_attrs {
-    ATTR void   *pointer; /* The stored pointer. */
-    ATTR STRING *sig;     /* A string signature for the pointer. */
-
-/*
-
-=item C<void init()>
-
-Initializes the pointer object.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        SET_ATTR_pointer(INTERP, SELF, NULL);
-        SET_ATTR_sig(INTERP, SELF, NULL);
-
-        PObj_custom_mark_SET(SELF);
-    }
-
-/*
-
-=item C<void mark()>
-
-Marks the signature as live. Also marks a STRING or PMC pointed to by the
-pointer.
-
-=cut
-
-*/
-
-    VTABLE void mark() {
-        STRING *sig;
-        GET_ATTR_sig(INTERP, SELF, sig);
-        if (sig) {
-            void *pointer;
-            GET_ATTR_pointer(INTERP, SELF, pointer);
-            Parrot_gc_mark_STRING_alive(interp, sig);
-        }
-    }
-
-/*
-
-=item C<PMC *clone()>
-
-Creates and returns a clone of the pointer.
-
-=cut
-
-*/
-
-    VTABLE PMC *clone() {
-        PMC * const dest = Parrot_pmc_new_noinit(INTERP, SELF->vtable->base_type);
-        void       *ptr;
-        STRING     *sig;
-
-        GET_ATTR_pointer(INTERP, SELF, ptr);
-        SET_ATTR_pointer(INTERP, dest, ptr);
-
-        GET_ATTR_sig(INTERP, SELF, sig);
-        SET_ATTR_sig(INTERP, dest, sig);
-
-        PObj_custom_mark_SET(dest);
-        return dest;
-    }
-
-/*
-
-=item C<void *get_pointer()>
-
-Returns the pointer.
-
-=cut
-
-*/
-
-    VTABLE void *get_pointer() {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-        return data->pointer;
-    }
-
-/*
-
-=item C<void set_pointer(void *)>
-
-Sets the pointer.
-
-=cut
-
-*/
-
-    VTABLE void set_pointer(void *value) {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-        data->pointer = value;
-    }
-
-/*
-
-=item C<STRING *get_string_keyed_str(STRING *key)>
-
-Returns the string signature.
-
-=cut
-
-*/
-
-    VTABLE STRING *get_string_keyed_str(STRING *key) {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-        UNUSED(key)
-
-        return data->sig;
-    }
-
-/*
-
-=item C<void set_string_keyed_str(STRING *key, STRING *value)>
-
-Sets the string signature.
-
-=cut
-
-*/
-
-    VTABLE void set_string_keyed_str(STRING *key, STRING *value) {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-        UNUSED(key)
-
-        data->sig = value;
-    }
-
-/*
-
-=item C<INTVAL get_integer()>
-
-Returns the integer value that the pointer points to (if the pointer is to an
-integer or PMC).
-
-=cut
-
-*/
-
-    VTABLE INTVAL get_integer() {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            return *int_pointer;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            return (INTVAL)*num_pointer;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            return Parrot_str_to_int(INTERP, *str_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            return VTABLE_get_integer(INTERP, *pmc_pointer);
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to fetch value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<void set_integer_native(INTVAL value)>
-
-Sets the integer value that the pointer points to (if the pointer is to an
-integer or PMC).
-
-=cut
-
-*/
-
-    VTABLE void set_integer_native(INTVAL value) {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            *int_pointer = value;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            *num_pointer = value;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            *str_pointer = Parrot_str_from_int(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            *pmc_pointer = get_integer_pmc(INTERP, value);
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to set value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<FLOATVAL get_number()>
-
-Returns the floating point value that the pointer points to (if the pointer is
-to a number or PMC).
-
-=cut
-
-*/
-
-    VTABLE FLOATVAL get_number() {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            return (FLOATVAL)*int_pointer;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            return *num_pointer;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            return Parrot_str_to_num(INTERP, *str_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            return VTABLE_get_number(INTERP, *pmc_pointer);
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to fetch value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<void set_number_native(FLOATVAL value)>
-
-Sets the floating point value that the pointer points to (if the pointer is
-to a number or PMC).
-
-=cut
-
-*/
-
-    VTABLE void set_number_native(FLOATVAL value) {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            *int_pointer = (INTVAL)value;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            *num_pointer = value;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            *str_pointer = Parrot_str_from_num(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            *pmc_pointer = get_number_pmc(INTERP, value);
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to set value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<STRING *get_string()>
-
-Returns the Parrot string value that the pointer points to (if the pointer is
-to a string or PMC).
-
-=cut
-
-*/
-
-    VTABLE STRING *get_string() {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            return Parrot_str_from_int(INTERP, *int_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            return Parrot_str_from_num(INTERP, *num_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            return *str_pointer;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            return VTABLE_get_string(INTERP, *pmc_pointer);
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to fetch value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<void set_string_native(STRING *value)>
-
-Sets the Parrot string value that the pointer points to (if the pointer is
-to a string or PMC).
-
-=cut
-
-*/
-
-    VTABLE void set_string_native(STRING *value) {
-        Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            *int_pointer = Parrot_str_to_int(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            *num_pointer = Parrot_str_to_num(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            *str_pointer = value;
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            *pmc_pointer = get_string_pmc(INTERP, value);
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to set value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<PMC *get_pmc()>
-
-Returns the PMC value that the pointer points to (if the pointer is to a PMC).
-
-=cut
-
-*/
-
-    VTABLE PMC *get_pmc() {
-        const Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            return get_integer_pmc(INTERP, *int_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            return get_number_pmc(INTERP, *num_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            return get_string_pmc(INTERP, *str_pointer);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            return *pmc_pointer;
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to fetch value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<void set_pmc(PMC *value)>
-
-Sets the PMC value that the pointer points to (if the pointer is to a PMC).
-
-=cut
-
-*/
-
-    VTABLE void set_pmc(PMC *value) {
-        const Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-
-        if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "I"))) {
-            INTVAL * const int_pointer = (INTVAL *) data->pointer;
-            *int_pointer = VTABLE_get_integer(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "N"))) {
-            FLOATVAL * const num_pointer = (FLOATVAL *) data->pointer;
-            *num_pointer = VTABLE_get_number(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "S"))) {
-            STRING ** const str_pointer = (STRING **) data->pointer;
-            *str_pointer = VTABLE_get_string(INTERP, value);
-        }
-        else if (Parrot_str_equal(interp, data->sig, CONST_STRING(interp, "P"))) {
-            PMC ** const pmc_pointer = (PMC **) data->pointer;
-            *pmc_pointer = value;
-        }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-                    "Unable to set value, broken signature!");
-        }
-    }
-
-/*
-
-=item C<INTVAL get_bool()>
-
-Returns whether the pointer is not C<NULL>.
-
-=cut
-
-*/
-
-    VTABLE INTVAL get_bool() {
-        const Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-        return (INTVAL)(data->pointer != NULL);
-    }
-
-/*
-
-=item C<INTVAL is_same(PMC *pmc2)>
-
-Returns whether the pointer has the same value as C<*pmc2>.
-
-=cut
-
-*/
-
-    VTABLE INTVAL is_same(PMC *pmc2) {
-        const Parrot_CPointer_attributes * const data = PARROT_CPOINTER(SELF);
-        return (INTVAL)(SELF->vtable  == pmc2->vtable &&
-                        data->pointer == VTABLE_get_pointer(interp, pmc2));
-    }
-}
-
-/*
-
-=back
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/ops_pct/src/pmc/default.pmc
==============================================================================
--- branches/ops_pct/src/pmc/default.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/default.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -26,9 +26,92 @@
 /* undef 'interface' to keep MSVC happy */
 #undef interface
 
+/* 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 * caller(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
+        __attribute__nonnull__(1);
+
+PARROT_DOES_NOT_RETURN
+static void cant_do_method(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), int index)
+        __attribute__nonnull__(1);
+
+PARROT_DOES_NOT_RETURN
+static void cant_do_write_method(PARROT_INTERP,
+    ARGIN_NULLOK(PMC *pmc),
+    int index)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC* check_get_std_props(PARROT_INTERP,
+    ARGIN(const PMC *self),
+    ARGIN(const STRING *key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL check_set_std_props(PARROT_INTERP,
+    ARGMOD(PMC *pmc),
+    ARGIN(const STRING *key),
+    ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*pmc);
+
+static INTVAL has_pending_std_props(ARGIN(const PMC *self))
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC* make_prop_hash(PARROT_INTERP, ARGMOD(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+static void propagate_std_props(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *prop_hash))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+#define ASSERT_ARGS_caller __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_cant_do_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_cant_do_write_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_check_get_std_props __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(key))
+#define ASSERT_ARGS_check_set_std_props __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_has_pending_std_props __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_make_prop_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_propagate_std_props __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(prop_hash))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 
-=item C<static STRING *caller(PARROT_INTERP, PMC *pmc)>
+=item C<static STRING * caller(PARROT_INTERP, PMC *pmc)>
 
 Returns a C string for the name of C<*pmc>.
 
@@ -36,19 +119,21 @@
 
 */
 
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static STRING *
-caller(PARROT_INTERP, PMC *pmc /*NULLOK*/)
+caller(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc))
 {
-    STRING * const null_str = CONST_STRING(interp, "(null)");
+    ASSERT_ARGS(caller)
 
-    return pmc && pmc->vtable && pmc->vtable->whoami
-                ? VTABLE_name(interp, pmc) : null_str;
+    return !PMC_IS_NULL(pmc) && pmc->vtable && pmc->vtable->whoami
+                ? VTABLE_name(interp, pmc)
+                : CONST_STRING(interp, "(null)");
 }
 
 /*
 
-=item C<static void cant_do_method(PARROT_INTERP, PMC *pmc,
-                                   int index)>
+=item C<static void cant_do_method(PARROT_INTERP, PMC *pmc, int index)>
 
 Throws an exception "$methname() not implemented in class '$class'", used by
 all unimplemented messages.
@@ -59,8 +144,10 @@
 
 PARROT_DOES_NOT_RETURN
 static void
-cant_do_method(PARROT_INTERP, PMC *pmc /*NULLOK*/, int index)
+cant_do_method(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), int index)
 {
+    ASSERT_ARGS(cant_do_method)
+
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ILL_INHERIT,
             "%s() not implemented in class '%Ss'",
             Parrot_get_vtable_name(interp, index),
@@ -70,8 +157,7 @@
 
 /*
 
-=item C<static void cant_do_write_method(PARROT_INTERP, PMC *pmc,
-                                   int index)>
+=item C<static void cant_do_write_method(PARROT_INTERP, PMC *pmc, int index)>
 
 Throws an exception "$methname() on read-only instance of '$class'", used by
 all updating messages on read-only instances.
@@ -82,8 +168,10 @@
 
 PARROT_DOES_NOT_RETURN
 static void
-cant_do_write_method(PARROT_INTERP, PMC *pmc /*NULLOK*/, int index)
+cant_do_write_method(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), int index)
 {
+    ASSERT_ARGS(cant_do_write_method)
+
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_WRITE_TO_CONSTCLASS,
             "%s() in read-only instance of '%Ss'",
             Parrot_get_vtable_name(interp, index),
@@ -92,8 +180,8 @@
 
 /*
 
-=item C<static INTVAL
-check_set_std_props(PARROT_INTERP, PMC *pmc, STRING *key, PMC *value)>
+=item C<static INTVAL check_set_std_props(PARROT_INTERP, PMC *pmc, const STRING
+*key, PMC *value)>
 
 Called from C<setprop()>.
 
@@ -105,9 +193,12 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-check_set_std_props(PARROT_INTERP, PMC *pmc, STRING *key, PMC *value)
+check_set_std_props(PARROT_INTERP, ARGMOD(PMC *pmc), ARGIN(const STRING *key), ARGIN(PMC *value))
 {
+    ASSERT_ARGS(check_set_std_props)
+
     /*
      * s2 in Parrot_str_equal is freed here
      */
@@ -136,8 +227,8 @@
 
 /*
 
-=item C<static void
-propagate_std_props(PARROT_INTERP, PMC *self, PMC *prop_hash)>
+=item C<static void propagate_std_props(PARROT_INTERP, PMC *self, PMC
+*prop_hash)>
 
 Set pending standard properties in C<prop_hash>.
 
@@ -146,18 +237,20 @@
 */
 
 static void
-propagate_std_props(PARROT_INTERP, PMC *self, PMC *prop_hash) {
+propagate_std_props(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *prop_hash))
+{
+    ASSERT_ARGS(propagate_std_props)
+
     if (self->vtable->flags & (VTABLE_IS_CONST_FLAG | VTABLE_IS_READONLY_FLAG)){
-        PMC * const pmc_true  = Parrot_pmc_new(interp, enum_class_Integer);
-        VTABLE_set_integer_native(interp, pmc_true, 1);
+        PMC * const pmc_true  = Parrot_pmc_new_init_int(interp,
+                enum_class_Integer, 1);
         VTABLE_set_pmc_keyed_str(interp, prop_hash, CONST_STRING(interp, "_ro"), pmc_true);
     }
 }
 
 /*
 
-=item C<static INTVAL
-has_pending_std_props(ARGIN(const PMC *self))>
+=item C<static INTVAL has_pending_std_props(const PMC *self)>
 
 Returns true if propagate_std_props() would create a non-empty prophash.
 
@@ -166,7 +259,10 @@
 */
 
 static INTVAL
-has_pending_std_props(ARGIN(const PMC *self)) {
+has_pending_std_props(ARGIN(const PMC *self))
+{
+    ASSERT_ARGS(has_pending_std_props)
+
     if (self->vtable->flags & (VTABLE_IS_CONST_FLAG | VTABLE_IS_READONLY_FLAG))
         return 1;
     else
@@ -176,8 +272,8 @@
 
 /*
 
-=item C<static PMC*
-check_get_std_props(PARROT_INTERPeter, PMC *self, STRING *key)>
+=item C<static PMC* check_get_std_props(PARROT_INTERP, const PMC *self, const
+STRING *key)>
 
 Checks if we can infer the value of C<key> property from C<self> without
 looking at its prophash. Returns C<PMCNULL> if not, returns the value otherwise.
@@ -185,12 +281,17 @@
 =cut
 */
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static PMC*
-check_get_std_props(PARROT_INTERP, PMC *self, STRING *key) {
+check_get_std_props(PARROT_INTERP, ARGIN(const PMC *self), ARGIN(const STRING *key))
+{
+    ASSERT_ARGS(check_get_std_props)
+
     if ((self->vtable->flags & (VTABLE_IS_CONST_FLAG | VTABLE_IS_READONLY_FLAG))
        && Parrot_str_equal(interp, key, CONST_STRING(interp, "_ro"))) {
-        PMC * const ret_val  = Parrot_pmc_new(interp, enum_class_Integer);
-        VTABLE_set_integer_native(interp, ret_val, 1);
+        PMC * const ret_val = Parrot_pmc_new_init_int(interp,
+                enum_class_Integer, 1);
         return ret_val;
     }
     else
@@ -199,72 +300,27 @@
 
 /*
 
-=item C<static PMC *
-make_prop_hash(PARROT_INTERP, PMC *self)>
+=item C<static PMC* make_prop_hash(PARROT_INTERP, PMC *self)>
 
 Create a property hash for C<self>. Returns the created hash. Inferred
-properties will be added to the hash and it will be set as
-C<PMC_metadata(self)>.
+properties will be added to the hash.
 
 =cut
 
 */
 
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
-make_prop_hash(PARROT_INTERP, PMC *self) {
-    PMC *prop;
+make_prop_hash(PARROT_INTERP, ARGMOD(PMC *self))
+{
+    ASSERT_ARGS(make_prop_hash)
 
-    PMC_metadata(self) = prop = Parrot_pmc_new(interp, enum_class_Hash);
+    PMC * const prop = Parrot_pmc_new(interp, enum_class_Hash);
     propagate_std_props(interp, self, prop);
     return prop;
 }
 
-/*
-
-=item C<static INTVAL
-does_isa(PARROT_INTERP, STRING *method, STRING *what)>
-
-Compares C<*method> and C<*what>.
-Returns true (1) if B<method> is found in B<what>, false (0) otherwise.
-
-=cut
-
-*/
-
-static INTVAL
-does_isa(PARROT_INTERP, const STRING *method, const STRING *what)
-{
-    INTVAL  pos    = 0;
-    INTVAL  length = Parrot_str_byte_length(interp, what);
-
-    do {
-        INTVAL len;
-        INTVAL idx = Parrot_str_find_index(interp, what, method, (INTVAL)pos);
-
-        if (idx < 0)
-            return 0;
-
-        pos = idx;
-
-        if (pos >= length)
-            return 0;
-
-        len = Parrot_str_byte_length(interp, method);
-
-        if (pos && Parrot_str_indexed(interp, what, pos - 1) != 32) {
-            pos += len;
-            continue;
-        }
-
-        if (pos + len < length && Parrot_str_indexed(interp, what, pos + len) != 32) {
-            pos += len;
-            continue;
-        }
-
-        return 1;
-    } while (1);
-}
-
 pmclass default abstract {
 
 /*
@@ -300,9 +356,9 @@
         if (PMC_IS_NULL(initializer))
             SELF.init();
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ILL_INHERIT,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,
                 "init_pmc() not implemented in class '%Ss'",
-                caller(interp, pmc));
+                caller(INTERP, SELF));
     }
 
 /*
@@ -335,7 +391,7 @@
         /* Ensure no looping, as Parrot_pmc_new calls the instantiate vtable entry for
          * classes. */
         if (PObj_is_class_TEST(SELF))
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                     "All high-level classes should override instantiate");
 
         if (!PMC_IS_NULL(init))
@@ -371,7 +427,7 @@
 
     VTABLE PMC *getprop(STRING *key) {
         if (PMC_IS_NULL(PMC_metadata(SELF)))
-            return check_get_std_props(interp, SELF, key);
+            return check_get_std_props(INTERP, SELF, key);
         else
             return VTABLE_get_pmc_keyed_str(INTERP, PMC_metadata(SELF), key);
     }
@@ -391,7 +447,7 @@
             return;
 
         if (PMC_IS_NULL(PMC_metadata(SELF)))
-            make_prop_hash(INTERP, SELF);
+            PMC_metadata(SELF) = make_prop_hash(INTERP, SELF);
 
         VTABLE_set_pmc_keyed_str(INTERP, PMC_metadata(SELF), key, value);
     }
@@ -424,7 +480,7 @@
     VTABLE PMC *getprops() {
         if (PMC_IS_NULL(PMC_metadata(SELF))) {
             if (has_pending_std_props(SELF))
-                return make_prop_hash(INTERP, SELF);
+                PMC_metadata(SELF) = make_prop_hash(INTERP, SELF);
             else
                 return PMCNULL;
         }
@@ -632,7 +688,7 @@
 */
 
     VTABLE void morph(PMC* type) {
-        Parrot_pmc_reuse(INTERP, SELF, VTABLE_get_integer(interp, type), 0);
+        Parrot_pmc_reuse(INTERP, SELF, VTABLE_get_integer(INTERP, type), 0);
     }
 
 /*
@@ -726,7 +782,7 @@
 
     VTABLE INTVAL is_equal(PMC *value) {
         INTVAL retval;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "is_equal", "PP->I", SELF, value, &retval);
 
         return retval;
@@ -744,7 +800,7 @@
 
     VTABLE INTVAL is_equal_num(PMC *value) {
         INTVAL retval;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "is_equal_num", "PP->I", SELF, value, &retval);
 
         return retval;
@@ -762,7 +818,7 @@
 
     VTABLE INTVAL is_equal_string(PMC *value) {
         INTVAL retval;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "is_equal_string", "PP->I", SELF, value, &retval);
 
         return retval;
@@ -858,7 +914,7 @@
 */
 
     VTABLE INTVAL does(STRING *_interface) {
-        return does_isa(INTERP, _interface, SELF->vtable->provides_str);
+        return Parrot_pmc_type_does(INTERP, _interface, SELF->vtable->base_type);
     }
 
 /*
@@ -896,10 +952,10 @@
         if (PMC_IS_NULL(lookup))
             return 0;
 
-        pmc_name = VTABLE_get_string(interp, lookup);
+        pmc_name = VTABLE_get_string(INTERP, lookup);
 
         if (!isa_hash)
-            return Parrot_str_equal(interp, SELF->vtable->whoami, pmc_name);
+            return Parrot_str_equal(INTERP, SELF->vtable->whoami, pmc_name);
 
         return parrot_hash_exists(INTERP, isa_hash, (void *)pmc_name);
     }
@@ -917,9 +973,9 @@
 */
 
     VTABLE INTVAL isa(STRING *_class) {
-        Hash * const isa_hash = SELF->vtable->isa_hash;
+        const Hash * const isa_hash = SELF->vtable->isa_hash;
         if (!isa_hash)
-            return Parrot_str_equal(interp, SELF->vtable->whoami, _class);
+            return Parrot_str_equal(INTERP, SELF->vtable->whoami, _class);
 
         return parrot_hash_exists(INTERP, isa_hash, (void *)_class);
     }
@@ -935,17 +991,16 @@
 */
 
     VTABLE PMC *inspect_str(STRING *name) {
-        if (Parrot_str_equal(interp, name, CONST_STRING(interp, "flags"))) {
-            PMC *found = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, found,
+        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "flags"))) {
+            PMC *found = Parrot_pmc_new_init_int(INTERP, enum_class_Integer,
                     (INTVAL)PObj_get_FLAGS(SELF));
             return found;
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "mro"))) {
-            return VTABLE_clone(interp, SELF->vtable->mro);
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "mro"))) {
+            return VTABLE_clone(INTERP, SELF->vtable->mro);
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", name);
     }
 
@@ -960,11 +1015,11 @@
 
 */
     VTABLE PMC *inspect() {
-        PMC    *metadata           = Parrot_pmc_new(interp, enum_class_Hash);
-        STRING * const flags_str   = CONST_STRING(interp, "flags");
+        PMC    * const metadata    = Parrot_pmc_new(INTERP, enum_class_Hash);
+        STRING * const flags_str   = CONST_STRING(INTERP, "flags");
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, flags_str,
-            VTABLE_inspect_str(interp, SELF, flags_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, flags_str,
+            VTABLE_inspect_str(INTERP, SELF, flags_str));
 
         return metadata;
     }
@@ -979,17 +1034,15 @@
 
 */
     VTABLE PMC *get_class() {
-        PMC *ns     = VTABLE_get_namespace(interp, SELF);
+        PMC * const ns     = VTABLE_get_namespace(INTERP, SELF);
         PMC *_class = PMCNULL;
 
         if (!PMC_IS_NULL(ns))
-            _class = VTABLE_get_class(interp, ns);
+            _class = VTABLE_get_class(INTERP, ns);
 
         if (PMC_IS_NULL(_class)) {
-            INTVAL type      = VTABLE_type(interp, SELF);
-            PMC   *type_num  = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, type_num, type);
-            return Parrot_pmc_new_init(interp, enum_class_PMCProxy, type_num);
+            const INTVAL type      = VTABLE_type(INTERP, SELF);
+            return Parrot_pmc_new_init_int(INTERP, enum_class_PMCProxy, type);
         }
 
         return _class;
@@ -1034,10 +1087,10 @@
     VTABLE void add_parent(PMC *parent) {
         UNUSED(parent)
         if (!PObj_is_class_TEST(SELF))
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                 "Only classes can be subclassed");
 
-        Parrot_ex_throw_from_c_args(interp, NULL, 1,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                 "All classes should override add_parent");
     }
 
@@ -1065,7 +1118,7 @@
 */
 
     VTABLE PMC* clone() {
-        return Parrot_thaw(interp, Parrot_freeze(interp, SELF));
+        return Parrot_thaw(INTERP, Parrot_freeze(INTERP, SELF));
     }
 
 /*
@@ -1125,7 +1178,7 @@
 
     VTABLE PMC *add(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "add", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1142,7 +1195,7 @@
 
     VTABLE PMC *add_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "add_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1176,7 +1229,7 @@
 */
 
     VTABLE void i_add(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_add", "PP", SELF, value);
     }
 
@@ -1191,7 +1244,7 @@
 */
 
     VTABLE void i_add_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_add_int", "PI", SELF, value);
     }
 
@@ -1206,7 +1259,7 @@
 */
 
     VTABLE void i_add_float(FLOATVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_add_float", "PN", SELF, value);
     }
 
@@ -1222,7 +1275,7 @@
 
     VTABLE PMC *subtract(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "subtract", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1239,7 +1292,7 @@
 
     VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "subtract_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1256,7 +1309,7 @@
 
     VTABLE PMC *subtract_float(FLOATVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "subtract_float", "PNP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1272,7 +1325,7 @@
 */
 
     VTABLE void i_subtract(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_subtract", "PP", SELF, value);
     }
 
@@ -1287,7 +1340,7 @@
 */
 
     VTABLE void i_subtract_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_subtract_int", "PI", SELF, value);
     }
 
@@ -1302,7 +1355,7 @@
 */
 
     VTABLE void i_subtract_float(FLOATVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_subtract_float", "PN", SELF, value);
     }
 
@@ -1318,7 +1371,7 @@
 
     VTABLE PMC *multiply(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "multiply", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1335,7 +1388,7 @@
 
     VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "multiply_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1352,7 +1405,7 @@
 
     VTABLE PMC *multiply_float(FLOATVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "multiply_float", "PNP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1368,7 +1421,7 @@
 */
 
     VTABLE void i_multiply(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_multiply", "PP", SELF, value);
     }
 
@@ -1383,7 +1436,7 @@
 */
 
     VTABLE void i_multiply_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_multiply_int", "PI", SELF, value);
     }
 
@@ -1398,7 +1451,7 @@
 */
 
     VTABLE void i_multiply_float(FLOATVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_multiply_float", "PN", SELF, value);
     }
 
@@ -1414,7 +1467,7 @@
 
     VTABLE PMC *divide(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "divide", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1431,7 +1484,7 @@
 
     VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "divide_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1448,7 +1501,7 @@
 
     VTABLE PMC *divide_float(FLOATVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "divide_float", "PNP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1464,7 +1517,7 @@
 */
 
     VTABLE void i_divide(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_divide", "PP", SELF, value);
     }
 
@@ -1479,7 +1532,7 @@
 */
 
     VTABLE void i_divide_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_divide_int", "PI", SELF, value);
     }
 
@@ -1494,7 +1547,7 @@
 */
 
     VTABLE void i_divide_float(FLOATVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_divide_float", "PN", SELF, value);
     }
 
@@ -1510,7 +1563,7 @@
 
     VTABLE PMC *floor_divide(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "floor_divide", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1527,7 +1580,7 @@
 
     VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "floor_divide_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1544,7 +1597,7 @@
 
     VTABLE PMC *floor_divide_float(FLOATVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "floor_divide_float", "PNP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1560,7 +1613,7 @@
 */
 
     VTABLE void i_floor_divide(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_floor_divide", "PP", SELF, value);
     }
 
@@ -1575,7 +1628,7 @@
 */
 
     VTABLE void i_floor_divide_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_floor_divide_int", "PI", SELF, value);
     }
 
@@ -1590,7 +1643,7 @@
 */
 
     VTABLE void i_floor_divide_float(FLOATVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_floor_divide_float", "PN", SELF, value);
     }
 
@@ -1606,7 +1659,7 @@
 
     VTABLE PMC *modulus(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "modulus", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1623,7 +1676,7 @@
 
     VTABLE PMC *modulus_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "modulus_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1640,7 +1693,7 @@
 
     VTABLE PMC *modulus_float(FLOATVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "modulus_float", "PNP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1656,7 +1709,7 @@
 */
 
     VTABLE void i_modulus(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_modulus", "PP", SELF, value);
     }
 
@@ -1671,7 +1724,7 @@
 */
 
     VTABLE void i_modulus_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_modulus_int", "PI", SELF, value);
     }
 
@@ -1686,7 +1739,7 @@
 */
 
     VTABLE void i_modulus_float(FLOATVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_modulus_float", "PN", SELF, value);
     }
 
@@ -1708,7 +1761,7 @@
         if (SELF == value)
             return 0;
 
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "cmp", "PP->I", SELF, value, &retval);
 
         return retval;
@@ -1726,7 +1779,7 @@
 
     VTABLE INTVAL cmp_num(PMC *value) {
         INTVAL retval;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "cmp_num", "PP->I", SELF, value, &retval);
 
         return retval;
@@ -1744,7 +1797,7 @@
 
     VTABLE INTVAL cmp_string(PMC *value) {
         INTVAL retval;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "cmp_string", "PP->I", SELF, value, &retval);
 
         return retval;
@@ -1766,9 +1819,9 @@
         /* Don't multidispatch if you've got two pointers to the same PMC. They
          * are equal. */
         if (SELF == value)
-            return 0;
+            return NULL;
 
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "cmp_pmc", "PP->P", SELF, value, &retval);
 
         return retval;
@@ -1785,7 +1838,7 @@
 
     VTABLE PMC *logical_or(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "logical_or", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1802,7 +1855,7 @@
 
     VTABLE PMC *logical_and(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "logical_and", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1819,7 +1872,7 @@
 
     VTABLE PMC *logical_xor(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "logical_xor", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1836,7 +1889,7 @@
 
     VTABLE PMC *concatenate(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "concatenate", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1853,7 +1906,7 @@
 
     VTABLE PMC *concatenate_str(STRING *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "concatenate_str", "PSP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1869,7 +1922,7 @@
 */
 
     VTABLE void i_concatenate(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_concatenate", "PP", SELF, value);
     }
 
@@ -1884,7 +1937,7 @@
 */
 
     VTABLE void i_concatenate_str(STRING *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_concatenate_str", "PS", SELF, value);
     }
 
@@ -1900,7 +1953,7 @@
 
     VTABLE PMC *repeat(PMC *value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "repeat", "PPP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1917,7 +1970,7 @@
 
     VTABLE PMC *repeat_int(INTVAL value, PMC *dest) {
         PMC *result = PMCNULL;
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "repeat_int", "PIP->P", SELF, value, dest, &result);
         return result;
     }
@@ -1933,7 +1986,7 @@
 */
 
     VTABLE void i_repeat(PMC *value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_repeat", "PP", SELF, value);
     }
 
@@ -1948,7 +2001,7 @@
 */
 
     VTABLE void i_repeat_int(INTVAL value) {
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                 "i_repeat_int", "PI", SELF, value);
     }
 }

Modified: branches/ops_pct/src/pmc/env.pmc
==============================================================================
--- branches/ops_pct/src/pmc/env.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/env.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -35,6 +35,11 @@
 #  endif /* __APPLE_CC__ */
 #endif /* !WIN32 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+
 static PMC *Env_PMC;
 pmclass Env singleton provides hash {
 
@@ -92,7 +97,7 @@
         INTVAL rv = 0;
 
         while (environ[rv] != NULL)
-            rv++;
+            ++rv;
 
         return rv;
     }
@@ -149,15 +154,15 @@
 
     VTABLE STRING *get_string_keyed_str(STRING *key) {
         if (!STRING_IS_EMPTY(key)) {
-            char * const val = Parrot_getenv(interp, key);
+            const char * const val = Parrot_getenv(INTERP, key);
 
             if (val) {
-                STRING * const retval = Parrot_str_new(interp, val, 0);
+                STRING * const retval = Parrot_str_new(INTERP, val, 0);
                 return retval;
             }
         }
 
-        return string_from_literal(interp, "");
+        return string_from_literal(INTERP, "");
     }
 
     VTABLE STRING *get_string_keyed(PMC *key) {
@@ -178,12 +183,12 @@
 
     VTABLE STRING *get_string_keyed_int(INTVAL pos) {
         if (pos < 0 || pos >= SELF.elements()) {
-            return string_from_literal(interp, "");
+            return string_from_literal(INTERP, "");
         }
         else {
             const char * const envp = environ[pos];
             const char * const p    = strchr(envp, '=');
-            return Parrot_str_new(interp, envp, (UINTVAL)(p - envp));
+            return Parrot_str_new(INTERP, envp, (UINTVAL)(p - envp));
         }
     }
 
@@ -198,14 +203,13 @@
 */
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        STRING *keyname = VTABLE_get_string(INTERP, key);
+        STRING * const keyname = VTABLE_get_string(INTERP, key);
 
-        char   *val     = NULL;
         STRING *retval  = NULL;
         PMC    *return_pmc;
 
         if (!STRING_IS_EMPTY(keyname)) {
-            val         = Parrot_getenv(INTERP, keyname);
+            const char * const val = Parrot_getenv(INTERP, keyname);
 
             if (val) {
                 retval = Parrot_str_new(INTERP, val, 0);
@@ -232,7 +236,7 @@
 */
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        STRING *keyname = VTABLE_get_string(INTERP, key);
+        STRING * const keyname = VTABLE_get_string(INTERP, key);
 
         if (keyname && value)
             Parrot_setenv(INTERP, keyname, value);
@@ -249,8 +253,8 @@
 */
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        STRING * keyname   = VTABLE_get_string(INTERP, key);
-        STRING * str_value = VTABLE_get_string(INTERP, value);
+        STRING * const keyname   = VTABLE_get_string(INTERP, key);
+        STRING * const str_value = VTABLE_get_string(INTERP, value);
 
         if (keyname && str_value)
             Parrot_setenv(INTERP, keyname, str_value);
@@ -267,12 +271,12 @@
 */
 
     VTABLE INTVAL exists_keyed(PMC *pmckey) {
-        STRING *keyname = VTABLE_get_string(INTERP, pmckey);
+        STRING * const keyname = VTABLE_get_string(INTERP, pmckey);
 
         if (!STRING_IS_EMPTY(keyname)) {
-            char * const val = Parrot_getenv(interp, keyname);
+            const char * const val = Parrot_getenv(INTERP, keyname);
 
-            if (val) {
+            if (val != NULL) {
                 return 1;
             }
         }
@@ -291,12 +295,12 @@
 */
 
     VTABLE void delete_keyed(PMC *key) {
-        STRING *keyname = VTABLE_get_string(INTERP, key);
+        STRING * const keyname = VTABLE_get_string(INTERP, key);
 
         if (!STRING_IS_EMPTY(keyname)) {
-            char * const val = Parrot_getenv(INTERP, keyname);
+            const char * const val = Parrot_getenv(INTERP, keyname);
 
-            if (val) {
+            if (val != NULL) {
                 Parrot_unsetenv(INTERP, keyname);
             }
         }

Modified: branches/ops_pct/src/pmc/eval.pmc
==============================================================================
--- branches/ops_pct/src/pmc/eval.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/eval.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -21,11 +21,44 @@
 
 #include "pmc/pmc_sub.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void clear_fixups(PARROT_INTERP,
+    ARGIN(const Parrot_Sub_attributes *sub_data))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC* get_sub(PARROT_INTERP, ARGIN(PMC *self), int idx)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void mark_subs(PARROT_INTERP, ARGIN(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_clear_fixups __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(sub_data))
+#define ASSERT_ARGS_get_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+#define ASSERT_ARGS_mark_subs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 static void
-clear_fixups(PARROT_INTERP, Parrot_Sub_attributes *sub_data)
+clear_fixups(PARROT_INTERP, ARGIN(const Parrot_Sub_attributes *sub_data))
 {
+    ASSERT_ARGS(clear_fixups)
+
     INTVAL               i;
-    PackFile_ByteCode   *seg = sub_data->seg;
+    PackFile_ByteCode   * const seg = sub_data->seg;
     PackFile_FixupTable *ft;
     PackFile_ConstTable *ct;
 
@@ -40,21 +73,25 @@
     if (!ct)
         return;
 
-    for (i = 0; i < ft->fixup_count; i++) {
-        PackFile_FixupEntry *e = ft->fixups[i];
+    for (i = 0; i < ft->fixup_count; ++i) {
+        PackFile_FixupEntry * const e = ft->fixups + i;
 
         if (e->type == enum_fixup_sub) {
             opcode_t  ci             = e->offset;
 
             ct->constants[ci]->u.key = NULL;
-            ft->fixups[i]->type      = 0;
+            e->type                  = 0;
         }
     }
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static PMC*
-get_sub(PARROT_INTERP, PMC *self, int idx)
+get_sub(PARROT_INTERP, ARGIN(PMC *self), int idx)
 {
+    ASSERT_ARGS(get_sub)
+
     INTVAL                 i, n;
     Parrot_Sub_attributes *sub;
     PackFile_ByteCode     *seg;
@@ -75,8 +112,8 @@
     if (!ct)
         return PMCNULL;
 
-    for (i = n = 0; i < ft->fixup_count; i++) {
-        PackFile_FixupEntry *e = ft->fixups[i];
+    for (i = n = 0; i < ft->fixup_count; ++i) {
+        const PackFile_FixupEntry * const e = ft->fixups + i;
 
         if (e->type == enum_fixup_sub) {
             opcode_t ci = e->offset;
@@ -90,8 +127,10 @@
 }
 
 static void
-mark_subs(PARROT_INTERP, PMC *self)
+mark_subs(PARROT_INTERP, ARGIN(PMC *self))
 {
+    ASSERT_ARGS(mark_subs)
+
     Parrot_Sub_attributes *sub;
     PackFile_ByteCode   *seg;
     PackFile_FixupTable *ft;
@@ -112,8 +151,8 @@
     if (!ct)
         return;
 
-    for (i = 0; i < ft->fixup_count; i++) {
-        PackFile_FixupEntry *e = ft->fixups[i];
+    for (i = 0; i < ft->fixup_count; ++i) {
+        const PackFile_FixupEntry * const e = ft->fixups + i;
 
         if (e->type == enum_fixup_sub) {
             opcode_t  ci  = e->offset;
@@ -185,8 +224,8 @@
         }
 
         /* XXX Quick and dirty fix for TT #995 */
-        if ((struct PackFile *)cur_cs == interp->initial_pf
-                || cur_cs == interp->code) {
+        if ((struct PackFile *)cur_cs == INTERP->initial_pf
+                || cur_cs == INTERP->code) {
             SUPER();
             return;
         }
@@ -210,14 +249,9 @@
             cur_cs->fixups = NULL;
         }
 
-/* XXX Commenting out this to fix TT #995 and related problems.
- * May leak some memory, need further revision.
-
         seg = (PackFile_Segment *)cur_cs;
         if (seg)
             PackFile_Segment_destroy(INTERP, seg);
- * XXX End of commented out section.
- */
 
         sub_data->seg = NULL;
 
@@ -370,7 +404,7 @@
 
         /*
          * TT #1292 this isn't ok - it seems that the packfile
-         *     gets attached to interp->code and is
+         *     gets attached to INTERP->code and is
          *     destroyed again during interpreter destruction
          */
         /* PackFile_destroy(INTERP, pf); */
@@ -382,7 +416,7 @@
         PackFile_ByteCode   *seg;
         PackFile_FixupTable *ft;
 
-        PMC_get_sub(interp, SELF, sub);
+        PMC_get_sub(INTERP, SELF, sub);
         seg = sub->seg;
 
         if (!seg)
@@ -392,11 +426,11 @@
         if (!ft)
             return 0;
 
-        for (i = n = 0; i < ft->fixup_count; i++) {
-            PackFile_FixupEntry *e = ft->fixups[i];
+        for (i = n = 0; i < ft->fixup_count; ++i) {
+            const PackFile_FixupEntry * const e = ft->fixups + i;
 
             if (e->type == enum_fixup_sub)
-                n++;
+                ++n;
         }
 
         return n;

Modified: branches/ops_pct/src/pmc/eventhandler.pmc
==============================================================================
--- branches/ops_pct/src/pmc/eventhandler.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/eventhandler.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -19,6 +19,11 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+
 pmclass EventHandler extends Sub auto_attrs {
 
     ATTR STRING *type;          /* the type of the event to handle */
@@ -162,9 +167,9 @@
         Parrot_EventHandler_attributes * const e = PARROT_EVENTHANDLER(SELF);
 
         if (e)
-            return Parrot_str_copy(INTERP, e->type);
+            return e->type;
 
-        return string_from_literal(INTERP, "");
+        return CONST_STRING(INTERP, "");
     }
 
 /*
@@ -212,7 +217,7 @@
         Parrot_EventHandler_attributes * const e = PARROT_EVENTHANDLER(SELF);
         PMC *value = PMCNULL;
 
-        if (Parrot_str_equal(interp, name, CONST_STRING(interp, "code"))) {
+        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "code"))) {
             value = e->code;
         }
 
@@ -269,15 +274,15 @@
     METHOD can_handle(PMC *event) {
 
         if (event->vtable->base_type == enum_class_Task) {
-            PMC    * const type     = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "type"));
-            STRING * const type_str = VTABLE_get_string(interp, type);
+            PMC    * const type     = VTABLE_get_attr_str(INTERP, event, CONST_STRING(INTERP, "type"));
+            STRING * const type_str = VTABLE_get_string(INTERP, type);
 
-            if (Parrot_str_equal(interp, type_str, CONST_STRING(interp, "event"))) {
+            if (Parrot_str_equal(INTERP, type_str, CONST_STRING(INTERP, "event"))) {
                 Parrot_EventHandler_attributes * const handler_struct = PARROT_EVENTHANDLER(SELF);
-                PMC    * const subtype     = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "subtype"));
-                STRING * const subtype_str = VTABLE_get_string(interp, subtype);
+                PMC    * const subtype     = VTABLE_get_attr_str(INTERP, event, CONST_STRING(INTERP, "subtype"));
+                STRING * const subtype_str = VTABLE_get_string(INTERP, subtype);
 
-                if (Parrot_str_equal(interp, subtype_str, handler_struct->type)) {
+                if (Parrot_str_equal(INTERP, subtype_str, handler_struct->type)) {
                     RETURN(INTVAL 1);
                 }
             }

Modified: branches/ops_pct/src/pmc/exception.pmc
==============================================================================
--- branches/ops_pct/src/pmc/exception.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/exception.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -52,6 +52,10 @@
 #include "parrot/exceptions.h"
 #include "pmc/pmc_sub.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Exception auto_attrs {
 
     ATTR INTVAL          id;           /* The task ID in the scheduler. */
@@ -109,17 +113,17 @@
         INTVAL severity_val;
         STRING *message_val;
 
-        INTVAL ishash = VTABLE_isa(interp, values, CONST_STRING(interp, 'Hash'));
+        const INTVAL ishash = VTABLE_isa(INTERP, values, CONST_STRING(INTERP, 'Hash'));
 
         if (ishash) {
-            STRING * const severity = CONST_STRING(interp, "severity");
-            STRING * const message  = CONST_STRING(interp, "message");
-            severity_val = VTABLE_get_integer_keyed_str(interp, values, severity);
-            message_val = VTABLE_get_string_keyed_str(interp, values, message);
+            STRING * const severity = CONST_STRING(INTERP, "severity");
+            STRING * const message  = CONST_STRING(INTERP, "message");
+            severity_val = VTABLE_get_integer_keyed_str(INTERP, values, severity);
+            message_val = VTABLE_get_string_keyed_str(INTERP, values, message);
         }
         else {
             severity_val = EXCEPT_error;
-            message_val  = VTABLE_get_string(interp, values);
+            message_val  = VTABLE_get_string(INTERP, values);
         }
 
         /* Set flags for custom GC mark. */
@@ -149,13 +153,13 @@
 
     VTABLE void mark() {
         Parrot_Exception_attributes * const core_struct = PARROT_EXCEPTION(SELF);
-        Parrot_gc_mark_STRING_alive(interp, core_struct->message);
-        Parrot_gc_mark_PMC_alive(interp, core_struct->payload);
-        Parrot_gc_mark_PMC_alive(interp, core_struct->resume);
-        Parrot_gc_mark_PMC_alive(interp, core_struct->backtrace);
-        Parrot_gc_mark_PMC_alive(interp, core_struct->handler_iter);
-        Parrot_gc_mark_PMC_alive(interp, core_struct->handler_ctx);
-        Parrot_gc_mark_PMC_alive(interp, core_struct->thrower);
+        Parrot_gc_mark_STRING_alive(INTERP, core_struct->message);
+        Parrot_gc_mark_PMC_alive(INTERP, core_struct->payload);
+        Parrot_gc_mark_PMC_alive(INTERP, core_struct->resume);
+        Parrot_gc_mark_PMC_alive(INTERP, core_struct->backtrace);
+        Parrot_gc_mark_PMC_alive(INTERP, core_struct->handler_iter);
+        Parrot_gc_mark_PMC_alive(INTERP, core_struct->handler_ctx);
+        Parrot_gc_mark_PMC_alive(INTERP, core_struct->thrower);
     }
 
 /*
@@ -184,9 +188,9 @@
 
     VTABLE STRING *get_string() {
         STRING *message;
-        GET_ATTR_message(interp, SELF, message);
+        GET_ATTR_message(INTERP, SELF, message);
         if (STRING_IS_NULL(message))
-            message = CONST_STRING(interp, "");
+            message = CONST_STRING(INTERP, "");
         return message;
     }
 
@@ -201,7 +205,7 @@
 */
 
     VTABLE INTVAL get_integer() {
-        Parrot_Exception_attributes * const exception = PARROT_EXCEPTION(SELF);
+        const Parrot_Exception_attributes * const exception = PARROT_EXCEPTION(SELF);
         return exception->id;
     }
 
@@ -217,7 +221,7 @@
 */
 
     VTABLE STRING *get_string_keyed(PMC *key) {
-        STRING *name = VTABLE_get_string(INTERP, key);
+        STRING * const name = VTABLE_get_string(INTERP, key);
         STRING *message;
 
         if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "message"))) {
@@ -225,7 +229,7 @@
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such string attribute '%S'", name);
         }
 
@@ -243,24 +247,24 @@
 */
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        STRING *name   = VTABLE_get_string(INTERP, key);
+        STRING * const name = VTABLE_get_string(INTERP, key);
         INTVAL  result = 0;
 
         if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
-            GET_ATTR_type(interp, SELF, result);
+            GET_ATTR_type(INTERP, SELF, result);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
-            GET_ATTR_severity(interp, SELF, result);
+            GET_ATTR_severity(INTERP, SELF, result);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
-            GET_ATTR_exit_code(interp, SELF, result);
+            GET_ATTR_exit_code(INTERP, SELF, result);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
-            GET_ATTR_handled(interp, SELF, result);
+            GET_ATTR_handled(INTERP, SELF, result);
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", name);
         }
 
@@ -281,20 +285,20 @@
         INTVAL result = 0;
 
         if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "type"))) {
-            GET_ATTR_type(interp, SELF, result);
+            GET_ATTR_type(INTERP, SELF, result);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "severity"))) {
-            GET_ATTR_severity(interp, SELF, result);
+            GET_ATTR_severity(INTERP, SELF, result);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "exit_code"))) {
-            GET_ATTR_exit_code(interp, SELF, result);
+            GET_ATTR_exit_code(INTERP, SELF, result);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "handled"))) {
-            GET_ATTR_handled(interp, SELF, result);
+            GET_ATTR_handled(INTERP, SELF, result);
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", key);
         }
 
@@ -312,7 +316,7 @@
 */
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        STRING *s = VTABLE_get_string(INTERP, key);
+        STRING * const s = VTABLE_get_string(INTERP, key);
         return SELF.get_attr_str(s);
     }
 
@@ -328,7 +332,7 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        SET_ATTR_message(interp, SELF, value);
+        SET_ATTR_message(INTERP, SELF, value);
     }
 
 
@@ -343,7 +347,7 @@
 */
 
     VTABLE void set_integer_native(INTVAL value) {
-        SET_ATTR_id(interp, SELF, value);
+        SET_ATTR_id(INTERP, SELF, value);
     }
 
 /*
@@ -357,7 +361,7 @@
 */
 
     VTABLE void set_number_native(FLOATVAL value) {
-        SET_ATTR_birthtime(interp, SELF, value);
+        SET_ATTR_birthtime(INTERP, SELF, value);
     }
 
 
@@ -372,14 +376,14 @@
 */
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        STRING *name = VTABLE_get_string(INTERP, key);
+        STRING * const name = VTABLE_get_string(INTERP, key);
 
         if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "message"))) {
             SELF.set_string_native(value);
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such string attribute '%S'", name);
         }
     }
@@ -395,23 +399,23 @@
 */
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
-        STRING *name = VTABLE_get_string(INTERP, key);
+        STRING * const name = VTABLE_get_string(INTERP, key);
 
         if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
-            SET_ATTR_type(interp, SELF, value);
+            SET_ATTR_type(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
-            SET_ATTR_severity(interp, SELF, value);
+            SET_ATTR_severity(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
-            SET_ATTR_exit_code(interp, SELF, value);
+            SET_ATTR_exit_code(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
-            SET_ATTR_handled(interp, SELF, value);
+            SET_ATTR_handled(INTERP, SELF, value);
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", name);
         }
     }
@@ -428,20 +432,20 @@
 
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
         if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "type"))) {
-            SET_ATTR_type(interp, SELF, value);
+            SET_ATTR_type(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "severity"))) {
-            SET_ATTR_severity(interp, SELF, value);
+            SET_ATTR_severity(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "exit_code"))) {
-            SET_ATTR_exit_code(interp, SELF, value);
+            SET_ATTR_exit_code(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, key, CONST_STRING(INTERP, "handled"))) {
-            SET_ATTR_handled(interp, SELF, value);
+            SET_ATTR_handled(INTERP, SELF, value);
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such integer attribute '%S'", key);
         }
     }
@@ -457,7 +461,7 @@
 */
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        STRING *s = VTABLE_get_string(INTERP, key);
+        STRING * const s = VTABLE_get_string(INTERP, key);
         SELF.set_attr_str(s, value);
     }
 
@@ -488,7 +492,7 @@
 */
 
     VTABLE void *get_pointer() {
-        Parrot_Exception_attributes * const core_struct = PARROT_EXCEPTION(SELF);
+        const Parrot_Exception_attributes * const core_struct = PARROT_EXCEPTION(SELF);
         return core_struct->handler_ctx;
     }
 
@@ -509,14 +513,14 @@
         if (value->vtable->base_type == SELF->vtable->base_type
         &&  VTABLE_isa(INTERP, value, exception_str)) {
             INTVAL self_compare, value_compare;
-            GET_ATTR_type(interp, SELF, self_compare);
-            GET_ATTR_type(interp, value, value_compare);
+            GET_ATTR_type(INTERP, SELF, self_compare);
+            GET_ATTR_type(INTERP, value, value_compare);
             if (self_compare == value_compare) {
-                GET_ATTR_severity(interp, SELF, self_compare);
-                GET_ATTR_severity(interp, value, value_compare);
+                GET_ATTR_severity(INTERP, SELF, self_compare);
+                GET_ATTR_severity(INTERP, value, value_compare);
                 if (self_compare == value_compare) {
-                    GET_ATTR_exit_code(interp, SELF, self_compare);
-                    GET_ATTR_exit_code(interp, value, value_compare);
+                    GET_ATTR_exit_code(INTERP, SELF, self_compare);
+                    GET_ATTR_exit_code(INTERP, value, value_compare);
                     if (self_compare == value_compare)
                         return 1;
                 }
@@ -540,48 +544,44 @@
 
         if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
                 INTVAL type;
-                GET_ATTR_type(interp, SELF, type);
-                value = Parrot_pmc_new(interp, enum_class_Integer);
-                VTABLE_set_integer_native(interp, value, type);
+                GET_ATTR_type(INTERP, SELF, type);
+                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, type);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
                 INTVAL severity;
-                GET_ATTR_severity(interp, SELF, severity);
-                value = Parrot_pmc_new(interp, enum_class_Integer);
-                VTABLE_set_integer_native(interp, value, severity);
+                GET_ATTR_severity(INTERP, SELF, severity);
+                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, severity);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
                 INTVAL exit_code;
-                GET_ATTR_exit_code(interp, SELF, exit_code);
-                value = Parrot_pmc_new(interp, enum_class_Integer);
-                VTABLE_set_integer_native(interp, value, exit_code);
+                GET_ATTR_exit_code(INTERP, SELF, exit_code);
+                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, exit_code);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
                 INTVAL handled;
-                GET_ATTR_handled(interp, SELF, handled);
-                value = Parrot_pmc_new(interp, enum_class_Integer);
-                VTABLE_set_integer_native(interp, value, handled);
+                GET_ATTR_handled(INTERP, SELF, handled);
+                value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, handled);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "message"))) {
                 STRING *message = SELF.get_string();
-                value = Parrot_pmc_new(interp, enum_class_String);
-                VTABLE_set_string_native(interp, value, message);
+                value = Parrot_pmc_new(INTERP, enum_class_String);
+                VTABLE_set_string_native(INTERP, value, message);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "payload"))) {
-                GET_ATTR_payload(interp, SELF, value);
+                GET_ATTR_payload(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "resume"))) {
-                GET_ATTR_resume(interp, SELF, value);
+                GET_ATTR_resume(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "backtrace"))) {
-                GET_ATTR_backtrace(interp, SELF, value);
+                GET_ATTR_backtrace(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handler_iter"))) {
-                GET_ATTR_handler_iter(interp, SELF, value);
+                GET_ATTR_handler_iter(INTERP, SELF, value);
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S'", name);
         }
 
@@ -600,49 +600,49 @@
     VTABLE void set_attr_str(STRING *name, PMC *value) {
 
         if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
-            INTVAL type = VTABLE_get_integer(interp, value);
-            SET_ATTR_type(interp, SELF, type);
+            const INTVAL type = VTABLE_get_integer(INTERP, value);
+            SET_ATTR_type(INTERP, SELF, type);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "severity"))) {
-            INTVAL severity = VTABLE_get_integer(interp, value);
-            SET_ATTR_severity(interp, SELF, severity);
+            const INTVAL severity = VTABLE_get_integer(INTERP, value);
+            SET_ATTR_severity(INTERP, SELF, severity);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "exit_code"))) {
-            INTVAL exit_code = VTABLE_get_integer(interp, value);
-            SET_ATTR_exit_code(interp, SELF, exit_code);
+            const INTVAL exit_code = VTABLE_get_integer(INTERP, value);
+            SET_ATTR_exit_code(INTERP, SELF, exit_code);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handled"))) {
-            INTVAL handled = VTABLE_get_integer(interp, value);
-            SET_ATTR_handled(interp, SELF, handled);
+            const INTVAL handled = VTABLE_get_integer(INTERP, value);
+            SET_ATTR_handled(INTERP, SELF, handled);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "message"))) {
-            STRING *message = VTABLE_get_string(interp, value);
+            STRING * const message = VTABLE_get_string(INTERP, value);
             SELF.set_string_native(message);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "payload"))) {
-            SET_ATTR_payload(interp, SELF, value);
+            SET_ATTR_payload(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "resume"))) {
-            SET_ATTR_resume(interp, SELF, value);
+            SET_ATTR_resume(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "backtrace"))) {
-            SET_ATTR_backtrace(interp, SELF, value);
+            SET_ATTR_backtrace(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "handler_iter"))) {
-            SET_ATTR_handler_iter(interp, SELF, value);
+            SET_ATTR_handler_iter(INTERP, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "thrower"))) {
             /* Ensure it's a ret cont, and extract the from_ctx.
              * XXX TT #596 - when we have Context PMCs, just take and set that. */
-            if (!PMC_IS_NULL(value) && VTABLE_isa(interp, value, CONST_STRING(interp, "Continuation"))) {
-                PMC *ctx = PMC_cont(value)->from_ctx;
+            if (!PMC_IS_NULL(value) && VTABLE_isa(INTERP, value, CONST_STRING(INTERP, "Continuation"))) {
+                PMC * const ctx = PMC_cont(value)->from_ctx;
                 if (!PMC_IS_NULL(ctx))
-                    SET_ATTR_thrower(interp, SELF, ctx);
+                    SET_ATTR_thrower(INTERP, SELF, ctx);
             }
         }
         else {
             /* If unknown attribute name, throw an exception. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S'", name);
         }
 
@@ -698,18 +698,18 @@
         PMC *result = PMCNULL;
 
         /* Get resume continuation, to find location we failed at. */
-        GET_ATTR_resume(interp, SELF, resume);
+        GET_ATTR_resume(INTERP, SELF, resume);
         if (!PMC_IS_NULL(resume)) {
-            Parrot_Continuation_attributes *cont = PARROT_CONTINUATION(resume);
+            const Parrot_Continuation_attributes * const cont = PARROT_CONTINUATION(resume);
             if (cont->seg != NULL && cont->seg->annotations != NULL)
-                result = PackFile_Annotations_lookup(interp, cont->seg->annotations,
+                result = PackFile_Annotations_lookup(INTERP, cont->seg->annotations,
                         cont->address - cont->seg->base.data, name);
         }
 
         /* If we didn't have a key specified and we found no annotations to
          * return, should return an empty hash. */
         if (!have_name && PMC_IS_NULL(result))
-            result = Parrot_pmc_new(interp, enum_class_Hash);
+            result = Parrot_pmc_new(INTERP, enum_class_Hash);
 
         RETURN(PMC *result);
     }
@@ -733,22 +733,19 @@
     METHOD backtrace() {
         PMC *result = PMCNULL;
         PMC *resume;
-        PMC *cur_ctx;
-        Parrot_Continuation_attributes    *cont;
 
         /* Get starting context, then loop over them. */
-        GET_ATTR_resume(interp, SELF, resume);
+        GET_ATTR_resume(INTERP, SELF, resume);
         if (!PMC_IS_NULL(resume)) {
-            /* We have a resume continuation, so we can get the address from
-             * that. */
-            cont    = PARROT_CONTINUATION(resume);
-            Parrot_pcc_invoke_method_from_c_args(INTERP, cont->to_ctx, CONST_STRING(interp, "backtrace"), "P->P", resume, &result);
+            /* We have a resume continuation, so we can get the address from that. */
+            const Parrot_Continuation_attributes * const cont = PARROT_CONTINUATION(resume);
+            Parrot_pcc_invoke_method_from_c_args(INTERP, cont->to_ctx, CONST_STRING(INTERP, "backtrace"), "P->P", resume, &result);
         }
         else {
+            PMC *cur_ctx;
             /* No return continuation. Assuming we're being called  */
-            cont = NULL;
-            GET_ATTR_thrower(interp, SELF, cur_ctx);
-            Parrot_pcc_invoke_method_from_c_args(INTERP, CURRENT_CONTEXT(INTERP), CONST_STRING(interp, "backtrace"), "->P", &result);
+            GET_ATTR_thrower(INTERP, SELF, cur_ctx);
+            Parrot_pcc_invoke_method_from_c_args(INTERP, CURRENT_CONTEXT(INTERP), CONST_STRING(INTERP, "backtrace"), "->P", &result);
         }
 
         RETURN(PMC *result);

Modified: branches/ops_pct/src/pmc/exceptionhandler.pmc
==============================================================================
--- branches/ops_pct/src/pmc/exceptionhandler.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/exceptionhandler.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -22,6 +22,10 @@
 
 #include "parrot/oplib/ops.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ExceptionHandler extends Continuation auto_attrs {
 
     ATTR PMC    *handled_types;
@@ -68,8 +72,8 @@
     VTABLE void mark() {
         Parrot_ExceptionHandler_attributes * const attrs =
             PARROT_EXCEPTIONHANDLER(SELF);
-        Parrot_gc_mark_PMC_alive(interp, attrs->handled_types);
-        Parrot_gc_mark_PMC_alive(interp, attrs->handled_types_except);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->handled_types);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->handled_types_except);
         SUPER();
     }
 
@@ -121,8 +125,8 @@
     VTABLE opcode_t *invoke(void *next) {
         opcode_t    * const pc = PARROT_CONTINUATION(SELF)->address;
 
-        Parrot_continuation_check(interp, SELF);
-        Parrot_continuation_rewind_environment(interp, SELF);
+        Parrot_continuation_check(INTERP, SELF);
+        Parrot_continuation_rewind_environment(INTERP, SELF);
 
         /* switch code segment if needed */
         if (INTERP->code != PARROT_CONTINUATION(SELF)->seg)
@@ -155,10 +159,10 @@
 */
 
     METHOD can_handle(PMC *exception) {
-        STRING * const sev    = CONST_STRING(interp, "severity");
-        STRING * const ex_str = CONST_STRING(interp, "Exception");
+        STRING * const sev    = CONST_STRING(INTERP, "severity");
+        STRING * const ex_str = CONST_STRING(INTERP, "Exception");
 
-        INTVAL severity = VTABLE_get_integer_keyed_str(interp, exception, sev);
+        INTVAL severity = VTABLE_get_integer_keyed_str(INTERP, exception, sev);
 
         if (exception->vtable->base_type == enum_class_Exception
         ||  VTABLE_isa(INTERP, exception, ex_str)) {
@@ -177,12 +181,12 @@
                 RETURN(INTVAL 0);
             }
             if (! PMC_IS_NULL(handled_types)) {
-                const INTVAL elems = VTABLE_elements(interp, handled_types);
-                const INTVAL type  = VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "type"));
+                const INTVAL elems = VTABLE_elements(INTERP, handled_types);
+                const INTVAL type  = VTABLE_get_integer_keyed_str(INTERP, exception, CONST_STRING(INTERP, "type"));
                 INTVAL i;
 
-                for (i = 0; i < elems; i++) {
-                    INTVAL handled_type = VTABLE_get_integer_keyed_int(interp,
+                for (i = 0; i < elems; ++i) {
+                    INTVAL handled_type = VTABLE_get_integer_keyed_int(INTERP,
                             handled_types, i);
                     if (handled_type == type)
                         RETURN(INTVAL 1);
@@ -191,12 +195,12 @@
                 RETURN(INTVAL 0);
             }
             if (handled_types_except != PMCNULL) {
-                const INTVAL elems = VTABLE_elements(interp, handled_types_except);
-                const INTVAL type  = VTABLE_get_integer_keyed_str(interp, exception, CONST_STRING(interp, "type"));
+                const INTVAL elems = VTABLE_elements(INTERP, handled_types_except);
+                const INTVAL type  = VTABLE_get_integer_keyed_str(INTERP, exception, CONST_STRING(INTERP, "type"));
                 INTVAL i;
 
-                for (i = 0; i < elems; i++) {
-                    const INTVAL handled_type = VTABLE_get_integer_keyed_int(interp,
+                for (i = 0; i < elems; ++i) {
+                    const INTVAL handled_type = VTABLE_get_integer_keyed_int(INTERP,
                             handled_types_except, i);
                     if (handled_type == type)
                         RETURN(INTVAL 0);
@@ -272,7 +276,7 @@
         Parrot_ExceptionHandler_attributes * const attrs =
                     PARROT_EXCEPTIONHANDLER(SELF);
         attrs->handled_types =
-            VTABLE_elements(interp, types) > 0
+            VTABLE_elements(INTERP, types) > 0
                 ? types
                 : PMCNULL;
     }
@@ -291,7 +295,7 @@
         Parrot_ExceptionHandler_attributes * const attrs =
                     PARROT_EXCEPTIONHANDLER(SELF);
         attrs->handled_types_except =
-            VTABLE_elements(interp, types) > 0
+            VTABLE_elements(INTERP, types) > 0
                 ? types
                 : PMCNULL;
     }

Modified: branches/ops_pct/src/pmc/exporter.pmc
==============================================================================
--- branches/ops_pct/src/pmc/exporter.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/exporter.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -49,7 +49,8 @@
 F<docs/pdds/pdd21_namespaces.pod>.
 
 Exporter is not derived from any other PMC, and does not provide any
-vtable interface--its interface consists solely of non-vtable methods.
+vtable interface--its interface consists solely of methods, not
+vtable functions.
 
 =head2 Structure
 
@@ -90,6 +91,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Exporter auto_attrs {
 
     ATTR PMC *ns_src;
@@ -134,9 +139,9 @@
         GET_ATTR_ns_dest(INTERP, SELF, ns_dest);
         GET_ATTR_globals(INTERP, SELF, globals);
 
-        Parrot_gc_mark_PMC_alive(interp, ns_src);
-        Parrot_gc_mark_PMC_alive(interp, ns_dest);
-        Parrot_gc_mark_PMC_alive(interp, globals);
+        Parrot_gc_mark_PMC_alive(INTERP, ns_src);
+        Parrot_gc_mark_PMC_alive(INTERP, ns_dest);
+        Parrot_gc_mark_PMC_alive(INTERP, globals);
     }
 
 
@@ -162,14 +167,14 @@
     METHOD source(PMC *src :optional, int got_src :opt_flag) {
         if (got_src) {
             if (src->vtable->base_type != enum_class_NameSpace)
-                Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                         "source must be a NameSpace PMC");
 
-            SET_ATTR_ns_src(interp, SELF, src);
+            SET_ATTR_ns_src(INTERP, SELF, src);
         }
         else {
             PMC *tmp_ns_src;
-            GET_ATTR_ns_src(interp, SELF, tmp_ns_src);
+            GET_ATTR_ns_src(INTERP, SELF, tmp_ns_src);
             RETURN(PMC *tmp_ns_src);
         }
     }
@@ -192,14 +197,14 @@
         if (got_dest) {
 
             if (dest->vtable->base_type != enum_class_NameSpace)
-                Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                     "destination must be a NameSpace PMC");
 
-            SET_ATTR_ns_dest(interp, SELF, dest);
+            SET_ATTR_ns_dest(INTERP, SELF, dest);
         }
         else {
             PMC *tmp_ns_dest;
-            GET_ATTR_ns_dest(interp, SELF, tmp_ns_dest);
+            GET_ATTR_ns_dest(INTERP, SELF, tmp_ns_dest);
             RETURN(PMC *tmp_ns_dest);
         }
     }
@@ -224,54 +229,54 @@
 */
 
     METHOD globals(PMC *glb :optional, int got_glb :opt_flag) {
-        STRING * const s_str   = CONST_STRING(interp, "String");
-        STRING * const s_arr   = CONST_STRING(interp, "array");
-        STRING * const s_hash  = CONST_STRING(interp, "hash");
-        STRING * const s_space = CONST_STRING(interp, " ");
+        STRING * const s_str   = CONST_STRING(INTERP, "String");
+        STRING * const s_arr   = CONST_STRING(INTERP, "array");
+        STRING * const s_hash  = CONST_STRING(INTERP, "hash");
+        STRING * const s_space = CONST_STRING(INTERP, " ");
 
         if (got_glb) {
-            STRING * const s_empty      = CONST_STRING(interp, "");
-            PMC           *temp_globals = Parrot_pmc_new(interp, enum_class_Hash);
+            STRING * const s_empty      = CONST_STRING(INTERP, "");
+            PMC           *temp_globals = Parrot_pmc_new(INTERP, enum_class_Hash);
 
             if (PMC_IS_NULL(glb)) {
                 temp_globals = PMCNULL;
             }
-            else if (VTABLE_isa(interp, glb, s_str) || (VTABLE_does(interp, glb, s_arr))) {
+            else if (VTABLE_isa(INTERP, glb, s_str) || (VTABLE_does(INTERP, glb, s_arr))) {
                 PMC    *glb_array;
                 INTVAL n, i;
 
-                if (VTABLE_isa(interp, glb, s_str))
-                    glb_array = Parrot_str_split(interp, s_space,
-                        VTABLE_get_string(interp, glb));
+                if (VTABLE_isa(INTERP, glb, s_str))
+                    glb_array = Parrot_str_split(INTERP, s_space,
+                        VTABLE_get_string(INTERP, glb));
                 else
                     glb_array = glb;
 
-                n = VTABLE_elements(interp, glb_array);
+                n = VTABLE_elements(INTERP, glb_array);
 
                 if (n == 0)
                     temp_globals = PMCNULL;
 
-                for (i = 0; i < n; i++) {
-                    STRING * const item = VTABLE_get_string_keyed_int(interp, glb_array, i);
-                    VTABLE_set_string_keyed_str(interp, temp_globals, item, s_empty);
+                for (i = 0; i < n; ++i) {
+                    STRING * const item = VTABLE_get_string_keyed_int(INTERP, glb_array, i);
+                    VTABLE_set_string_keyed_str(INTERP, temp_globals, item, s_empty);
                 }
             }
-            else if (VTABLE_does(interp, glb, s_hash)) {
-                if (VTABLE_elements(interp, glb) == 0)
+            else if (VTABLE_does(INTERP, glb, s_hash)) {
+                if (VTABLE_elements(INTERP, glb) == 0)
                     temp_globals = PMCNULL;
                 else
                     temp_globals = glb;
             }
             else {
-                Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                     "Invalid type %d in globals()", glb->vtable->base_type);
             }
 
-            SET_ATTR_globals(interp, SELF, temp_globals);
+            SET_ATTR_globals(INTERP, SELF, temp_globals);
          }
          else {
             PMC *tmp_globals;
-            GET_ATTR_globals(interp, SELF, tmp_globals);
+            GET_ATTR_globals(INTERP, SELF, tmp_globals);
             if (PMC_IS_NULL(tmp_globals)) {
                 RETURN(PMC *PMCNULL);
             }
@@ -309,26 +314,26 @@
         PMC *ns_src, *ns_dest, *ns_globals;
 
         if (got_src)
-            PCCINVOKE(interp, SELF, "source", PMC *src);
+            PCCINVOKE(INTERP, SELF, "source", PMC *src);
 
         if (got_dest)
-            PCCINVOKE(interp, SELF, "destination", PMC *dest);
+            PCCINVOKE(INTERP, SELF, "destination", PMC *dest);
 
         if (got_globals)
-            PCCINVOKE(interp, SELF, "globals", PMC *globals);
+            PCCINVOKE(INTERP, SELF, "globals", PMC *globals);
 
-        GET_ATTR_ns_src(interp, SELF, ns_src);
+        GET_ATTR_ns_src(INTERP, SELF, ns_src);
         if (PMC_IS_NULL(ns_src))
-            Parrot_ex_throw_from_c_args(interp, NULL, 0, "source namespace not set");
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 0, "source namespace not set");
 
-        GET_ATTR_ns_dest(interp, SELF, ns_dest);
+        GET_ATTR_ns_dest(INTERP, SELF, ns_dest);
         if (PMC_IS_NULL(ns_dest))
-            Parrot_ex_throw_from_c_args(interp, NULL, 0,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                 "destination namespace not set");
 
-        GET_ATTR_globals(interp, SELF, ns_globals);
+        GET_ATTR_globals(INTERP, SELF, ns_globals);
 
-        PCCINVOKE(interp, ns_src, "export_to", PMC *ns_dest, PMC *ns_globals);
+        PCCINVOKE(INTERP, ns_src, "export_to", PMC *ns_dest, PMC *ns_globals);
     }
 
 

Deleted: branches/ops_pct/src/pmc/file.pmc
==============================================================================
--- branches/ops_pct/src/pmc/file.pmc	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,283 +0,0 @@
-/*
-Copyright (C) 2001-2010, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/file.pmc - File PMC
-
-=head1 DESCRIPTION
-
-C<File> is a singleton class which provides access to File functions.
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#ifdef WIN32
-#  include <direct.h>
-#endif
-
-/* TT #1050 apparently, strerror_r is thread-safe and should be used instead.*/
-
-static PMC *File_PMC;
-pmclass File singleton {
-
-/*
-
-=item C<void *get_pointer()>
-
-=item C<void set_pointer(void *ptr)>
-
-These two functions are part of the singleton creation interface. For more
-information see F<src/pmc.c>.
-
-=cut
-
-*/
-    void class_init() {
-        File_PMC = NULL;
-    }
-
-    VTABLE void *get_pointer() {
-        return File_PMC;
-    }
-
-    VTABLE void set_pointer(void *ptr) {
-        File_PMC = (PMC *)ptr;
-    }
-
-/*
-
-=item C<INTVAL exists(STRING *file)>
-
-Returns a true value (1) if the supplied file or directory exists.
-
-=cut
-
-*/
-
-    METHOD exists(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-#ifdef WIN32
-        const int error = stat(cpath, &info);
-#else
-        const int error = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error)
-            RETURN(INTVAL 0);
-
-        RETURN(INTVAL 1);
-    }
-
-/*
-
-=item C<INTVAL is_dir(STRING *path)>
-
-Returns a true value (1) if the supplied path is a directory.
-
-=cut
-
-*/
-
-    METHOD is_dir(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-#ifdef WIN32
-        const int error = stat(cpath, &info);
-#else
-        const int error = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISDIR(info.st_mode))
-            RETURN(INTVAL 1);
-        else
-            RETURN(INTVAL 0);
-    }
-
-/*
-
-=item C<INTVAL is_file(STRING *path)>
-
-Returns a true value (1) if the supplied path is a plain file.
-
-=cut
-
-*/
-
-    METHOD is_file(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-#ifdef WIN32
-        int error   = stat(cpath, &info);
-#else
-        int error   = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISREG(info.st_mode))
-            RETURN(INTVAL 1);
-        else
-            RETURN(INTVAL 0);
-    }
-
-/*
-
-=item C<INTVAL is_link(STRING *path)>
-
-Returns a true value (1) if the supplied path is a link.
-
-=cut
-
-*/
-
-    METHOD is_link(STRING *path) {
-#ifdef WIN32
-        /* I love win32 implementations */
-        RETURN(INTVAL 0);
-#else
-        struct stat info;
-
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-        const int    error = lstat(cpath, &info);
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISLNK(info.st_mode))
-            RETURN(INTVAL 1);
-        else
-            RETURN(INTVAL 0);
-#endif
-    }
-
-/*
-
-=item C<void copy(STRING *from, STRING *to)>
-
-Copy the contents from file represented by path C<from> to the path
-C<to>.
-
-Uses the "work everywhere method". It is good enough to start with.
-
-NOTE: I'm sure that there should be more efficient ways to do this. Be
-free to change or give me hints on how to change it. -- ambs
-
-=cut
-
-*/
-
-    METHOD copy(STRING *from, STRING *to) {
-#define CHUNK_SIZE 1024
-
-        char * const cfrom  = Parrot_str_to_cstring(interp, from);
-        FILE * const source = fopen(cfrom, "rb");
-
-        Parrot_str_free_cstring(cfrom);
-
-        if (source) {
-            char * const cto    = Parrot_str_to_cstring(interp, to);
-            FILE * const target = fopen(cto, "w+b");
-
-            Parrot_str_free_cstring(cto);
-
-            if (target) {
-                while (!feof(source)) {
-                    char buf[CHUNK_SIZE];
-                    const size_t bytes_read = fread(buf, 1, CHUNK_SIZE, source);
-
-                    if (bytes_read) {
-                        const size_t bytes_written = fwrite(buf, 1, bytes_read, target);
-                        if (bytes_read != bytes_written) {
-                            Parrot_ex_throw_from_c_args(interp, NULL,
-                                EXCEPTION_EXTERNAL_ERROR, "Error writing file");
-                            break;
-                        }
-                    }
-                }
-                fclose(target);
-            }
-            else {
-                const char * const errmsg = strerror(errno);
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                    errmsg);
-            }
-            fclose(source);
-        }
-        else {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-#undef CHUNK_SIZE
-    }
-
-/*
-
-=item C<void rename(STRING *from, STRING *to)>
-
-Rename a file C<from> to the path C<to>.
-
-=cut
-
-*/
-
-    METHOD rename(STRING *from, STRING *to) {
-        char * const cfrom = Parrot_str_to_cstring(interp, from);
-        char * const   cto = Parrot_str_to_cstring(interp, to);
-        const int    error = rename(cfrom, cto);
-
-        Parrot_str_free_cstring(cfrom);
-        Parrot_str_free_cstring(cto);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-}
-
-/*
-
-=back
-
-=head1 SEE ALS0
-
-   stat(2), rename(2)
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/ops_pct/src/pmc/filehandle.pmc
==============================================================================
--- branches/ops_pct/src/pmc/filehandle.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/filehandle.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -31,6 +31,10 @@
 #endif
 #endif
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass FileHandle extends Handle auto_attrs {
     ATTR INTVAL flags;                /* Filehandle flags             */
     ATTR STRING *filename;            /* The opened path and filename */
@@ -102,7 +106,7 @@
     VTABLE PMC *clone() {
         Parrot_FileHandle_attributes * const old_struct
             = PARROT_FILEHANDLE(SELF);
-        PMC * const copy = Parrot_io_new_pmc(interp, old_struct->flags);
+        PMC * const copy = Parrot_io_new_pmc(INTERP, old_struct->flags);
         Parrot_FileHandle_attributes * const data_struct
             = PARROT_FILEHANDLE(copy);
 
@@ -126,9 +130,9 @@
         Parrot_FileHandle_attributes * const data_struct
             = PARROT_FILEHANDLE(SELF);
 
-        Parrot_gc_mark_STRING_alive(interp, data_struct->mode);
-        Parrot_gc_mark_STRING_alive(interp, data_struct->filename);
-        Parrot_gc_mark_STRING_alive(interp, data_struct->encoding);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->mode);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->filename);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->encoding);
     }
 
 
@@ -245,21 +249,21 @@
         STRING *open_filename, *open_mode;
 
         if (!Parrot_io_is_closed_filehandle(INTERP, SELF))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                                 "Cannot reopen already open filehandle");
 
         if (got_mode && !STRING_IS_NULL(mode))
-            SET_ATTR_mode(INTERP, SELF, Parrot_str_copy(INTERP, mode));
+            SET_ATTR_mode(INTERP, SELF, mode);
 
         if (got_filename && !STRING_IS_NULL(filename))
-            SET_ATTR_filename(INTERP, SELF, Parrot_str_copy(INTERP, filename));
+            SET_ATTR_filename(INTERP, SELF, filename);
 
         /* Open the file. With no options, reopen the same file as before */
         GET_ATTR_filename(INTERP, SELF, open_filename);
         GET_ATTR_mode(INTERP, SELF, open_mode);
 
         if (STRING_IS_NULL(open_filename))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                             "Cannot open filehandle, no filename");
 
         if (STRING_IS_NULL(open_mode)) {
@@ -313,7 +317,7 @@
 */
 
     METHOD is_closed() {
-        const INTVAL status = Parrot_io_is_closed(interp, SELF);
+        const INTVAL status = Parrot_io_is_closed(INTERP, SELF);
         RETURN(INTVAL status);
     }
 
@@ -443,7 +447,7 @@
             GET_ATTR_encoding(INTERP, SELF, encoding);
 
             if (!Parrot_io_is_closed_filehandle(INTERP, SELF))
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                     "Cannot readall on a new file from an already open filehandle");
 
             filehandle  = Parrot_io_open(INTERP, PMCNULL, name, NULL);
@@ -460,7 +464,7 @@
         else {
             /* slurp open file */
             if (Parrot_io_is_closed_filehandle(INTERP, SELF))
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                     "Cannot readall without a file name or open filehandle");
 
             result = Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
@@ -471,7 +475,7 @@
 
             do {
                 STRING * const part = Parrot_io_reads(INTERP, SELF, 0);
-                result = Parrot_str_append(INTERP, result, part);
+                result = Parrot_str_concat(INTERP, result, part);
 
                 if (Parrot_io_eof(INTERP, SELF))
                     break;
@@ -510,7 +514,7 @@
     METHOD print(PMC *to_print) {
         STRING * const string_to_print = VTABLE_get_string(INTERP, to_print);
 
-        Parrot_io_putps(interp, SELF, string_to_print);
+        Parrot_io_putps(INTERP, SELF, string_to_print);
     }
 
 
@@ -614,12 +618,9 @@
 */
 
     METHOD mode() {
-        STRING *mode, *mode_copy;
-
+        STRING *mode;
         GET_ATTR_mode(INTERP, SELF, mode);
-        mode_copy = Parrot_str_copy(INTERP, mode);
-
-        RETURN(STRING *mode_copy);
+        RETURN(STRING *mode);
     }
 
 
@@ -636,20 +637,14 @@
 
     METHOD encoding(STRING *new_encoding :optional, INTVAL got_encoding :opt_flag) {
         STRING *encoding;
-        STRING *encoding_copy = NULL;
 
         if (got_encoding) {
-            if (!STRING_IS_NULL(new_encoding))
-                encoding_copy = Parrot_str_copy(INTERP, new_encoding);
-            SET_ATTR_encoding(INTERP, SELF, encoding_copy);
+            SET_ATTR_encoding(INTERP, SELF, new_encoding);
             RETURN(STRING *new_encoding);
         }
 
         GET_ATTR_encoding(INTERP, SELF, encoding);
-        if (!STRING_IS_NULL(encoding))
-            encoding_copy = Parrot_str_copy(INTERP, encoding);
-
-        RETURN(STRING *encoding_copy);
+        RETURN(STRING *encoding);
     }
 
 

Modified: branches/ops_pct/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/fixedbooleanarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/fixedbooleanarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -27,10 +27,23 @@
 
 #define BITS_PER_CHAR 8
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_INLINE
+static UINTVAL get_size_in_bytes(UINTVAL size);
+
+#define ASSERT_ARGS_get_size_in_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 PARROT_INLINE
 static UINTVAL
 get_size_in_bytes(UINTVAL size)
 {
+    ASSERT_ARGS(get_size_in_bytes)
+
     return (size + BITS_PER_CHAR - 1) / BITS_PER_CHAR;
 }
 
@@ -74,7 +87,7 @@
         const size_t size_in_bytes = get_size_in_bytes(size);
 
         if (size < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 _("FixedBooleanArray: Cannot set array size to a negative number (%d)"), size);
 
         SET_ATTR_size(INTERP, SELF, size);
@@ -268,11 +281,11 @@
         zero = CONST_STRING(INTERP, "0");
         one  = CONST_STRING(INTERP, "1");
 
-        for (i = 0; i < elems; i++) {
+        for (i = 0; i < elems; ++i) {
             if (SELF.get_integer_keyed_int((INTVAL)i))
-                str = Parrot_str_concat(INTERP, str, one, 0);
+                str = Parrot_str_concat(INTERP, str, one);
             else
-                str = Parrot_str_concat(INTERP, str, zero, 0);
+                str = Parrot_str_concat(INTERP, str, zero);
         }
 
         return str;
@@ -568,13 +581,11 @@
         SUPER(info);
 
         {
-            unsigned char * bit_array;
-            UINTVAL         threshold;
             const INTVAL    size      = VTABLE_shift_integer(INTERP, info);
             STRING * const  s         = VTABLE_shift_string(INTERP, info);
 
-            bit_array = (unsigned char *)Parrot_str_to_cstring(INTERP, s);
-            threshold = Parrot_str_byte_length(interp, s) * BITS_PER_CHAR;
+            unsigned char * const bit_array = (unsigned char *)Parrot_str_to_cstring(INTERP, s);
+            const UINTVAL   threshold = Parrot_str_byte_length(INTERP, s) * BITS_PER_CHAR;
 
             SET_ATTR_size(INTERP, SELF, size);
             SET_ATTR_resize_threshold(INTERP, SELF, threshold);

Modified: branches/ops_pct/src/pmc/fixedfloatarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/fixedfloatarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/fixedfloatarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass FixedFloatArray auto_attrs provides array {
     ATTR INTVAL    size;
     ATTR FLOATVAL *float_array;
@@ -58,7 +62,7 @@
 
     VTABLE void init_int(INTVAL size) {
         if (size < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 _("FixedFloatArray: Cannot set array size to a negative number (%d)"), size);
         SET_ATTR_size(INTERP, SELF, size);
         SET_ATTR_float_array(INTERP, SELF, mem_gc_allocate_n_typed(INTERP, size, FLOATVAL));
@@ -76,24 +80,22 @@
 */
 
     VTABLE PMC *clone() {
-        INTVAL    size;
-        FLOATVAL *self_float_array, *dest_float_array;
-        size_t mem_size;
-        PMC   * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        FLOATVAL *self_float_array;
+        PMC * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
         GET_ATTR_float_array(INTERP, SELF, self_float_array);
-
-        if (!self_float_array)
-            return dest;
-
-        GET_ATTR_size(INTERP, SELF, size);
-        SET_ATTR_size(INTERP, dest, size);
-        mem_size          = size * sizeof (FLOATVAL);
-
-        dest_float_array  = (FLOATVAL*)Parrot_gc_allocate_memory_chunk(INTERP, mem_size);
-        mem_sys_memcopy(dest_float_array, self_float_array, mem_size);
-        SET_ATTR_float_array(INTERP, dest, dest_float_array);
-        PObj_custom_destroy_SET(dest);
-
+        if (self_float_array) {
+            INTVAL size;
+            GET_ATTR_size(INTERP, SELF, size);
+            {
+                FLOATVAL * const dest_float_array = mem_gc_allocate_n_typed(INTERP,
+                        size, FLOATVAL);
+                mem_copy_n_typed(dest_float_array, self_float_array,
+                        size, FLOATVAL);
+                SET_ATTR_float_array(INTERP, dest, dest_float_array);
+            }
+            SET_ATTR_size(INTERP, dest, size);
+            PObj_custom_destroy_SET(dest);
+        }
         return dest;
     }
 

Modified: branches/ops_pct/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/fixedintegerarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/fixedintegerarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass FixedIntegerArray auto_attrs provides array {
     ATTR INTVAL   size;  /* number of INTVALs stored in this array */
     ATTR INTVAL * int_array; /* INTVALs are stored here */
@@ -55,7 +59,7 @@
 
     VTABLE void init_int(INTVAL size) {
         if (size < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 _("FixedIntegerArray: Cannot set array size to a negative number (%d)"), size);
         SET_ATTR_size(INTERP, SELF, size);
         SET_ATTR_int_array(INTERP, SELF, mem_gc_allocate_n_typed(INTERP, size, INTVAL));
@@ -106,16 +110,16 @@
         GET_ATTR_int_array(INTERP, SELF, int_array);
 
         if (int_array) {
-            INTVAL      *dest_int_array;
-            INTVAL       size;
-
+            INTVAL size;
             GET_ATTR_size(INTERP, SELF, size);
-
-            dest_int_array = mem_gc_allocate_n_typed(INTERP, size, INTVAL);
+            {
+                INTVAL * const dest_int_array = mem_gc_allocate_n_typed(INTERP,
+                        size, INTVAL);
+                mem_copy_n_typed(dest_int_array, int_array,
+                        size, INTVAL);
+                SET_ATTR_int_array(INTERP, dest, dest_int_array);
+            }
             SET_ATTR_size(INTERP, dest, size);
-            SET_ATTR_int_array(INTERP, dest, dest_int_array);
-
-            mem_sys_memcopy(dest_int_array, int_array, size * sizeof (INTVAL));
             PObj_custom_destroy_SET(dest);
         }
 
@@ -187,7 +191,7 @@
         GET_ATTR_size(INTERP, SELF, size);
 
         if (key < 0 || key >= size)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "FixedIntegerArray: index out of bounds!");
 
         GET_ATTR_int_array(INTERP, SELF, int_array);
@@ -275,13 +279,13 @@
 
         for (j = 0; j < n; ++j) {
             PMC * const val = SELF.get_pmc_keyed_int(j);
-            res = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
         return res;
     }
 
@@ -313,9 +317,8 @@
 */
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
-        PMC  * const ret = Parrot_pmc_new(INTERP, enum_class_Integer);
         const INTVAL val = SELF.get_integer_keyed_int(key);
-        VTABLE_set_integer_native(INTERP, ret, val);
+        PMC  * const ret = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, val);
         return ret;
     }
 
@@ -378,7 +381,7 @@
         GET_ATTR_size(INTERP, SELF, size);
 
         if (key < 0 || key >= size)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "FixedIntegerArray: index out of bounds!");
 
         GET_ATTR_int_array(INTERP, SELF, int_array);
@@ -440,11 +443,7 @@
 */
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
-        INTVAL tempInt;
-        PMC  * const tempPMC = Parrot_pmc_new_temporary(INTERP, enum_class_Integer);
-        VTABLE_set_string_native(INTERP, tempPMC, value);
-        tempInt        = VTABLE_get_integer(INTERP, tempPMC);
-        Parrot_pmc_free_temporary(interp, tempPMC);
+        const INTVAL tempInt = Parrot_str_to_int(INTERP, value);
         SELF.set_integer_keyed_int(key, tempInt);
     }
 
@@ -504,7 +503,7 @@
 
         if (n > 1) {
             GET_ATTR_int_array(INTERP, SELF, int_array);
-            Parrot_quicksort(interp, (void**)int_array, n, cmp_func);
+            Parrot_quicksort(INTERP, (void**)int_array, n, cmp_func);
         }
     }
 

Modified: branches/ops_pct/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/fixedpmcarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/fixedpmcarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -27,6 +27,10 @@
 #define PMC_size(x)  ((Parrot_FixedPMCArray_attributes *)PMC_data(x))->size
 #define PMC_array(x) ((Parrot_FixedPMCArray_attributes *)PMC_data(x))->pmc_array
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass FixedPMCArray auto_attrs provides array {
     ATTR INTVAL   size;      /* number of elements in the array */
     ATTR PMC    **pmc_array; /* pointer to PMC array */
@@ -47,11 +51,11 @@
         if (n > 1) {
             /* XXX Workaround for TT #218 */
             if (PObj_is_object_TEST(SELF)) {
-                PMC *parent = SELF.get_attr_str(CONST_STRING(interp, "proxy"));
-                Parrot_pcc_invoke_method_from_c_args(interp, parent, CONST_STRING(interp, "sort"), "P->", cmp_func);
+                PMC *parent = SELF.get_attr_str(CONST_STRING(INTERP, "proxy"));
+                Parrot_pcc_invoke_method_from_c_args(INTERP, parent, CONST_STRING(INTERP, "sort"), "P->", cmp_func);
             }
             else
-                Parrot_quicksort(interp, (void **)PMC_array(SELF), n, cmp_func);
+                Parrot_quicksort(INTERP, (void **)PMC_array(SELF), n, cmp_func);
         }
         RETURN(PMC *SELF);
     }
@@ -87,20 +91,13 @@
 */
 
     VTABLE void init_int(INTVAL size) {
-        PMC **data;
-        int i;
-
         if (size < 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     _("FixedPMCArray: Cannot set array size to a negative number (%d)"), size);
 
-        SET_ATTR_size(INTERP, SELF, size);
-        data           = mem_gc_allocate_n_typed(INTERP, size, PMC *);
+        SELF.set_integer_native(size);
 
-        for (i = 0; i < size; i++)
-            data[i] = PMCNULL;
-
-        PObj_custom_destroy_SET(SELF);
+        PObj_custom_mark_destroy_SETALL(SELF);
     }
 
 /*
@@ -134,7 +131,7 @@
 
         if (size) {
             PMC_size(dest)  = size;
-            PMC_array(dest) = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+            PMC_array(dest) = mem_gc_allocate_n_typed(INTERP, size, PMC *);
             mem_copy_n_typed(PMC_array(dest), PMC_array(SELF), size, PMC *);
             PObj_custom_mark_destroy_SETALL(dest);
         }
@@ -225,12 +222,12 @@
         for (i = 0; i < n; ++i) {
             PMC * const val = SELF.get_pmc_keyed_int(i);
             if (i > 0)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
 
-            res = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ")"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ")"));
 
         return res;
     }
@@ -311,7 +308,7 @@
         PMC * const retval = SELF.get_pmc_keyed_int(key);
 
         if (PMC_IS_NULL(retval))
-            return string_from_literal(interp, "");
+            return CONST_STRING(INTERP, "");
 
         return VTABLE_get_string(INTERP, retval);
     }
@@ -404,9 +401,9 @@
                     _("FixedPMCArray: Cannot set array size to a negative number"));
 
         PMC_size(SELF) = size;
-        data           = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+        data           = mem_gc_allocate_n_typed(INTERP, size, PMC *);
 
-        for (i = 0; i < size; i++)
+        for (i = 0; i < size; ++i)
             data[i] = PMCNULL;
 
         PMC_array(SELF) = data;
@@ -419,7 +416,7 @@
         if (SELF == value)
             return;
 
-        if (!VTABLE_does(interp, value, CONST_STRING(interp, "array")))
+        if (!VTABLE_does(INTERP, value, CONST_STRING(INTERP, "array")))
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     _("Can't set self from this type"));
 
@@ -427,9 +424,9 @@
             mem_gc_free(INTERP, PMC_array(SELF));
 
         size            = PMC_size(SELF) = VTABLE_elements(INTERP, value);
-        PMC_array(SELF) = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+        PMC_array(SELF) = mem_gc_allocate_n_typed(INTERP, size, PMC *);
 
-        for (i = 0; i < size; i++)
+        for (i = 0; i < size; ++i)
             (PMC_array(SELF))[i] = VTABLE_get_pmc_keyed_int(INTERP, value, i);
 
         PObj_custom_mark_destroy_SETALL(SELF);
@@ -640,7 +637,7 @@
             ||  item2->vtable->base_type == enum_class_Null)
                 return 0;
 
-            if (!VTABLE_is_equal(interp, item1, item2))
+            if (!VTABLE_is_equal(INTERP, item1, item2))
                 return 0;
         }
 
@@ -794,7 +791,7 @@
             return;
 
         for (i = PMC_size(SELF) - 1; i >= 0; --i)
-            Parrot_gc_mark_PMC_alive(interp, data[i]);
+            Parrot_gc_mark_PMC_alive(INTERP, data[i]);
     }
 
 

Modified: branches/ops_pct/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/fixedstringarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/fixedstringarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass FixedStringArray auto_attrs provides array {
     ATTR STRING **str_array; /* where the STRINGs are stored */
     ATTR UINTVAL  size;      /* element count */
@@ -55,7 +59,7 @@
 
     VTABLE void init_int(INTVAL size) {
         if (size < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 _("FixedStringArray: Cannot set array size to a negative number (%d)"), size);
         SET_ATTR_size(INTERP, SELF, size);
         SET_ATTR_str_array(INTERP, SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size, STRING *));
@@ -137,7 +141,7 @@
             UINTVAL size, i;
             GET_ATTR_size(INTERP, SELF, size);
 
-            for (i = 0; i < size; i++) {
+            for (i = 0; i < size; ++i) {
                 Parrot_gc_mark_STRING_alive(INTERP, str_array[i]);
             }
         }
@@ -230,7 +234,7 @@
 
     VTABLE INTVAL get_integer_keyed_int(INTVAL key) {
         STRING * const element = SELF.get_string_keyed_int(key);
-        return Parrot_str_to_int(interp, element);
+        return Parrot_str_to_int(INTERP, element);
     }
 
 /*
@@ -262,7 +266,7 @@
 
     VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
         STRING * const element = SELF.get_string_keyed_int(key);
-        return Parrot_str_to_num(interp, element);
+        return Parrot_str_to_num(INTERP, element);
     }
 
 /*
@@ -391,7 +395,7 @@
 */
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
-        STRING *val = Parrot_str_from_int(interp, value);
+        STRING *val = Parrot_str_from_int(INTERP, value);
         SELF.set_string_keyed_int(key, val);
     }
 
@@ -422,7 +426,7 @@
 */
 
     VTABLE void set_number_keyed_int(INTVAL key, FLOATVAL value) {
-        STRING *val = Parrot_str_from_num(interp, value);
+        STRING *val = Parrot_str_from_num(INTERP, value);
         SELF.set_string_keyed_int(key, val);
     }
 
@@ -534,15 +538,15 @@
 
         for (j = 0; j < n; ++j) {
             STRING * const val = SELF.get_string_keyed_int(j);
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "\""));
-            res = Parrot_str_append(INTERP, res, val);
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "\""));
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "\""));
+            res = Parrot_str_concat(INTERP, res, val);
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "\""));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
         return res;
     }
 
@@ -578,7 +582,7 @@
             if (item1 == NULL ||  item2 == NULL)
                 return 0;
 
-            if (!Parrot_str_equal(interp, item1, item2))
+            if (!Parrot_str_equal(INTERP, item1, item2))
                 return 0;
         }
 

Modified: branches/ops_pct/src/pmc/float.pmc
==============================================================================
--- branches/ops_pct/src/pmc/float.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/float.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -18,6 +18,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Float extends scalar provides float provides scalar auto_attrs {
     ATTR FLOATVAL fv;
 
@@ -296,7 +300,7 @@
     VTABLE void increment() {
         FLOATVAL fv;
         GET_ATTR_fv(INTERP, SELF, fv);
-        fv++;
+        ++fv;
         SET_ATTR_fv(INTERP, SELF, fv);
     }
 
@@ -313,7 +317,7 @@
     VTABLE void decrement() {
         FLOATVAL fv;
         GET_ATTR_fv(INTERP, SELF, fv);
-        fv--;
+        --fv;
         SET_ATTR_fv(INTERP, SELF, fv);
     }
 /*

Modified: branches/ops_pct/src/pmc/handle.pmc
==============================================================================
--- branches/ops_pct/src/pmc/handle.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/handle.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -25,17 +25,21 @@
 #include "parrot/parrot.h"
 #include "../src/io/io_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Handle provides Handle manual_attrs {
     /* TODO: Consider encapsulating PIOHANDLE as a PMC type, for subclassing */
     ATTR PIOHANDLE os_handle;         /* Low level OS descriptor      */
 
     VTABLE void init() {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "Handle cannot be instantiated directly.");
     }
 
     VTABLE void init_pmc(PMC * init) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "Handle cannot be instantiated directly.");
     }
 }

Modified: branches/ops_pct/src/pmc/hash.pmc
==============================================================================
--- branches/ops_pct/src/pmc/hash.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/hash.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -48,6 +48,10 @@
 #include "pmc/pmc_key.h"
 #include "pmc/pmc_hashiteratorkey.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Hash provides hash auto_attrs {
     ATTR Hash *hash;
 
@@ -57,6 +61,10 @@
 
 Initializes the instance.
 
+=item C<void init_int(INTVAL value_type)>
+
+Initializes the instance with the value_type provided.
+
 =item C<void destroy()>
 
 Free hash structure.
@@ -74,6 +82,19 @@
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
+    VTABLE void init_int(INTVAL value_type) {
+        Parrot_Hash_attributes * const attr =
+            (Parrot_Hash_attributes *) PMC_data(SELF);
+
+        attr->hash = parrot_create_hash(INTERP,
+                (PARROT_DATA_TYPE)value_type,
+                Hash_key_type_STRING,
+                STRING_compare,
+                (hash_hash_key_fn)key_hash_STRING);
+        attr->hash->container = SELF;
+        PObj_custom_mark_destroy_SETALL(SELF);
+    }
+
     VTABLE void destroy() {
         Hash * const hash = (Hash *)SELF.get_pointer();
         if (hash)
@@ -158,21 +179,21 @@
                                     : enum_type_PMC;
 
         if (type == Hash_key_type_STRING)
-            new_hash = parrot_create_hash(interp,
+            new_hash = parrot_create_hash(INTERP,
                     entry_type,
                     Hash_key_type_STRING,
                     STRING_compare,
                     (hash_hash_key_fn)key_hash_STRING);
         else if (type == Hash_key_type_int)
             /* new_int_hash set BOTH keys and values to INTVAL */
-            new_hash = parrot_create_hash(interp,
+            new_hash = parrot_create_hash(INTERP,
                     entry_type,
                     Hash_key_type_int,
                     int_compare,
                     key_hash_int);
         else if (type == Hash_key_type_PMC)
             /* new_int_hash set BOTH keys and values to INTVAL */
-            new_hash = parrot_create_hash(interp,
+            new_hash = parrot_create_hash(INTERP,
                     entry_type,
                     Hash_key_type_PMC,
                     (hash_comp_fn)PMC_compare,
@@ -229,28 +250,29 @@
         It will create STRING* keys hash. Because we can't use STRING_compare
         directly - it declared static in F<src/hash.c>
         */
-        if (!old_hash)
-            old_hash = parrot_new_hash(INTERP);
+        if (old_hash && old_hash->entry_type == type)
+            return;
 
         switch (type) {
           case enum_type_INTVAL:
           case enum_type_STRING:
           case enum_type_PMC:
-            new_hash = parrot_create_hash(interp,
+            new_hash = parrot_create_hash(INTERP,
                         (PARROT_DATA_TYPE)type,
-                        old_hash->key_type,
-                        old_hash->compare,
-                        old_hash->hash_val);
+                        old_hash ? old_hash->key_type : Hash_key_type_STRING,
+                        old_hash ? old_hash->compare : STRING_compare,
+                        old_hash ? old_hash->hash_val : (hash_hash_key_fn)key_hash_STRING);
             break;
           default:
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
                         "Hash: unsupported entry_type %d", type);
         }
 
         PARROT_HASH(SELF)->hash = new_hash;
         new_hash->container     = SELF;
 
-        parrot_hash_destroy(INTERP, old_hash);
+        if (old_hash)
+            parrot_hash_destroy(INTERP, old_hash);
     }
 
     METHOD get_value_type() {
@@ -318,40 +340,40 @@
         INTVAL       j;
 
         for (j = 0; j < n; ++j) {
-            STRING * const key       = VTABLE_shift_string(INTERP, iter);
-            char *         key_str;
-            size_t         i, str_len;
+            STRING * const key      = VTABLE_shift_string(INTERP, iter);
+            char *   const key_str  = Parrot_str_to_cstring(INTERP, key);
+            const size_t   str_len  = strlen(key_str);
+            size_t         i;
             int            all_digit = 1;
             PMC           *val;
 
-            key_str = Parrot_str_to_cstring(INTERP, key);
-            str_len = strlen(key_str);
             for (i = 0; i < str_len; ++i) {
                 if (!isdigit((unsigned char)key_str[i])) {
                     all_digit = 0;
                     break;
                 }
             }
+
             Parrot_str_free_cstring(key_str);
 
             if (all_digit) {
-                res = Parrot_str_append(INTERP, res, key);
+                res = Parrot_str_concat(INTERP, res, key);
             }
             else {
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "'"));
-                res = Parrot_str_append(INTERP, res, key);
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "'"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "'"));
+                res = Parrot_str_concat(INTERP, res, key);
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "'"));
             }
 
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ": "));
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ": "));
             val = SELF.get_pmc_keyed_str(key);
-            res = Parrot_str_append(INTERP, res, VTABLE_get_string(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_string(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "}"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "}"));
 
         return res;
     }
@@ -519,7 +541,7 @@
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
         PMC               *nextkey;
         PMC               *valpmc;
-        const Hash * const hash   = (Hash *)VTABLE_get_pointer(interp, pmc);
+        const Hash * const hash   = (Hash *)SELF.get_pointer();
         void       * const keystr = hash_key_from_pmc(INTERP, hash, key);
         HashBucket * const b      = parrot_hash_get_bucket(INTERP, hash, keystr);
 
@@ -673,11 +695,11 @@
         const Hash *hash;
         HashBucket *b = NULL;
 
-        GET_ATTR_hash(interp, SELF, hash);
+        GET_ATTR_hash(INTERP, SELF, hash);
 
         /* special case the most key type, for speed */
         if (hash->key_type == Hash_key_type_STRING)
-            b = parrot_hash_get_bucket(interp, hash, key);
+            b = parrot_hash_get_bucket(INTERP, hash, key);
         else
             b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_string(INTERP, hash, key));
@@ -1129,8 +1151,31 @@
             const INTVAL v_type = VTABLE_shift_integer(INTERP, info);
             Hash        *hash;
 
-            if (k_type == Hash_key_type_int && v_type == enum_hash_int) {
-                SELF.set_pointer(parrot_new_intval_hash(INTERP));
+            if (k_type != Hash_key_type_STRING || v_type != enum_hash_pmc) {
+                hash_comp_fn cmp_fn;
+                hash_hash_key_fn key_fn;
+
+                switch (k_type) {
+                  case Hash_key_type_int:
+                    key_fn = (hash_hash_key_fn)key_hash_int;
+                    cmp_fn = (hash_comp_fn)int_compare;
+                    break;
+                  case Hash_key_type_STRING:
+                    key_fn = (hash_hash_key_fn)key_hash_STRING;
+                    cmp_fn = (hash_comp_fn)STRING_compare;
+                    break;
+                  case Hash_key_type_PMC:
+                    key_fn = (hash_hash_key_fn)key_hash_PMC;
+                    cmp_fn = (hash_comp_fn)PMC_compare;
+                    break;
+                  default:
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
+                            "unimplemented key type");
+                    break;
+                }
+
+                SELF.set_pointer(parrot_create_hash(INTERP, (PARROT_DATA_TYPE)v_type,
+                                                    (Hash_key_type)k_type, cmp_fn, key_fn));
             }
 
             hash = (Hash *)SELF.get_pointer();

Modified: branches/ops_pct/src/pmc/hashiterator.pmc
==============================================================================
--- branches/ops_pct/src/pmc/hashiterator.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/hashiterator.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -49,13 +49,32 @@
 #include "pmc/pmc_hash.h"
 #include "pmc/pmc_hashiteratorkey.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void advance_to_next(PARROT_INTERP, ARGMOD(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+#define ASSERT_ARGS_advance_to_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 
 Advance to next position. Return found (if any) HashBucket.
 
 */
-static HashBucket*
-advance_to_next(PARROT_INTERP, PMC *self) {
+
+static void
+advance_to_next(PARROT_INTERP, ARGMOD(PMC *self))
+{
+    ASSERT_ARGS(advance_to_next)
+
     Parrot_HashIterator_attributes * const attrs  = PARROT_HASHITERATOR(self);
     HashBucket                            *bucket = attrs->bucket;
 
@@ -71,8 +90,9 @@
         bucket = attrs->parrot_hash->bi[attrs->pos++];
     }
     attrs->bucket = bucket;
-    attrs->elements--;
-    return bucket;
+    --attrs->elements;
+
+    return;
 }
 
 pmclass HashIterator extends Iterator no_ro auto_attrs {
@@ -125,7 +145,7 @@
 */
 
     VTABLE void mark() {
-        PMC *hash = PARROT_HASHITERATOR(SELF)->pmc_hash;
+        PMC * const hash = PARROT_HASHITERATOR(SELF)->pmc_hash;
         Parrot_gc_mark_PMC_alive(INTERP, hash);
         /* We don't mark underlying parrot_hash. Hash PMC will mark it */
     }

Modified: branches/ops_pct/src/pmc/hashiteratorkey.pmc
==============================================================================
--- branches/ops_pct/src/pmc/hashiteratorkey.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/hashiteratorkey.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass HashIteratorKey no_ro auto_attrs {
     ATTR Hash        *parrot_hash; /* Underlying parrot's hash */
     ATTR HashBucket  *bucket;      /* Current bucket from HashItertor */

Modified: branches/ops_pct/src/pmc/imageio.pmc
==============================================================================
--- branches/ops_pct/src/pmc/imageio.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/imageio.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -33,24 +33,121 @@
     enum_PackID_seen       = 1,
 };
 
+/* 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_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+PARROT_INLINE
+static PMC* id_list_get(PARROT_INTERP, ARGIN(const PMC *io), UINTVAL id)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_INLINE
+static void INC_VISIT_CURSOR(ARGMOD(PMC *pmc), UINTVAL inc)
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*pmc);
+
+PARROT_WARN_UNUSED_RESULT
 PARROT_INLINE
+static INTVAL INFO_HAS_DATA(ARGIN(const PMC *io))
+        __attribute__nonnull__(1);
+
+PARROT_INLINE
+static void SET_VISIT_CURSOR(ARGMOD(PMC *pmc), ARGIN(const char *cursor))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
+
+static void visit_todo_list_freeze(PARROT_INTERP,
+    ARGIN_NULLOK(PMC* pmc),
+    ARGMOD(PMC* info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(* info);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+PARROT_INLINE
+static PMC * visit_todo_list_thaw(PARROT_INTERP, ARGIN(PMC* info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_create_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(info))
+#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_id_list_get __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(io))
+#define ASSERT_ARGS_INC_VISIT_CURSOR __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pmc))
+#define ASSERT_ARGS_INFO_HAS_DATA __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(io))
+#define ASSERT_ARGS_SET_VISIT_CURSOR __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(cursor))
+#define ASSERT_ARGS_visit_todo_list_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(info))
+#define ASSERT_ARGS_visit_todo_list_thaw __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(info))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static opcode_t *
-GET_VISIT_CURSOR(PMC *pmc){
-    char  *buf = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
-    size_t pos = PARROT_IMAGEIO(pmc)->pos;
+GET_VISIT_CURSOR(ARGIN(const PMC *pmc))
+{
+    ASSERT_ARGS(GET_VISIT_CURSOR)
+
+    char * const buf = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
+    const size_t pos = PARROT_IMAGEIO(pmc)->pos;
     return (opcode_t *)(buf + pos);
 }
 
 PARROT_INLINE
 static void
-SET_VISIT_CURSOR(PMC *pmc, char *cursor) {
-    char *bufstart  = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
+SET_VISIT_CURSOR(ARGMOD(PMC *pmc), ARGIN(const char *cursor))
+{
+    ASSERT_ARGS(SET_VISIT_CURSOR)
+
+    const char *bufstart  = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
     PARROT_IMAGEIO(pmc)->pos = (cursor - bufstart);
 }
 
 PARROT_INLINE
 static void
-INC_VISIT_CURSOR(PMC *pmc, UINTVAL inc) {
+INC_VISIT_CURSOR(ARGMOD(PMC *pmc), UINTVAL inc)
+{
+    ASSERT_ARGS(INC_VISIT_CURSOR)
+
     PARROT_IMAGEIO(pmc)->pos += inc;
 }
 
@@ -60,13 +157,15 @@
 
 
 static void
-create_buffer(PARROT_INTERP, PMC *pmc, PMC *info)
+create_buffer(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), ARGMOD(PMC *info))
 {
+    ASSERT_ARGS(create_buffer)
+
     INTVAL  len;
 
     if (!PMC_IS_NULL(pmc)) {
-        STRING *array = CONST_STRING(interp, "array");
-        STRING *hash  = CONST_STRING(interp, "hash");
+        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)) {
@@ -97,6 +196,8 @@
 static void
 ensure_buffer_size(PARROT_INTERP, ARGIN(PMC *io), size_t len)
 {
+    ASSERT_ARGS(ensure_buffer_size)
+
     Buffer *buf         = PARROT_IMAGEIO(io)->buffer;
     const size_t used   = PARROT_IMAGEIO(io)->pos;
     const int need_free = Buffer_buflen(buf) - used - len;
@@ -111,31 +212,44 @@
     }
 
 #ifndef DISABLE_GC_DEBUG
-    Parrot_gc_compact_memory_pool(INTERP);
+    Parrot_gc_compact_memory_pool(interp);
 #endif
 
 }
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_INLINE
 static INTVAL
-INFO_HAS_DATA(ARGIN(PMC *io)) {
+INFO_HAS_DATA(ARGIN(const PMC *io))
+{
+    ASSERT_ARGS(INFO_HAS_DATA)
+
     return PARROT_IMAGEIO(io)->pos < PARROT_IMAGEIO(io)->input_length;
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 PARROT_INLINE
 static PMC*
-id_list_get(PARROT_INTERP, PMC *io, UINTVAL id) {
+id_list_get(PARROT_INTERP, ARGIN(const PMC *io), UINTVAL id)
+{
+    ASSERT_ARGS(id_list_get)
+
     return VTABLE_get_pmc_keyed_int(interp, PARROT_IMAGEIO(io)->todo, id - 1);
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 PARROT_INLINE
 static PMC *
 visit_todo_list_thaw(PARROT_INTERP, ARGIN(PMC* info))
 {
-    UINTVAL  n            = VTABLE_shift_integer(interp, info);
-    UINTVAL  id           = PackID_get_PMCID(n);
-    int      packid_flags = PackID_get_FLAGS(n);
-    PMC     *pmc          = PMCNULL;
+    ASSERT_ARGS(visit_todo_list_thaw)
+
+    const UINTVAL  n            = VTABLE_shift_integer(interp, info);
+    const UINTVAL  id           = PackID_get_PMCID(n);
+    const int      packid_flags = PackID_get_FLAGS(n);
+    PMC           *pmc          = PMCNULL;
 
     PARROT_ASSERT(PARROT_IMAGEIO(info)->what == VISIT_THAW_NORMAL);
 
@@ -146,17 +260,22 @@
         break;
       case enum_PackID_normal:
         {
-            INTVAL type = VTABLE_shift_integer(interp, info);
+            PMC * const todo    = PARROT_IMAGEIO(info)->todo;
+            const INTVAL type = VTABLE_shift_integer(interp, info);
+
+            PARROT_ASSERT(id - 1 == VTABLE_elements(interp, PARROT_IMAGEIO(info)->todo));
+
             if (type <= 0 || type > interp->n_vtable_max)
                 Parrot_ex_throw_from_c_args(interp, NULL, 1, "Unknown PMC type to thaw %d", type);
 
+            /* workaround to keep ParrotInterpreter PBC hack working */
+            if (type == enum_class_ParrotInterpreter)
+                PObj_flag_CLEAR(private1, info);
+
             pmc = Parrot_pmc_new_noinit(interp, type);
             VTABLE_thaw(interp, pmc, info);
 
-            {
-                PMC * const todo    = PARROT_IMAGEIO(info)->todo;
-                VTABLE_set_pmc_keyed_int(interp, todo, id - 1, pmc);
-            }
+            VTABLE_set_pmc_keyed_int(interp, todo, id - 1, pmc);
         }
         break;
       default:
@@ -168,8 +287,10 @@
 }
 
 static void
-visit_todo_list_freeze(PARROT_INTERP, PMC* pmc, PMC* info)
+visit_todo_list_freeze(PARROT_INTERP, ARGIN_NULLOK(PMC* pmc), ARGMOD(PMC* info))
 {
+    ASSERT_ARGS(visit_todo_list_freeze)
+
     UINTVAL id;
     int packid_type;
 
@@ -180,14 +301,14 @@
         packid_type = enum_PackID_seen;
     }
     else {
-        Hash *hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIO(info)->seen);
+        Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIO(info)->seen);
         HashBucket * const b = parrot_hash_get_bucket(interp, hash, pmc);
         if (b) {
             id = (UINTVAL) b->value;
             packid_type = enum_PackID_seen;
         }
         else {
-            PARROT_IMAGEIO(info)->id++; /* next id to freeze */
+            ++PARROT_IMAGEIO(info)->id; /* next id to freeze */
             id = PARROT_IMAGEIO(info)->id;
             packid_type = enum_PackID_normal;
         }
@@ -196,10 +317,17 @@
     VTABLE_push_integer(interp, info, PackID_new(id, packid_type));
 
     if (packid_type == enum_PackID_normal) {
-        Hash *hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIO(info)->seen);
+        Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIO(info)->seen);
+
         PARROT_ASSERT(pmc);
+
+        /* workaround to keep ParrotInterpreter PBC hack working */
+        if (pmc->vtable->base_type == enum_class_ParrotInterpreter)
+            PObj_flag_CLEAR(private1, info);
+
         VTABLE_push_integer(interp, info,
-                PObj_is_object_TEST(pmc) ? enum_class_Object : pmc->vtable->base_type);
+                PObj_is_object_TEST(pmc) ? (INTVAL) enum_class_Object : pmc->vtable->base_type);
+
         parrot_hash_put(interp, hash, pmc, (void *)id);
         VTABLE_push_pmc(interp, PARROT_IMAGEIO(info)->todo, pmc);
         VTABLE_freeze(interp, pmc, info);
@@ -207,14 +335,15 @@
 }
 
 pmclass ImageIO auto_attrs {
-    ATTR Buffer          *buffer;         /* buffer to store the image */
-    ATTR size_t           pos;            /* current read/write position in buffer */
-    ATTR size_t           input_length;
-    ATTR INTVAL           what;
-    ATTR PMC             *seen;           /* seen hash */
-    ATTR PMC             *todo;           /* todo list */
-    ATTR UINTVAL          id;             /* freze ID of PMC */
-    ATTR struct PackFile *pf;
+    ATTR Buffer              *buffer;      /* buffer to store the image */
+    ATTR size_t               pos;         /* current read/write position in buffer */
+    ATTR size_t               input_length;
+    ATTR INTVAL               what;
+    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;
 
 /*
 
@@ -236,11 +365,35 @@
 
 */
     VTABLE void init() {
-        PARROT_IMAGEIO(SELF)->buffer      = NULL;
-        PARROT_IMAGEIO(SELF)->todo        = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
-        PARROT_IMAGEIO(SELF)->seen        = PMCNULL;
-        PARROT_IMAGEIO(SELF)->id          = 0;
-        PARROT_IMAGEIO(SELF)->pf          = PackFile_new(INTERP, 0);
+        PARROT_IMAGEIO(SELF)->buffer = NULL;
+        PARROT_IMAGEIO(SELF)->todo   = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        PARROT_IMAGEIO(SELF)->seen   = PMCNULL;
+        PARROT_IMAGEIO(SELF)->id     = 0;
+        PARROT_IMAGEIO(SELF)->pf     = PackFile_new(INTERP, 0);
+
+        PObj_flag_CLEAR(private1, SELF);
+
+        PObj_custom_mark_destroy_SETALL(SELF);
+    }
+
+/*
+
+=item C<void init_pmc(PMC *pmc)>
+
+Initializes the PMC with a pre-existing C<PackFile_ConstTable>.
+
+=cut
+
+*/
+    VTABLE void init_pmc(PMC *pmc) {
+        PARROT_IMAGEIO(SELF)->buffer = NULL;
+        PARROT_IMAGEIO(SELF)->todo   = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        PARROT_IMAGEIO(SELF)->seen   = PMCNULL;
+        PARROT_IMAGEIO(SELF)->id     = 0;
+        PARROT_IMAGEIO(SELF)->pf     = PackFile_new(INTERP, 0);
+
+        PARROT_IMAGEIO(SELF)->pf_ct  = (PackFile_ConstTable *)VTABLE_get_pointer(INTERP, pmc);
+        PObj_flag_SET(private1, SELF);
 
         PObj_custom_mark_destroy_SETALL(SELF);
     }
@@ -257,6 +410,7 @@
 */
     VTABLE void destroy() {
         PackFile_destroy(INTERP, PARROT_IMAGEIO(SELF)->pf);
+        PARROT_IMAGEIO(SELF)->pf = NULL;
     }
 
 /*
@@ -345,8 +499,8 @@
 */
 
     VTABLE void push_integer(INTVAL v) {
-        size_t len = PF_size_integer() * sizeof (opcode_t);
-        ensure_buffer_size(interp, SELF, len);
+        const size_t len = PF_size_integer() * sizeof (opcode_t);
+        ensure_buffer_size(INTERP, SELF, len);
         SET_VISIT_CURSOR(SELF, (char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
     }
 
@@ -364,7 +518,7 @@
     VTABLE void push_float(FLOATVAL v)
     {
         size_t len = PF_size_number() * sizeof (opcode_t);
-        ensure_buffer_size(interp, SELF, len);
+        ensure_buffer_size(INTERP, SELF, len);
         SET_VISIT_CURSOR(SELF, (char *)PF_store_number(GET_VISIT_CURSOR(SELF), &v));
     }
 
@@ -379,11 +533,42 @@
 
 */
 
-    VTABLE void push_string(STRING *v)
-    {
-        size_t len = PF_size_string(v) * sizeof (opcode_t);
-        ensure_buffer_size(INTERP, SELF, len);
-        SET_VISIT_CURSOR(SELF, (char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
+    VTABLE void push_string(STRING *v) {
+        if (PObj_flag_TEST(private1, SELF)) {
+            /* store a reference to constant table entry of string */
+            int i;
+            PackFile_ConstTable *table = PARROT_IMAGEIO(SELF)->pf_ct;
+            for (i = 0; i < table->const_count; i++) {
+                PackFile_Constant *constant = table->constants[i];
+                if (constant->type == PFC_STRING) {
+                    STRING * const sc = constant->u.string;
+                    if (Parrot_str_equal(INTERP, v, sc)
+                    && Parrot_charset_number_of_str(INTERP, v)
+                    ==  Parrot_charset_number_of_str(INTERP, sc)
+                    &&  Parrot_encoding_number_of_str(INTERP, v)
+                    ==  Parrot_encoding_number_of_str(INTERP, sc))
+                    {
+                        STATICSELF.push_integer(i);
+                        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, (char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
+        }
     }
 
 /*
@@ -413,8 +598,9 @@
 
     VTABLE INTVAL shift_integer()
     {
-        opcode_t *pos  = GET_VISIT_CURSOR(SELF);
-        const INTVAL i = PF_fetch_integer(PARROT_IMAGEIO(SELF)->pf, (const opcode_t **)&pos);
+        opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        INTVAL    i   = PF_fetch_integer(PARROT_IMAGEIO(SELF)->pf,
+                (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return i;
@@ -432,8 +618,9 @@
 */
 
     VTABLE FLOATVAL shift_float() {
-        opcode_t *pos    = GET_VISIT_CURSOR(SELF);
-        const FLOATVAL f = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf, (const opcode_t **)&pos);
+        opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        FLOATVAL  f   = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf,
+                (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return f;
@@ -450,14 +637,28 @@
 
 */
 
-    VTABLE STRING *shift_string()
-    {
-        opcode_t *pos    = GET_VISIT_CURSOR(SELF);
-        STRING * const s = PF_fetch_string(interp, PARROT_IMAGEIO(SELF)->pf,
-                                           (const opcode_t **)&pos);
-        SET_VISIT_CURSOR(SELF, (char *)pos);
-        BYTECODE_SHIFT_OK(SELF);
-        return s;
+    VTABLE STRING *shift_string() {
+        if (PObj_flag_TEST(private1, SELF)) {
+            PackFile_ConstTable *table = PARROT_IMAGEIO(SELF)->pf_ct;
+            INTVAL i                   = STATICSELF.shift_integer();
+
+            if (i >= 0)
+                return table->constants[i]->u.string;
+
+            /* XXX
+             * only got here because constant table doesn't contain the string
+             * fallback on inline strings
+             */
+        }
+
+        {
+            opcode_t *pos = GET_VISIT_CURSOR(SELF);
+            STRING   *s   = PF_fetch_string(INTERP, PARROT_IMAGEIO(SELF)->pf,
+                                               (const opcode_t **)&pos);
+            SET_VISIT_CURSOR(SELF, (char *)pos);
+            BYTECODE_SHIFT_OK(SELF);
+            return s;
+        }
     }
 
 /*
@@ -476,7 +677,7 @@
 
     VTABLE void set_pmc(PMC *p)
     {
-        UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+        const UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
 
         PARROT_IMAGEIO(SELF)->what = VISIT_FREEZE_NORMAL;
         create_buffer(INTERP, p, SELF);
@@ -494,11 +695,12 @@
     }
 
     VTABLE void set_string_native(STRING *image) {
-        UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+        PMC          *unused;
+        const UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
         int unpacked_length;
 
-        PARROT_IMAGEIO(SELF)->what          = VISIT_THAW_NORMAL;
-        PARROT_IMAGEIO(SELF)->buffer        = (Buffer *)image;
+        PARROT_IMAGEIO(SELF)->what   = VISIT_THAW_NORMAL;
+        PARROT_IMAGEIO(SELF)->buffer = (Buffer *)image;
 
         PARROT_ASSERT(image->_bufstart == image->strstart);
 
@@ -506,19 +708,17 @@
         PARROT_IMAGEIO(SELF)->input_length = image->strlen;
 
         PARROT_IMAGEIO(SELF)->pf->options |= PFOPT_PMC_FREEZE_ONLY;
-        unpacked_length = PackFile_unpack(interp, PARROT_IMAGEIO(SELF)->pf,
+        unpacked_length = PackFile_unpack(INTERP, PARROT_IMAGEIO(SELF)->pf,
             GET_VISIT_CURSOR(SELF), PARROT_IMAGEIO(SELF)->input_length);
 
-        if (!unpacked_length) {
-            Parrot_ex_throw_from_c_args(interp, NULL,
+        if (unpacked_length)
+            INC_VISIT_CURSOR(SELF, header_length);
+        else
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                     EXCEPTION_INVALID_STRING_REPRESENTATION,
                     "PackFile header failed during unpack");
-        }
-        else {
-            INC_VISIT_CURSOR(SELF, header_length);
-        }
 
-        visit_todo_list_thaw(INTERP, SELF);
+        unused = visit_todo_list_thaw(INTERP, SELF);
         Parrot_visit_loop_visit(INTERP, SELF);
 
         /* we're done reading the image */

Modified: branches/ops_pct/src/pmc/imageiosize.pmc
==============================================================================
--- branches/ops_pct/src/pmc/imageiosize.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/imageiosize.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -16,12 +16,32 @@
 
 #define GROW_TO_16_BYTE_BOUNDARY(size) ((size) + ((size) % 16 ? 16 - (size) % 16 : 0))
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void visit_todo_list_freeze(PARROT_INTERP,
+    ARGIN(PMC* pmc),
+    ARGMOD(PMC* info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(* info);
+
+#define ASSERT_ARGS_visit_todo_list_freeze __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(info))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 static void
-visit_todo_list_freeze(PARROT_INTERP, PMC* pmc, PMC* info) {
+visit_todo_list_freeze(PARROT_INTERP, ARGIN(PMC* pmc), ARGMOD(PMC* info))
+{
     int is_new = 0;
 
     if (!PMC_IS_NULL(pmc)) {
-        Hash *hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIOSIZE(info)->seen);
+        Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIOSIZE(info)->seen);
         HashBucket * const b = parrot_hash_get_bucket(interp, hash, pmc);
         is_new = !b;
     }
@@ -29,8 +49,14 @@
     VTABLE_push_integer(interp, info, 0);
 
     if (is_new) {
-        Hash *hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIOSIZE(info)->seen);
+        Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIOSIZE(info)->seen);
+
         parrot_hash_put(interp, hash, pmc, pmc);
+
+        /* workaround to keep ParrotInterpreter PBC hack working */
+        if (pmc->vtable->base_type == enum_class_ParrotInterpreter)
+            PObj_flag_CLEAR(private1, info);
+
         VTABLE_push_integer(interp, info, pmc->vtable->base_type);
         VTABLE_push_pmc(interp, PARROT_IMAGEIOSIZE(info)->todo, pmc);
         VTABLE_freeze(interp, pmc, info);
@@ -38,10 +64,11 @@
 }
 
 pmclass ImageIOSize auto_attrs {
-    ATTR PMC             *seen;           /* seen hash */
-    ATTR PMC             *todo;           /* todo list */
-    ATTR struct PackFile *pf;
-    ATTR INTVAL           size;
+    ATTR PMC                        *seen; /* seen hash */
+    ATTR PMC                        *todo; /* todo list */
+    ATTR struct PackFile            *pf;
+    ATTR struct PackFile_ConstTable *pf_ct;
+    ATTR INTVAL                      size;
 
 /*
 
@@ -63,14 +90,42 @@
 
 */
     VTABLE void init() {
-        PARROT_IMAGEIOSIZE(SELF)->todo = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
-        PARROT_IMAGEIOSIZE(SELF)->pf   = PackFile_new(INTERP, 0);
-        PARROT_IMAGEIOSIZE(SELF)->size = 0;
+        PARROT_IMAGEIOSIZE(SELF)->todo  = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        PARROT_IMAGEIOSIZE(SELF)->pf    = PackFile_new(INTERP, 0);
+        PARROT_IMAGEIOSIZE(SELF)->pf_ct = NULL;
+        PARROT_IMAGEIOSIZE(SELF)->size  = 0;
 
         PARROT_IMAGEIOSIZE(SELF)->seen = Parrot_pmc_new(INTERP, enum_class_Hash);
         VTABLE_set_pointer(INTERP, PARROT_IMAGEIOSIZE(SELF)->seen,
             parrot_new_intval_hash(INTERP));
 
+        PObj_flag_CLEAR(private1, SELF);
+
+        PObj_custom_mark_destroy_SETALL(SELF);
+    }
+
+/*
+
+=item C<void init_pmc()>
+
+Initializes the PMC with a pre-existing C<PackFile_ConstTable>.
+
+=cut
+
+*/
+    VTABLE void init_pmc(PMC *pf_ct) {
+        PARROT_IMAGEIOSIZE(SELF)->todo  = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        PARROT_IMAGEIOSIZE(SELF)->pf    = PackFile_new(INTERP, 0);
+        PARROT_IMAGEIOSIZE(SELF)->pf_ct =
+            (PackFile_ConstTable *)VTABLE_get_pointer(INTERP, pf_ct);
+        PARROT_IMAGEIOSIZE(SELF)->size  = 0;
+
+        PARROT_IMAGEIOSIZE(SELF)->seen = Parrot_pmc_new(INTERP, enum_class_Hash);
+        VTABLE_set_pointer(INTERP, PARROT_IMAGEIOSIZE(SELF)->seen,
+            parrot_new_intval_hash(INTERP));
+
+        PObj_flag_SET(private1, SELF);
+
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
@@ -113,8 +168,8 @@
 */
 
     VTABLE PMC *get_pmc() {
-        PMC *ret = Parrot_pmc_new(INTERP, enum_class_Integer);
-        VTABLE_set_integer_native(INTERP, ret, PARROT_IMAGEIOSIZE(SELF)->size);
+        PMC * const ret = Parrot_pmc_new_init_int(INTERP, enum_class_Integer,
+                PARROT_IMAGEIOSIZE(SELF)->size);
         return ret;
     }
 
@@ -157,7 +212,7 @@
 */
 
     VTABLE void push_integer(INTVAL v) {
-        size_t len = PF_size_integer() * sizeof (opcode_t);
+        const size_t len = PF_size_integer() * sizeof (opcode_t);
         PARROT_IMAGEIOSIZE(SELF)->size += len;
     }
 
@@ -174,7 +229,7 @@
 
     VTABLE void push_float(FLOATVAL v)
     {
-        size_t len = PF_size_number() * sizeof (opcode_t);
+        const size_t len = PF_size_number() * sizeof (opcode_t);
         PARROT_IMAGEIOSIZE(SELF)->size += len;
     }
 
@@ -189,10 +244,40 @@
 
 */
 
-    VTABLE void push_string(STRING *v)
-    {
-        size_t len = PF_size_string(v) * sizeof (opcode_t);
-        PARROT_IMAGEIOSIZE(SELF)->size += len;
+    VTABLE void push_string(STRING *v) {
+        if (PObj_flag_TEST(private1, SELF)) {
+            /* look for a reference to constant table entry of string */
+            int i;
+            PackFile_ConstTable *table = PARROT_IMAGEIOSIZE(SELF)->pf_ct;
+            for (i = 0; i < table->const_count; i++) {
+                PackFile_Constant *constant = table->constants[i];
+                if (constant->type == PFC_STRING) {
+                    STRING * const sc = constant->u.string;
+                    if (Parrot_str_equal(INTERP, v, sc)
+                    &&  Parrot_charset_number_of_str(INTERP, v)
+                    ==  Parrot_charset_number_of_str(INTERP, sc)
+                    &&  Parrot_encoding_number_of_str(INTERP, v)
+                    ==  Parrot_encoding_number_of_str(INTERP, sc)) {
+                        STATICSELF.push_integer(i);
+                        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);
+            PARROT_IMAGEIOSIZE(SELF)->size += len;
+        }
     }
 
 /*

Copied: branches/ops_pct/src/pmc/imageiostrings.pmc (from r46301, trunk/src/pmc/imageiostrings.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/pmc/imageiostrings.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/pmc/imageiostrings.pmc)
@@ -0,0 +1,199 @@
+/*
+Copyright (C) 2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/imageiosize.pmc - ImageIOStrings PMC
+
+=head1 DESCRIPTION
+
+Get a list of strings in an object graph. Used in packfile creation.
+
+=cut
+
+*/
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+pmclass ImageIOStrings auto_attrs {
+    ATTR PMC *seen; /* seen hash */
+    ATTR PMC *todo; /* todo list */
+    ATTR PMC *list; /* list of strings seen */
+
+/*
+
+=head1 VTABLES
+
+=over 4
+
+=cut
+
+*/
+
+/*
+
+=item C<void init()>
+
+Initializes the PMC.
+
+=cut
+
+*/
+    VTABLE void init() {
+        PARROT_IMAGEIOSTRINGS(SELF)->todo = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+
+        PARROT_IMAGEIOSTRINGS(SELF)->seen = Parrot_pmc_new(INTERP, enum_class_Hash);
+        VTABLE_set_pointer(INTERP, PARROT_IMAGEIOSTRINGS(SELF)->seen,
+            parrot_new_intval_hash(INTERP));
+
+        PARROT_IMAGEIOSTRINGS(SELF)->list = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
+    }
+
+/*
+
+=item C<void mark()>
+
+Marks the PMC as alive.
+
+=cut
+
+*/
+    VTABLE void mark() {
+        Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIOSTRINGS(SELF)->todo);
+        Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIOSTRINGS(SELF)->seen);
+        Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIOSTRINGS(SELF)->list);
+    }
+
+/*
+
+=item C<VTABLE PMC *get_pmc()>
+
+Gets the result PMC after a thaw.
+
+=cut
+
+*/
+
+    VTABLE PMC *get_pmc() {
+        return PARROT_IMAGEIOSTRINGS(SELF)->list;
+    }
+
+/*
+
+=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_IMAGEIOSTRINGS(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)>
+
+Do nothing.
+
+=cut
+
+*/
+
+    VTABLE void push_integer(INTVAL v) { }
+
+
+/*
+
+=item C<VTABLE void push_float(FLOATVAL v)>
+
+Do nothing.
+
+=cut
+
+*/
+
+    VTABLE void push_float(FLOATVAL v) { }
+
+
+/*
+
+=item C<VTABLE void push_string(STRING *v)>
+
+Adds the string to the list of strings.
+
+=cut
+
+*/
+
+    VTABLE void push_string(STRING *v)
+    {
+        VTABLE_push_string(INTERP, PARROT_IMAGEIOSTRINGS(SELF)->list, v);
+    }
+
+/*
+
+=item C<VTABLE void push_pmc(PMC *v)>
+
+Checks new pmcs for strings.
+
+=cut
+
+*/
+
+    VTABLE void push_pmc(PMC *v) {
+        if (!PMC_IS_NULL(v)) {
+            Hash * const hash    = (Hash *)VTABLE_get_pointer(INTERP,
+                                                PARROT_IMAGEIOSTRINGS(SELF)->seen);
+            HashBucket * const b = parrot_hash_get_bucket(INTERP, hash, v);
+            if (!b) {
+                /* not yet seen */
+                parrot_hash_put(INTERP, hash, v, v);
+                VTABLE_push_pmc(INTERP, PARROT_IMAGEIOSTRINGS(SELF)->todo, v);
+                VTABLE_freeze(INTERP, v, SELF);
+            }
+        }
+    }
+
+    VTABLE void set_pmc(PMC *p)
+    {
+        STATICSELF.push_pmc(p);
+        Parrot_visit_loop_visit(INTERP, SELF);
+    }
+
+/*
+
+=back
+
+=cut
+
+*/
+
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/src/pmc/integer.pmc
==============================================================================
--- branches/ops_pct/src/pmc/integer.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/integer.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2003-2008, Parrot Foundation.
+Copyright (C) 2003-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -21,9 +21,33 @@
 
 #include "pmc/pmc_bigint.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void maybe_throw_overflow_error(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+static PMC* upgrade_self_to_bignum(PARROT_INTERP, ARGMOD(PMC *self))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*self);
+
+#define ASSERT_ARGS_maybe_throw_overflow_error __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_upgrade_self_to_bignum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 static void
 maybe_throw_overflow_error(PARROT_INTERP)
 {
+    ASSERT_ARGS(maybe_throw_overflow_error)
+
     /* check to see what the behavior is. If the interpreter is set
        to throw an exception on overflow. If so, throw the exception,
        otherwise, chill out it's no big deal. */
@@ -32,9 +56,13 @@
             "Integer overflow");
 }
 
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
 static PMC*
-upgrade_self_to_bignum(PARROT_INTERP, PMC *self)
+upgrade_self_to_bignum(PARROT_INTERP, ARGMOD(PMC *self))
 {
+    ASSERT_ARGS(upgrade_self_to_bignum)
+
     /* Do an in-place upgrade to a Bignum of SELF and return a pointer
        to it (which is probably redundant, but whatever). */
     const INTVAL a = VTABLE_get_integer(interp, self);
@@ -74,6 +102,13 @@
         attrs->iv      = VTABLE_get_integer(INTERP, init);
     }
 
+    VTABLE void init_int(INTVAL init) {
+        Parrot_Integer_attributes * const attrs =
+            (Parrot_Integer_attributes *)PMC_data(SELF);
+
+        attrs->iv = init;
+    }
+
 /*
 
 =item C<PMC *clone()>
@@ -265,7 +300,7 @@
         const INTVAL c = a + b;
 
         if ((c^a) >= 0 || (c^b) >= 0) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(interp, SELF));
+            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
             /* need this for e.g. Undef PMC */
             VTABLE_set_integer_native(INTERP, dest, c);
@@ -273,10 +308,10 @@
         }
         else {
             PMC * temp;
-            maybe_throw_overflow_error(interp);
-            temp = Parrot_pmc_new(interp, enum_class_BigInt);
-            VTABLE_set_integer_native(interp, temp, a);
-            return VTABLE_add(interp, temp, value, dest);
+            maybe_throw_overflow_error(INTERP);
+            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+            VTABLE_set_integer_native(INTERP, temp, a);
+            return VTABLE_add(INTERP, temp, value, dest);
         }
     }
 
@@ -296,15 +331,15 @@
 
     MULTI PMC *add(BigInt value, PMC *dest) {
         PMC *temp;
-        maybe_throw_overflow_error(interp);
-        temp = Parrot_pmc_new(interp, enum_class_BigInt);
-        VTABLE_set_integer_native(interp, temp, SELF.get_integer());
-        return VTABLE_add(interp, temp, value, dest);
+        maybe_throw_overflow_error(INTERP);
+        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        return VTABLE_add(INTERP, temp, value, dest);
     }
 
 
     MULTI PMC *add(DEFAULT value, PMC *dest) {
-        dest = Parrot_pmc_new(INTERP, VTABLE_type(interp, value));
+        dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, value));
 
         VTABLE_set_number_native(INTERP, dest,
                 SELF.get_integer() + VTABLE_get_number(INTERP, value));
@@ -324,10 +359,10 @@
         }
         else {
             PMC *temp;
-            maybe_throw_overflow_error(interp);
-            temp = Parrot_pmc_new(interp, enum_class_BigInt);
-            VTABLE_set_integer_native(interp, temp, a);
-            return VTABLE_add_int(interp, temp, b, dest);
+            maybe_throw_overflow_error(INTERP);
+            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+            VTABLE_set_integer_native(INTERP, temp, a);
+            return VTABLE_add_int(INTERP, temp, b, dest);
         }
     }
 
@@ -353,6 +388,7 @@
 
     MULTI void i_add(Complex value) {
         const INTVAL a = SELF.get_integer();
+        UNUSED(a);
 
         Parrot_pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
         VTABLE_set_number_native(INTERP, SELF,
@@ -373,10 +409,9 @@
         if ((c^a) >= 0 || (c^b) >= 0)
             VTABLE_set_integer_native(INTERP, SELF, c);
         else {
-            PMC *temp;
-            maybe_throw_overflow_error(interp);
-            SELF = upgrade_self_to_bignum(interp, SELF);
-            VTABLE_i_add_int(interp, SELF, b);
+            maybe_throw_overflow_error(INTERP);
+            SELF = upgrade_self_to_bignum(INTERP, SELF);
+            VTABLE_i_add_int(INTERP, SELF, b);
         }
     }
 
@@ -414,10 +449,10 @@
         }
         else {
             PMC *temp;
-            maybe_throw_overflow_error(interp);
-            temp = Parrot_pmc_new(interp, enum_class_BigInt);
-            VTABLE_set_integer_native(interp, temp, a);
-            return VTABLE_subtract(interp, temp, value, dest);
+            maybe_throw_overflow_error(INTERP);
+            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+            VTABLE_set_integer_native(INTERP, temp, a);
+            return VTABLE_subtract(INTERP, temp, value, dest);
         }
     }
 
@@ -437,10 +472,10 @@
 
     MULTI PMC *subtract(BigInt value, PMC *dest) {
         PMC *temp;
-        maybe_throw_overflow_error(interp);
-        temp = Parrot_pmc_new(interp, enum_class_BigInt);
-        VTABLE_set_integer_native(interp, temp, SELF.get_integer());
-        return VTABLE_subtract(interp, temp, value, dest);
+        maybe_throw_overflow_error(INTERP);
+        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
+        return VTABLE_subtract(INTERP, temp, value, dest);
     }
 
 
@@ -475,10 +510,10 @@
         }
         else {
             PMC *temp;
-            maybe_throw_overflow_error(interp);
-            temp = Parrot_pmc_new(interp, enum_class_BigInt);
-            VTABLE_set_integer_native(interp, temp, a);
-            return VTABLE_subtract_int(interp, temp, b, dest);
+            maybe_throw_overflow_error(INTERP);
+            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+            VTABLE_set_integer_native(INTERP, temp, a);
+            return VTABLE_subtract_int(INTERP, temp, b, dest);
         }
     }
 
@@ -505,9 +540,9 @@
         if ((c^a) >= 0 || (c^~b) >= 0)
             VTABLE_set_integer_native(INTERP, SELF, c);
         else {
-            maybe_throw_overflow_error(interp);
-            SELF = upgrade_self_to_bignum(interp, SELF);
-            VTABLE_i_subtract(interp, SELF, value);
+            maybe_throw_overflow_error(INTERP);
+            SELF = upgrade_self_to_bignum(INTERP, SELF);
+            VTABLE_i_subtract(INTERP, SELF, value);
         }
     }
 
@@ -568,7 +603,7 @@
         const double cf = (double)a * (double)b;
 
         if ((double) c == cf) {
-            dest = Parrot_pmc_new(INTERP, VTABLE_type(interp, SELF));
+            dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
             VTABLE_set_integer_native(INTERP, dest, c);
             return dest;
@@ -576,8 +611,8 @@
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(interp, enum_class_BigInt);
-            VTABLE_set_integer_native(interp, temp, a);
+            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+            VTABLE_set_integer_native(INTERP, temp, a);
             return VTABLE_multiply(INTERP, temp, value, dest);
         }
     }
@@ -621,8 +656,8 @@
         else {
             PMC *temp;
             maybe_throw_overflow_error(INTERP);
-            temp = Parrot_pmc_new(interp, enum_class_BigInt);
-            VTABLE_set_integer_native(interp, temp, a);
+            temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+            VTABLE_set_integer_native(INTERP, temp, a);
             return VTABLE_multiply_int(INTERP, temp, b, dest);
         }
     }
@@ -647,7 +682,7 @@
 
 
     MULTI void i_multiply(BigInt value) {
-        interp->vtables[enum_class_BigInt]->multiply_int(INTERP, value, SELF.get_integer(), SELF);
+        INTERP->vtables[enum_class_BigInt]->multiply_int(INTERP, value, SELF.get_integer(), SELF);
     }
 
 
@@ -708,8 +743,8 @@
     MULTI PMC *divide(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(interp, enum_class_BigInt);
-        VTABLE_set_integer_native(interp, temp, SELF.get_integer());
+        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
         return VTABLE_divide(INTERP, temp, value, dest);
     }
 
@@ -769,8 +804,8 @@
     MULTI PMC *floor_divide(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(interp, enum_class_BigInt);
-        VTABLE_set_integer_native(interp, temp, SELF.get_integer());
+        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
         return VTABLE_floor_divide(INTERP, temp, value, dest);
     }
 
@@ -854,7 +889,6 @@
 
     VTABLE void i_floor_divide_float(FLOATVAL value) {
         FLOATVAL f;
-        INTVAL   self_val;
 
         if (FLOAT_IS_ZERO(value))
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,
@@ -892,8 +926,8 @@
     MULTI PMC *modulus(BigInt value, PMC *dest) {
         PMC *temp;
         maybe_throw_overflow_error(INTERP);
-        temp = Parrot_pmc_new(interp, enum_class_BigInt);
-        VTABLE_set_integer_native(interp, temp, SELF.get_integer());
+        temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
+        VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
         return VTABLE_modulus(INTERP, temp, value, dest);
     }
 
@@ -995,7 +1029,7 @@
           case enum_class_BigInt:
             temp = Parrot_pmc_new(INTERP, enum_class_BigInt);
             VTABLE_set_integer_native(INTERP, temp, SELF.get_integer());
-            Parrot_mmd_multi_dispatch_from_c_args(interp,
+            Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                     "is_equal", "PP->I", temp, value, &retval);
             return retval;
             break;
@@ -1032,7 +1066,7 @@
 
     MULTI INTVAL cmp(Float value) {
         INTVAL iv;
-        GET_ATTR_iv(interp, SELF, iv);
+        GET_ATTR_iv(INTERP, SELF, iv);
 
         {
             const FLOATVAL diff = (FLOATVAL)iv - VTABLE_get_number(INTERP, value);
@@ -1044,7 +1078,7 @@
     MULTI INTVAL cmp(DEFAULT value) {
         /* int or undef */
         INTVAL selfint;
-        GET_ATTR_iv(interp, SELF, selfint);
+        GET_ATTR_iv(INTERP, SELF, selfint);
         {
             const INTVAL valueint = VTABLE_get_integer(INTERP, value);
             return selfint > valueint ? 1 : selfint < valueint ? -1 : 0;
@@ -1100,16 +1134,16 @@
 
     VTABLE void increment() {
         INTVAL a, c;
-        GET_ATTR_iv(interp, SELF, a);
+        GET_ATTR_iv(INTERP, SELF, a);
         c = a + 1;
 
         /* did not overflow */
         if ((c^a) >= 0 || (c^1) >= 0)
-            SET_ATTR_iv(interp, SELF, c);
+            SET_ATTR_iv(INTERP, SELF, c);
         else {
-            Parrot_pmc_reuse(interp, SELF, enum_class_BigInt, 0);
-            VTABLE_set_integer_native(interp, SELF, a);
-            VTABLE_increment(interp, SELF);
+            Parrot_pmc_reuse(INTERP, SELF, enum_class_BigInt, 0);
+            VTABLE_set_integer_native(INTERP, SELF, a);
+            VTABLE_increment(INTERP, SELF);
         }
     }
 
@@ -1129,11 +1163,11 @@
         const INTVAL c = a - 1;
 
         if ((c^a) >= 0 || (c^~1) >= 0)
-            VTABLE_set_integer_native(interp, SELF, c);
+            VTABLE_set_integer_native(INTERP, SELF, c);
         else {
             Parrot_pmc_reuse(INTERP, SELF, enum_class_BigInt, 0);
-            VTABLE_set_integer_native(interp, SELF, a);
-            VTABLE_decrement(interp, SELF);
+            VTABLE_set_integer_native(INTERP, SELF, a);
+            VTABLE_decrement(INTERP, SELF);
         }
     }
 
@@ -1184,10 +1218,10 @@
         STRING *result;
 
         if ((base < 2) || (base > 36))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "get_as_base: base out of bounds");
 
-        result = Parrot_str_from_int_base(interp, buf,
+        result = Parrot_str_from_int_base(INTERP, buf,
                 (HUGEINTVAL)VTABLE_get_integer(INTERP, SELF),
                 (unsigned int)base);
 

Modified: branches/ops_pct/src/pmc/iterator.pmc
==============================================================================
--- branches/ops_pct/src/pmc/iterator.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/iterator.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -57,6 +57,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Iterator no_ro {
 
 /*

Modified: branches/ops_pct/src/pmc/key.pmc
==============================================================================
--- branches/ops_pct/src/pmc/key.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/key.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -18,6 +18,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Key auto_attrs {
     ATTR PMC      *next_key; /* Sometimes it's the next key, sometimes it's
                                 not.  The Key code is like that. */
@@ -70,8 +74,7 @@
                 break;
               case KEY_string_FLAG:
               case KEY_string_FLAG | KEY_register_FLAG:
-                key_set_string(INTERP, dkey,
-                        Parrot_str_copy(INTERP, VTABLE_get_string(INTERP, key)));
+                key_set_string(INTERP, dkey, VTABLE_get_string(INTERP, key));
                 break;
               case KEY_pmc_FLAG:
               case KEY_pmc_FLAG | KEY_register_FLAG:
@@ -153,7 +156,7 @@
         if (PObj_get_FLAGS(SELF) & KEY_type_FLAGS)
             return key_string(INTERP, SELF);
 
-        return string_from_literal(INTERP, "");
+        return CONST_STRING(INTERP, "");
     }
 
 /*
@@ -235,7 +238,7 @@
 
     void push_pmc(PMC *value) {
         if (value->vtable->base_type != enum_class_Key)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Can only push another Key onto a Key PMC.");
 
         key_append(INTERP, SELF, value);

Modified: branches/ops_pct/src/pmc/lexinfo.pmc
==============================================================================
--- branches/ops_pct/src/pmc/lexinfo.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/lexinfo.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2008-2009, Parrot Foundation.
+Copyright (C) 2008-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -20,6 +20,10 @@
 
 #include "pmc/pmc_hash.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 /*
  * LexInfo contains a constant Hash with constant string
  * keys and integer indices
@@ -47,7 +51,7 @@
     void class_init() {
 
         /* there is no pmclass const_pmc flag yet */
-        interp->vtables[entry]->flags |= VTABLE_IS_CONST_PMC_FLAG;
+        INTERP->vtables[entry]->flags |= VTABLE_IS_CONST_PMC_FLAG;
 
     }
 
@@ -57,13 +61,11 @@
     }
 
     VTABLE void init_pmc(PMC *sub) {
-        Parrot_LexInfo_attributes *attrs =
-            (Parrot_LexInfo_attributes *) PMC_data(SELF);
-
         PARROT_ASSERT(PObj_constant_TEST(SELF));
 
         /* Set value type to INTVAL */
-        Parrot_pcc_invoke_method_from_c_args(interp, SELF, CONST_STRING(INTERP, "set_value_type"), "I->", (INTVAL)enum_type_INTVAL);
+        SELF.init_int((INTVAL)enum_type_INTVAL);
+        PObj_custom_mark_destroy_SETALL(SELF);
     }
 
 /*
@@ -94,10 +96,11 @@
 */
 
     VTABLE PMC *inspect_str(STRING *what) {
-        if (Parrot_str_equal(interp, what, CONST_STRING(interp, "symbols"))) {
-            PMC *result     = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-            Hash *hash      = (Hash *)SELF.get_pointer();
-            UINTVAL entries = hash->entries;
+        if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "symbols"))) {
+            PMC * const result    = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
+            const Hash *hash      = (Hash *)SELF.get_pointer();
+            const UINTVAL entries = hash->entries;
+
             UINTVAL found   = 0;
             INTVAL  i;
 
@@ -105,12 +108,12 @@
                 HashBucket *bucket = hash->bi[i];
                 while (bucket) {
                     if (++found > entries)
-                        Parrot_ex_throw_from_c_args(interp, NULL, 1,
+                        Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                             "Detected corruption at LexInfo hash %p entries %d",
                             hash, (int)entries);
 
                     PARROT_ASSERT(bucket->key);
-                    VTABLE_push_string(interp, result, (STRING *)bucket->key);
+                    VTABLE_push_string(INTERP, result, (STRING *)bucket->key);
 
                     bucket = bucket->next;
                 }
@@ -119,7 +122,7 @@
             return result;
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", what);
     }
 

Modified: branches/ops_pct/src/pmc/lexpad.pmc
==============================================================================
--- branches/ops_pct/src/pmc/lexpad.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/lexpad.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -26,6 +26,10 @@
  * pmc_val    ... LexInfo
  */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass LexPad provides hash no_ro auto_attrs {
     ATTR PMC *lexinfo;
     ATTR PMC *ctx;

Modified: branches/ops_pct/src/pmc/managedstruct.pmc
==============================================================================
--- branches/ops_pct/src/pmc/managedstruct.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/managedstruct.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -22,6 +22,10 @@
 typedef void (*custom_free_func_t)(PARROT_INTERP, void *ptr, void *priv);
 typedef PMC * (*custom_clone_func_t)(PARROT_INTERP, PMC *ptr, void *priv);
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ManagedStruct extends UnManagedStruct auto_attrs {
     /* if custom_free_func and ptr (inherited from UnManagedStruct) are both set,
      * custom_free_func is called before the normal destroy() function does any
@@ -144,9 +148,9 @@
         PMC *dest;
         if (clone_func) {
             void *clone_data = PARROT_MANAGEDSTRUCT(SELF)->custom_clone_priv;
-            return clone_func(interp, SELF, clone_data);
+            return clone_func(INTERP, SELF, clone_data);
         }
-        dest = Parrot_pmc_new_init(interp, SELF->vtable->base_type,
+        dest = Parrot_pmc_new_init(INTERP, SELF->vtable->base_type,
             PARROT_MANAGEDSTRUCT(SELF)->init);
 
         if (PARROT_MANAGEDSTRUCT(SELF)->ptr)

Modified: branches/ops_pct/src/pmc/multisub.pmc
==============================================================================
--- branches/ops_pct/src/pmc/multisub.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/multisub.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -21,6 +21,10 @@
 
 #include "pmc/pmc_callcontext.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass MultiSub extends ResizablePMCArray auto_attrs provides array {
 
     VTABLE STRING * get_string() {
@@ -30,78 +34,78 @@
     }
 
     VTABLE void push_pmc(PMC *value) {
-        STRING * const _sub = CONST_STRING(interp, "Sub");
-        STRING * const _nci = CONST_STRING(interp, "NCI");
+        STRING * const _sub = CONST_STRING(INTERP, "Sub");
+        STRING * const _nci = CONST_STRING(INTERP, "NCI");
 
-        if (!VTABLE_isa(interp, value, _sub)
-        &&  !VTABLE_isa(interp, value, _nci))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        if (!VTABLE_isa(INTERP, value, _sub)
+        &&  !VTABLE_isa(INTERP, value, _nci))
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "attempt to push non Sub PMC");
 
         SUPER(value);
     }
 
     VTABLE void set_pmc_keyed_int(INTVAL key, PMC *value) {
-        STRING * const _sub = CONST_STRING(interp, "Sub");
-        if (!VTABLE_isa(interp, value, _sub))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        STRING * const _sub = CONST_STRING(INTERP, "Sub");
+        if (!VTABLE_isa(INTERP, value, _sub))
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "attempt to set non Sub PMC");
         SUPER(key, value);
     }
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "attempt to set non Sub PMC");
     }
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "attempt to set non Sub PMC");
     }
 
     VTABLE void set_number_keyed_int(INTVAL key, FLOATVAL value) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "attempt to set non Sub PMC");
     }
 
     VTABLE opcode_t *invoke(void *next) {
-        PMC * const sig_obj = CONTEXT(interp)->current_sig;
-        PMC * const func    = Parrot_mmd_sort_manhattan_by_sig_pmc(interp,
+        PMC * const sig_obj = CONTEXT(INTERP)->current_sig;
+        PMC * const func    = Parrot_mmd_sort_manhattan_by_sig_pmc(INTERP,
                 SELF, sig_obj);
 
         if (PMC_IS_NULL(func))
             Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                     "No applicable candidates found to dispatch to for '%Ss'",
-                    VTABLE_get_string(interp, SELF));
+                    VTABLE_get_string(INTERP, SELF));
         return VTABLE_invoke(INTERP, func, next);
     }
 
 
     /* I don't really know how to implement these if they need something
        special, so I'll sort the sub list and defer processing to the
-       ResizablePMCArray's VTABLE methods of the same names. Hopefully we
+       ResizablePMCArray's VTABLEs of the same names. Hopefully we
        don't need anything beyond that. */
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        PMC * const sig_obj = CONTEXT(interp)->current_sig;
-        PMC * const sub     = Parrot_mmd_sort_manhattan_by_sig_pmc(interp,
+        PMC * const sig_obj = CONTEXT(INTERP)->current_sig;
+        PMC * const sub     = Parrot_mmd_sort_manhattan_by_sig_pmc(INTERP,
                 SELF, sig_obj);
 
         if (PMC_IS_NULL(sub))
             Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                     "No applicable candidates found to dispatch to for '%Ss'",
-                    VTABLE_get_string(interp, SELF));
+                    VTABLE_get_string(INTERP, SELF));
         return SUPER(key);
     }
 
     VTABLE PMC *get_pmc_keyed_str(STRING *s) {
-        PMC * const sig_obj = CONTEXT(interp)->current_sig;
-        PMC * const sub     = Parrot_mmd_sort_manhattan_by_sig_pmc(interp,
+        PMC * const sig_obj = CONTEXT(INTERP)->current_sig;
+        PMC * const sub     = Parrot_mmd_sort_manhattan_by_sig_pmc(INTERP,
                 SELF, sig_obj);
 
         if (PMC_IS_NULL(sub))
             Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                     "No applicable candidates found to dispatch to for '%Ss'",
-                    VTABLE_get_string(interp, SELF));
+                    VTABLE_get_string(INTERP, SELF));
         return SUPER(s);
     }
 
@@ -111,8 +115,8 @@
        to this input argument list and return an iterator over that list. */
 
     METHOD get_iter(PMC *args) {
-        STRING * const _array  = CONST_STRING(interp, "Array");
-        STRING * const _string = CONST_STRING(interp, "String");
+        STRING * const _array  = CONST_STRING(INTERP, "Array");
+        STRING * const _string = CONST_STRING(INTERP, "String");
 
         if (VTABLE_isa(INTERP, args, _array)){
             /* TODO: What goes here? */
@@ -122,7 +126,7 @@
             /* TODO: What goes here? */
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "attempt to call get_iter method with invalid arg type.\n");
     }
 }

Modified: branches/ops_pct/src/pmc/namespace.pmc
==============================================================================
--- branches/ops_pct/src/pmc/namespace.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/namespace.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2005-2009, Parrot Foundation.
+Copyright (C) 2005-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -20,13 +20,90 @@
 
 #include "pmc/pmc_sub.h"
 
-static void add_to_class(
-        Interp *interp,
-        Parrot_NameSpace_attributes * const nsinfo,
-        PMC * const classobj,
-        STRING *key,
-        PMC *value)
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void add_multi_to_namespace(PARROT_INTERP,
+    ARGIN(PMC *SELF),
+    ARGIN(STRING *key),
+    ARGIN_NULLOK(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void add_nci_to_namespace(PARROT_INTERP,
+    ARGIN(PMC *SELF),
+    ARGIN(STRING *key),
+    ARGIN_NULLOK(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void add_to_class(PARROT_INTERP,
+    ARGMOD(Parrot_NameSpace_attributes *nsinfo),
+    ARGMOD_NULLOK(PMC *classobj),
+    ARGIN(STRING *key),
+    ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*nsinfo)
+        FUNC_MODIFIES(*classobj);
+
+PARROT_WARN_UNUSED_RESULT
+static int maybe_add_sub_to_namespace(PARROT_INTERP,
+    ARGIN(PMC *SELF),
+    ARGIN(STRING *key),
+    ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+PARROT_WARN_UNUSED_RESULT
+static int ns_insert_sub_keyed_str(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(STRING *key),
+    ARGIN(PMC *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+#define ASSERT_ARGS_add_multi_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       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 = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(SELF) \
+    , PARROT_ASSERT_ARG(key))
+#define ASSERT_ARGS_add_to_class __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(nsinfo) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_maybe_add_sub_to_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(SELF) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_ns_insert_sub_keyed_str __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(value))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+static void
+add_to_class(PARROT_INTERP, ARGMOD(Parrot_NameSpace_attributes *nsinfo),
+        ARGMOD_NULLOK(PMC *classobj), ARGIN(STRING *key), ARGIN(PMC *value))
 {
+    ASSERT_ARGS(add_to_class)
+
     /* Insert it in class, if there is a class */
     if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj))
         VTABLE_add_method(interp, classobj, key, value);
@@ -43,14 +120,19 @@
     }
 }
 
+PARROT_WARN_UNUSED_RESULT
 static int
-ns_insert_sub_keyed_str(PARROT_INTERP, PMC *self, STRING *key, PMC *value)
+ns_insert_sub_keyed_str(PARROT_INTERP, ARGIN(PMC *self), ARGIN(STRING *key),
+        ARGIN(PMC *value))
 {
+    ASSERT_ARGS(ns_insert_sub_keyed_str)
+
     Parrot_NameSpace_attributes * const nsinfo   = PARROT_NAMESPACE(self);
     PMC              *       vtable   = nsinfo->vtable;
     PMC              * const classobj = VTABLE_get_class(interp, self);
-    STRING           * vtable_key     = NULL;
+    STRING           * vtable_key     = STRINGNULL;
     Parrot_Sub_attributes *sub;
+    INTVAL stored = 0;
 
     PMC_get_sub(interp, value, sub);
 
@@ -68,36 +150,45 @@
         /* Otherwise, store it in the namespace for the class to
          * retrieve later */
         else {
-            /* If we don't have a place to hang vtable methods, make one. */
+            /* If we don't have a place to hang vtables, make one. */
             if (PMC_IS_NULL(vtable))
                 nsinfo->vtable = vtable = Parrot_pmc_new(interp, enum_class_Hash);
 
             /* Insert it. */
             VTABLE_set_pmc_keyed_int(interp, vtable, sub->vtable_index, value);
         }
+        if (!(sub->comp_flags & SUB_COMP_FLAG_NSENTRY))
+            stored = 1;
     }
 
     if (sub->comp_flags & SUB_COMP_FLAG_METHOD) {
         STRING *method_name = key;
 
         if (Parrot_str_equal(interp, sub->method_name, CONST_STRING(interp, ""))) {
-            if (sub->vtable_index != -1 && vtable_key != NULL) {
-                method_name = Parrot_str_copy(interp, vtable_key);
+            if (sub->vtable_index != -1 && !STRING_IS_NULL(vtable_key)) {
+                method_name = vtable_key;
             }
         }
         else {
             method_name = sub->method_name;
         }
         add_to_class(interp, nsinfo, classobj, method_name, value);
+
+        if (!(sub->comp_flags & SUB_COMP_FLAG_NSENTRY))
+            stored = 1;
     }
 
-    return 0;
+    return stored;
 }
 
+PARROT_WARN_UNUSED_RESULT
 static int
-maybe_add_sub_to_namespace(PARROT_INTERP, PMC *SELF, STRING *key, PMC *value)
+maybe_add_sub_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
+        ARGIN(PMC *value))
 {
-    STRING *sub_str = CONST_STRING(interp, "Sub");
+    ASSERT_ARGS(maybe_add_sub_to_namespace)
+
+    STRING * const sub_str = CONST_STRING(interp, "Sub");
 
     if (!PMC_IS_NULL(value)
     &&   VTABLE_isa(interp, value, sub_str)
@@ -108,9 +199,12 @@
 }
 
 static void
-add_nci_to_namespace(PARROT_INTERP, PMC *SELF, STRING *key, PMC *value)
+add_nci_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
+        ARGIN_NULLOK(PMC *value))
 {
-    STRING *nci_str = CONST_STRING(interp, "NCI");
+    ASSERT_ARGS(add_nci_to_namespace)
+
+    STRING * const nci_str = CONST_STRING(interp, "NCI");
 
     if (!PMC_IS_NULL(value)
     &&   VTABLE_isa(interp, value, nci_str)) {
@@ -123,9 +217,12 @@
 }
 
 static void
-add_multi_to_namespace(PARROT_INTERP, PMC *SELF, STRING *key, PMC *value)
+add_multi_to_namespace(PARROT_INTERP, ARGIN(PMC *SELF), ARGIN(STRING *key),
+        ARGIN_NULLOK(PMC *value))
 {
-    STRING *multi_str = CONST_STRING(interp, "MultiSub");
+    ASSERT_ARGS(add_multi_to_namespace)
+
+    STRING * const multi_str = CONST_STRING(interp, "MultiSub");
 
     if (!PMC_IS_NULL(value)
     &&   VTABLE_isa(interp, value, multi_str)) {
@@ -137,12 +234,12 @@
             PMC * const classobj = VTABLE_get_class(interp, SELF);
 
             /* Extract the first alternate and check if it is a method */
-            PMC *pmc_sub = VTABLE_get_pmc_keyed_int(interp, value, 0);
+            PMC * const pmc_sub = VTABLE_get_pmc_keyed_int(interp, value, 0);
             Parrot_Sub_attributes *sub;
             PMC_get_sub(interp, pmc_sub, sub);
 
             if (sub->comp_flags & SUB_COMP_FLAG_METHOD) {
-                STRING *empty_str   = CONST_STRING(interp, "");
+                STRING * const empty_str   = CONST_STRING(interp, "");
                 STRING *method_name = key;
                 Hash   *hash;
 
@@ -202,8 +299,9 @@
 */
 
     VTABLE void init() {
-        PARROT_NAMESPACE(SELF)->vtable = PMCNULL;
-        PARROT_NAMESPACE(SELF)->_class = PMCNULL;
+        PARROT_NAMESPACE(SELF)->vtable  = PMCNULL;
+        PARROT_NAMESPACE(SELF)->methods = PMCNULL;
+        PARROT_NAMESPACE(SELF)->_class  = PMCNULL;
         SELF.set_pointer(parrot_new_hash(INTERP));
         PObj_custom_mark_destroy_SETALL(SELF);
     }
@@ -221,13 +319,13 @@
         Parrot_NameSpace_attributes * const nsinfo = PARROT_NAMESPACE(SELF);
 
         if (nsinfo->hash)
-            parrot_mark_hash(interp, nsinfo->hash);
+            parrot_mark_hash(INTERP, nsinfo->hash);
 
-        Parrot_gc_mark_PMC_alive(interp, nsinfo->parent);
-        Parrot_gc_mark_PMC_alive(interp, nsinfo->_class);
-        Parrot_gc_mark_PMC_alive(interp, nsinfo->vtable);
-        Parrot_gc_mark_PMC_alive(interp, nsinfo->methods);
-        Parrot_gc_mark_STRING_alive(interp, nsinfo->name);
+        Parrot_gc_mark_PMC_alive(INTERP, nsinfo->parent);
+        Parrot_gc_mark_PMC_alive(INTERP, nsinfo->_class);
+        Parrot_gc_mark_PMC_alive(INTERP, nsinfo->vtable);
+        Parrot_gc_mark_PMC_alive(INTERP, nsinfo->methods);
+        Parrot_gc_mark_STRING_alive(INTERP, nsinfo->name);
     }
 
 /*
@@ -287,14 +385,14 @@
         PMC * const old = (PMC *)parrot_hash_get(INTERP, (Hash *)SELF.get_pointer(), key);
 
         /* If it's a sub... */
-        if (maybe_add_sub_to_namespace(interp, SELF, key, value))
+        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);
+        add_nci_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);
+        add_multi_to_namespace(INTERP, SELF, key, value);
 
         if (!old)
             SUPER(key, value);
@@ -312,13 +410,12 @@
             }
             else {
                 /* create new tuple */
-                new_tuple = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+                /* for a fully typed namespace, we'd need 3 or 4 */
+                new_tuple = Parrot_pmc_new_init_int(INTERP,
+                        enum_class_FixedPMCArray, NS_max_slots);
 
                 /* flag it as special */
                 PObj_get_FLAGS(new_tuple) |= FPA_is_ns_ext;
-
-                /* for a fully typed namespace, we'd need 3 or 4 */
-                VTABLE_set_integer_native(INTERP, new_tuple, NS_max_slots);
             }
         }
 
@@ -368,10 +465,10 @@
         }
 
         if (key->vtable->base_type == enum_class_ResizableStringArray) {
-            const INTVAL elements = VTABLE_elements(interp, key);
+            const INTVAL elements = VTABLE_elements(INTERP, key);
             INTVAL i;
             for (i = 0; i < elements; ++i)  {
-                STRING * const part = VTABLE_get_string_keyed_int(interp, key, i);
+                STRING * const part = VTABLE_get_string_keyed_int(INTERP, key, i);
 
                 if ((i + 1) >= elements) { /* Last entry in the array */
                     Parrot_set_global(INTERP, ns, part, value);
@@ -429,13 +526,13 @@
             INTVAL i = 0;
             while (!PMC_IS_NULL(ns) && VTABLE_elements(INTERP, key)) {
                 STRING * const name = VTABLE_get_string_keyed_int(INTERP, key, i);
-                if (name == NULL || name == STRINGNULL) {
+                if (STRING_IS_NULL(name)) {
                     ns = PMCNULL;
                     /* What to do here? Throw an exception or something? */
                     break;
                 }
                 ns = Parrot_get_namespace_keyed_str(INTERP, ns, name);
-                i++;
+                ++i;
             }
             return ns;
         }
@@ -457,7 +554,7 @@
         if (PMC_IS_NULL(vtable))
             return PMCNULL;
 
-        return VTABLE_get_pmc_keyed_int(interp, vtable, key);
+        return VTABLE_get_pmc_keyed_int(INTERP, vtable, key);
     }
 
 /*
@@ -515,10 +612,10 @@
                 }
             }
             case enum_class_ResizableStringArray: {
-                const INTVAL elements = VTABLE_elements(interp, key);
+                const INTVAL elements = VTABLE_elements(INTERP, key);
                 INTVAL i;
                 for (i = 0; i < elements; ++i)  {
-                    STRING * const part = VTABLE_get_string_keyed_int(interp, key, i);
+                    STRING * const part = VTABLE_get_string_keyed_int(INTERP, key, i);
 
                     /* Last entry in the array */
                     if ((i + 1) >= elements)
@@ -555,6 +652,61 @@
 
 /*
 
+=item C<PMC *inspect_str(STRING *what)>
+
+Provides introspection of a specific piece of information about the
+namespace. The available information is:
+
+=over 8
+
+=item class
+
+The class object associated with the namespace, if any.
+
+=item methods
+
+A temporary cache of methods (destroyed when class object is created).
+Hash keyed on method name, value is an invokable PMC. Includes methods
+composed in from roles.
+
+=item vtable_overrides
+
+A temporary cache of vtable overrides (destroyed when class object is
+created). Hash keyed on vtable name, value is an invokable PMC.
+Includes vtable overrides composed in from roles.
+
+=back
+
+=cut
+
+*/
+
+    VTABLE PMC *inspect_str(STRING *what) {
+        const Parrot_NameSpace_attributes * const nsinfo = PARROT_NAMESPACE(SELF);
+        PMC *found;
+
+        if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "methods"))) {
+            found = nsinfo->methods;
+        }
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "vtable_overrides"))) {
+            found = nsinfo->vtable;
+        }
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "class"))) {
+            found = nsinfo->_class;
+        }
+        else
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                "Unknown introspection value '%S'", what);
+
+        /* return found value */
+        if (PMC_IS_NULL(found))
+            return PMCNULL;
+
+        return found;
+    }
+
+/*
+
 =back
 
 =head2 Methods
@@ -666,7 +818,7 @@
             Parrot_NameSpace_attributes *nsinfo = PARROT_NAMESPACE(ns);
             VTABLE_unshift_string(INTERP, ar, nsinfo->name);
             ns = nsinfo->parent;
-            elements++;
+            ++elements;
         }
 
         /* remove the NULL string of the namespace root */
@@ -863,75 +1015,75 @@
 */
 
     METHOD export_to(PMC *dest, PMC *what) {
-        STRING * const s_hash  = CONST_STRING(interp, "hash");
-        STRING * const s_array = CONST_STRING(interp, "array");
+        STRING * const s_hash  = CONST_STRING(INTERP, "hash");
+        STRING * const s_array = CONST_STRING(INTERP, "array");
 
         if (PMC_IS_NULL(dest))
-            Parrot_ex_throw_from_c_args(interp, NULL, 0,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                 "destination namespace not specified");
 
-        if (PMC_IS_NULL(what) || !VTABLE_elements(interp, what))
-            Parrot_ex_throw_from_c_args(interp, NULL, 0,
+        if (PMC_IS_NULL(what) || !VTABLE_elements(INTERP, what))
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                 "exporting default object set not yet implemented");
 
         /* if "what" does "hash", we extract string key/value pairs,
          * lookup the object with the name specified in the key,
          * and export it with the name specified as value. */
         if (VTABLE_does(INTERP, what, s_hash)) {
-            PMC * const  iter = VTABLE_get_iter(interp, what);
-            const INTVAL n    = VTABLE_elements(interp, what);
+            PMC * const  iter = VTABLE_get_iter(INTERP, what);
+            const INTVAL n    = VTABLE_elements(INTERP, what);
             INTVAL       i;
 
             for (i = 0; i < n; ++i) {
                 STRING *dest_name;
                 PMC    *object;
-                STRING * const src_name = VTABLE_shift_string(interp, iter);
+                STRING * const src_name = VTABLE_shift_string(INTERP, iter);
 
                 if (STRING_IS_NULL(src_name) || STRING_IS_EMPTY(src_name))
-                    Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                         "source object name not specified");
 
-                if (PMC_IS_NULL(VTABLE_get_pmc_keyed_str(interp, what, src_name))) {
+                if (PMC_IS_NULL(VTABLE_get_pmc_keyed_str(INTERP, what, src_name))) {
                     dest_name = src_name;
                 }
                 else {
-                    dest_name = VTABLE_get_string_keyed_str(interp, what, src_name);
+                    dest_name = VTABLE_get_string_keyed_str(INTERP, what, src_name);
                     if (STRING_IS_NULL(dest_name) || STRING_IS_EMPTY(dest_name))
                         dest_name = src_name;
                 }
 
-                object = VTABLE_get_pmc_keyed_str(interp, SELF, src_name);
+                object = VTABLE_get_pmc_keyed_str(INTERP, SELF, src_name);
 
                 if (PMC_IS_NULL(object))
-                    Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                         "object '%Ss' not found in current namespace", src_name);
 
-                VTABLE_set_pmc_keyed_str(interp, dest, dest_name, object);
+                VTABLE_set_pmc_keyed_str(INTERP, dest, dest_name, object);
             }
         }
         else if (VTABLE_does(INTERP, what, s_array)) {
-            const INTVAL n = VTABLE_elements(interp, what);
+            const INTVAL n = VTABLE_elements(INTERP, what);
             INTVAL       i;
 
             for (i = 0; i < n; ++i) {
                 PMC    *object;
-                STRING * const name = VTABLE_get_string_keyed_int(interp, what, i);
+                STRING * const name = VTABLE_get_string_keyed_int(INTERP, what, i);
 
                 if (STRING_IS_NULL(name) || STRING_IS_EMPTY(name))
-                    Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                         "object name not specified");
 
-                object = VTABLE_get_pmc_keyed_str(interp, SELF, name);
+                object = VTABLE_get_pmc_keyed_str(INTERP, SELF, name);
 
                 if (PMC_IS_NULL(object))
-                    Parrot_ex_throw_from_c_args(interp, NULL, 0,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                         "object '%Ss' not found in current namespace", name);
 
-                VTABLE_set_pmc_keyed_str(interp, dest, name, object);
+                VTABLE_set_pmc_keyed_str(INTERP, dest, name, object);
             }
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, 0,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 0,
                 "can't handle argument of type %s", what->vtable->base_type);
     }
 
@@ -1008,7 +1160,7 @@
 
 =item C<METHOD get_associated_vtable_methods()>
 
-Gets the Hash of vtable methods associated with this namespace and removes it
+Gets the Hash of vtables associated with this namespace and removes it
 from the namespace.
 
 =cut

Modified: branches/ops_pct/src/pmc/nci.pmc
==============================================================================
--- branches/ops_pct/src/pmc/nci.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/nci.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -18,22 +18,54 @@
 
 */
 
-typedef INTVAL (*nci_sub_t)(PARROT_INTERP, PMC *);
-typedef INTVAL (*nci_jit_sub_t)(PARROT_INTERP, PMC *, char *);
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_IGNORABLE_RESULT
+static nci_thunk_t /*@alt void@*/
+build_func(PARROT_INTERP,
+    ARGMOD(Parrot_NCI_attributes *nci_info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*nci_info);
+
+static void pcc_params(PARROT_INTERP,
+    ARGIN(STRING *sig),
+    ARGMOD(Parrot_NCI_attributes *nci_info),
+    size_t sig_length)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*nci_info);
+
+#define ASSERT_ARGS_build_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(nci_info))
+#define ASSERT_ARGS_pcc_params __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(sig) \
+    , PARROT_ASSERT_ARG(nci_info))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+
+static void
+pcc_params(PARROT_INTERP, ARGIN(STRING *sig), ARGMOD(Parrot_NCI_attributes *nci_info),
+                size_t sig_length)
+{
+    ASSERT_ARGS(pcc_params)
 
-void pcc_params(PARROT_INTERP, STRING *sig, Parrot_NCI_attributes * const nci_info,
-                size_t sig_length);
-void pcc_params(PARROT_INTERP, STRING *sig, Parrot_NCI_attributes * const nci_info,
-                size_t sig_length) {
     char    param_buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
-    char   *param_sig    = sig_length <= 7
+    const int do_alloc = (sig_length > 7);
+    char   *param_sig    = !do_alloc
                          ? param_buf
                          : mem_gc_allocate_n_typed(interp, sig_length, char);
     size_t  j            = 0;
     size_t  i;
 
-    for (i = 1; i < sig_length; i++) {
-        INTVAL c = Parrot_str_indexed(interp, sig, i);
+    for (i = 1; i < sig_length; ++i) {
+        const INTVAL c = Parrot_str_indexed(interp, sig, i);
 
         switch (c) {
           case (INTVAL)'0':    /* null ptr or such - doesn't consume a reg */
@@ -77,7 +109,7 @@
             param_sig[j++] = 'S';
             break;
           default:
-            if (sig_length > 7)
+            if (do_alloc)
                 mem_gc_free(interp, param_sig);
             Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_JIT_ERROR,
@@ -101,14 +133,15 @@
 }
 
 /* actually build the NCI thunk */
-static nci_sub_t build_func(PARROT_INTERP, PMC *, Parrot_NCI_attributes *);
 
-static
-nci_sub_t build_func(PARROT_INTERP, PMC *pmc, Parrot_NCI_attributes *nci_info)
+PARROT_IGNORABLE_RESULT
+static nci_thunk_t
+build_func(PARROT_INTERP, ARGMOD(Parrot_NCI_attributes *nci_info))
 {
-    STRING    *key        = nci_info->signature;
-    size_t     key_length = Parrot_str_byte_length(interp, key);
-    int       jitted      = 0;
+    ASSERT_ARGS(build_func)
+
+    STRING * const key      = nci_info->signature;
+    const size_t key_length = Parrot_str_byte_length(interp, key);
 
     pcc_params(interp, key, nci_info, key_length);
 
@@ -116,23 +149,23 @@
     nci_info->arity       = key_length - 1;
 
     /* Build call function. */
-    nci_info->func        = (PMC *)(build_call_func(interp, pmc, key, &jitted));
-    nci_info->jitted      = jitted;
+    nci_info->fb_info     = build_call_func(interp, key);
+    nci_info->func        = F2DPTR(VTABLE_get_pointer(interp, nci_info->fb_info));
 
-    return (nci_sub_t)nci_info->func;
+    return (nci_thunk_t)nci_info->func;
 }
 
 
 pmclass NCI auto_attrs {
     ATTR STRING    *signature;              /* The signature. */
     ATTR void      *func;                   /* Function pointer to call. */
+    ATTR PMC       *fb_info;                /* Frame-builder info */
     ATTR void      *orig_func;              /* Function pointer
                                              * used to create func */
     ATTR STRING    *pcc_params_signature;   /* The signature. */
     ATTR STRING    *long_signature;         /* The full signature. */
     ATTR PMC       *multi_sig;              /* type tuple array (?) */
     ATTR INTVAL     arity;                  /* Cached arity of the NCI. */
-    ATTR INTVAL     jitted;                 /* Is this a jitted NCI stub. */
 
 /*
 
@@ -210,7 +243,7 @@
         /* ensure that the STRING signature is constant */
         if (!PObj_constant_TEST(key)) {
             char * const key_c      = Parrot_str_to_cstring(INTERP, key);
-            size_t       key_length = Parrot_str_byte_length(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);
             Parrot_str_free_cstring(key_c);
@@ -232,6 +265,7 @@
         if (PARROT_NCI(SELF)) {
             Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
 
+            Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
             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->long_signature);
@@ -262,11 +296,11 @@
          * ManagedStruct or Buffer?
          */
         nci_info_ret->func                  = nci_info_self->func;
+        nci_info_ret->fb_info               = nci_info_self->fb_info;
         nci_info_ret->orig_func             = nci_info_self->orig_func;
         nci_info_ret->signature             = nci_info_self->signature;
         nci_info_ret->pcc_params_signature  = nci_info_self->pcc_params_signature;
         nci_info_ret->arity                 = nci_info_self->arity;
-        nci_info_ret->jitted                = nci_info_self->jitted;
         PObj_get_FLAGS(ret)                |= (PObj_get_FLAGS(SELF) & 0x7);
 
         return ret;
@@ -300,19 +334,22 @@
 
     VTABLE opcode_t *invoke(void *next) {
         Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
-        nci_sub_t                     func;
+        nci_thunk_t                   func;
+        PMC                          *fb_info;
         char                         *sig_str;
         void                         *orig_func;
         PMC                          *cont;
 
         GET_ATTR_orig_func(INTERP, SELF, orig_func);
         func = PObj_flag_TEST(private2, SELF)
-            ? (nci_sub_t) D2FPTR(orig_func)
-            : (nci_sub_t) D2FPTR(nci_info->func);
+            ? (nci_thunk_t) D2FPTR(orig_func)
+            : (nci_thunk_t) D2FPTR(nci_info->func);
+
+        GET_ATTR_fb_info(INTERP, SELF, fb_info);
 
         if (!func) {
             /* build the thunk only when necessary */
-            func = build_func(interp, SELF, nci_info);
+            func = build_func(interp, nci_info);
 
             if (!func)
                 Parrot_ex_throw_from_c_args(INTERP, NULL,
@@ -320,23 +357,7 @@
                     "attempt to call NULL function");
         }
 
-        if (nci_info->jitted) {
-            nci_jit_sub_t jit_func = (nci_jit_sub_t) D2FPTR(nci_info->func);
-
-            /* Parrot_eprintf(interp, "JITTED %S\n", nci_info->signature); */
-            sig_str = Parrot_str_to_cstring(interp, nci_info->pcc_params_signature);
-            jit_func(INTERP, SELF, sig_str);
-            Parrot_str_free_cstring(sig_str);
-        }
-        else {
-            if (PObj_flag_TEST(private2, SELF)) {
-                /* Parrot_eprintf(interp, "RAW NCI CALL\n"); */
-            }
-            else {
-                /* Parrot_eprintf(interp, "HACKED %S\n", nci_info->signature); */
-            }
-            func(INTERP, SELF);
-        }
+        func(INTERP, SELF, fb_info);
         cont = INTERP->current_cont;
 
         /*
@@ -368,7 +389,7 @@
     VTABLE INTVAL get_integer() {
         Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
         if (!nci_info->func)
-            build_func(INTERP, SELF, nci_info);
+            build_func(INTERP, nci_info);
         return (INTVAL)nci_info->func;
     }
 
@@ -402,7 +423,7 @@
 
         if (nci_info) {
             if (!nci_info->func)
-                build_func(INTERP, SELF, nci_info);
+                build_func(INTERP, nci_info);
             if (nci_info->func) {
                 arity = nci_info->arity;
                 RETURN(INTVAL arity);

Modified: branches/ops_pct/src/pmc/null.pmc
==============================================================================
--- branches/ops_pct/src/pmc/null.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/null.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2007, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -19,10 +19,24 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_DOES_NOT_RETURN
+static void null_pmc_access(PARROT_INTERP, int index)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_null_pmc_access __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 */
+
 PARROT_DOES_NOT_RETURN
 static void
 null_pmc_access(PARROT_INTERP, int index)
 {
+    ASSERT_ARGS(null_pmc_access)
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_NULL_REG_ACCESS,
             "Null PMC access in %s()",
             Parrot_get_vtable_name(interp, index));
@@ -41,21 +55,21 @@
 */
 
     VTABLE void init() {
-        UNUSED(interp)
+        UNUSED(INTERP)
     }
 
     VTABLE void *get_pointer() {
-        UNUSED(interp)
+        UNUSED(INTERP)
         return PMCNULL;
     }
 
     VTABLE void set_pointer(void *p) {
-        UNUSED(interp)
+        UNUSED(INTERP)
         PMCNULL = (PMC *)p;
     }
 
     VTABLE INTVAL does(STRING *what) {
-        UNUSED(interp)
+        UNUSED(INTERP)
         UNUSED(what)
         /* XXX maybe a hack to get TGE running again */
         return 0;
@@ -85,7 +99,7 @@
 */
 
     VTABLE PMC *find_method(STRING *method_name) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_NULL_REG_ACCESS,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_NULL_REG_ACCESS,
                 "Null PMC access in find_method('%Ss')",
                 method_name);
     }

Modified: branches/ops_pct/src/pmc/object.pmc
==============================================================================
--- branches/ops_pct/src/pmc/object.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/object.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -21,11 +21,75 @@
 #include "parrot/oo_private.h"
 #include "pmc/pmc_class.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void cache_method(PARROT_INTERP,
+    ARGIN(PMC *_class),
+    ARGIN(STRING *name),
+    ARGIN(PMC *method))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC * find_cached(PARROT_INTERP,
+    ARGIN(PMC *_class),
+    ARGIN(STRING *name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL get_attrib_index(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(STRING *name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL get_attrib_index_keyed(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *key),
+    ARGIN(STRING *name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+#define ASSERT_ARGS_cache_method __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(_class) \
+    , PARROT_ASSERT_ARG(name) \
+    , PARROT_ASSERT_ARG(method))
+#define ASSERT_ARGS_find_cached __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(_class) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_get_attrib_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_get_attrib_index_keyed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(name))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /* This finds the index of an attribute in an object's attribute store and
  * returns it. Returns -1 if the attribute does not exist. */
+
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-get_attrib_index(PARROT_INTERP, PMC *self, STRING *name)
+get_attrib_index(PARROT_INTERP, ARGIN(PMC *self), ARGIN(STRING *name))
 {
+    ASSERT_ARGS(get_attrib_index)
     Parrot_Class_attributes * const _class  = PARROT_CLASS(self);
     const INTVAL                    cur_hll = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
     int                             num_classes, i;
@@ -55,7 +119,7 @@
 
         /* Build a string representing the fully qualified attribute name. */
         STRING *fq_name = VTABLE_get_string(interp, cur_class);
-        fq_name         = Parrot_str_append(interp, fq_name, name);
+        fq_name         = Parrot_str_concat(interp, fq_name, name);
 
         /* Look up. */
         if (VTABLE_exists_keyed_str(interp, _class->attrib_index, fq_name)) {
@@ -78,9 +142,11 @@
  * parent's attribute in an object's attribute store and returns it. Returns -1
  * if the attribute does not exist. */
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-get_attrib_index_keyed(PARROT_INTERP, PMC *self, PMC *key, STRING *name)
+get_attrib_index_keyed(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *key), ARGIN(STRING *name))
 {
+    ASSERT_ARGS(get_attrib_index_keyed)
     Parrot_Class_attributes * const _class       = PARROT_CLASS(self);
     PMC          * const class_cache  = VTABLE_get_pmc_keyed_str(interp,
                     _class->attrib_cache, VTABLE_get_string(interp, key));
@@ -94,7 +160,7 @@
     /* Build a string representing the fully qualified attribute name. */
     parent_class = Parrot_oo_get_class(interp, key);
     fq_name      = VTABLE_get_string(interp, parent_class);
-    fq_name      = Parrot_str_append(interp, fq_name, name);
+    fq_name      = Parrot_str_concat(interp, fq_name, name);
 
     /* Look up. */
     if (VTABLE_exists_keyed_str(interp, _class->attrib_index, fq_name)) {
@@ -107,9 +173,12 @@
     return -1;
 }
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static PMC *
-find_cached(PARROT_INTERP, PMC *_class, STRING *name)
+find_cached(PARROT_INTERP, ARGIN(PMC *_class), ARGIN(STRING *name))
 {
+    ASSERT_ARGS(find_cached)
     PMC *cache;
     GETATTR_Class_meth_cache(interp, _class, cache);
 
@@ -120,8 +189,9 @@
 }
 
 static void
-cache_method(PARROT_INTERP, PMC *_class, STRING *name, PMC *method)
+cache_method(PARROT_INTERP, ARGIN(PMC *_class), ARGIN(STRING *name), ARGIN(PMC *method))
 {
+    ASSERT_ARGS(cache_method)
     PMC *cache;
     GETATTR_Class_meth_cache(interp, _class, cache);
 
@@ -148,7 +218,7 @@
 */
 
     VTABLE void init() {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "Object must be created by a class.");
     }
 
@@ -164,7 +234,7 @@
 */
 
     VTABLE void init_pmc(PMC *worreva) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Object must be created by a class.");
     }
 
@@ -191,20 +261,20 @@
 */
 
     VTABLE STRING *name() {
-        PMC    * const _class     = VTABLE_get_class(interp, SELF);
-        STRING * const name       = CONST_STRING(interp, "name");
+        PMC    * const _class     = VTABLE_get_class(INTERP, SELF);
+        STRING * const name       = CONST_STRING(INTERP, "name");
 
         /* If there's a vtable override for 'name' run that instead. */
-        PMC * const method = Parrot_oo_find_vtable_override(interp, _class, name);
+        PMC * const method = Parrot_oo_find_vtable_override(INTERP, _class, name);
 
         if (!PMC_IS_NULL(method)) {
             STRING *result = NULL;
-            Parrot_pcc_invoke_sub_from_c_args(interp, method, "Pi->S",
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, method, "Pi->S",
                     SELF, &result);
             return result;
         }
         else
-            return VTABLE_get_string(interp, _class);
+            return VTABLE_get_string(INTERP, _class);
     }
 
 /*
@@ -220,8 +290,8 @@
         if (PARROT_OBJECT(SELF)) {
             Parrot_Object_attributes * const obj = PARROT_OBJECT(SELF);
 
-            Parrot_gc_mark_PMC_alive(interp, obj->_class);
-            Parrot_gc_mark_PMC_alive(interp, obj->attrib_store);
+            Parrot_gc_mark_PMC_alive(INTERP, obj->_class);
+            Parrot_gc_mark_PMC_alive(INTERP, obj->attrib_store);
         }
     }
 
@@ -237,29 +307,29 @@
 */
     VTABLE PMC *get_attr_str(STRING *name) {
         Parrot_Object_attributes * const obj      = PARROT_OBJECT(SELF);
-        STRING        * const get_attr = CONST_STRING(interp, "get_attr_str");
+        STRING        * const get_attr = CONST_STRING(INTERP, "get_attr_str");
         INTVAL index;
 
         /* 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);
+        PMC * const method = Parrot_oo_find_vtable_override(INTERP,
+                VTABLE_get_class(INTERP, SELF), get_attr);
 
         if (!PMC_IS_NULL(method)) {
             PMC *result = PMCNULL;
-            Parrot_pcc_invoke_sub_from_c_args(interp, method, "PiS->P",
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, method, "PiS->P",
                     SELF, name, &result);
             return result;
         }
 
         /* Look up the index. */
-        index = get_attrib_index(interp, obj->_class, name);
+        index = get_attrib_index(INTERP, obj->_class, name);
 
         /* If lookup failed, exception. */
         if (index == -1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S'", name);
 
-        return VTABLE_get_pmc_keyed_int(interp, obj->attrib_store, index);
+        return VTABLE_get_pmc_keyed_int(INTERP, obj->attrib_store, index);
     }
 
 /*
@@ -276,15 +346,15 @@
         Parrot_Object_attributes * const obj = PARROT_OBJECT(SELF);
 
         /* Look up the index. */
-        const INTVAL index = get_attrib_index_keyed(interp, obj->_class, key, name);
+        const INTVAL index = get_attrib_index_keyed(INTERP, obj->_class, key, name);
 
         /* If lookup failed, exception. */
         if (index == -1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S' in class '%S'", name,
-                VTABLE_get_string(interp, key));
+                VTABLE_get_string(INTERP, key));
 
-        return VTABLE_get_pmc_keyed_int(interp, obj->attrib_store, index);
+        return VTABLE_get_pmc_keyed_int(INTERP, obj->attrib_store, index);
     }
 
 /*
@@ -299,26 +369,26 @@
 */
     VTABLE void set_attr_str(STRING *name, PMC *value) {
         Parrot_Object_attributes * const obj       = PARROT_OBJECT(SELF);
-        STRING        * const vtable_meth_name = CONST_STRING(interp, "set_attr_str");
+        STRING        * const vtable_meth_name = CONST_STRING(INTERP, "set_attr_str");
         INTVAL         index;
 
         /* 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);
+        PMC * const method = Parrot_oo_find_vtable_override(INTERP,
+                VTABLE_get_class(INTERP, SELF), vtable_meth_name);
         if (!PMC_IS_NULL(method)) {
-            Parrot_pcc_invoke_sub_from_c_args(interp, method, "PiSP->",
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, method, "PiSP->",
                 SELF, name, value);
             return;
         }
 
-        index = get_attrib_index(interp, obj->_class, name);
+        index = get_attrib_index(INTERP, obj->_class, name);
 
         /* If lookup failed, exception. */
         if (index == -1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S'", name);
 
-        VTABLE_set_pmc_keyed_int(interp, obj->attrib_store, index, value);
+        VTABLE_set_pmc_keyed_int(INTERP, obj->attrib_store, index, value);
     }
 
 /*
@@ -333,15 +403,15 @@
 */
     VTABLE void set_attr_keyed(PMC *key, STRING *name, PMC *value) {
         Parrot_Object_attributes * const obj = PARROT_OBJECT(SELF);
-        const INTVAL index        = get_attrib_index_keyed(interp, obj->_class, key, name);
+        const INTVAL index        = get_attrib_index_keyed(INTERP, obj->_class, key, name);
 
         /* If lookup failed, exception. */
         if (index == -1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such attribute '%S' in class '%S'", name,
-                VTABLE_get_string(interp, key));
+                VTABLE_get_string(INTERP, key));
 
-        VTABLE_set_pmc_keyed_int(interp, obj->attrib_store, index, value);
+        VTABLE_set_pmc_keyed_int(INTERP, obj->attrib_store, index, value);
     }
 
 /*
@@ -356,13 +426,13 @@
     VTABLE PMC *find_method(STRING *name) {
         Parrot_Object_attributes * const obj    = PARROT_OBJECT(SELF);
         Parrot_Class_attributes  * const _class = PARROT_CLASS(obj->_class);
-        PMC                             *method = find_cached(interp, obj->_class, name);
+        PMC                             *method = find_cached(INTERP, obj->_class, name);
 
         if (!PMC_IS_NULL(method))
             return method;
         else {
-            STRING * const find_method = CONST_STRING(interp, "find_method");
-            const int      num_classes = VTABLE_elements(interp,
+            STRING * const find_method = CONST_STRING(INTERP, "find_method");
+            const int      num_classes = VTABLE_elements(INTERP,
                                                       _class->all_parents);
 
             const int all_in_universe  =
@@ -372,7 +442,7 @@
             for (i = 0; i < num_classes; i++) {
                 /* Get the class. */
                 PMC * const cur_class =
-                    VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
+                    VTABLE_get_pmc_keyed_int(INTERP, _class->all_parents, i);
 
                 const Parrot_Class_attributes * const class_info =
                         PARROT_CLASS(cur_class);
@@ -380,12 +450,12 @@
                 /* If there's a vtable override for 'find_method' in the
                  * current class, run that first. */
 
-                method = Parrot_oo_find_vtable_override_for_class(interp,
+                method = Parrot_oo_find_vtable_override_for_class(INTERP,
                             cur_class, find_method);
 
                 if (!PMC_IS_NULL(method)) {
                     PMC *result = PMCNULL;
-                    Parrot_pcc_invoke_sub_from_c_args(interp, method,
+                    Parrot_pcc_invoke_sub_from_c_args(INTERP, method,
                             "PiS->P", SELF, name, &result);
 
                     /* break out to the CACHE IF FOUND code */
@@ -395,8 +465,8 @@
 
                 /* If it's from this universe or the class doesn't inherit from
                  * anything outside of it... */
-                if (all_in_universe || VTABLE_isa(interp, cur_class, CONST_STRING(interp, "Class"))) {
-                    method = VTABLE_get_pmc_keyed_str(interp,
+                if (all_in_universe || VTABLE_isa(INTERP, cur_class, CONST_STRING(INTERP, "Class"))) {
+                    method = VTABLE_get_pmc_keyed_str(INTERP,
                                     class_info->methods, name);
 
                     /* Found it! */
@@ -410,7 +480,7 @@
             }
 
             if (!PMC_IS_NULL(method))
-                cache_method(interp, obj->_class, name, method);
+                cache_method(INTERP, obj->_class, name, method);
 
             return method;
         }
@@ -426,38 +496,38 @@
 
 */
     VTABLE INTVAL get_integer() {
-        Parrot_Object_attributes * const obj       = PARROT_OBJECT(pmc);
+        Parrot_Object_attributes * const obj       = PARROT_OBJECT(SELF);
         Parrot_Class_attributes  * const _class    = PARROT_CLASS(obj->_class);
-        STRING * const meth_name = CONST_STRING(interp, "get_integer");
+        STRING * const meth_name = CONST_STRING(INTERP, "get_integer");
 
-        /* Walk and search for the vtable method. */
-        const int num_classes = VTABLE_elements(interp, _class->all_parents);
+        /* Walk and search for the vtable. */
+        const int num_classes = VTABLE_elements(INTERP, _class->all_parents);
         int i;
         for (i = 0; i < num_classes; i++) {
             /* Get the class. */
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(INTERP, _class->all_parents, i);
 
-            PMC * const meth = Parrot_oo_find_vtable_override_for_class(interp,
+            PMC * const meth = Parrot_oo_find_vtable_override_for_class(INTERP,
                     cur_class, meth_name);
             if (!PMC_IS_NULL(meth)) {
                 INTVAL result;
-                Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->I", pmc, &result);
+                Parrot_pcc_invoke_sub_from_c_args(INTERP, meth, "Pi->I", SELF, &result);
                 return result;
 
             }
             /* method name is get_integer */
             if (cur_class->vtable->base_type == enum_class_PMCProxy) {
-                /* Get the PMC instance and call the vtable method on that. */
-                STRING * const proxy      = CONST_STRING(interp, "proxy");
-                PMC    * const del_object = VTABLE_get_attr_str(interp, pmc, proxy);
+                /* Get the PMC instance and call the vtable function on that. */
+                STRING * const proxy      = CONST_STRING(INTERP, "proxy");
+                PMC    * const del_object = VTABLE_get_attr_str(INTERP, SELF, proxy);
 
                 if (!PMC_IS_NULL(del_object)) {
-                    return (INTVAL)VTABLE_get_integer(interp, del_object);
+                    return (INTVAL)VTABLE_get_integer(INTERP, del_object);
 
                 }
             }
         }
-        return interp->vtables[enum_class_default]->get_integer(interp, pmc);
+        return INTERP->vtables[enum_class_default]->get_integer(INTERP, SELF);
     }
 
 /*
@@ -471,14 +541,14 @@
 */
     VTABLE PMC *get_class() {
         PMC    * const classobj  = PARROT_OBJECT(SELF)->_class;
-        STRING * const get_class = CONST_STRING(interp, "get_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,
+        PMC * const method = Parrot_oo_find_vtable_override(INTERP,
                 classobj, get_class);
 
         if (!PMC_IS_NULL(method)) {
             PMC *result;
-            Parrot_pcc_invoke_sub_from_c_args(interp, method, "Pi->P",
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, method, "Pi->P",
                     SELF, &result);
             return result;
         }
@@ -497,20 +567,20 @@
 */
 
     VTABLE PMC *get_namespace() {
-        PMC    * const classobj      = VTABLE_get_class(interp, SELF);
-        STRING * const get_namespace = CONST_STRING(interp, "get_namespace");
+        PMC    * const classobj      = VTABLE_get_class(INTERP, SELF);
+        STRING * const get_namespace = CONST_STRING(INTERP, "get_namespace");
         /* If there's a vtable override for 'get_namespace' run that instead. */
-        PMC * const method = Parrot_oo_find_vtable_override(interp,
+        PMC * const method = Parrot_oo_find_vtable_override(INTERP,
                 classobj, get_namespace);
 
         if (!PMC_IS_NULL(method)) {
             PMC *result;
-            Parrot_pcc_invoke_sub_from_c_args(interp, method, "Pi->P",
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, method, "Pi->P",
                     SELF, &result);
             return result;
         }
         else
-            return VTABLE_inspect_str(interp, classobj, CONST_STRING(interp, "namespace"));
+            return VTABLE_inspect_str(INTERP, classobj, CONST_STRING(INTERP, "namespace"));
 
     }
 
@@ -526,7 +596,7 @@
 */
     VTABLE INTVAL can(STRING *method_name) {
         /* Just use find_method and see it if finds anything. */
-        const PMC * const method = VTABLE_find_method(interp, SELF, method_name);
+        const PMC * const method = VTABLE_find_method(INTERP, SELF, method_name);
         return !PMC_IS_NULL(method);
     }
 
@@ -548,7 +618,7 @@
             return 1;
 
         /* Dispatch isa to the object's class */
-        return VTABLE_isa_pmc(interp, VTABLE_get_class(interp, SELF), lookup);
+        return VTABLE_isa_pmc(INTERP, VTABLE_get_class(INTERP, SELF), lookup);
     }
 
 /*
@@ -567,8 +637,8 @@
         if (SUPER(classname))
             return 1;
 
-        _class = VTABLE_get_class(interp, SELF);
-        return VTABLE_isa(interp, _class, classname);
+        _class = VTABLE_get_class(INTERP, SELF);
+        return VTABLE_isa(INTERP, _class, classname);
     }
 
 /*
@@ -586,15 +656,15 @@
         if (!role_name)
             return 0;
         else {
-            PMC    * const classobj  = VTABLE_get_class(interp, SELF);
-            STRING * const meth_name = CONST_STRING(interp, "does");
+            PMC    * const classobj  = VTABLE_get_class(INTERP, SELF);
+            STRING * const meth_name = CONST_STRING(INTERP, "does");
 
-            PMC * const method = Parrot_oo_find_vtable_override(interp,
+            PMC * const method = Parrot_oo_find_vtable_override(INTERP,
                 classobj, meth_name);
 
             if (!PMC_IS_NULL(method)) {
                 INTVAL result;
-                Parrot_pcc_invoke_sub_from_c_args(interp, method,
+                Parrot_pcc_invoke_sub_from_c_args(INTERP, method,
                         "PiS->I", SELF, role_name, &result);
                 if (result)
                     return 1;
@@ -605,7 +675,7 @@
             return 1;
 
         /* Dispatch to the object's class */
-        return VTABLE_does(interp, VTABLE_get_class(interp, SELF), role_name);
+        return VTABLE_does(INTERP, VTABLE_get_class(INTERP, SELF), role_name);
     }
 
 /*
@@ -626,7 +696,7 @@
             return 1;
 
         /* Dispatch to the object's class */
-        return VTABLE_does_pmc(interp, VTABLE_get_class(interp, SELF), role);
+        return VTABLE_does_pmc(INTERP, VTABLE_get_class(INTERP, SELF), role);
     }
 
 /*
@@ -640,45 +710,44 @@
 */
 
     opcode_t * invoke(void *next) {
-        Parrot_Object_attributes * const obj    = PARROT_OBJECT(pmc);
+        Parrot_Object_attributes * const obj    = PARROT_OBJECT(SELF);
         Parrot_Class_attributes  * const _class = PARROT_CLASS(obj->_class);
 
-        /* Walk and search for the vtable method. */
-        const int num_classes = VTABLE_elements(interp, _class->all_parents);
+        /* Walk and search for the vtable. */
+        const int num_classes = VTABLE_elements(INTERP, _class->all_parents);
         int i;
 
         for (i = 0; i < num_classes; i++) {
             /* Get the class. */
-            STRING * const meth_name = CONST_STRING(interp, "invoke");
-            STRING * const proxy     = CONST_STRING(interp, "proxy");
+            STRING * const meth_name = CONST_STRING(INTERP, "invoke");
+            STRING * const proxy     = CONST_STRING(INTERP, "proxy");
             PMC * const cur_class =
-                VTABLE_get_pmc_keyed_int(interp, _class->all_parents, i);
+                VTABLE_get_pmc_keyed_int(INTERP, _class->all_parents, i);
 
             PMC * const meth =
-                Parrot_oo_find_vtable_override_for_class(interp, cur_class,
+                Parrot_oo_find_vtable_override_for_class(INTERP, cur_class,
                                                          meth_name);
             if (!PMC_IS_NULL(meth)) {
                 /* Experimental code. See DEPRECATED.pod */
-                PMC *call_sig = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
-                if (PMC_IS_NULL(interp->current_object) &&
-                        (VTABLE_elements(interp, call_sig) == 0 ||
-                        VTABLE_get_pmc_keyed_int(interp, call_sig, 0) != SELF))
-                    VTABLE_unshift_pmc(interp, call_sig, SELF);
+                PMC *call_sig = Parrot_pcc_get_signature(INTERP, CURRENT_CONTEXT(INTERP));
+                if ((VTABLE_elements(INTERP, call_sig) == 0 ||
+                        VTABLE_get_pmc_keyed_int(INTERP, call_sig, 0) != SELF))
+                    VTABLE_unshift_pmc(INTERP, call_sig, SELF);
 
-                return VTABLE_invoke(interp, meth, next);
+                return VTABLE_invoke(INTERP, meth, next);
             }
 
             if (cur_class->vtable->base_type == enum_class_PMCProxy) {
-                /* Get the PMC instance and call the vtable method on that. */
+                /* Get the PMC instance and call the vtable function on that. */
                 PMC * const del_object =
-                    VTABLE_get_attr_keyed(interp, pmc, cur_class, proxy);
+                    VTABLE_get_attr_keyed(INTERP, SELF, cur_class, proxy);
 
                 if (!PMC_IS_NULL(del_object))
-                    return VTABLE_invoke(interp, del_object, next);
+                    return VTABLE_invoke(INTERP, del_object, next);
             }
         }
 
-        return (opcode_t *)interp->vtables[enum_class_default]->invoke(interp, pmc, next);
+        return (opcode_t *)INTERP->vtables[enum_class_default]->invoke(INTERP, SELF, next);
     }
 
 /*
@@ -692,8 +761,8 @@
 */
 
     VTABLE INTVAL type() {
-        PMC * const _class = VTABLE_get_class(interp, SELF);
-        return VTABLE_type(interp, _class);
+        PMC * const _class = VTABLE_get_class(INTERP, SELF);
+        return VTABLE_type(INTERP, _class);
     }
 
 /*
@@ -707,20 +776,22 @@
 */
 
     VTABLE PMC * clone() {
-        Parrot_Object_attributes * const obj = PARROT_OBJECT(pmc);
+        Parrot_Object_attributes * const obj = PARROT_OBJECT(SELF);
         /* If we have a custom override, invoke it.
          * If not, use the oo function. */
-        STRING * const meth_name = CONST_STRING(interp, "clone");
+        STRING * const meth_name = CONST_STRING(INTERP, "clone");
         PMC * const meth =
-                Parrot_oo_find_vtable_override(interp, obj->_class, meth_name);
+                Parrot_oo_find_vtable_override(INTERP, obj->_class, meth_name);
+        PMC *result;
+
         if (!PMC_IS_NULL(meth)) {
-            PMC *result;
-            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->P",
-                    pmc, &result);
-            return result;
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, meth, "Pi->P", SELF, &result);
         }
-        else
-            return Parrot_oo_clone_object(interp, SELF, obj->_class, NULL);
+        else {
+            result = Parrot_oo_clone_object(INTERP, SELF, NULL);
+        }
+
+        return result;
     }
 
 /*
@@ -802,8 +873,8 @@
         type_num = SELF->vtable->base_type;
 
         /* make sure metadata doesn't go away unexpectedly */
-        if (PMC_metadata(pmc))
-            PMC_metadata(pmc) = pt_shared_fixup(interp, PMC_metadata(pmc));
+        if (PMC_metadata(SELF))
+            PMC_metadata(SELF) = pt_shared_fixup(INTERP, PMC_metadata(SELF));
 
         PARROT_ASSERT(master->vtables[type_num]->pmc_class);
         /* don't want the referenced class disappearing on us */
@@ -812,13 +883,11 @@
         UNLOCK_INTERPRETER(master);
 
         ret = SELF;
-        _true = Parrot_pmc_new(INTERP, enum_class_Integer);
-
         /* Setting the '_ro' property switches to the read-only vtable */
-        VTABLE_set_integer_native(INTERP, _true, 1);
-        VTABLE_setprop(INTERP, ret, CONST_STRING(interp, "_ro"), _true);
+        _true = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, 1);
+        VTABLE_setprop(INTERP, ret, CONST_STRING(INTERP, "_ro"), _true);
+
         SELF->vtable->pmc_class = master->vtables[type_num]->pmc_class;
-        Parrot_gc_add_pmc_sync(INTERP, ret);
         PObj_is_PMC_shared_SET(ret);
 
         data = PARROT_CLASS(classobj)->parents;
@@ -850,14 +919,14 @@
 */
 
     VTABLE void morph(PMC* type) {
-        PMC    * const classobj  = VTABLE_get_class(interp, SELF);
-        STRING * const meth_name = CONST_STRING(interp, "morph");
+        PMC    * const classobj  = VTABLE_get_class(INTERP, SELF);
+        STRING * const meth_name = CONST_STRING(INTERP, "morph");
         /* If there's a vtable override for 'morph' run that instead. */
-        PMC * const method = Parrot_oo_find_vtable_override(interp,
+        PMC * const method = Parrot_oo_find_vtable_override(INTERP,
                 classobj, meth_name);
 
         if (!PMC_IS_NULL(method))
-            Parrot_pcc_invoke_sub_from_c_args(interp, method, "PiP->",
+            Parrot_pcc_invoke_sub_from_c_args(INTERP, method, "PiP->",
                     SELF, type);
         else
             SUPER(type);

Modified: branches/ops_pct/src/pmc/opcode.pmc
==============================================================================
--- branches/ops_pct/src/pmc/opcode.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/opcode.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -16,13 +16,17 @@
 
 #include "parrot/parrot.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Opcode auto_attrs {
     ATTR op_info_t *info;
     ATTR INTVAL op_number;
     ATTR STRING *full_name_cache;
 
     VTABLE void init() {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "Opcode must be created from OpLib.");
     }
 
@@ -35,13 +39,13 @@
     VTABLE void set_pointer(void *i) {
         Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
         if (attrs->info)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Opcode has already been initialized");
         attrs->info = (op_info_t *)i;
     }
 
     VTABLE void set_string_native(STRING *name) {
-        char * cstr = Parrot_str_to_cstring(INTERP, name);
+        char * const cstr = Parrot_str_to_cstring(INTERP, name);
         const INTVAL num = INTERP->op_lib->op_code(INTERP, cstr, 1);
         Parrot_str_free_cstring(cstr);
         if (num == -1)
@@ -61,7 +65,7 @@
         const INTVAL opcount = INTERP->op_lib->op_count;
         Parrot_Opcode_attributes * const attrs = PARROT_OPCODE(SELF);
         if (attrs->info)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Opcode has already been initialized");
         if (value >= opcount || value < 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
@@ -110,14 +114,16 @@
 
     METHOD dirs() {
         const op_info_t * const info = PARROT_OPCODE(SELF)->info;
-        PMC *result = Parrot_pmc_new(INTERP, enum_class_FixedIntegerArray);
+        PMC *result;
         INTVAL arg_count = info->op_count - 1;
         if (arg_count > 0) {
             INTVAL i;
-            VTABLE_set_integer_native(INTERP, result, arg_count);
+            result = Parrot_pmc_new_init_int(INTERP, enum_class_FixedIntegerArray, arg_count);
             for (i = 0; i < arg_count; ++i)
                 VTABLE_set_integer_keyed_int(INTERP, result, i, (INTVAL) info->dirs[i]);
         }
+        else
+            result = Parrot_pmc_new(INTERP, enum_class_FixedIntegerArray);
         RETURN(PMC *result);
     }
 

Modified: branches/ops_pct/src/pmc/oplib.pmc
==============================================================================
--- branches/ops_pct/src/pmc/oplib.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/oplib.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -16,13 +16,17 @@
 
 #include "parrot/parrot.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 /* TODO: Since Opcode PMCs are essentially read-only after initialization
          here, we should cache them. A FixedPMCArray would be okay, an
          INTVAL->PMC HASH might be better, since it's unlikely that we will
          need to cache even a majority of the ~1300 ops. */
 static PMC *OPLIB_PMC_INSTANCE;
 static PMC *OPLIB_OPCODE_CACHE;
-pmclass OpLib {
+pmclass OpLib singleton {
     void class_init() {
         OPLIB_PMC_INSTANCE = NULL;
         OPLIB_OPCODE_CACHE = NULL;
@@ -37,8 +41,10 @@
     }
 
     VTABLE void init() {
-        if (OPLIB_OPCODE_CACHE == NULL)
+        if (OPLIB_OPCODE_CACHE == NULL) {
             OPLIB_OPCODE_CACHE = Parrot_pmc_new(INTERP, enum_class_Hash);
+            Parrot_pmc_gc_register(INTERP, OPLIB_OPCODE_CACHE);
+        }
         PObj_custom_mark_SET(SELF);
     }
 
@@ -50,7 +56,7 @@
     /* Look up an opnumber given the name of the op. First we look for the
        specific name, then the more general short name. */
     VTABLE INTVAL get_integer_keyed_str(STRING *name) {
-        char * cstr = Parrot_str_to_cstring(INTERP, name);
+        char * const cstr = Parrot_str_to_cstring(INTERP, name);
         INTVAL num = INTERP->op_lib->op_code(INTERP, cstr, 1);
         if (num == -1)
             num = INTERP->op_lib->op_code(INTERP, cstr, 0);
@@ -83,11 +89,11 @@
     }
 
     VTABLE PMC* get_pmc_keyed_int(INTVAL value) {
-        if ((UINTVAL)value > interp->op_lib->op_count)
+        if ((UINTVAL)value > INTERP->op_lib->op_count)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "OpLib: Opcode index %d out of bounds", value);
         else {
-            const char * const name   = interp->op_info_table[value].full_name;
+            const char * const name   = INTERP->op_info_table[value].full_name;
             STRING     * const newstr = Parrot_str_new(INTERP, name, 0);
             return VTABLE_get_pmc_keyed_str(INTERP, SELF, newstr);
         }
@@ -99,7 +105,7 @@
 
     METHOD op_family(STRING *shortname)
     {
-        char *sname = Parrot_str_to_cstring(INTERP, shortname);
+        char * const sname = Parrot_str_to_cstring(INTERP, shortname);
         const op_lib_t * const op_lib = INTERP->op_lib;
         const op_info_t * const table = op_lib->op_info_table;
         PMC *result = PMCNULL;

Modified: branches/ops_pct/src/pmc/orderedhash.pmc
==============================================================================
--- branches/ops_pct/src/pmc/orderedhash.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/orderedhash.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -77,11 +77,72 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC* box_integer(PARROT_INTERP, INTVAL val)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC* box_number(PARROT_INTERP, FLOATVAL val)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC* box_string(PARROT_INTERP, ARGIN(STRING *str))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void find_bounds(PARROT_INTERP,
+    ARGIN(PMC *pmc_hash),
+    ARGMOD(PMC **first),
+    ARGMOD(PMC **last))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*first)
+        FUNC_MODIFIES(*last);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC* get_list_item(PARROT_INTERP, ARGIN(PMC *self), INTVAL idx)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_box_integer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_box_number __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_box_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_find_bounds __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc_hash) \
+    , PARROT_ASSERT_ARG(first) \
+    , PARROT_ASSERT_ARG(last))
+#define ASSERT_ARGS_get_list_item __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /* Get list_item by index */
+/* XXX Can this actually return NULL or not? */
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static PMC*
-get_list_item(PARROT_INTERP, ARGIN(PMC *self), INTVAL idx) {
-    Parrot_OrderedHash_attributes *attrs = PARROT_ORDEREDHASH(self);
-    INTVAL                         n = VTABLE_elements(interp, attrs->hash);
+get_list_item(PARROT_INTERP, ARGIN(PMC *self), INTVAL idx)
+{
+    ASSERT_ARGS(get_list_item)
+
+    const Parrot_OrderedHash_attributes * const attrs = PARROT_ORDEREDHASH(self);
+    const INTVAL n = VTABLE_elements(interp, attrs->hash);
     INTVAL                         pos;
     PMC                           *list_entry = attrs->first;
 
@@ -100,11 +161,15 @@
 /* Find first/last in cloned/thawed OrderedHash */
 /* Parameter C<pmc_hash> is Hash, not OrderedHash */
 static void
-find_bounds(PARROT_INTERP, PMC *pmc_hash, PMC **first, PMC **last) {
-    PMC *iter = VTABLE_get_iter(interp, pmc_hash);
+find_bounds(PARROT_INTERP, ARGIN(PMC *pmc_hash), ARGMOD(PMC **first), ARGMOD(PMC **last))
+{
+    ASSERT_ARGS(find_bounds)
+
+    PMC * const iter = VTABLE_get_iter(interp, pmc_hash);
+
     while (VTABLE_get_bool(interp, iter)) {
-        PMC *item  = VTABLE_shift_pmc(interp, iter);
-        PMC *entry = VTABLE_get_pmc_keyed(interp, pmc_hash, item);
+        PMC * const item  = VTABLE_shift_pmc(interp, iter);
+        PMC * const entry = VTABLE_get_pmc_keyed(interp, pmc_hash, item);
         /* First entry doesn't have prev */
         PMC *tmp   = VTABLE_get_pmc_keyed_int(interp, entry, ORDERED_HASH_ITEM_PREV);
         if (PMC_IS_NULL(tmp))
@@ -117,24 +182,39 @@
 }
 
 /* Helpers for boxing values */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
-box_string(PARROT_INTERP, STRING *str) {
+box_string(PARROT_INTERP, ARGIN(STRING *str))
+{
+    ASSERT_ARGS(box_string)
+
     PMC * const ret = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp,
                 enum_class_String));
     VTABLE_set_string_native(interp, ret, str);
     return ret;
 }
 
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
-box_integer(PARROT_INTERP, INTVAL val) {
+box_integer(PARROT_INTERP, INTVAL val)
+{
+    ASSERT_ARGS(box_integer)
+
     PMC * const ret = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp,
                 enum_class_Integer));
     VTABLE_set_integer_native(interp, ret, val);
     return ret;
 }
 
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
-box_number(PARROT_INTERP, FLOATVAL val) {
+box_number(PARROT_INTERP, FLOATVAL val)
+{
+    ASSERT_ARGS(box_number)
+
     PMC * const ret = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp,
                 enum_class_Float));
     VTABLE_set_number_native(interp, ret, val);
@@ -238,16 +318,17 @@
 
 */
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        Parrot_OrderedHash_attributes *attrs =
+        Parrot_OrderedHash_attributes * const attrs =
                 PARROT_ORDEREDHASH(SELF);
 
         /* Check for old entry */
         PMC *list_entry = VTABLE_get_pmc_keyed(INTERP, attrs->hash, key);
         if (!PMC_IS_NULL(list_entry)) {
             /* We have old entry. Just update value */
-            PMC *nextkey = key_next(INTERP, key);
+            PMC * const nextkey = key_next(INTERP, key);
             if (nextkey) {
-                PMC *old_value = VTABLE_get_pmc_keyed_int(INTERP, list_entry,
+                /* XXX old_value is unused.  Should we be storing this at all? */
+                PMC * const old_value = VTABLE_get_pmc_keyed_int(INTERP, list_entry,
                         ORDERED_HASH_ITEM_VALUE);
                 VTABLE_set_pmc_keyed(INTERP, value, nextkey, value);
             }
@@ -257,8 +338,8 @@
         }
 
         /* Create new entry */
-        list_entry = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
-        VTABLE_set_integer_native(INTERP, list_entry, ORDERED_HASH_ITEM_MAX);
+        list_entry = Parrot_pmc_new_init_int(INTERP,
+                enum_class_FixedPMCArray, ORDERED_HASH_ITEM_MAX);
         VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_VALUE, value);
         VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY, key);
 
@@ -325,7 +406,7 @@
         /* Now we have chicken and egg problem during freeze/thaw */
         /* When we try to thaw OrderedHash which stores HLL mapping */
         /* Reported by François Perrad */
-        PMC *pkey = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC * const pkey = Parrot_pmc_new(INTERP, enum_class_String);
         VTABLE_set_string_native(INTERP, pkey, key);
         VTABLE_set_pmc_keyed(INTERP, SELF, pkey, value);
     }
@@ -358,7 +439,7 @@
 */
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL idx) {
-        PMC *list_entry = get_list_item(INTERP, SELF, idx);
+        PMC * const list_entry = get_list_item(INTERP, SELF, idx);
 
         if (PMC_IS_NULL(list_entry))
             return PMCNULL;
@@ -367,11 +448,11 @@
     }
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        PMC * item;
+        PMC *item;
+
         /* Access by integer index */
-        if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
+        if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG)
             return SELF.get_pmc_keyed_int(VTABLE_get_integer(INTERP, key));
-        }
 
         item = VTABLE_get_pmc_keyed(INTERP, PARROT_ORDEREDHASH(SELF)->hash, key);
         if (PMC_IS_NULL(item))
@@ -380,9 +461,13 @@
     }
 
     VTABLE PMC *get_pmc_keyed_str(STRING *key) {
-        PMC *pkey = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
-        VTABLE_set_string_native(INTERP, pkey, key);
-        return STATICSELF.get_pmc_keyed(pkey);
+        PMC *item = VTABLE_get_pmc_keyed_str(INTERP,
+            PARROT_ORDEREDHASH(SELF)->hash, key);
+
+        if (PMC_IS_NULL(item))
+            return PMCNULL;
+
+        return VTABLE_get_pmc_keyed_int(INTERP, item, ORDERED_HASH_ITEM_VALUE);
     }
 /*
 
@@ -471,10 +556,7 @@
 */
 
     VTABLE void set_pmc_keyed_int(INTVAL idx, PMC *val) {
-        const INTVAL   n   = STATICSELF.elements();
-        STRING * const fmt = CONST_STRING(INTERP, "\1%d");
-        PMC           *list_entry;
-        INTVAL         pos;
+        const INTVAL n = STATICSELF.elements();
 
         if (idx < -n)
             idx = -idx - n - 1;
@@ -483,11 +565,12 @@
 
         if (idx >= n) {
             /* TODO warn or fill if there are holes */
+            STRING * const fmt = CONST_STRING(INTERP, "\1%d");
             STRING * const key = Parrot_sprintf_s(INTERP, fmt, idx);
             SELF.set_pmc_keyed_str(key, val);
         }
         else {
-            list_entry = get_list_item(INTERP, SELF, idx);
+            PMC * const list_entry = get_list_item(INTERP, SELF, idx);
             PARROT_ASSERT(!PMC_IS_NULL(list_entry));
             VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_VALUE, val);
         }
@@ -566,8 +649,8 @@
     VTABLE INTVAL exists_keyed(PMC *key) {
         if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
             /* Don't fetch item prematurely. It's costy */
-            INTVAL    intval = VTABLE_get_integer(INTERP, key);
-            PMC * const next = VTABLE_shift_pmc(INTERP, key);
+            const INTVAL intval = VTABLE_get_integer(INTERP, key);
+            PMC * const next    = VTABLE_shift_pmc(INTERP, key);
 
             if (!next)
                 return STATICSELF.exists_keyed_int(intval);
@@ -642,8 +725,8 @@
                 PARROT_ORDEREDHASH(SELF);
         PMC *list_entry, *prev, *next;
         if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
-            INTVAL    intval = VTABLE_get_integer(INTERP, key);
-            PMC * const next = VTABLE_shift_pmc(INTERP, key);
+            const INTVAL intval = VTABLE_get_integer(INTERP, key);
+            PMC * const next    = VTABLE_shift_pmc(INTERP, key);
 
             if (next)
                 VTABLE_delete_keyed(INTERP, STATICSELF.get_pmc_keyed_int(intval), next);
@@ -682,13 +765,12 @@
     }
 
     VTABLE void delete_keyed_int(INTVAL idx) {
-        PMC *list_entry;
-        if (!STATICSELF.exists_keyed_int(idx))
-            return;
-
-        list_entry = get_list_item(INTERP, SELF, idx);
-        STATICSELF.delete_keyed(
-            VTABLE_get_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY));
+        if (STATICSELF.exists_keyed_int(idx)) {
+            PMC * const list_entry = get_list_item(INTERP, SELF, idx);
+            STATICSELF.delete_keyed(
+                    VTABLE_get_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY));
+        }
+        return;
     }
 
 /*
@@ -766,10 +848,6 @@
 
 F<docs/pdds/pdd08_keys.pod>.
 
-=head1 HISTORY
-
-Initial rev by leo 2003-08-21.
-
 =cut
 
 */

Modified: branches/ops_pct/src/pmc/orderedhashiterator.pmc
==============================================================================
--- branches/ops_pct/src/pmc/orderedhashiterator.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/orderedhashiterator.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -21,6 +21,10 @@
 #include "pmc/pmc_orderedhash.h"
 #include "pmc/pmc_hashiteratorkey.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass OrderedHashIterator extends Iterator no_ro auto_attrs {
     ATTR PMC        *pmc_hash;      /* the Hash which this Iterator iterates */
     ATTR PMC        *next_entry;    /* Next entry to shift/pop */
@@ -179,8 +183,8 @@
                 ORDERED_HASH_ITEM_KEY);
         attrs->next_entry = VTABLE_get_pmc_keyed_int(INTERP, attrs->next_entry,
                 ORDERED_HASH_ITEM_NEXT);
-        attrs->pos++;
-        attrs->elements--;
+        ++attrs->pos;
+        --attrs->elements;
 
         return ret;
     }
@@ -210,8 +214,8 @@
                 ORDERED_HASH_ITEM_KEY);
         attrs->next_entry = VTABLE_get_pmc_keyed_int(INTERP, attrs->next_entry,
                 ORDERED_HASH_ITEM_PREV);
-        attrs->pos--;
-        attrs->elements--;
+        --attrs->pos;
+        --attrs->elements;
 
         return ret;
     }

Deleted: branches/ops_pct/src/pmc/os.pmc
==============================================================================
--- branches/ops_pct/src/pmc/os.pmc	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,582 +0,0 @@
-/*
-Copyright (C) 2001-2010, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/os.pmc - Files and Directories PMC
-
-=head1 DESCRIPTION
-
-C<OS> is a singleton class which provides access to the filesystem
-files and directories.
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#if defined(_MSC_VER)
-#  include <direct.h>
-#  include <io.h>
-#  include <tchar.h>
-#  include <windows.h>
-#elif defined(__BORLANDC__)
-#  include <dir.h>
-#  include <dirent.h>
-#else
-#  include <dirent.h>
-#endif
-
-/* XXX Check if we need to deallocate strerror strings */
-/* XXX apparently, strerror_r is thread-safe and should be used instead.*/
-
-static PMC *OS_PMC;
-pmclass OS singleton {
-
-/*
-
-=item C<void *get_pointer()>
-
-=item C<void set_pointer(void *ptr)>
-
-These two functions are part of the singleton creation interface. For more
-information see F<src/pmc.c>.
-
-=cut
-
-*/
-
-    void class_init() {
-        OS_PMC = NULL;
-    }
-
-    VTABLE void *get_pointer() {
-        return OS_PMC;
-    }
-
-    VTABLE void set_pointer(void *ptr) {
-        OS_PMC = (PMC *)ptr;
-    }
-
-
-/*
-
-=item C<STRING *cwd()>
-
-Returns the current working directory.
-
-=cut
-
-*/
-
-    METHOD cwd() {
-        char *cwd;
-#ifdef _MSC_VER
-        cwd = _getcwd(NULL, 0);
-        /* capitalize the drive letter */
-        cwd[0] = (char)toupper((unsigned char)cwd[0]);
-#else
-#  ifdef PATH_MAX
-        cwd = getcwd(NULL, PATH_MAX+1);
-#  else
-        cwd = getcwd(NULL, 0);
-#  endif
-#endif
-        if (cwd) {
-            STRING * const scwd = Parrot_str_new(INTERP, cwd, strlen(cwd));
-            free(cwd);
-            RETURN(STRING *scwd);
-        }
-        else {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-/*
-
-=item C<void chdir(STRING *path)>
-
-Changes the current working directory to the one specified by C<path>.
-
-=cut
-
-*/
-
-    METHOD chdir(STRING *path) {
-        int error;
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-#ifdef _MSC_VER
-        error = _chdir(cpath);
-#else
-        error = chdir(cpath);
-#endif
-        Parrot_str_free_cstring(cpath);
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-/*
-
-=item C<void rm(STRING *path)>
-
-Calls C<remove> to remove the file or empty directory specified by
-C<path>.
-
-=cut
-
-*/
-
-    METHOD rm(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-        int          error = stat(cpath, &info);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_str_free_cstring(cpath);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISDIR(info.st_mode)) {
-#ifdef _MSC_VER
-            error = _rmdir(cpath);
-#else
-            error = rmdir(cpath);
-#endif
-            Parrot_str_free_cstring(cpath);
-            if (error) {
-                const char * const errmsg = strerror(errno);
-                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                    errmsg);
-            }
-        }
-        else {
-            error = remove(cpath);
-            Parrot_str_free_cstring(cpath);
-            if (error) {
-                const char * const errmsg = strerror(errno);
-                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                    errmsg);
-            }
-        }
-    }
-
-/*
-
-=item C<void mkdir(STRING *path, STRING *mode)>
-
-Creates a directory specified by C<path> with mode C<mode>.
-
-=cut
-
-*/
-
-    METHOD mkdir(STRING *path, INTVAL mode) {
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-        /* should we validate mode? */
-#ifdef WIN32
-        const int error = _mkdir(cpath);
-#else
-        const int error = mkdir(cpath, (mode_t)mode);
-#endif
-        Parrot_str_free_cstring(cpath);
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-/*
-
-=item C<fixedpmcarray *stat(STRING *path)>
-
-Stats a file, and returns a 13 position array as in Perl:
-
-     0 dev      device number of filesystem
-     1 ino      inode number
-     2 mode     file mode  (type and permissions)
-     3 nlink    number of (hard) links to the file
-     4 uid      numeric user ID of file's owner
-     5 gid      numeric group ID of file's owner
-     6 rdev     the device identifier (special files only)
-     7 size     total size of file, in bytes
-     8 atime    last access time in seconds since the epoch
-     9 mtime    last modify time in seconds since the epoch
-    10 ctime    inode change time in seconds since the epoch (*)
-    11 blksize  preferred block size for file system I/O
-    12 blocks   actual number of blocks allocated
-
-11 and 12 are not available under Windows.
-
-=cut
-
-TT #849:  Provide a mechanism for setting 'mtime' and 'atime':
-https://trac.parrot.org/parrot/ticket/849
-
-*/
-
-    METHOD stat(STRING *path) {
-        struct stat   info;
-        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
-        const int     error = stat(cpath, &info);
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-        else {
-            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
-            VTABLE_set_integer_native(INTERP, array, 13);
-
-            VTABLE_set_integer_keyed_int(INTERP, array,  0,
-                    (INTVAL)info.st_dev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  1,
-                    (INTVAL)info.st_ino);
-            VTABLE_set_integer_keyed_int(INTERP, array,  2,
-                    (INTVAL)info.st_mode);
-            VTABLE_set_integer_keyed_int(INTERP, array,  3,
-                    (INTVAL)info.st_nlink);
-            VTABLE_set_integer_keyed_int(INTERP, array,  4,
-                    (INTVAL)info.st_uid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  5,
-                    (INTVAL)info.st_gid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  6,
-                    (INTVAL)info.st_rdev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  7,
-                    (INTVAL)info.st_size);
-            VTABLE_set_integer_keyed_int(INTERP, array,  8,
-                    (INTVAL)info.st_atime);
-            VTABLE_set_integer_keyed_int(INTERP, array,  9,
-                    (INTVAL)info.st_mtime);
-            VTABLE_set_integer_keyed_int(INTERP, array, 10,
-                    (INTVAL)info.st_ctime);
-#ifndef WIN32
-            VTABLE_set_integer_keyed_int(INTERP, array, 11,
-                    (INTVAL)info.st_blksize);
-            VTABLE_set_integer_keyed_int(INTERP, array, 12,
-                    (INTVAL)info.st_blocks);
-#endif
-            RETURN(PMC *array);
-        }
-    }
-
-/*
-
-=item C<fixedpmcarray *lstat(STRING *path)>
-
-Stats a file, and returns a 13 position array as in Perl:
-
-     0 dev      device number of filesystem
-     1 ino      inode number
-     2 mode     file mode  (type and permissions)
-     3 nlink    number of (hard) links to the file
-     4 uid      numeric user ID of file's owner
-     5 gid      numeric group ID of file's owner
-     6 rdev     the device identifier (special files only)
-     7 size     total size of file, in bytes
-     8 atime    last access time in seconds since the epoch
-     9 mtime    last modify time in seconds since the epoch
-    10 ctime    inode change time in seconds since the epoch (*)
-    11 blksize  preferred block size for file system I/O
-    12 blocks   actual number of blocks allocated
-
-11 and 12 are not available under Windows.
-
-=cut
-
-*/
-
-    METHOD lstat(STRING *path) {
-        struct stat info;
-
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-#ifdef WIN32
-        const int error = stat(cpath, &info);
-#else
-        const int error = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-        else {
-            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
-            VTABLE_set_integer_native(INTERP, array, 13);
-
-            VTABLE_set_integer_keyed_int(INTERP, array,  0,
-                    (INTVAL)info.st_dev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  1,
-                    (INTVAL)info.st_ino);
-            VTABLE_set_integer_keyed_int(INTERP, array,  2,
-                    (INTVAL)info.st_mode);
-            VTABLE_set_integer_keyed_int(INTERP, array,  3,
-                    (INTVAL)info.st_nlink);
-            VTABLE_set_integer_keyed_int(INTERP, array,  4,
-                    (INTVAL)info.st_uid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  5,
-                    (INTVAL)info.st_gid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  6,
-                    (INTVAL)info.st_rdev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  7,
-                    (INTVAL)info.st_size);
-            VTABLE_set_integer_keyed_int(INTERP, array,  8,
-                    (INTVAL)info.st_atime);
-            VTABLE_set_integer_keyed_int(INTERP, array,  9,
-                    (INTVAL)info.st_mtime);
-            VTABLE_set_integer_keyed_int(INTERP, array, 10,
-                    (INTVAL)info.st_ctime);
-#ifndef WIN32
-            VTABLE_set_integer_keyed_int(INTERP, array, 11,
-                    (INTVAL)info.st_blksize);
-            VTABLE_set_integer_keyed_int(INTERP, array, 12,
-                    (INTVAL)info.st_blocks);
-#endif
-            RETURN(PMC *array);
-        }
-    }
-
-/*
-
-=item C<void symlink(STRING *from, STRING *to)>
-
-Creates a symlink, where available
-
-=cut
-
-*/
-
-    METHOD symlink(STRING *from, STRING *to) {
-#ifndef WIN32
-        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
-        char * const cto   = Parrot_str_to_cstring(INTERP, to);
-        const int error    = symlink(cfrom, cto);
-
-        Parrot_str_free_cstring(cfrom);
-        Parrot_str_free_cstring(cto);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
-                "Win32 does not support symlinks!");
-#endif
-    }
-
-/*
-
-=item C<void link(STRING *from, STRING *to)>
-
-Creates a hard link, where available(?)
-
-=cut
-
-*/
-
-    METHOD link(STRING *from, STRING *to) {
-#ifndef WIN32
-        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
-        char * const cto   = Parrot_str_to_cstring(INTERP, to);
-        const int    error = link(cfrom, cto);
-
-        Parrot_str_free_cstring(cfrom);
-        Parrot_str_free_cstring(cto);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "link() failed for OS PMC: %s\n", errmsg);
-        }
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-                "Win32 is not POSIX. Need win32 developer!");
-#endif
-    }
-
-/*
-
-=item C<INTVAL umask(INTVAL mask)>
-
-umask sets the process's file mode creation mask (and returns the
-previous one).
-
-=cut
-
-*/
-
-    METHOD umask(INTVAL mask) {
-#ifndef _MSC_VER
-        const INTVAL old = umask((mode_t)mask);
-        RETURN(INTVAL old);
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL,
-            EXCEPTION_UNIMPLEMENTED,
-            "Win32 is not POSIX. Need Win32 developer!");
-#endif
-    }
-
-/*
-
-=item C<INTVAL chroot(STRING *path)>
-
-it makes the named directory the new root directory for all further
-pathnames that begin with a "/" by your process and all its children.
-
-B<NOTE>: perl restricts this operation to superusers. It might be a good
-idea to do the same with parrot.
-
-=cut
-
-*/
-
-    METHOD chroot(STRING *path) {
-#ifndef WIN32
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-        const int    error = chroot(cpath);
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-                "Win32 is not POSIX. Need Win32 developer!");
-#endif
-    }
-
-
-/*
-
-=item C<PMC *readdir(STRING *path)>
-
-reads entries from a directory.
-
-=cut
-
-*/
-    METHOD readdir(STRING *path) {
-        PMC   * array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
-#ifndef _MSC_VER
-        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
-        DIR           *dir  = opendir(cpath);
-        struct dirent *dirent;
-        STRING        *retval;
-
-        Parrot_str_free_cstring(cpath);
-
-        if (!dir) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        while ((dirent = readdir(dir)) != NULL) {
-            retval = Parrot_str_new(INTERP, dirent->d_name, 0) ;
-            VTABLE_push_string(INTERP, array, retval);
-        }
-
-        closedir(dir);
-#else
-        WIN32_FIND_DATA file_find_data;
-        char * cpath;
-        HANDLE hFind = INVALID_HANDLE_VALUE;
-
-        /* Add \* to the directory name and start search. */
-        STRING *last_char = Parrot_str_substr(interp, path,
-                                              Parrot_str_length(interp, path) - 1, 1, NULL, 0);
-        int trailing_slash = Parrot_str_equal(interp, last_char, string_from_literal(interp, "\\"))
-                             ||
-                             Parrot_str_equal(interp, last_char, string_from_literal(interp, "/"));
-        cpath = Parrot_str_to_cstring(interp, Parrot_str_concat(interp,
-                path, string_from_literal(interp, trailing_slash ? "*" : "\\*"), 0));
-        hFind = FindFirstFile(cpath, &file_find_data);
-        Parrot_str_free_cstring(cpath);
-        if (hFind == INVALID_HANDLE_VALUE)
-        {
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "Unable to readdir");
-        }
-
-        /* Loop over all directories and add to result array. */
-        do
-        {
-            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP,
-                    file_find_data.cFileName, 0));
-        }
-        while (FindNextFile(hFind, &file_find_data) != 0);
-        if (GetLastError() != ERROR_NO_MORE_FILES)
-        {
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "Error during readdir");
-        }
-        FindClose(hFind);
-#endif
-        RETURN(PMC *array);
-    }
-/*
-=item C<rename(STRING *oldpath, STRING *newpath)>
-
-This method is a wrapper for rename(2). On error a SystemError exception is
-thrown.
-
-=cut
-
-*/
-    METHOD rename(STRING *oldpath, STRING *newpath) {
-        char * const coldpath = Parrot_str_to_cstring(INTERP, oldpath);
-        char * const cnewpath = Parrot_str_to_cstring(INTERP, newpath);
-        const int    ret      = rename(coldpath, cnewpath);
-
-        Parrot_str_free_cstring(coldpath);
-        Parrot_str_free_cstring(cnewpath);
-
-        if (ret < 0) {
-            const char * const errmsg = strerror(errno) ;
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "%s", errmsg);
-        }
-    }
-
-}
-
-/*
-
-=back
-
-=head1 SEE ALS0
-
-   chdir(2), getcwd(3), unlink(2), mkdir(2), stat(2), lstat(2),
-   symlink(2), link(2), umask(2), chroot(2)
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/ops_pct/src/pmc/packfile.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfile.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfile.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -21,12 +21,34 @@
 
 #include "pmc/pmc_packfiledirectory.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void copy_packfile_header(PARROT_INTERP,
+    ARGMOD(PMC *self),
+    ARGIN(PackFile *pf))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*self);
+
+#define ASSERT_ARGS_copy_packfile_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(pf))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 Copy attributes from PackFile* to Packfile PMC.
 */
 static void
-copy_packfile_header(PARROT_INTERP, PMC *self, PackFile *pf) {
-    Parrot_Packfile_attributes *attrs = PARROT_PACKFILE(self);
+copy_packfile_header(PARROT_INTERP, ARGMOD(PMC *self), ARGIN(PackFile *pf))
+{
+    ASSERT_ARGS(copy_packfile_header)
+
+    Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(self);
 
     attrs->wordsize         = pf->header->wordsize;
     attrs->byteorder        = pf->header->byteorder;
@@ -66,7 +88,7 @@
 
 */
     VTABLE void init() {
-        Parrot_Packfile_attributes *attrs =
+        Parrot_Packfile_attributes * const attrs =
                 PMC_data_typed(SELF, Parrot_Packfile_attributes*);
         PackFile                   *pf;
 
@@ -74,9 +96,9 @@
         attrs->directory = Parrot_pmc_new(INTERP, enum_class_PackfileDirectory);
 
         /* Create dummy PackFile and copy default attributes to self */
-        pf = PackFile_new(interp, 0);
-        copy_packfile_header(interp, SELF, pf);
-        PackFile_destroy(interp, pf);
+        pf = PackFile_new(INTERP, 0);
+        copy_packfile_header(INTERP, SELF, pf);
+        PackFile_destroy(INTERP, pf);
 
         PObj_custom_mark_SET(SELF);
     }
@@ -93,7 +115,7 @@
 */
 
     VTABLE void mark() {
-        Parrot_Packfile_attributes * attrs = PARROT_PACKFILE(SELF);
+        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
 
         Parrot_gc_mark_STRING_alive(INTERP, attrs->uuid);
         Parrot_gc_mark_PMC_alive(INTERP, attrs->directory);
@@ -110,17 +132,15 @@
 
 */
     VTABLE STRING *get_string() {
-        Parrot_Packfile_attributes * attrs = PARROT_PACKFILE(SELF);
-        PackFile                   * pf =
-                (PackFile*)VTABLE_get_pointer(interp, attrs->directory);
+        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
+        PackFile                   * const pf =
+                (PackFile*)VTABLE_get_pointer(INTERP, attrs->directory);
 
-        opcode_t    length;
-        opcode_t    *ptr;
         STRING      *str;
 
         /* Calculate required memory */
-        length  = PackFile_pack_size(interp, pf) * sizeof (opcode_t);
-        ptr     = (opcode_t*)Parrot_gc_allocate_memory_chunk(INTERP, length);
+        const opcode_t length = PackFile_pack_size(INTERP, pf) * sizeof (opcode_t);
+        opcode_t * const ptr  = (opcode_t*)Parrot_gc_allocate_memory_chunk(INTERP, length);
 
         /* Copy related attributes to header */
         pf->header->major     = attrs->version_major;
@@ -129,13 +149,13 @@
         pf->header->uuid_type = attrs->uuid_type;
 
         /* And pack it! */
-        PackFile_pack(interp, pf, ptr);
+        PackFile_pack(INTERP, pf, ptr);
 
-        str = Parrot_str_new_init(interp, (const char*)ptr, length,
+        str = Parrot_str_new_init(INTERP, (const char*)ptr, length,
                 PARROT_FIXED_8_ENCODING, PARROT_BINARY_CHARSET, 0);
         Parrot_gc_free_memory_chunk(INTERP, ptr);
 
-        PackFile_destroy(interp, pf);
+        PackFile_destroy(INTERP, pf);
         return str;
     }
 
@@ -148,31 +168,34 @@
 =cut
 
 Implementation note: taken from the bottom end of Parrot_pbc_read().
+
 */
+
     VTABLE void set_string_native(STRING *str) {
-        PackFile        *pf = PackFile_new(interp, 0);
-        const opcode_t  *ptr =
-                (const opcode_t*)Parrot_string_cstring(interp, str);
-        int             length = Parrot_str_byte_length(interp, str);
-        Parrot_Packfile_attributes * attrs = PARROT_PACKFILE(SELF);
-
-        if (!PackFile_unpack(interp, pf, ptr, length)) {
-            PackFile_destroy(interp, pf);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
-                                        "Can't unpack packfile.");
+        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
+        PackFile                   * const pf    = PackFile_new(INTERP, 0);
+        const opcode_t             * const ptr   =
+                (const opcode_t *)Parrot_str_cstring(INTERP, str);
+
+        const int length = Parrot_str_byte_length(INTERP, str);
+
+        if (!PackFile_unpack(INTERP, pf, ptr, length)) {
+            PackFile_destroy(INTERP, pf);
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_MALFORMED_PACKFILE, "Can't unpack packfile.");
         }
 
         /* Disable GC during copy data into internal structures. */
-        Parrot_block_GC_mark(interp);
+        Parrot_block_GC_mark(INTERP);
 
         /* Copy values from PackFile header to own attributes */
-        copy_packfile_header(interp, SELF, pf);
+        copy_packfile_header(INTERP, SELF, pf);
 
-        VTABLE_set_pointer(interp, attrs->directory, &pf->directory);
+        VTABLE_set_pointer(INTERP, attrs->directory, &pf->directory);
 
-        Parrot_unblock_GC_mark(interp);
+        Parrot_unblock_GC_mark(INTERP);
 
-        PackFile_destroy(interp, pf);
+        PackFile_destroy(INTERP, pf);
     }
 
 
@@ -210,29 +233,30 @@
 
 */
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        Parrot_Packfile_attributes *attrs = PARROT_PACKFILE(SELF);
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "wordsize")))
+        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")))
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "byteorder")))
             return attrs->byteorder;
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "fptype")))
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "fptype")))
             return attrs->fptype;
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "version_major")))
+        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")))
+        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")))
+        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")))
+        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")))
+        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")))
+        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,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such integer key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(INTERP, key));
     }
 
 /*
@@ -251,12 +275,12 @@
 
 */
     VTABLE STRING *get_string_keyed_str(STRING *key) {
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "uuid")))
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid")))
             return PARROT_PACKFILE(SELF)->uuid;
 
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such string key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(INTERP, key));
     }
 
 
@@ -313,26 +337,26 @@
 
 */
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        Parrot_Packfile_attributes *attrs = PARROT_PACKFILE(SELF);
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "version_major"))) {
+        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_major"))) {
             attrs->version_major = value;
             return;
         }
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "version_minor"))) {
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_minor"))) {
             attrs->version_minor = value;
             return;
         }
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "version_patch"))) {
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_patch"))) {
             attrs->version_patch = value;
             return;
         }
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "uuid_type"))) {
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid_type"))) {
             attrs->uuid_type = value;
             return;
         }
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such integer key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(INTERP, key));
     }
 
 
@@ -369,14 +393,14 @@
 */
 
     VTABLE void set_string_keyed_str(STRING *key, STRING *value) {
-        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "uuid"))) {
+        if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid"))) {
             PARROT_PACKFILE(SELF)->uuid = value;
             return;
         }
 
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such string key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(INTERP, key));
     }
 
 /*
@@ -406,7 +430,7 @@
 */
 
     METHOD pack() {
-        STRING * ret = SELF.get_string();
+        STRING * const ret = SELF.get_string();
         RETURN(STRING * ret);
     }
 
@@ -436,11 +460,9 @@
 
 */
     METHOD get_directory() {
-        PMC *dir = PARROT_PACKFILE(SELF)->directory;
+        PMC * const dir = PARROT_PACKFILE(SELF)->directory;
         RETURN(PMC *dir);
     }
-
-
 }
 /*
 

Modified: branches/ops_pct/src/pmc/packfileannotation.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfileannotation.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfileannotation.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileAnnotation auto_attrs {
     ATTR STRING    *name;
     ATTR INTVAL     offset;
@@ -39,7 +43,7 @@
 */
 
     VTABLE void init() {
-        Parrot_PackfileAnnotation_attributes * attrs =
+        Parrot_PackfileAnnotation_attributes * const attrs =
                 PMC_data_typed(SELF, Parrot_PackfileAnnotation_attributes*);
 
         PObj_custom_mark_SET(SELF);
@@ -57,11 +61,11 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileAnnotation_attributes * attrs =
+        Parrot_PackfileAnnotation_attributes * const attrs =
                 PARROT_PACKFILEANNOTATION(SELF);
 
-        Parrot_gc_mark_STRING_alive(interp, attrs->name);
-        Parrot_gc_mark_STRING_alive(interp, attrs->str_value);
+        Parrot_gc_mark_STRING_alive(INTERP, attrs->name);
+        Parrot_gc_mark_STRING_alive(INTERP, attrs->str_value);
     }
 
 
@@ -133,9 +137,9 @@
 
 */
     VTABLE INTVAL get_integer() {
-        Parrot_PackfileAnnotation_attributes * attrs = PARROT_PACKFILEANNOTATION(SELF);
+        Parrot_PackfileAnnotation_attributes * const attrs = PARROT_PACKFILEANNOTATION(SELF);
         if (attrs->value_type != PF_ANNOTATION_KEY_TYPE_INT)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Trying to fetch wrong type of value from annotation");
         return attrs->int_value;
     }
@@ -151,7 +155,7 @@
 
 */
     VTABLE void set_integer_native(INTVAL value) {
-        Parrot_PackfileAnnotation_attributes * attrs = PARROT_PACKFILEANNOTATION(SELF);
+        Parrot_PackfileAnnotation_attributes * const attrs = PARROT_PACKFILEANNOTATION(SELF);
         attrs->value_type = PF_ANNOTATION_KEY_TYPE_INT;
         attrs->int_value  = value;
     }
@@ -166,9 +170,9 @@
 
 */
     VTABLE STRING * get_string() {
-        Parrot_PackfileAnnotation_attributes * attrs = PARROT_PACKFILEANNOTATION(SELF);
+        Parrot_PackfileAnnotation_attributes * const attrs = PARROT_PACKFILEANNOTATION(SELF);
         if (attrs->value_type != PF_ANNOTATION_KEY_TYPE_STR)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Trying to fetch wrong type of value from annotation");
         return attrs->str_value;
     }
@@ -184,7 +188,7 @@
 
 */
     VTABLE void set_string_native(STRING * value) {
-        Parrot_PackfileAnnotation_attributes * attrs = PARROT_PACKFILEANNOTATION(SELF);
+        Parrot_PackfileAnnotation_attributes * const attrs = PARROT_PACKFILEANNOTATION(SELF);
         attrs->value_type = PF_ANNOTATION_KEY_TYPE_STR;
         attrs->str_value  = value;
     }
@@ -199,9 +203,9 @@
 
 */
     VTABLE FLOATVAL get_number() {
-        Parrot_PackfileAnnotation_attributes * attrs = PARROT_PACKFILEANNOTATION(SELF);
+        Parrot_PackfileAnnotation_attributes * const attrs = PARROT_PACKFILEANNOTATION(SELF);
         if (attrs->value_type != PF_ANNOTATION_KEY_TYPE_NUM)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Trying to fetch wrong type of value from annotation");
         return attrs->num_value;
     }
@@ -217,7 +221,7 @@
 
 */
     VTABLE void set_number_native(FLOATVAL value) {
-        Parrot_PackfileAnnotation_attributes * attrs = PARROT_PACKFILEANNOTATION(SELF);
+        Parrot_PackfileAnnotation_attributes * const attrs = PARROT_PACKFILEANNOTATION(SELF);
         attrs->value_type = PF_ANNOTATION_KEY_TYPE_NUM;
         attrs->num_value  = value;
     }

Modified: branches/ops_pct/src/pmc/packfileannotations.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfileannotations.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfileannotations.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -29,6 +29,10 @@
 
 #include "pmc/pmc_packfileannotation.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileAnnotations auto_attrs extends PackfileSegment {
     /* ConstantTable used for names lookup */
     ATTR PMC *const_table;
@@ -49,7 +53,7 @@
         Parrot_PackfileAnnotations_attributes * attrs =
                 PMC_data_typed(SELF, Parrot_PackfileAnnotations_attributes*);
 
-        attrs->annotations = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+        attrs->annotations = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
         /*
         Don't initialize C<const_table>. It will be set to NULL bu auto_attrs
         handling. And should be set to proper PMC in set_directory.
@@ -72,8 +76,8 @@
         Parrot_PackfileAnnotations_attributes * attrs =
                 PARROT_PACKFILEANNOTATIONS(SELF);
 
-        Parrot_gc_mark_PMC_alive(interp, attrs->const_table);
-        Parrot_gc_mark_PMC_alive(interp, attrs->annotations);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->const_table);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->annotations);
 
         SUPER();
     }
@@ -89,7 +93,7 @@
 
 */
     VTABLE INTVAL elements() {
-        return VTABLE_elements(interp,
+        return VTABLE_elements(INTERP,
                 PARROT_PACKFILEANNOTATIONS(SELF)->annotations);
     }
 
@@ -104,7 +108,7 @@
 
 */
     VTABLE PMC *get_pmc_keyed_int(INTVAL index)  {
-        return VTABLE_get_pmc_keyed_int(interp,
+        return VTABLE_get_pmc_keyed_int(INTERP,
                 PARROT_PACKFILEANNOTATIONS(SELF)->annotations, index);
     }
 
@@ -141,22 +145,22 @@
         INTVAL dummy;
 
         /* TODO: add checks desribed above */
-        VTABLE_set_pmc_keyed_int(interp, attrs->annotations, index, annotation);
+        VTABLE_set_pmc_keyed_int(INTERP, attrs->annotations, index, annotation);
 
         /* Add required constants */
-        Parrot_mmd_multi_dispatch_from_c_args(interp,
+        Parrot_mmd_multi_dispatch_from_c_args(INTERP,
             "get_or_create_constant", "PS->I", attrs->const_table,
             entity_attrs->name, &dummy);
 
         switch (entity_attrs->value_type) {
             case PF_ANNOTATION_KEY_TYPE_STR:
-                Parrot_mmd_multi_dispatch_from_c_args(interp,
+                Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                     "get_or_create_constant", "PS->I", attrs->const_table,
                     entity_attrs->str_value, &dummy);
                 break;
 
             case PF_ANNOTATION_KEY_TYPE_NUM:
-                Parrot_mmd_multi_dispatch_from_c_args(interp,
+                Parrot_mmd_multi_dispatch_from_c_args(INTERP,
                     "get_or_create_constant", "PN->I", attrs->const_table,
                     entity_attrs->num_value, &dummy);
                 break;
@@ -186,12 +190,12 @@
         STRING *name;
         PMC    *segment;
 
-        PMC *iter = VTABLE_get_iter(interp, directory);
-        while (VTABLE_get_bool(interp, iter)) {
-            name = VTABLE_shift_string(interp, iter);
-            segment = VTABLE_get_pmc_keyed_str(interp, directory, name);
-            if (VTABLE_isa(interp, segment,
-                    Parrot_str_new_constant(interp, "PackfileConstantTable"))) {
+        PMC *iter = VTABLE_get_iter(INTERP, directory);
+        while (VTABLE_get_bool(INTERP, iter)) {
+            name = VTABLE_shift_string(INTERP, iter);
+            segment = VTABLE_get_pmc_keyed_str(INTERP, directory, name);
+            if (VTABLE_isa(INTERP, segment,
+                    Parrot_str_new_constant(INTERP, "PackfileConstantTable"))) {
                 attrs->const_table = segment;
                 break;
             }
@@ -216,35 +220,39 @@
         Parrot_PackfileAnnotation_attributes *annotation_attrs;
 
         /* Copy annotations to own array */
-        VTABLE_set_integer_native(interp, attrs->annotations, a->num_entries);
+        VTABLE_set_integer_native(INTERP, attrs->annotations, a->num_entries);
         for (i = 0; i < a->num_entries; ++i) {
             PackFile_Annotations_Entry *entry = a->entries[i];
             PackFile_Annotations_Key   *key   = a->keys[entry->key];
-            annotation = Parrot_pmc_new(interp, enum_class_PackfileAnnotation);
+            annotation = Parrot_pmc_new(INTERP, enum_class_PackfileAnnotation);
 
             /* Poke directly to annotation attributes. */
             annotation_attrs         = PARROT_PACKFILEANNOTATION(annotation);
             annotation_attrs->offset = entry->bytecode_offset;
-            annotation_attrs->name   = VTABLE_get_string_keyed_int(interp,
+            if (! attrs->const_table)
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
+                        EXCEPTION_MALFORMED_PACKFILE, "No constant table");
+
+            annotation_attrs->name   = VTABLE_get_string_keyed_int(INTERP,
                     attrs->const_table, key->name);
             switch (key->type) {
                 case PF_ANNOTATION_KEY_TYPE_INT:
-                    VTABLE_set_integer_native(interp, annotation, entry->value);
+                    VTABLE_set_integer_native(INTERP, annotation, entry->value);
                     break;
                 case PF_ANNOTATION_KEY_TYPE_STR:
-                    VTABLE_set_string_native(interp, annotation,
-                        VTABLE_get_string_keyed_int(interp, attrs->const_table, entry->value));
+                    VTABLE_set_string_native(INTERP, annotation,
+                        VTABLE_get_string_keyed_int(INTERP, attrs->const_table, entry->value));
                     break;
                 case PF_ANNOTATION_KEY_TYPE_NUM:
-                    VTABLE_set_number_native(interp, annotation,
-                        VTABLE_get_number_keyed_int(interp, attrs->const_table, entry->value));
+                    VTABLE_set_number_native(INTERP, annotation,
+                        VTABLE_get_number_keyed_int(INTERP, attrs->const_table, entry->value));
                     break;
                 default:
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_MALFORMED_PACKFILE,
                             "Unknown value type %d in Packfile Annotation", key->type);
             }
 
-            VTABLE_set_pmc_keyed_int(interp, attrs->annotations, i, annotation);
+            VTABLE_set_pmc_keyed_int(INTERP, attrs->annotations, i, annotation);
         }
     }
 
@@ -263,7 +271,6 @@
         PackFile_Annotations *res = mem_gc_allocate_zeroed_typed(INTERP,
                 PackFile_Annotations);
         INTVAL                i, num;
-        INTVAL                key_type;
         PMC                  *keys;             /* Temporary representation of Keys */
         PMC                  *names;            /* Constants for Key's names */
         PMC                  *types;            /* Types of Keys */
@@ -290,49 +297,49 @@
                 ...
             ]
         */
-        keys        = Parrot_pmc_new(interp, enum_class_Hash);
-        names       = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
-        types       = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
+        keys        = Parrot_pmc_new(INTERP, enum_class_Hash);
+        names       = Parrot_pmc_new(INTERP, enum_class_ResizableIntegerArray);
+        types       = Parrot_pmc_new(INTERP, enum_class_ResizableIntegerArray);
         last_key_id = -1;
 
         /* Iterate over stored annotations and create Key if required. */
-        num = VTABLE_elements(interp, attrs->annotations);
+        num = VTABLE_elements(INTERP, attrs->annotations);
         res->num_entries = num;
         res->entries = mem_gc_allocate_n_typed(INTERP, num, PackFile_Annotations_Entry*);
         for (i = 0; i < num; ++i) {
-            PMC  *entity = VTABLE_get_pmc_keyed_int(interp, attrs->annotations, i);
-            Parrot_PackfileAnnotation_attributes *entity_attrs = PARROT_PACKFILEANNOTATION(entity);
+            PMC  * const entity = VTABLE_get_pmc_keyed_int(INTERP, attrs->annotations, i);
+            const Parrot_PackfileAnnotation_attributes * const entity_attrs =
+                PARROT_PACKFILEANNOTATION(entity);
 
             /* Handle creating of Key */
-            PMC * key_array = VTABLE_get_pmc_keyed_str(interp, keys, entity_attrs->name);
+            PMC * key_array = VTABLE_get_pmc_keyed_str(INTERP, keys, entity_attrs->name);
             if (PMC_IS_NULL(key_array)) {
                 /* Never see this name before. Create new FIA and add to keys. */
-                key_array = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
-                VTABLE_set_integer_native(interp, key_array, 3);
-                VTABLE_set_integer_keyed_int(interp, key_array, 0, -1);
-                VTABLE_set_integer_keyed_int(interp, key_array, 1, -1);
-                VTABLE_set_integer_keyed_int(interp, key_array, 2, -1);
+                key_array = Parrot_pmc_new_init_int(INTERP, enum_class_FixedIntegerArray, 3);
+                VTABLE_set_integer_keyed_int(INTERP, key_array, 0, -1);
+                VTABLE_set_integer_keyed_int(INTERP, key_array, 1, -1);
+                VTABLE_set_integer_keyed_int(INTERP, key_array, 2, -1);
 
-                VTABLE_set_pmc_keyed_str(interp, keys, entity_attrs->name, key_array);
+                VTABLE_set_pmc_keyed_str(INTERP, keys, entity_attrs->name, key_array);
             }
 
             /* PackfileAnnotation.value_type exactly the same as key.type */
-            key_id = VTABLE_get_integer_keyed_int(interp, key_array, entity_attrs->value_type);
+            key_id = VTABLE_get_integer_keyed_int(INTERP, key_array, entity_attrs->value_type);
 
             /* If key_id is -1 it means we have to create new key. */
             if (key_id == -1) {
                 key_id = ++last_key_id;
-                VTABLE_set_integer_keyed_int(interp, key_array, entity_attrs->value_type, key_id);
+                VTABLE_set_integer_keyed_int(INTERP, key_array, entity_attrs->value_type, key_id);
 
                 /* Store type */
-                VTABLE_set_integer_keyed_int(interp, types, key_id, entity_attrs->value_type);
+                VTABLE_set_integer_keyed_int(INTERP, types, key_id, entity_attrs->value_type);
 
 
                 /* Store constant for name. */
-                Parrot_mmd_multi_dispatch_from_c_args(interp, "get_or_create_constant",
+                Parrot_mmd_multi_dispatch_from_c_args(INTERP, "get_or_create_constant",
                             "PS->I", attrs->const_table, entity_attrs->name, &name_id);
 
-                VTABLE_set_integer_keyed_int(interp, names, key_id, name_id);
+                VTABLE_set_integer_keyed_int(INTERP, names, key_id, name_id);
             }
 
             /* At this point we have create (if nesassary) key and name constant. */
@@ -349,30 +356,30 @@
                     res->entries[i]->value = entity_attrs->int_value;
                     break;
                 case PF_ANNOTATION_KEY_TYPE_STR:
-                    Parrot_mmd_multi_dispatch_from_c_args(interp, "get_or_create_constant",
+                    Parrot_mmd_multi_dispatch_from_c_args(INTERP, "get_or_create_constant",
                             "PS->I", attrs->const_table, entity_attrs->str_value,
                             &res->entries[i]->value);
                     break;
                 case PF_ANNOTATION_KEY_TYPE_NUM:
-                    Parrot_mmd_multi_dispatch_from_c_args(interp, "get_or_create_constant",
+                    Parrot_mmd_multi_dispatch_from_c_args(INTERP, "get_or_create_constant",
                             "PN->I", attrs->const_table, entity_attrs->num_value,
                             &res->entries[i]->value);
                     break;
                 default:
-                    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_MALFORMED_PACKFILE,
                             "Unknown value type in PackfileAnnotation");
             }
         }
 
         /* Time to pack keys */
-        num = VTABLE_elements(interp, types);
+        num = VTABLE_elements(INTERP, types);
         res->num_keys = num;
         res->keys = mem_gc_allocate_n_zeroed_typed(INTERP, num,
                 PackFile_Annotations_Key*);
         for (i = 0; i < num; ++i) {
             res->keys[i] = mem_gc_allocate_typed(INTERP, PackFile_Annotations_Key);
-            res->keys[i]->name = VTABLE_get_integer_keyed_int(interp, names, i);
-            res->keys[i]->type = VTABLE_get_integer_keyed_int(interp, types, i);
+            res->keys[i]->name = VTABLE_get_integer_keyed_int(INTERP, names, i);
+            res->keys[i]->type = VTABLE_get_integer_keyed_int(INTERP, types, i);
         }
 
         return res;

Modified: branches/ops_pct/src/pmc/packfileconstanttable.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfileconstanttable.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfileconstanttable.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,6 +24,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileConstantTable auto_attrs extends PackfileSegment {
     /* ResizablePMCArray for storing constants */
     ATTR PMC *constants;
@@ -42,11 +46,11 @@
 */
 
     VTABLE void init() {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PMC_data_typed(SELF, Parrot_PackfileConstantTable_attributes*);
 
-        attrs->constants = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        attrs->types     = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
+        attrs->constants = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        attrs->types     = Parrot_pmc_new(INTERP, enum_class_ResizableIntegerArray);
 
         PObj_custom_mark_SET(SELF);
         PMC_data(SELF) = attrs;
@@ -63,11 +67,11 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
 
-        Parrot_gc_mark_PMC_alive(interp, attrs->constants);
-        Parrot_gc_mark_PMC_alive(interp, attrs->types);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->constants);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->types);
 
         SUPER();
     }
@@ -84,7 +88,7 @@
 */
 
     VTABLE void set_pointer(void * pointer) {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
         const PackFile_ConstTable * const table =
                 (const PackFile_ConstTable *)(pointer);
@@ -92,8 +96,8 @@
         opcode_t i;
 
         /* Preallocate required amount of memory */
-        VTABLE_set_integer_native(interp, attrs->constants, table->const_count);
-        VTABLE_set_integer_native(interp, attrs->types, table->const_count);
+        VTABLE_set_integer_native(INTERP, attrs->constants, table->const_count);
+        VTABLE_set_integer_native(INTERP, attrs->types, table->const_count);
 
         for (i = 0; i < table->const_count; ++i) {
             val = table->constants[i];
@@ -112,7 +116,7 @@
                 SELF.set_pmc_keyed_int(i, val->u.key);
                 break;
               default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
                         EXCEPTION_MALFORMED_PACKFILE,
                         "Unknown PackFile constant type: %d", val->type);
             }
@@ -126,41 +130,40 @@
 
 */
     VTABLE void *get_pointer() {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
-        PackFile_ConstTable * pftable =
+        PackFile_ConstTable * const pftable =
                 mem_gc_allocate_zeroed_typed(INTERP, PackFile_ConstTable);
-        PackFile_Constant   * value;
         opcode_t              i;
 
         pftable->base.type = PF_CONST_SEG;
 
         /* Copy all constanst with respect of type */
-        pftable->const_count = VTABLE_get_integer(interp, attrs->constants);
+        pftable->const_count = VTABLE_get_integer(INTERP, attrs->constants);
         pftable->constants   = mem_gc_allocate_n_typed(INTERP,
                 pftable->const_count, PackFile_Constant*);
 
         for (i = 0; i < pftable->const_count; ++i) {
-            value = PackFile_Constant_new(interp);
-            value->type = VTABLE_get_integer_keyed_int(interp, attrs->types, i);
+            PackFile_Constant * const value = PackFile_Constant_new(INTERP);
+            value->type = VTABLE_get_integer_keyed_int(INTERP, attrs->types, i);
             switch (value->type) {
               case PFC_NONE:
                 break;
               case PFC_NUMBER:
-                value->u.number = VTABLE_get_number_keyed_int(interp,
+                value->u.number = VTABLE_get_number_keyed_int(INTERP,
                             attrs->constants, i);
                 break;
               case PFC_STRING:
-                value->u.string = VTABLE_get_string_keyed_int(interp,
+                value->u.string = VTABLE_get_string_keyed_int(INTERP,
                             attrs->constants, i);
                 break;
               case PFC_KEY:
               case PFC_PMC:
-                value->u.key = VTABLE_get_pmc_keyed_int(interp,
+                value->u.key = VTABLE_get_pmc_keyed_int(INTERP,
                             attrs->constants, i);
                 break;
               default:
-                Parrot_ex_throw_from_c_args(interp, NULL,
+                Parrot_ex_throw_from_c_args(INTERP, NULL,
                         EXCEPTION_MALFORMED_PACKFILE,
                         "Unknown PackFile constant type: %d", value->type);
             }
@@ -181,7 +184,7 @@
 
 */
     VTABLE INTVAL elements() {
-        return VTABLE_elements(interp,
+        return VTABLE_elements(INTERP,
                 PARROT_PACKFILECONSTANTTABLE(SELF)->constants);
     }
 
@@ -197,7 +200,7 @@
 
 */
     VTABLE FLOATVAL get_number_keyed_int(INTVAL index)  {
-        return VTABLE_get_number_keyed_int(interp,
+        return VTABLE_get_number_keyed_int(INTERP,
                 PARROT_PACKFILECONSTANTTABLE(SELF)->constants, index);
     }
 
@@ -213,7 +216,7 @@
 
 */
     VTABLE STRING *get_string_keyed_int(INTVAL index)  {
-        return VTABLE_get_string_keyed_int(interp,
+        return VTABLE_get_string_keyed_int(INTERP,
                 PARROT_PACKFILECONSTANTTABLE(SELF)->constants, index);
     }
 
@@ -228,7 +231,7 @@
 
 */
     VTABLE PMC *get_pmc_keyed_int(INTVAL index)  {
-        return VTABLE_get_pmc_keyed_int(interp,
+        return VTABLE_get_pmc_keyed_int(INTERP,
                 PARROT_PACKFILECONSTANTTABLE(SELF)->constants, index);
     }
 
@@ -243,11 +246,11 @@
 
 */
     VTABLE void set_number_keyed_int(INTVAL index, FLOATVAL value)  {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
 
-        VTABLE_set_number_keyed_int(interp, attrs->constants, index, value);
-        VTABLE_set_integer_keyed_int(interp, attrs->types, index, PFC_NUMBER);
+        VTABLE_set_number_keyed_int(INTERP, attrs->constants, index, value);
+        VTABLE_set_integer_keyed_int(INTERP, attrs->types, index, PFC_NUMBER);
     }
 
 
@@ -262,11 +265,11 @@
 */
 
     VTABLE void set_string_keyed_int(INTVAL index, STRING *value)  {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
 
-        VTABLE_set_string_keyed_int(interp, attrs->constants, index, value);
-        VTABLE_set_integer_keyed_int(interp, attrs->types, index, PFC_STRING);
+        VTABLE_set_string_keyed_int(INTERP, attrs->constants, index, value);
+        VTABLE_set_integer_keyed_int(INTERP, attrs->types, index, PFC_STRING);
     }
 
 
@@ -280,15 +283,15 @@
 
 */
     VTABLE void set_pmc_keyed_int(INTVAL index, PMC *value)  {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
-        opcode_t type = VTABLE_isa(interp, value,
-                Parrot_str_new_constant(interp, "Key"))
+        const opcode_t type =
+            VTABLE_isa(INTERP, value, Parrot_str_new_constant(INTERP, "Key"))
                 ? PFC_KEY
                 : PFC_PMC;
 
-        VTABLE_set_pmc_keyed_int(interp, attrs->constants,  index, value);
-        VTABLE_set_integer_keyed_int(interp, attrs->types, index, type);
+        VTABLE_set_pmc_keyed_int(INTERP, attrs->constants,  index, value);
+        VTABLE_set_integer_keyed_int(INTERP, attrs->types, index, type);
     }
 
 
@@ -316,7 +319,7 @@
 
 */
     METHOD get_type(INTVAL index) {
-        INTVAL rv = VTABLE_get_integer_keyed_int(interp,
+        INTVAL rv = VTABLE_get_integer_keyed_int(INTERP,
                 PARROT_PACKFILECONSTANTTABLE(SELF)->types, index);
         RETURN(INTVAL rv);
     }
@@ -338,7 +341,7 @@
     METHOD set_main(INTVAL index) {
         PMC *mainsub = SELF.get_pmc_keyed_int(index);
         if (mainsub->vtable->base_type != enum_class_Sub)
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "Attempt to set main flag in a non Sub");
         SUB_FLAG_flag_SET(PF_MAIN, mainsub);
@@ -354,66 +357,63 @@
 
 */
     MULTI INTVAL get_or_create_constant(STRING *value) {
-        Parrot_PackfileConstantTable_attributes *attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
-        INTVAL  num = VTABLE_elements(interp, attrs->types);
+        const INTVAL num = VTABLE_elements(INTERP, attrs->types);
         INTVAL  i;
-        STRING *str;
+
         for (i=0; i < num; ++i) {
-            INTVAL type = VTABLE_get_integer_keyed_int(interp, attrs->types, i);
-            if (type != PFC_STRING)
-                continue;
-
-            str = VTABLE_get_string_keyed_int(interp, attrs->constants, i);
-            if (Parrot_str_equal(interp, value, str))
-                return i;
+            const INTVAL type = VTABLE_get_integer_keyed_int(INTERP, attrs->types, i);
+            if (type == PFC_STRING) {
+                STRING * const str = VTABLE_get_string_keyed_int(INTERP, attrs->constants, i);
+                if (Parrot_str_equal(INTERP, value, str))
+                    return i;
+            }
         }
         /* Constant not found. Add new one */
-        VTABLE_set_string_keyed_int(interp, SELF, i, value);
+        VTABLE_set_string_keyed_int(INTERP, SELF, i, value);
         return i;
     }
 
     MULTI INTVAL get_or_create_constant(FLOATVAL value) {
-        Parrot_PackfileConstantTable_attributes *attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
-        INTVAL   num = VTABLE_elements(interp, attrs->types);
+        const INTVAL num = VTABLE_elements(INTERP, attrs->types);
         INTVAL   i;
-        FLOATVAL val;
+
         for (i=0; i < num; ++i) {
-            INTVAL type = VTABLE_get_integer_keyed_int(interp, attrs->types, i);
-            if (type != PFC_NUMBER)
-                continue;
-
-            val = VTABLE_get_number_keyed_int(interp, attrs->constants, i);
-            if (FLOAT_IS_ZERO(fabs(val - value)))
-                return i;
+            const INTVAL type = VTABLE_get_integer_keyed_int(INTERP, attrs->types, i);
+            if (type == PFC_NUMBER) {
+                const FLOATVAL val = VTABLE_get_number_keyed_int(INTERP, attrs->constants, i);
+                if (FLOAT_IS_ZERO(fabs(val - value)))
+                    return i;
+            }
         }
         /* Constant not found. Add new one */
-        VTABLE_set_number_keyed_int(interp, SELF, i, value);
+        VTABLE_set_number_keyed_int(INTERP, SELF, i, value);
         return i;
     }
 
     MULTI INTVAL get_or_create_constant(PMC *value) {
-        Parrot_PackfileConstantTable_attributes *attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
-        INTVAL   num = VTABLE_elements(interp, attrs->types);
+        const INTVAL   num = VTABLE_elements(INTERP, attrs->types);
         INTVAL   i;
-        PMC     *val;
-        INTVAL   val_type = value->vtable->base_type == enum_class_Key
+        const INTVAL val_type =
+            value->vtable->base_type == enum_class_Key
                             ? PFC_KEY
                             : PFC_PMC;
 
         for (i=0; i < num; ++i) {
-            INTVAL type = VTABLE_get_integer_keyed_int(interp, attrs->types, i);
-            if (type != val_type)
-                continue;
-
-            val = VTABLE_get_pmc_keyed_int(interp, attrs->constants, i);
-            if (VTABLE_is_equal(INTERP, value, val))
-                return i;
+            const INTVAL type = VTABLE_get_integer_keyed_int(INTERP, attrs->types, i);
+            if (type == val_type) {
+                PMC * const val = VTABLE_get_pmc_keyed_int(INTERP, attrs->constants, i);
+                if (VTABLE_is_equal(INTERP, value, val))
+                    return i;
+            }
         }
         /* Constant not found. Add new one */
-        VTABLE_set_pmc_keyed_int(interp, SELF, i, value);
+        VTABLE_set_pmc_keyed_int(INTERP, SELF, i, value);
         return i;
     }
 

Copied: branches/ops_pct/src/pmc/packfiledebug.pmc (from r46301, trunk/src/pmc/packfiledebug.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/pmc/packfiledebug.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/pmc/packfiledebug.pmc)
@@ -0,0 +1,210 @@
+/*
+Copyright (C) 2001-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/packfiledebug.pmc - Packfile Debug Segment PMC
+
+=head1 DESCRIPTION
+
+This class implements a PackfileDebug object, a segment of the .pbc
+data file used for storing pir debug information.
+
+See packfile.pmc for the toplevel Packfile interface, see packfilesegment.pmc
+for the list of common methods every packfile segment pmc must implement; see
+PDD13 for the design spec.
+
+Initial and experimental version, using some vtables as a quick way of testing.
+
+=head2 Vtable functions
+
+=over 4
+
+=cut
+
+*/
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+pmclass PackfileDebug auto_attrs extends PackfileRawSegment {
+    /* Number of file mappings */
+    ATTR INTVAL num_mappings;
+    /* File name mapping */
+    ATTR PMC *mapping_offset;
+    ATTR PMC *mapping_filename;
+
+/*
+
+=item C<init>
+
+Create empty PackfileDebug.
+
+=cut
+
+*/
+
+    VTABLE void init() {
+        SUPER();
+        SET_ATTR_type(INTERP, SELF, PF_DEBUG_SEG);
+    }
+
+/*
+
+=item C<void mark()>
+
+Marks the object as live.
+
+=cut
+
+*/
+
+    VTABLE void mark() {
+        PMC *mapping_offset;
+        PMC *mapping_filename;
+        GET_ATTR_mapping_offset(INTERP, SELF, mapping_offset);
+        GET_ATTR_mapping_filename(INTERP, SELF, mapping_filename);
+        Parrot_gc_mark_PMC_alive(INTERP, mapping_offset);
+        Parrot_gc_mark_PMC_alive(INTERP, mapping_filename);
+
+        SUPER();
+    }
+
+
+/*
+
+=item C<set_pointer>
+
+Set pointer to underlying PackFile_ConstTable
+
+=cut
+
+*/
+
+    VTABLE void set_pointer(void * pointer) {
+        PackFile_Debug *p = (PackFile_Debug *) pointer;
+        INTVAL num_mappings = p->num_mappings;
+        PMC *mapping_offset = Parrot_pmc_new_init_int(INTERP,
+                                                      enum_class_FixedIntegerArray, num_mappings);
+        PMC *mapping_filename = Parrot_pmc_new_init_int(INTERP,
+                                                      enum_class_FixedIntegerArray, num_mappings);
+        INTVAL i;
+        STRING *t = CONST_STRING(INTERP, "test");
+
+        SUPER(pointer);
+        for (i = 0; i < num_mappings; ++i) {
+            VTABLE_set_integer_keyed_int(INTERP, mapping_offset, i, p->mappings[i].offset);
+            VTABLE_set_integer_keyed_int(INTERP, mapping_filename, i, p->mappings[i].filename);
+        }
+        SET_ATTR_num_mappings(INTERP, SELF, p->num_mappings);
+        SET_ATTR_mapping_offset(INTERP, SELF, mapping_offset);
+        SET_ATTR_mapping_filename(INTERP, SELF, mapping_filename);
+    }
+
+/*
+
+=item C<void *get_pointer()>
+=cut
+
+*/
+
+    VTABLE void *get_pointer() {
+        PackFile_Debug *p = (PackFile_Debug *) mem_gc_realloc_n_typed(INTERP,
+                                                           SUPER(), sizeof (PackFile_Debug), char);
+        INTVAL num_mappings;
+        PMC *mapping_offset;
+        PMC *mapping_filename;
+        INTVAL i;
+        GET_ATTR_num_mappings(INTERP, SELF, num_mappings);
+        GET_ATTR_mapping_offset(INTERP, SELF, mapping_offset);
+        GET_ATTR_mapping_filename(INTERP, SELF, mapping_filename);
+        p->num_mappings = num_mappings;
+        p->mappings = mem_gc_allocate_n_typed(INTERP, num_mappings, PackFile_DebugFilenameMapping);
+        for (i = 0; i < num_mappings; ++i) {
+            p->mappings[i].offset = VTABLE_get_integer_keyed_int(INTERP, mapping_offset, i);
+            p->mappings[i].filename = VTABLE_get_integer_keyed_int(INTERP, mapping_filename, i);
+        }
+        return p;
+    }
+
+/*
+
+=item C<INTVAL get_integer()>
+
+Get the number of filename mappings.
+
+=cut
+
+*/
+
+    VTABLE INTVAL get_integer() {
+        INTVAL num_mappings;
+        GET_ATTR_num_mappings(INTERP, SELF, num_mappings);
+        return num_mappings;
+    }
+
+/*
+
+=item C<INTVAL get_string_keyed_int(INTVAL n)>
+
+Get the filename mapping n.
+
+=cut
+
+*/
+
+    VTABLE PMC *get_pmc_keyed_int(INTVAL n) {
+        INTVAL num_mappings;
+        GET_ATTR_num_mappings(INTERP, SELF, num_mappings);
+        if (n < num_mappings) {
+            PMC *mapping_offset;
+            INTVAL offset;
+            PMC *result;
+            GET_ATTR_mapping_offset(INTERP, SELF, mapping_offset);
+            offset = VTABLE_get_integer_keyed_int(INTERP, mapping_offset, n);
+            result = Parrot_pmc_new(INTERP, enum_class_Integer);
+            VTABLE_set_integer_native(INTERP, result, offset);
+            return result;
+        }
+        else return PMCNULL;
+    }
+
+/*
+
+=item C<INTVAL get_string_keyed_int(INTVAL n)>
+
+Get the filename mapping n.
+
+=cut
+
+*/
+
+    VTABLE STRING *get_string_keyed_int(INTVAL n) {
+        INTVAL num_mappings;
+        GET_ATTR_num_mappings(INTERP, SELF, num_mappings);
+        if (n < num_mappings) {
+            PMC *mapping_filename;
+            GET_ATTR_mapping_filename(INTERP, SELF, mapping_filename);
+            return VTABLE_get_string_keyed_int(INTERP, mapping_filename, n);
+        }
+        else return STRINGNULL;
+    }
+
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/src/pmc/packfiledirectory.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfiledirectory.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfiledirectory.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -25,6 +25,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileDirectory auto_attrs extends PackfileSegment {
     /* Directory is a hash of Segments */
     ATTR PMC *hash;
@@ -42,7 +46,7 @@
         Parrot_PackfileDirectory_attributes * attrs =
                 PMC_data_typed(SELF, Parrot_PackfileDirectory_attributes*);
 
-        attrs->hash = Parrot_pmc_new(interp, enum_class_Hash);
+        attrs->hash = Parrot_pmc_new(INTERP, enum_class_Hash);
 
         PObj_custom_mark_SET(SELF);
     }
@@ -61,7 +65,7 @@
         Parrot_PackfileDirectory_attributes * attrs =
                 PARROT_PACKFILEDIRECTORY(SELF);
 
-        Parrot_gc_mark_PMC_alive(interp, attrs->hash);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->hash);
 
         SUPER();
     }
@@ -102,20 +106,22 @@
               case PF_ANNOTATIONS_SEG:
                 pmc_type = enum_class_PackfileAnnotations;
                 break;
+              case PF_DEBUG_SEG:
+                pmc_type = enum_class_PackfileDebug;
+                break;
               case PF_BYTEC_SEG:
               case PF_UNKNOWN_SEG:
-              case PF_DEBUG_SEG:
               default:
                 pmc_type = enum_class_PackfileRawSegment;
                 break;
             }
 
-            segment = Parrot_pmc_new(interp, pmc_type);
+            segment = Parrot_pmc_new(INTERP, pmc_type);
             name    = pfseg->name;
-            VTABLE_set_pmc_keyed_str(interp, SELF, name, segment);
+            VTABLE_set_pmc_keyed_str(INTERP, SELF, name, segment);
 
             /* Initialize internal PMC structure */
-            VTABLE_set_pointer(interp, segment, pfseg);
+            VTABLE_set_pointer(INTERP, segment, pfseg);
 
         }
     }
@@ -133,19 +139,19 @@
     VTABLE void *get_pointer() {
         Parrot_PackfileDirectory_attributes * attrs =
                 PARROT_PACKFILEDIRECTORY(SELF);
-        PackFile           * const pf    = PackFile_new(interp, 0); /* dummy PackFile... */
+        PackFile           * const pf    = PackFile_new(INTERP, 0); /* dummy PackFile... */
         PackFile_Directory * const pfdir = &pf->directory;
-        PMC                * const iter  = VTABLE_get_iter(interp, attrs->hash);
+        PMC                * const iter  = VTABLE_get_iter(INTERP, attrs->hash);
 
         /* Create Segments. Add to Directory with transfering ownership */
-        while (VTABLE_get_bool(interp, iter)) {
-            STRING           * const name  = VTABLE_shift_string(interp, iter);
-            PMC              * const seg   = VTABLE_get_pmc_keyed_str(interp, attrs->hash, name);
-            PackFile_Segment * const pfseg = (PackFile_Segment *)VTABLE_get_pointer(interp, seg);
+        while (VTABLE_get_bool(INTERP, iter)) {
+            STRING           * const name  = VTABLE_shift_string(INTERP, iter);
+            PMC              * const seg   = VTABLE_get_pmc_keyed_str(INTERP, attrs->hash, name);
+            PackFile_Segment * const pfseg = (PackFile_Segment *)VTABLE_get_pointer(INTERP, seg);
 
             pfseg->pf   = pf;
-            pfseg->name = Parrot_str_copy(interp, name);
-            PackFile_add_segment(interp, pfdir, pfseg);
+            pfseg->name = name;
+            PackFile_add_segment(INTERP, pfdir, pfseg);
         }
 
         return pf;
@@ -161,7 +167,7 @@
 
 */
     VTABLE INTVAL elements() {
-        return VTABLE_elements(interp, PARROT_PACKFILEDIRECTORY(SELF)->hash);
+        return VTABLE_elements(INTERP, PARROT_PACKFILEDIRECTORY(SELF)->hash);
     }
 
 
@@ -176,7 +182,7 @@
 */
 
     VTABLE PMC *get_iter() {
-        return VTABLE_get_iter(interp, PARROT_PACKFILEDIRECTORY(SELF)->hash);
+        return VTABLE_get_iter(INTERP, PARROT_PACKFILEDIRECTORY(SELF)->hash);
     }
 
 /*
@@ -189,7 +195,7 @@
 
 */
     VTABLE PMC *get_pmc_keyed_str(STRING *name)  {
-        return VTABLE_get_pmc_keyed_str(interp,
+        return VTABLE_get_pmc_keyed_str(INTERP,
                 PARROT_PACKFILEDIRECTORY(SELF)->hash, name);
     }
 
@@ -204,8 +210,8 @@
 
 */
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        STRING * const s_key = VTABLE_get_string(interp, key);
-        return VTABLE_get_pmc_keyed_str(interp,
+        STRING * const s_key = VTABLE_get_string(INTERP, key);
+        return VTABLE_get_pmc_keyed_str(INTERP,
                 PARROT_PACKFILEDIRECTORY(SELF)->hash, s_key);
     }
 
@@ -223,10 +229,10 @@
 
 */
     VTABLE void set_pmc_keyed_str(STRING *name, PMC *segment)  {
-        Parrot_pcc_invoke_method_from_c_args(interp, segment,
-            Parrot_str_new_constant(interp, "set_directory"),
+        Parrot_pcc_invoke_method_from_c_args(INTERP, segment,
+            Parrot_str_new_constant(INTERP, "set_directory"),
             "P->", SELF);
-        VTABLE_set_pmc_keyed_str(interp,
+        VTABLE_set_pmc_keyed_str(INTERP,
             PARROT_PACKFILEDIRECTORY(SELF)->hash, name, segment);
     }
 
@@ -242,8 +248,8 @@
 */
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *segment)  {
-        STRING * const s_key = VTABLE_get_string(interp, key);
-        VTABLE_set_pmc_keyed_str(interp, SELF, s_key, segment);
+        STRING * const s_key = VTABLE_get_string(INTERP, key);
+        VTABLE_set_pmc_keyed_str(INTERP, SELF, s_key, segment);
     }
 
 /*
@@ -257,7 +263,7 @@
 */
 
     VTABLE void delete_keyed(PMC *key) {
-        VTABLE_delete_keyed(interp,
+        VTABLE_delete_keyed(INTERP,
             PARROT_PACKFILEDIRECTORY(SELF)->hash, key);
     }
 

Modified: branches/ops_pct/src/pmc/packfilefixupentry.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfilefixupentry.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfilefixupentry.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileFixupEntry auto_attrs {
     ATTR INTVAL     type;
     ATTR STRING     *name;
@@ -38,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 = Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
 
         PObj_custom_mark_SET(SELF);
     }
@@ -54,10 +58,10 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileFixupEntry_attributes * attrs =
+        Parrot_PackfileFixupEntry_attributes * const attrs =
                 PARROT_PACKFILEFIXUPENTRY(SELF);
 
-        Parrot_gc_mark_STRING_alive(interp, attrs->name);
+        Parrot_gc_mark_STRING_alive(INTERP, attrs->name);
     }
 
 /*
@@ -71,12 +75,12 @@
 */
 
     VTABLE void set_pointer(void * pointer) {
-        Parrot_PackfileFixupEntry_attributes * attrs =
+        Parrot_PackfileFixupEntry_attributes * const attrs =
                 PARROT_PACKFILEFIXUPENTRY(SELF);
         PackFile_FixupEntry *entry = (PackFile_FixupEntry*)pointer;
 
         attrs->type     = entry->type;
-        attrs->name     = Parrot_str_new_init(interp, entry->name,
+        attrs->name     = Parrot_str_new_init(INTERP, entry->name,
                 strlen(entry->name), PARROT_FIXED_8_ENCODING,
                 PARROT_BINARY_CHARSET, 0);
         attrs->offset   = entry->offset;
@@ -92,13 +96,13 @@
 
 */
     VTABLE void *get_pointer() {
-        Parrot_PackfileFixupEntry_attributes * attrs =
+        Parrot_PackfileFixupEntry_attributes * const attrs =
                 PARROT_PACKFILEFIXUPENTRY(SELF);
-        PackFile_FixupEntry                  * entry =
+        PackFile_FixupEntry                  * const entry =
                 mem_gc_allocate_zeroed_typed(INTERP, PackFile_FixupEntry);
 
         entry->type     = attrs->type;
-        entry->name     = strdup(Parrot_string_cstring(interp, attrs->name));
+        entry->name     = strdup(Parrot_str_cstring(INTERP, attrs->name));
         entry->offset   = attrs->offset;
         return entry;
     }
@@ -169,7 +173,7 @@
 
 */
     METHOD get_type() {
-        INTVAL rv = PARROT_PACKFILEFIXUPENTRY(SELF)->type;
+        const INTVAL rv = PARROT_PACKFILEFIXUPENTRY(SELF)->type;
         RETURN(INTVAL rv);
     }
 

Modified: branches/ops_pct/src/pmc/packfilefixuptable.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfilefixuptable.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfilefixuptable.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,6 +24,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileFixupTable auto_attrs extends PackfileSegment {
     /* RPA of entries */
     ATTR PMC *entries;
@@ -42,7 +46,7 @@
         Parrot_PackfileFixupTable_attributes * attrs =
                 PMC_data_typed(SELF, Parrot_PackfileFixupTable_attributes*);
 
-        attrs->entries = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+        attrs->entries = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
 
         PObj_custom_mark_SET(SELF);
     }
@@ -61,7 +65,7 @@
         Parrot_PackfileFixupTable_attributes * attrs =
                 PARROT_PACKFILEFIXUPTABLE(SELF);
 
-        Parrot_gc_mark_PMC_alive(interp, attrs->entries);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->entries);
 
         SUPER();
     }
@@ -85,13 +89,13 @@
         PackFile_FixupEntry *val;
         opcode_t             i;
 
-        VTABLE_set_integer_native(interp, attrs->entries, table->fixup_count);
+        VTABLE_set_integer_native(INTERP, attrs->entries, table->fixup_count);
 
         for (i = 0; i < table->fixup_count; ++i) {
-            val = table->fixups[i];
-            entry = Parrot_pmc_new(interp, enum_class_PackfileFixupEntry);
-            VTABLE_set_pointer(interp, entry, (void*)val);
-            VTABLE_set_pmc_keyed_int(interp, attrs->entries, i, entry);
+            val = table->fixups + i;
+            entry = Parrot_pmc_new(INTERP, enum_class_PackfileFixupEntry);
+            VTABLE_set_pointer(INTERP, entry, (void*)val);
+            VTABLE_set_pmc_keyed_int(INTERP, attrs->entries, i, entry);
         }
     }
 
@@ -114,15 +118,16 @@
         opcode_t              i;
 
         pftable->base.type   = PF_FIXUP_SEG;
-        pftable->fixup_count = VTABLE_elements(interp, attrs->entries);
+        pftable->fixup_count = VTABLE_elements(INTERP, attrs->entries);
         pftable->fixups      = mem_gc_allocate_n_typed(INTERP,
-                pftable->fixup_count, PackFile_FixupEntry*);
+                pftable->fixup_count, PackFile_FixupEntry);
 
         /* Copy all entries */
         for (i = 0; i < pftable->fixup_count; ++i) {
-            entry = VTABLE_get_pmc_keyed_int(interp, attrs->entries, i);
-            val   = (PackFile_FixupEntry*)VTABLE_get_pointer(interp, entry);
-            pftable->fixups[i] = val;
+            entry = VTABLE_get_pmc_keyed_int(INTERP, attrs->entries, i);
+            val   = (PackFile_FixupEntry*)VTABLE_get_pointer(INTERP, entry);
+            pftable->fixups[i] = *val;
+            mem_gc_free(INTERP, val);
         }
 
         return pftable;
@@ -139,7 +144,7 @@
 
 */
     VTABLE INTVAL elements() {
-        return VTABLE_elements(interp,
+        return VTABLE_elements(INTERP,
                 PARROT_PACKFILEFIXUPTABLE(SELF)->entries);
     }
 
@@ -154,7 +159,7 @@
 
 */
     VTABLE PMC *get_pmc_keyed_int(INTVAL index)  {
-        return VTABLE_get_pmc_keyed_int(interp,
+        return VTABLE_get_pmc_keyed_int(INTERP,
             PARROT_PACKFILEFIXUPTABLE(SELF)->entries, index);
     }
 
@@ -169,7 +174,7 @@
 
 */
     VTABLE void set_pmc_keyed_int(INTVAL index, PMC *value)  {
-        VTABLE_set_pmc_keyed_int(interp,
+        VTABLE_set_pmc_keyed_int(INTERP,
                 PARROT_PACKFILEFIXUPTABLE(SELF)->entries, index, value);
     }
 

Modified: branches/ops_pct/src/pmc/packfilerawsegment.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfilerawsegment.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfilerawsegment.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,6 +24,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileRawSegment auto_attrs extends PackfileSegment {
     /* Type of segment */
     ATTR INTVAL  type;
@@ -44,7 +48,7 @@
         Parrot_PackfileRawSegment_attributes * attrs =
                 PMC_data_typed(SELF, Parrot_PackfileRawSegment_attributes*);
 
-        attrs->opcodes = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
+        attrs->opcodes = Parrot_pmc_new(INTERP, enum_class_ResizableIntegerArray);
         attrs->type    = PF_BYTEC_SEG;
 
         PObj_custom_mark_SET(SELF);
@@ -61,10 +65,10 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileRawSegment_attributes * attrs =
+        Parrot_PackfileRawSegment_attributes * const attrs =
                 PARROT_PACKFILERAWSEGMENT(SELF);
 
-        Parrot_gc_mark_PMC_alive(interp, attrs->opcodes);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->opcodes);
 
         SUPER();
     }
@@ -83,20 +87,21 @@
     VTABLE void set_pointer(void * pointer) {
         const PackFile_Segment * const pfseg =
                 (const PackFile_Segment *)pointer;
-        Parrot_PackfileRawSegment_attributes * attrs =
+        Parrot_PackfileRawSegment_attributes * const attrs =
                 PARROT_PACKFILERAWSEGMENT(SELF);
-        PMC * opcodes = attrs->opcodes;
-        size_t i;
+        PMC * const opcodes = attrs->opcodes;
 
         /* Preserve type of unpacked segment */
         attrs->type = pfseg->type;
 
         if (pfseg->size) {
+            size_t i;
+
             /* copy data to own array */
-            VTABLE_set_integer_native(interp, opcodes, pfseg->size);
+            VTABLE_set_integer_native(INTERP, opcodes, pfseg->size);
             /* Not very efficient... */
             for (i = 0; i < pfseg->size; ++i) {
-                VTABLE_set_integer_keyed_int(interp, opcodes, i, pfseg->data[i]);
+                VTABLE_set_integer_keyed_int(INTERP, opcodes, i, pfseg->data[i]);
             }
         }
     }
@@ -112,18 +117,18 @@
     VTABLE void *get_pointer() {
         PackFile_Segment * pfseg =
                 (PackFile_Segment*)mem_gc_allocate_zeroed_typed(INTERP, PackFile_ByteCode);
-        Parrot_PackfileRawSegment_attributes * attrs =
+        Parrot_PackfileRawSegment_attributes * const attrs =
                 PARROT_PACKFILERAWSEGMENT(SELF);
         PMC * opcodes = attrs->opcodes;
         size_t i;
 
         pfseg->type     = attrs->type;
-        pfseg->size     = VTABLE_get_integer(interp, opcodes);
+        pfseg->size     = VTABLE_get_integer(INTERP, opcodes);
         pfseg->data     = mem_gc_allocate_n_typed(INTERP, pfseg->size, opcode_t);
 
         /* Not very efficient... */
         for (i = 0; i < pfseg->size; ++i) {
-            pfseg->data[i] = VTABLE_get_integer_keyed_int(interp, opcodes, i);
+            pfseg->data[i] = VTABLE_get_integer_keyed_int(INTERP, opcodes, i);
         }
 
         return pfseg;
@@ -138,7 +143,7 @@
 
 */
     VTABLE INTVAL elements() {
-        return VTABLE_elements(interp,
+        return VTABLE_elements(INTERP,
                 PARROT_PACKFILERAWSEGMENT(SELF)->opcodes);
     }
 
@@ -153,7 +158,7 @@
 
 */
     VTABLE INTVAL get_integer_keyed_int(INTVAL key)  {
-        return VTABLE_get_integer_keyed_int(interp,
+        return VTABLE_get_integer_keyed_int(INTERP,
                 PARROT_PACKFILERAWSEGMENT(SELF)->opcodes, key);
     }
 
@@ -168,7 +173,7 @@
 
 */
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value)  {
-        VTABLE_set_integer_keyed_int(interp,
+        VTABLE_set_integer_keyed_int(INTERP,
             PARROT_PACKFILERAWSEGMENT(SELF)->opcodes, key, value);
     }
 
@@ -182,7 +187,7 @@
 
 */
     VTABLE void push_integer(INTVAL value)  {
-        VTABLE_push_integer(interp,
+        VTABLE_push_integer(INTERP,
             PARROT_PACKFILERAWSEGMENT(SELF)->opcodes, value);
     }
 
@@ -199,7 +204,7 @@
 */
 
     METHOD type(INTVAL type :optional, INTVAL got_type :opt_flag) {
-        Parrot_PackfileRawSegment_attributes * attrs =
+        Parrot_PackfileRawSegment_attributes * const attrs =
                 PARROT_PACKFILERAWSEGMENT(SELF);
         INTVAL res;
 

Modified: branches/ops_pct/src/pmc/packfilesegment.pmc
==============================================================================
--- branches/ops_pct/src/pmc/packfilesegment.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/packfilesegment.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -23,6 +23,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileSegment auto_attrs {
     /*
     Directory which owns this segment. Required for correct pack/unpack
@@ -63,7 +67,7 @@
         Parrot_PackfileSegment_attributes * attrs =
                 PARROT_PACKFILESEGMENT(SELF);
 
-        Parrot_gc_mark_PMC_alive(interp, attrs->directory);
+        Parrot_gc_mark_PMC_alive(INTERP, attrs->directory);
     }
 
 /*
@@ -101,7 +105,7 @@
 
 */
     METHOD pack() {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
                                     "PackfileSegment.pack() not implemented yet.");
     }
 
@@ -116,7 +120,7 @@
 
 */
     METHOD unpack(STRING *data) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
                                     "PackfileSegment.unpack() not implemented yet.");
     }
 

Modified: branches/ops_pct/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/ops_pct/src/pmc/parrotinterpreter.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/parrotinterpreter.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -36,10 +36,23 @@
 #define PMC_args(x)   ((Parrot_ParrotInterpreter_attributes *)PMC_data(x))->args
 #define PMC_sub(x)    ((Parrot_ParrotInterpreter_attributes *)PMC_data(x))->sub
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void create_interp(
+    ARGIN(PMC *self),
+    ARGIN_NULLOK(Parrot_Interp parent))
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_create_interp __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(self))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 
-=item C<void
-clone_interpreter(Parrot_Interp dest, const Parrot_Interp source, INTVAL flags)>
+=item C<void clone_interpreter(Parrot_Interp d, Parrot_Interp s, INTVAL flags)>
 
 Clones the interpreter as specified by the flags.
 
@@ -69,7 +82,6 @@
     if (flags & PARROT_CLONE_HLL) {
         /* we'd like to share the HLL data. Give it a PMC_sync structure
            if it doesn't have one already */
-        Parrot_gc_add_pmc_sync(s, s->HLL_info);
         d->HLL_info = s->HLL_info;
         Parrot_regenerate_HLL_namespaces(d);
     }
@@ -127,11 +139,12 @@
                     PObj_is_class_TEST(s->vtables[i]->pmc_class)) {
                 /* Cloning the class into the new interpreter ought
                  * to be sufficient to instantiate the class.  */
-                PMC          *source       = s->vtables[i]->pmc_class;
-                PMC          *dest         = Parrot_clone(d, source);
-                Parrot_Class_attributes *source_class = PARROT_CLASS(source);
-                Parrot_Class_attributes *dest_class   = PARROT_CLASS(dest);
-                dest_class->name           = Parrot_str_copy(d, source_class->name);
+                PMC                     * const source       = s->vtables[i]->pmc_class;
+                PMC                     * const dest         = Parrot_clone(d, source);
+                Parrot_Class_attributes * const source_class = PARROT_CLASS(source);
+                Parrot_Class_attributes * const dest_class   = PARROT_CLASS(dest);
+
+                dest_class->name           = source_class->name;
                 dest_class->_namespace     = VTABLE_clone(d, source_class->_namespace);
             }
         }
@@ -149,8 +162,7 @@
 
 /*
 
-=item C<static void
-create_interp(PMC *self, Parrot_Interp parent)>
+=item C<static void create_interp(PMC *self, Parrot_Interp parent)>
 
 Creates a new child interpreter of C<parent>.
 
@@ -159,8 +171,9 @@
 */
 
 static void
-create_interp(PMC *self, Parrot_Interp parent)
+create_interp(ARGIN(PMC *self), ARGIN_NULLOK(Parrot_Interp parent))
 {
+    ASSERT_ARGS(create_interp)
     Interp_flags flag  = PARROT_NO_FLAGS;
     Parrot_Interp new_interp;
 
@@ -231,7 +244,7 @@
          * so we check, if the interpreter is already set up
          */
         if (!PMC_data(SELF)) {
-            Parrot_ParrotInterpreter_attributes *attrs =
+            Parrot_ParrotInterpreter_attributes * const attrs =
                 mem_gc_allocate_zeroed_typed(INTERP, Parrot_ParrotInterpreter_attributes);
             PMC_data(SELF) = attrs;
         }
@@ -254,10 +267,11 @@
 */
 
     VTABLE void init_pmc(PMC *parent) {
+        /* XXX Can this be moved inside the block where it's used */
         Parrot_Interp p = PMC_interp(parent);
 
         if (!PMC_data(SELF)) {
-            Parrot_ParrotInterpreter_attributes *attrs =
+            Parrot_ParrotInterpreter_attributes * const attrs =
                 mem_gc_allocate_zeroed_typed(INTERP, Parrot_ParrotInterpreter_attributes);
             PMC_data(SELF) = attrs;
         }
@@ -302,7 +316,7 @@
          * ParrotInterpreter through Parrot_pmc_new_noinit.  If this PMC hasn't been
          * initialized, cheat by initializing instead. */
         if (!PMC_data(SELF)) {
-            Parrot_ParrotInterpreter_attributes *attrs =
+            Parrot_ParrotInterpreter_attributes * const attrs =
                 mem_gc_allocate_zeroed_typed(INTERP, Parrot_ParrotInterpreter_attributes);
             PMC_data(SELF) = attrs;
             PObj_custom_destroy_SET(SELF);
@@ -336,7 +350,9 @@
 
     VTABLE INTVAL get_integer() {
         const Parrot_Interp i = PMC_interp(SELF);
-        return (INTVAL)i->thread_data->tid;
+        if (i->thread_data)
+          return (INTVAL)i->thread_data->tid;
+        return 0;
     }
 
 /*
@@ -353,14 +369,14 @@
         Interp * const new_interp = PMC_interp(SELF);
 
         /* setup code */
-        pt_thread_prepare_for_run(new_interp, interp);
+        pt_thread_prepare_for_run(new_interp, INTERP);
 
         /* TODO pass arguments from parent (interp) to child (new_interp) by
          * possibly clone of share the arguments r/o args can be passed as is */
 
         /* calculate offset and run */
         runops(new_interp, (size_t)((opcode_t *)PMC_sub(SELF) -
-            (opcode_t *)interp->code->base.data));
+            (opcode_t *)INTERP->code->base.data));
 
         return (opcode_t *)next;
     }
@@ -441,122 +457,122 @@
 */
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        PMC    *nextkey, *cont;
+        PMC    *nextkey;
         STRING *outer = NULL;
-        STRING *item  = key_string(interp, key);
-        STRING *name  = CONST_STRING(interp, "globals");
+        STRING *item  = key_string(INTERP, key);
+        STRING *name  = CONST_STRING(INTERP, "globals");
         int     level = 0;
 
         PMC *ctx;
 
-        if (Parrot_str_equal(interp, item, name))
-            return interp->root_namespace;
+        if (Parrot_str_equal(INTERP, item, name))
+            return INTERP->root_namespace;
 
-        name  = CONST_STRING(interp, "outer");
+        name  = CONST_STRING(INTERP, "outer");
 
-        if (Parrot_str_equal(interp, item, name)) {
+        if (Parrot_str_equal(INTERP, item, name)) {
             outer   = item;
             nextkey = key_next(INTERP, key);
 
             if (nextkey && (PObj_get_FLAGS(nextkey) & KEY_string_FLAG)) {
                 key  = nextkey;
-                item = VTABLE_get_string(interp, key);
+                item = VTABLE_get_string(INTERP, key);
             }
         }
 
         nextkey = key_next(INTERP, key);
 
         if (nextkey)
-            level = VTABLE_get_integer(interp, nextkey);
+            level = VTABLE_get_integer(INTERP, nextkey);
         else if (outer)
             level = 1;
 
         if (level < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, CONTROL_ERROR,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, CONTROL_ERROR,
                 "No such caller depth");
 
-        ctx = CURRENT_CONTEXT(interp);
+        ctx = CURRENT_CONTEXT(INTERP);
 
         if (outer) {
             for (; level; --level) {
-                ctx = Parrot_pcc_get_outer_ctx(interp, ctx);
+                ctx = Parrot_pcc_get_outer_ctx(INTERP, ctx);
                 if (PMC_IS_NULL(ctx))
-                    Parrot_ex_throw_from_c_args(interp, NULL,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL,
                         CONTROL_ERROR, "No such outer depth");
             }
         }
         else {
             for (; level; --level) {
-                cont = Parrot_pcc_get_continuation(interp, ctx);
+                PMC * const cont = Parrot_pcc_get_continuation(INTERP, ctx);
 
                 if (PMC_IS_NULL(cont) || !PARROT_CONTINUATION(cont)->seg)
-                    Parrot_ex_throw_from_c_args(interp, NULL,
+                    Parrot_ex_throw_from_c_args(INTERP, NULL,
                         CONTROL_ERROR, "No such caller depth");
 
                 ctx = PARROT_CONTINUATION(cont)->to_ctx;
 
-                if (PMC_IS_NULL(Parrot_pcc_get_sub(interp, ctx)))
-                    Parrot_ex_throw_from_c_args(interp, NULL,
+                if (PMC_IS_NULL(Parrot_pcc_get_sub(INTERP, ctx)))
+                    Parrot_ex_throw_from_c_args(INTERP, NULL,
                         CONTROL_ERROR, "No such caller depth");
             }
         }
 
         if (item == outer)
-            return Parrot_pcc_get_sub(interp, ctx);
+            return Parrot_pcc_get_sub(INTERP, ctx);
 
-        name = CONST_STRING(interp, "context");
+        name = CONST_STRING(INTERP, "context");
 
-        if (Parrot_str_equal(interp, item, name))
+        if (Parrot_str_equal(INTERP, item, name))
             return ctx;
 
-        name = CONST_STRING(interp, "sub");
+        name = CONST_STRING(INTERP, "sub");
 
-        if (Parrot_str_equal(interp, item, name))
-            return Parrot_pcc_get_sub(interp, ctx);
+        if (Parrot_str_equal(INTERP, item, name))
+            return Parrot_pcc_get_sub(INTERP, ctx);
 
-        name = CONST_STRING(interp, "lexpad");
+        name = CONST_STRING(INTERP, "lexpad");
 
-        if (Parrot_str_equal(interp, item, name))
-            return Parrot_pcc_get_lex_pad(interp, ctx);
+        if (Parrot_str_equal(INTERP, item, name))
+            return Parrot_pcc_get_lex_pad(INTERP, ctx);
 
-        name = CONST_STRING(interp, "namespace");
+        name = CONST_STRING(INTERP, "namespace");
 
-        if (Parrot_str_equal(interp, item, name))
-            return Parrot_pcc_get_namespace(interp, ctx);
+        if (Parrot_str_equal(INTERP, item, name))
+            return Parrot_pcc_get_namespace(INTERP, ctx);
 
-        name = CONST_STRING(interp, "continuation");
+        name = CONST_STRING(INTERP, "continuation");
 
-        if (Parrot_str_equal(interp, item, name))
-            return VTABLE_clone(interp, Parrot_pcc_get_continuation(interp, ctx));
+        if (Parrot_str_equal(INTERP, item, name))
+            return VTABLE_clone(INTERP, Parrot_pcc_get_continuation(INTERP, ctx));
 
-        name = CONST_STRING(interp, "annotations");
+        name = CONST_STRING(INTERP, "annotations");
 
-        if (Parrot_str_equal(interp, item, name)) {
-            PMC        *sub_pmc = Parrot_pcc_get_sub(interp, ctx);
-            if (ctx == CURRENT_CONTEXT(interp)) {
+        if (Parrot_str_equal(INTERP, item, name)) {
+            PMC        *sub_pmc = Parrot_pcc_get_sub(INTERP, ctx);
+            if (ctx == CURRENT_CONTEXT(INTERP)) {
                 /* We can't know the current program counter for the currently
                  * executing sub, so can't return annotations for that. */
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                         "Cannot get annotations at depth 0; use annotations op instead.");
             }
             if (!PMC_IS_NULL(sub_pmc)
             &&   sub_pmc->vtable->base_type == enum_class_Sub) {
                 Parrot_Sub_attributes *sub;
                 PackFile_ByteCode     *seg;
-                opcode_t              *pc  = Parrot_pcc_get_pc(interp, ctx);
+                opcode_t              *pc  = Parrot_pcc_get_pc(INTERP, ctx);
 
-                PMC_get_sub(interp, sub_pmc, sub);
+                PMC_get_sub(INTERP, sub_pmc, sub);
                 seg = sub->seg;
 
                 if (sub->seg->annotations)
-                    return PackFile_Annotations_lookup(interp, seg->annotations,
+                    return PackFile_Annotations_lookup(INTERP, seg->annotations,
                         pc - seg->base.data, NULL);
             }
 
-            return Parrot_pmc_new(interp, enum_class_Hash);
+            return Parrot_pmc_new(INTERP, enum_class_Hash);
         }
 
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ATTRIB_NOT_FOUND,
                 "No such item %Ss", item);
     }
 
@@ -636,7 +652,7 @@
 
 */
 
-    VTABLE INTVAL is_equal(PMC *val) {
+    MULTI INTVAL is_equal(ParrotInterpreter val) {
         Parrot_Interp self  = PMC_interp(SELF);
         Parrot_Interp other = PMC_interp(val);
 
@@ -650,6 +666,22 @@
         return 0;
     }
 
+    MULTI INTVAL is_equal(ParrotThread value) {
+        Parrot_Interp self  = PMC_interp(SELF);
+
+        if (!self->thread_data)
+            return 0;
+
+        return self->thread_data->tid == (UINTVAL) VTABLE_get_integer(INTERP, value);
+    }
+
+    MULTI INTVAL is_equal(DEFAULT value) {
+        Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
+                "ParrotInterpreter: no multiple dispatch variant 'is_equal' for %Ss",
+                VTABLE_name(INTERP, value));
+    }
+
 /*
 
 =item C<void visit(PMC *info)>
@@ -703,16 +735,16 @@
         /*  HLL_info */
         if (VTABLE_get_integer(INTERP, info) == VISIT_THAW_NORMAL ||
             VTABLE_get_integer(INTERP, info) == VISIT_THAW_CONSTANTS) {
-            VISIT_PMC(interp, info, PMC_args(SELF));
+            VISIT_PMC(INTERP, info, PMC_args(SELF));
         }
         else
-            VISIT_PMC(interp, info, INTERP->HLL_info);
+            VISIT_PMC(INTERP, info, INTERP->HLL_info);
 
     }
 
     VTABLE void thaw(PMC *info) {
         if (!PMC_data(SELF)) {
-            Parrot_ParrotInterpreter_attributes *attrs =
+            Parrot_ParrotInterpreter_attributes * const attrs =
                 mem_gc_allocate_zeroed_typed(INTERP, Parrot_ParrotInterpreter_attributes);
             PMC_data(SELF) = attrs;
             PObj_custom_destroy_SET(SELF);
@@ -746,22 +778,18 @@
             }
 
             if (!PMC_IS_NULL(lib_pmc)) {
-                STRING *lib_name = VTABLE_get_string(INTERP, lib_pmc);
-                PMC    *ignored;
+                STRING * const lib_name = VTABLE_get_string(INTERP, lib_pmc);
 
                 if (!STRING_IS_EMPTY(lib_name)) {
-                    INTVAL id;
-                    ignored      = Parrot_load_lib(INTERP, lib_name, NULL);
-                    id           = Parrot_register_HLL_lib(INTERP, lib_name);
+                    PMC * const ignored = Parrot_load_lib(INTERP, lib_name, NULL);
+                    const INTVAL id     = Parrot_register_HLL_lib(INTERP, lib_name);
                     UNUSED(id);
                 }
-
-                UNUSED(ignored);
             }
 
             if (hll_id >= 0 && !PMC_IS_NULL(typemap)) {
-                PMC   *iter = VTABLE_get_iter(INTERP, typemap);
-                INTVAL e    = VTABLE_get_integer(INTERP, typemap);
+                PMC   * const iter = VTABLE_get_iter(INTERP, typemap);
+                const INTVAL e     = VTABLE_get_integer(INTERP, typemap);
                 INTVAL i;
 
                 for (i = 0; i < e; ++i) {
@@ -792,9 +820,9 @@
 */
 
     METHOD hll_map(PMC *core_type, PMC *hll_type) {
-        INTVAL core_type_id = VTABLE_type(INTERP, core_type);
-        INTVAL hll_type_id  = VTABLE_type(INTERP, hll_type);
-        INTVAL hll_id       = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp));
+        const INTVAL core_type_id = VTABLE_type(INTERP, core_type);
+        const INTVAL hll_type_id  = VTABLE_type(INTERP, hll_type);
+        const INTVAL hll_id       = Parrot_pcc_get_HLL(INTERP, CURRENT_CONTEXT(INTERP));
         Parrot_register_HLL_type(INTERP, hll_id, core_type_id, hll_type_id);
     }
 
@@ -815,7 +843,7 @@
 */
 
     METHOD stdhandle(INTVAL fileno, PMC *newhandle :optional) {
-        PMC * handle = Parrot_io_stdhandle(interp, fileno, newhandle);
+        PMC * const handle = Parrot_io_stdhandle(INTERP, fileno, newhandle);
         RETURN(PMC *handle);
     }
 

Modified: branches/ops_pct/src/pmc/parrotlibrary.pmc
==============================================================================
--- branches/ops_pct/src/pmc/parrotlibrary.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/parrotlibrary.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -31,6 +31,10 @@
 #define PMC_dlhandle(x) ((Parrot_ParrotLibrary_attributes*)PMC_data(x))->dl_handle
 #define PMC_oplib_init(x) ((Parrot_ParrotLibrary_attributes*)PMC_data(x))->oplib_init
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ParrotLibrary auto_attrs provides library {
     ATTR void * dl_handle;  /* DLL handle */
     ATTR void * oplib_init; /* oplib init function */

Deleted: branches/ops_pct/src/pmc/parrotrunningthread.pmc
==============================================================================
--- branches/ops_pct/src/pmc/parrotrunningthread.pmc	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,160 +0,0 @@
-/*
-Copyright (C) 2006-2008, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/parrotrunningthread.pmc -- Represents a running Parrot Thread.
-
-=head1 DESCRIPTION
-
-This type represents a running parrot thread.
-
-It provides the following methods:
-    - join
-    - detach
-    - kill
-
-Note that a running thread object becomes invalid when a thread
-finishes while detached or joined. Further operations on the
-object may have unexpected behavior, such as manipulating an
-unrelated thread.
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/embed.h"
-
-#define PMC_tid(x) (PARROT_PARROTRUNNINGTHREAD(x))->tid
-
-pmclass ParrotRunningThread no_ro auto_attrs {
-    ATTR INTVAL tid; /* thread id */
-
-/*
-
-=item C<void init()>
-
-Create a new, invalid handle to a running thread.
-
-=cut
-
-*/
-
-    VTABLE void init() {
-        PMC_tid(SELF) = -1;
-    }
-
-/*
-
-=item C<void init_pmc(PMC *tid)>
-
-Create a new running thread referring to the thread with
-the Thread ID specified in C<tid>.
-
-=cut
-
-*/
-
-    VTABLE void init_pmc(PMC *tid) {
-        PMC_tid(SELF) = VTABLE_get_integer(INTERP, tid);
-    }
-
-/*
-
-=item C<INTVAL get_integer()>
-
-Return the thread ID of this thread.
-
-=cut
-
-*/
-
-    VTABLE INTVAL get_integer() {
-        return PMC_tid(SELF);
-    }
-
-/*
-
-=item C<void set_integer_native(INTVAL new_tid)>
-
-Change the thread ID we refer to to C<new_tid>.
-
-=cut
-
-*/
-
-    VTABLE void set_integer_native(INTVAL new_tid) {
-        if (new_tid < 0)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERP_ERROR,
-                "Attempt to set invalid thread id %d", (int)new_tid);
-        PMC_tid(SELF) = new_tid;
-    }
-/*
-
-=item C<METHOD join()>
-
-Join the thread, returning whatever its main method returns.
-
-=cut
-
-*/
-    METHOD join() {
-        PMC *ret = pt_thread_join(INTERP,
-            (UINTVAL)VTABLE_get_integer(INTERP, SELF));
-
-        /* invalidate self */
-        PMC_tid(SELF) = -1;
-
-        RETURN(PMC *ret);
-    }
-
-/*
-
-=item C<METHOD detach()>
-
-Detach the thread so it cannot be joined and will free its resources
-immediately when it exits.
-
-=cut
-
-*/
-
-    METHOD detach() {
-        pt_thread_detach((UINTVAL)VTABLE_get_integer(INTERP, SELF));
-    }
-
-/*
-
-=item C<METHOD kill()>
-
-Terminate a running thread.
-
-=cut
-
-*/
-
-    METHOD kill() {
-        pt_thread_kill((UINTVAL)VTABLE_get_integer(INTERP, SELF));
-    }
-
-}
-
-/*
-
-=back
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Copied: branches/ops_pct/src/pmc/parrotthread.pmc (from r46301, trunk/src/pmc/parrotthread.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/pmc/parrotthread.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/pmc/parrotthread.pmc)
@@ -0,0 +1,181 @@
+/*
+Copyright (C) 2001-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/parrotthread.pmc - Represents a Parrot Thread.
+
+=head1 DESCRIPTION
+
+This type represents a  parrot thread.
+
+It provides the following methods:
+    - join
+    - detach
+    - kill
+    - pid
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/embed.h"
+
+
+pmclass ParrotThread no_ro auto_attrs {
+    ATTR INTVAL tid; /* thread id */
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+/*
+
+=item C<void init()>
+
+Create a new, invalid handle to a running thread.
+
+=cut
+
+*/
+
+    VTABLE void init() {
+        VTABLE_set_integer_native(INTERP, SELF, -1);
+    }
+
+/*
+
+=item C<void init_pmc(PMC *notused)>
+
+Create a new, invalid handle to a running thread.
+
+=cut
+
+*/
+
+    VTABLE void init_pmc(PMC *notused) {
+        VTABLE_set_integer_native(INTERP, SELF, -1);
+    }
+
+/*
+
+=item C<INTVAL get_integer()>
+
+Return the thread ID of this thread.
+
+=cut
+
+*/
+
+    VTABLE INTVAL get_integer() {
+        INTVAL ttid;
+        GETATTR_ParrotThread_tid(INTERP, SELF, ttid);
+        return ttid;
+    }
+
+    VTABLE void set_integer_native(INTVAL ttid) {
+        SETATTR_ParrotThread_tid(INTERP, SELF, ttid);
+    }
+
+
+/*
+
+=item C<METHOD run(closure)>
+
+Join the thread, returning whatever its main method returns.
+
+=cut
+
+*/
+    METHOD run_clone(PMC *sub, PMC *args :slurpy) {
+        INTVAL ttid;
+        if (PMC_IS_NULL(sub)) {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                    "Invalid thread sub");
+        }
+
+        ttid = pt_thread_create_run(INTERP,
+                                    enum_class_ThreadInterpreter, PARROT_CLONE_DEFAULT, sub, args);
+        VTABLE_set_integer_native(INTERP, SELF, ttid);
+    }
+
+    METHOD run(INTVAL clone_flags, PMC *sub, PMC *args :slurpy) {
+        INTVAL ttid;
+        if (PMC_IS_NULL(sub)) {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+                    "Invalid thread sub");
+        }
+
+        ttid = pt_thread_create_run(INTERP, enum_class_ThreadInterpreter, clone_flags, sub, args);
+        VTABLE_set_integer_native(INTERP, SELF, ttid);
+    }
+/*
+
+=item C<METHOD join()>
+
+Join the thread, returning whatever its main method returns.
+
+=cut
+
+*/
+    METHOD join() {
+        PMC *ret;
+        INTVAL ttid = VTABLE_get_integer(INTERP, SELF);
+
+        ret = pt_thread_join(INTERP, ttid);
+        /* invalidate self */
+        VTABLE_set_integer_native(INTERP, SELF, -1);
+
+        RETURN(PMC *ret);
+    }
+
+/*
+
+=item C<METHOD detach()>
+
+Detach the thread so it cannot be joined and will free its resources
+immediately when it exits.
+
+=cut
+
+*/
+
+    METHOD detach() {
+        pt_thread_detach((UINTVAL)VTABLE_get_integer(INTERP, SELF));
+    }
+
+/*
+
+=item C<METHOD kill()>
+
+Terminate a running thread.
+
+=cut
+
+*/
+
+    METHOD kill() {
+        pt_thread_kill((UINTVAL)VTABLE_get_integer(INTERP, SELF));
+    }
+
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/src/pmc/pmc.num
==============================================================================
--- branches/ops_pct/src/pmc/pmc.num	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/pmc.num	Wed May  5 08:45:29 2010	(r46302)
@@ -77,8 +77,5 @@
 parrotclass.pmc    49
 parrotobject.pmc    50
 
-os.pmc    51
-file.pmc    52
-
-oplib.pmc    53
-opcode.pmc    54
+oplib.pmc    51
+opcode.pmc    52

Modified: branches/ops_pct/src/pmc/pmcproxy.pmc
==============================================================================
--- branches/ops_pct/src/pmc/pmcproxy.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/pmcproxy.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -63,6 +63,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 
 pmclass PMCProxy extends Class auto_attrs {
 
@@ -79,46 +83,45 @@
     VTABLE void init() {
         Parrot_Class_attributes * const _pmc =
                 (Parrot_Class_attributes *) PMC_data(SELF);
-        PMC          * const new_attribute   = Parrot_pmc_new(interp, enum_class_Hash);
-        STRING       * const name            = CONST_STRING(interp, "proxy");
+        PMC          * const new_attribute   = Parrot_pmc_new(INTERP, enum_class_Hash);
+        STRING       * const name            = CONST_STRING(INTERP, "proxy");
 
         /* Set flag for custom GC mark. */
         PObj_custom_mark_SET(SELF);
 
         /* Set up the object. */
         _pmc->id               = 0;
-        _pmc->name             = CONST_STRING(interp, "");
+        _pmc->name             = CONST_STRING(INTERP, "");
         _pmc->_namespace       = PMCNULL;
-        _pmc->parents          = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        _pmc->all_parents      = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        _pmc->roles            = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        _pmc->methods          = Parrot_pmc_new(interp, enum_class_Hash);
-        _pmc->vtable_overrides = Parrot_pmc_new(interp, enum_class_Hash);
-        _pmc->parent_overrides = Parrot_pmc_new(interp, enum_class_Hash);
-        _pmc->attrib_metadata  = Parrot_pmc_new(interp, enum_class_Hash);
+        _pmc->parents          = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        _pmc->all_parents      = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        _pmc->roles            = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        _pmc->methods          = Parrot_pmc_new(INTERP, enum_class_Hash);
+        _pmc->vtable_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
+        _pmc->parent_overrides = Parrot_pmc_new(INTERP, enum_class_Hash);
+        _pmc->attrib_metadata  = Parrot_pmc_new(INTERP, enum_class_Hash);
         _pmc->attrib_index     = PMCNULL;
         _pmc->attrib_cache     = PMCNULL;
-        _pmc->resolve_method   = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+        _pmc->resolve_method   = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
 
         /* Set up the attribute storage for the proxy instance */
-        VTABLE_set_string_keyed_str(interp, new_attribute, CONST_STRING(interp, "name"), name);
-        VTABLE_set_pmc_keyed_str(interp, _pmc->attrib_metadata, name, new_attribute);
+        VTABLE_set_string_keyed_str(INTERP, new_attribute, CONST_STRING(INTERP, "name"), name);
+        VTABLE_set_pmc_keyed_str(INTERP, _pmc->attrib_metadata, name, new_attribute);
 
         /* We put ourself on the all parents list. */
-        VTABLE_push_pmc(interp, _pmc->all_parents, SELF);
+        VTABLE_push_pmc(INTERP, _pmc->all_parents, SELF);
 
         /* We are a class. */
         PObj_is_class_SET(SELF);
     }
 
-    VTABLE void init_pmc(PMC *init_data) {
-        const INTVAL type_num = VTABLE_get_integer(interp, init_data);
+    VTABLE void init_int(INTVAL type_num) {
         Parrot_Class_attributes *proxy_info;
         INTVAL mro_length, i;
 
         /* Ensure that it's a valid type number. */
-        if (type_num > interp->n_vtable_max || type_num <= 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
+        if (type_num > INTERP->n_vtable_max || type_num <= 0)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, 1,
                 "Attempt to create PMC Proxy for invalid type number!");
 
         /* Set up the object. */
@@ -127,36 +130,36 @@
         /* Set up number, name and namespace. */
         proxy_info             = PARROT_CLASS(SELF);
         proxy_info->id         = type_num;
-        proxy_info->name       = interp->vtables[type_num]->whoami;
-        proxy_info->_namespace = interp->vtables[type_num]->_namespace;
+        proxy_info->name       = INTERP->vtables[type_num]->whoami;
+        proxy_info->_namespace = INTERP->vtables[type_num]->_namespace;
 
         /* Build MRO (skip ourself). */
-        mro_length = VTABLE_elements(interp, interp->vtables[type_num]->mro);
-        for (i = 1; i < mro_length; i++) {
-            PMC    *pclass = VTABLE_get_pmc_keyed_int(interp, interp->vtables[type_num]->mro, i);
+        mro_length = VTABLE_elements(INTERP, INTERP->vtables[type_num]->mro);
+        for (i = 1; i < mro_length; ++i) {
+            PMC    *pclass = VTABLE_get_pmc_keyed_int(INTERP, INTERP->vtables[type_num]->mro, i);
             PMC    *cns    = pclass->vtable->_namespace;
             STRING *cname  = pclass->vtable->whoami;
-            if (Parrot_str_not_equal(interp, cname, CONST_STRING(interp, "scalar"))) {
-                PMC *pproxy = Parrot_oo_get_class(interp, cns);
-                VTABLE_push_pmc(interp, proxy_info->all_parents, pproxy);
+            if (Parrot_str_not_equal(INTERP, cname, CONST_STRING(INTERP, "scalar"))) {
+                PMC *pproxy = Parrot_oo_get_class(INTERP, cns);
+                VTABLE_push_pmc(INTERP, proxy_info->all_parents, pproxy);
             }
         }
 
         /* PMCs just do single inheritance, so we'll assume that if we have a
          * second entry in our MRO, it goes in the parents list. */
-        if (VTABLE_elements(interp, proxy_info->all_parents) >= 2)
-            VTABLE_push_pmc(interp, proxy_info->parents,
-                    VTABLE_get_pmc_keyed_int(interp, proxy_info->all_parents, 1));
+        if (VTABLE_elements(INTERP, proxy_info->all_parents) >= 2)
+            VTABLE_push_pmc(INTERP, proxy_info->parents,
+                    VTABLE_get_pmc_keyed_int(INTERP, proxy_info->all_parents, 1));
 
         if (!PMC_IS_NULL(proxy_info->_namespace) &&
-            PMC_IS_NULL(VTABLE_get_class(interp, proxy_info->_namespace))) {
+            PMC_IS_NULL(VTABLE_get_class(INTERP, proxy_info->_namespace))) {
 
             /* Link the proxy and the namespace, caching the proxy object for
              * later retrieval on class lookup. */
-             Parrot_pcc_invoke_method_from_c_args(interp, proxy_info->_namespace, CONST_STRING(interp, "set_class"), "P->", SELF);
+             Parrot_pcc_invoke_method_from_c_args(INTERP, proxy_info->_namespace, CONST_STRING(INTERP, "set_class"), "P->", SELF);
 
             /* Extract any methods from the namespace */
-            Parrot_oo_extract_methods_from_namespace(interp, SELF,
+            Parrot_oo_extract_methods_from_namespace(INTERP, SELF,
                     proxy_info->_namespace);
         }
 
@@ -165,7 +168,7 @@
              * and terminated by an space,
              * the list is '\0' terminated
              */
-            const char * attr = interp->vtables[type_num]->attribute_defs;
+            const char * attr = INTERP->vtables[type_num]->attribute_defs;
             while (* attr) {
                 const char * const current = attr + 1;
                 size_t l;
@@ -173,7 +176,7 @@
                 while (* attr != ' ') ++attr;
                 l= attr - current;
                 if (attrtype != ':') {
-                    STRING *sattr = Parrot_str_new(interp, current, l);
+                    STRING *sattr = Parrot_str_new(INTERP, current, l);
                     SELF.add_attribute(sattr, NULL);
                 }
                 ++attr;
@@ -181,6 +184,11 @@
         }
     }
 
+    VTABLE void init_pmc(PMC *init_data) {
+        const INTVAL type_num = VTABLE_get_integer(INTERP, init_data);
+        SELF.init_int(type_num);
+    }
+
 /*
 
 =item C<PMC *instantiate(PMC *init)>
@@ -194,9 +202,9 @@
         Parrot_Class_attributes * const _pmc = PARROT_CLASS(SELF);
 
         if (!PMC_IS_NULL(init))
-            return Parrot_pmc_new_init(interp, _pmc->id, init);
+            return Parrot_pmc_new_init(INTERP, _pmc->id, init);
 
-        return Parrot_pmc_new(interp, _pmc->id);
+        return Parrot_pmc_new(INTERP, _pmc->id);
     }
 
 /*
@@ -221,46 +229,46 @@
         if (SUPER(lookup))
             return 1;
 
-        classobj = Parrot_oo_get_class(interp, lookup);
+        classobj = Parrot_oo_get_class(INTERP, lookup);
 
         if (PMC_IS_NULL(classobj))
             return 0;
 
-        classname = VTABLE_get_string(interp, classobj);
+        classname = VTABLE_get_string(INTERP, classobj);
 
         /* Check if the passed name is the same as the stored short name. */
-        if (Parrot_str_equal(interp, classname, _proxy->name))
+        if (Parrot_str_equal(INTERP, classname, _proxy->name))
             return 1;
 
         /* Check if the class object is the same as self's class object */
-        if (VTABLE_is_same(interp, SELF, classobj))
+        if (VTABLE_is_same(INTERP, SELF, classobj))
             return 1;
 
         /* Check if the passed name is the same as the fully qualified name. */
-        if (Parrot_str_equal(interp, classname, VTABLE_get_string(interp, SELF)))
+        if (Parrot_str_equal(INTERP, classname, VTABLE_get_string(INTERP, SELF)))
             return 1;
 
         /* Look in the isa hash. */
-        if (interp->vtables[_proxy->id]) {
-            Hash *isa_hash = interp->vtables[_proxy->id]->isa_hash;
+        if (INTERP->vtables[_proxy->id]) {
+            Hash *isa_hash = INTERP->vtables[_proxy->id]->isa_hash;
 
-            if (!isa_hash && Parrot_str_equal(interp,
-                     interp->vtables[_proxy->id]->whoami, classname))
+            if (!isa_hash && Parrot_str_equal(INTERP,
+                     INTERP->vtables[_proxy->id]->whoami, classname))
                 return 1;
 
-            if (isa_hash && parrot_hash_exists(interp, isa_hash, classname))
+            if (isa_hash && parrot_hash_exists(INTERP, isa_hash, classname))
                 return 1;
         }
 
         /* Iterate over all the parents and check if they respond true
          * for 'isa' on the original comparison. */
-        num_classes = VTABLE_elements(interp, _proxy->parents);
+        num_classes = VTABLE_elements(INTERP, _proxy->parents);
 
-        for (i = 0; i < num_classes; i++) {
-            PMC * const cur_class = VTABLE_get_pmc_keyed_int(interp,
+        for (i = 0; i < num_classes; ++i) {
+            PMC * const cur_class = VTABLE_get_pmc_keyed_int(INTERP,
                 _proxy->parents, i);
 
-            if (VTABLE_isa_pmc(interp, cur_class, lookup))
+            if (VTABLE_isa_pmc(INTERP, cur_class, lookup))
                 return 1;
         }
 
@@ -279,7 +287,7 @@
 
     VTABLE INTVAL isa(STRING *classname) {
         Parrot_Class_attributes * const _proxy = PARROT_CLASS(SELF);
-        const STRING * const pmc_proxy = CONST_STRING(interp, "PMCProxy");
+        const STRING * const pmc_proxy = CONST_STRING(INTERP, "PMCProxy");
 
         if (Parrot_str_equal(INTERP, classname, pmc_proxy))
             return 1;
@@ -288,15 +296,15 @@
             return 1;
 
         /* Look in the isa hash. */
-        if (interp->vtables[_proxy->id]) {
-            Hash *isa_hash = interp->vtables[_proxy->id]->isa_hash;
+        if (INTERP->vtables[_proxy->id]) {
+            Hash *isa_hash = INTERP->vtables[_proxy->id]->isa_hash;
 
-            if (!isa_hash && Parrot_str_equal(interp,
-                     interp->vtables[_proxy->id]->whoami, classname)) {
+            if (!isa_hash && Parrot_str_equal(INTERP,
+                     INTERP->vtables[_proxy->id]->whoami, classname)) {
                 return 1;
             }
 
-            if (isa_hash && parrot_hash_exists(interp, isa_hash, classname))
+            if (isa_hash && parrot_hash_exists(INTERP, isa_hash, classname))
                 return 1;
         }
 
@@ -314,15 +322,12 @@
 */
 
     VTABLE INTVAL does(STRING *role_name) {
-        Parrot_Class_attributes *_class  = PARROT_CLASS(SELF);
-        INTVAL                   id      = _class->id;
-        PMC                     *proxied = Parrot_pmc_new(interp, id);
-
-        if (VTABLE_does(interp, proxied, role_name))
+        Parrot_Class_attributes * const attrs = PARROT_CLASS(SELF);
+        const INTVAL id = attrs->id;
+        const INTVAL type_does = Parrot_pmc_type_does(INTERP, role_name, id);
+        if (type_does)
             return 1;
-
-        return VTABLE_isa(interp, proxied, role_name);
-
+        return VTABLE_isa(INTERP, SELF, role_name);
     }
 
 /*
@@ -355,21 +360,21 @@
     {
         /* Create a hash, then use inspect_str to get all of the data to
          * fill it up with. */
-        STRING * const name_str    = CONST_STRING(interp, "name");
-        STRING * const ns_str      = CONST_STRING(interp, "namespace");
-        STRING * const meth_str    = CONST_STRING(interp, "methods");
-        STRING * const parents_str = CONST_STRING(interp, "parents");
-
-        PMC * const metadata = Parrot_pmc_new(interp, enum_class_Hash);
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, name_str,
-            VTABLE_inspect_str(interp, SELF, name_str));
-        VTABLE_set_pmc_keyed_str(interp, metadata, ns_str,
-            VTABLE_inspect_str(interp, SELF, ns_str));
-        VTABLE_set_pmc_keyed_str(interp, metadata, meth_str,
-            VTABLE_inspect_str(interp, SELF, meth_str));
-        VTABLE_set_pmc_keyed_str(interp, metadata, parents_str,
-            VTABLE_inspect_str(interp, SELF, parents_str));
+        STRING * const name_str    = CONST_STRING(INTERP, "name");
+        STRING * const ns_str      = CONST_STRING(INTERP, "namespace");
+        STRING * const meth_str    = CONST_STRING(INTERP, "methods");
+        STRING * const parents_str = CONST_STRING(INTERP, "parents");
+
+        PMC * const metadata = Parrot_pmc_new(INTERP, enum_class_Hash);
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, name_str,
+            VTABLE_inspect_str(INTERP, SELF, name_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, ns_str,
+            VTABLE_inspect_str(INTERP, SELF, ns_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, meth_str,
+            VTABLE_inspect_str(INTERP, SELF, meth_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, parents_str,
+            VTABLE_inspect_str(INTERP, SELF, parents_str));
 
         return metadata;
     }
@@ -417,7 +422,7 @@
 */
 
     METHOD new(PMC *args :optional, int got_args :opt_flag) {
-        PMC * const obj = VTABLE_instantiate(interp, SELF, args);
+        PMC * const obj = VTABLE_instantiate(INTERP, SELF, args);
         UNUSED(got_args);
         RETURN(PMC *obj);
     }
@@ -433,7 +438,7 @@
 */
 
     METHOD methods() {
-        PMC * const ret_methods = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "methods"));
+        PMC * const ret_methods = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "methods"));
         RETURN(PMC *ret_methods);
     }
 
@@ -448,7 +453,7 @@
 */
 
     METHOD parents() {
-        PMC * const ret_parents = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "parents"));
+        PMC * const ret_parents = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "parents"));
         RETURN(PMC *ret_parents);
     }
 
@@ -464,11 +469,11 @@
 */
 
     METHOD inspect(STRING *what :optional, int got_what :opt_flag) {
-        /* Just delegate to the appropriate vtable method. */
+        /* Just delegate to the appropriate vtable. */
         PMC * const found =
             got_what
-                ? VTABLE_inspect_str(interp, SELF, what)
-                : VTABLE_inspect(interp, SELF);
+                ? VTABLE_inspect_str(INTERP, SELF, what)
+                : VTABLE_inspect(INTERP, SELF);
 
         RETURN(PMC *found);
     }
@@ -485,9 +490,7 @@
 
     VTABLE STRING *get_string() {
         Parrot_Class_attributes * const proxy_info = PARROT_CLASS(SELF);
-
-        /* Copy the stored string name of the proxy. */
-        return Parrot_str_copy(interp, proxy_info->name);
+        return proxy_info->name;
     }
 
 

Modified: branches/ops_pct/src/pmc/pointer.pmc
==============================================================================
--- branches/ops_pct/src/pmc/pointer.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/pointer.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Pointer auto_attrs {
     ATTR void * mark_function;
     ATTR void * pointer;

Modified: branches/ops_pct/src/pmc/resizablebooleanarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/resizablebooleanarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/resizablebooleanarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -30,6 +30,10 @@
 /* Convert a size in bits to a size in bytes */
 #define BITS_TO_BYTES(size) ((size) / BITS_PER_CHAR)
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ResizableBooleanArray extends FixedBooleanArray auto_attrs provides array {
     /* RBA uses the same attributes as FBA, but in RBA they're used as follows:
        size:             position of the last element (a.k.a tail_pos)
@@ -61,7 +65,7 @@
 
             /* If it's still negative, we have a problem */
             if (key < 0)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     "ResizableBooleanArray: index out of bounds!");
         }
 
@@ -95,7 +99,7 @@
 
             /* If it's still negative, we have a problem */
             if (key < 0)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     "ResizableBooleanArray: index out of bounds!");
         }
 
@@ -135,7 +139,7 @@
             return;
 
         if (size < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "ResizableBooleanArray: Can't resize!");
 
         /* now set the new size, in bits */
@@ -208,7 +212,7 @@
         INTVAL  value;
 
         if (SELF.elements() < 1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "ResizableBooleanArray: Can't pop from an empty array!");
 
         GET_ATTR_size(INTERP, SELF, tail_pos);
@@ -293,7 +297,7 @@
         UINTVAL tail_pos, head_pos;
 
         if (SELF.elements() < 1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "ResizableBooleanArray: Can't shift from an empty array!");
 
         /* Get head value */
@@ -450,12 +454,12 @@
 
 */
     VTABLE void thaw(PMC *info) {
-        unsigned char   *bit_array;
+
         const UINTVAL    head_pos = VTABLE_shift_integer(INTERP, info);
         const UINTVAL    tail_pos = VTABLE_shift_integer(INTERP, info);
         STRING * const   s        = VTABLE_shift_string(INTERP, info);
 
-        bit_array      = (unsigned char*)Parrot_str_to_cstring(INTERP, s);
+        unsigned char * const bit_array = (unsigned char*)Parrot_str_to_cstring(INTERP, s);
         SET_ATTR_size(INTERP, SELF, tail_pos);
         SET_ATTR_resize_threshold(INTERP, SELF, head_pos);
         SET_ATTR_bit_array(INTERP, SELF, bit_array);

Modified: branches/ops_pct/src/pmc/resizablefloatarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/resizablefloatarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/resizablefloatarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ResizableFloatArray extends FixedFloatArray auto_attrs provides array {
     ATTR INTVAL resize_threshold; /* max size before array needs resizing */
 
@@ -38,7 +42,7 @@
         INTVAL    size;
 
         if (key < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     "ResizableFloatArray: index out of bounds!");
 
         GET_ATTR_size(INTERP, SELF, size);
@@ -65,7 +69,7 @@
         INTVAL    size;
 
         if (key < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     "ResizableFloatArray: index out of bounds!");
 
         GET_ATTR_size(INTERP, SELF, size);
@@ -98,7 +102,7 @@
         INTVAL    resize_threshold;
 
         if (size < 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     "ResizableFloatArray: Can't resize to negative value!");
 
         GET_ATTR_float_array(INTERP, SELF, float_array);
@@ -152,7 +156,7 @@
 
         /* copy trimmed extra space */
         GET_ATTR_size(INTERP, SELF, size);
-        SET_ATTR_resize_threshold(INTERP, SELF, size);
+        SET_ATTR_resize_threshold(INTERP, copy, size);
 
         return copy;
     }
@@ -188,7 +192,7 @@
         GET_ATTR_size(INTERP, SELF, size);
 
         if (size == 0)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                     "ResizableFloatArray: Can't pop from an empty array!");
 
         value = SELF.get_number_keyed_int(size-1);

Modified: branches/ops_pct/src/pmc/resizableintegerarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/resizableintegerarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/resizableintegerarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ResizableIntegerArray extends FixedIntegerArray auto_attrs provides array {
     ATTR INTVAL resize_threshold; /* max size before array needs to be resized */
 
@@ -41,7 +45,7 @@
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
                 "ResizableIntegerArray: index out of bounds!");
 
-        GET_ATTR_size(interp, SELF, size);
+        GET_ATTR_size(INTERP, SELF, size);
 
         if (key >= size)
             return 0;
@@ -147,17 +151,17 @@
         INTVAL  nextix;
         INTVAL  resize_threshold;
 
-        GET_ATTR_size(interp, SELF, nextix);
-        GET_ATTR_resize_threshold(interp, SELF, resize_threshold);
+        GET_ATTR_size(INTERP, SELF, nextix);
+        GET_ATTR_resize_threshold(INTERP, SELF, resize_threshold);
 
         /* can't always avoid the resize, but don't duplicate the code */
         if ((nextix && (nextix >= resize_threshold)) || !nextix)
             SELF.set_integer_native(nextix + 1);
         else
-            SET_ATTR_size(interp, SELF, nextix + 1);
+            SET_ATTR_size(INTERP, SELF, nextix + 1);
 
         /* fetch the array only after resize check; realloc may move it */
-        GET_ATTR_int_array(interp, SELF, int_array);
+        GET_ATTR_int_array(INTERP, SELF, int_array);
         int_array[nextix] = value;
     }
 

Modified: branches/ops_pct/src/pmc/resizablepmcarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/resizablepmcarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/resizablepmcarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -23,6 +23,10 @@
 #define PMC_array(x)     ((Parrot_ResizablePMCArray_attributes *)PMC_data(x))->pmc_array
 #define PMC_threshold(x) ((Parrot_ResizablePMCArray_attributes *)PMC_data(x))->resize_threshold
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ResizablePMCArray extends FixedPMCArray auto_attrs provides array {
     ATTR INTVAL resize_threshold; /* max size before array needs resizing */
 
@@ -82,7 +86,7 @@
             INTVAL i, cur, needed;
             i = cur = PMC_threshold(SELF);
             if (cur < 8192)
-                cur = size < 2 * cur ? 2 * cur : size;
+                cur = (size < 2 * cur) ? (2 * cur) : size;
             else {
                 needed = size - cur;
                 cur   += needed + 4096;
@@ -95,7 +99,7 @@
             PMC_array(SELF) = mem_gc_realloc_n_typed_zeroed(INTERP,
                     PMC_array(SELF), cur, i, PMC *);
 
-            for (; i < cur; i++) {
+            for (; i < cur; ++i) {
                 (PMC_array(SELF))[i] = PMCNULL;
             }
 
@@ -281,14 +285,14 @@
     }
 
     VTABLE void delete_keyed_int(INTVAL idx) {
-        PMC   **data = PMC_array(SELF);
-        INTVAL  n    = PMC_size(SELF);
+        PMC ** const data = PMC_array(SELF);
+        const INTVAL  n   = PMC_size(SELF);
         INTVAL  i;
 
         for (i = idx; i < n - 1; ++i)
             data[i] = data[i + 1];
 
-        PMC_size(SELF)--;
+        --PMC_size(SELF);
     }
 
 /*
@@ -316,7 +320,7 @@
     }
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        INTVAL ix = VTABLE_get_integer(INTERP, key);
+        const INTVAL ix = VTABLE_get_integer(INTERP, key);
         return SELF.exists_keyed_int(ix);
     }
 
@@ -366,8 +370,8 @@
 
     VTABLE void push_float(FLOATVAL value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_Float);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_Float);
 
         VTABLE_set_number_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -377,19 +381,22 @@
 
     VTABLE void push_integer(INTVAL value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_Integer);
-
-        VTABLE_set_integer_native(INTERP, val, value);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, value);
         SELF.set_pmc_keyed_int(size, val);
 
         return;
     }
 
     VTABLE void push_pmc(PMC *value) {
+        const INTVAL size   = PMC_size(SELF);
+        const INTVAL thresh = PMC_threshold(SELF);
 
-        INTVAL size = PMC_size(SELF);
-        SELF.set_integer_native(size + 1);
+        if (PMC_array(SELF) && size < thresh)
+            PMC_size(SELF) = size + 1;
+        else {
+            SELF.set_integer_native(size + 1);
+        }
         ((PMC **)PMC_array(SELF))[size] = value;
 
         return;
@@ -397,8 +404,8 @@
 
     VTABLE void push_string(STRING *value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_String);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_String);
 
         VTABLE_assign_string_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -501,8 +508,8 @@
 
     VTABLE void unshift_float(FLOATVAL value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_Float);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val   = Parrot_pmc_new(INTERP, enum_class_Float);
         PMC   **data;
         INTVAL  i;
 
@@ -521,12 +528,11 @@
 
     VTABLE void unshift_integer(INTVAL value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_Integer);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val   = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, value);
         PMC    **data;
         INTVAL   i;
 
-        VTABLE_set_integer_native(INTERP, val, value);
         SELF.set_integer_native(size + 1);
 
         data = PMC_array(SELF);
@@ -541,7 +547,7 @@
 
     VTABLE void unshift_pmc(PMC *value) {
 
-        INTVAL  size = PMC_size(SELF);
+        const INTVAL size = PMC_size(SELF);
         PMC   **data;
         INTVAL  i;
 
@@ -559,8 +565,8 @@
 
     VTABLE void unshift_string(STRING *value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_String);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val  = Parrot_pmc_new(INTERP, enum_class_String);
         PMC   **data;
         INTVAL  i;
 
@@ -588,7 +594,7 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *copy = SUPER();
+        PMC * const copy = SUPER();
 
         /* copy trimmed extra space */
         PMC_threshold(copy) = PMC_size(SELF);
@@ -608,9 +614,8 @@
 
     METHOD append(PMC *other) {
 
-        INTVAL i;
-        INTVAL n = VTABLE_elements(INTERP, SELF);
-        INTVAL m = VTABLE_elements(INTERP, other);
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
+        const INTVAL m = VTABLE_elements(INTERP, other);
 
         if (!m)
             RETURN(void);
@@ -620,14 +625,15 @@
 
         if (other->vtable->base_type == SELF->vtable->base_type
         ||  other->vtable->base_type == enum_class_FixedPMCArray) {
-            PMC **other_data = PMC_array(other);
-            PMC **this_data  = PMC_array(SELF);
+            PMC ** const other_data = PMC_array(other);
+            PMC ** const this_data  = PMC_array(SELF);
 
             /* libc is faster at copying data than a manual loop here */
             memmove(this_data + n, other_data, m  * sizeof (PMC *));
         }
         else {
-            PMC **this_data = PMC_array(SELF);
+            PMC ** const this_data = PMC_array(SELF);
+            INTVAL i;
 
             for (i = 0; i < m; ++i)
                 this_data[n + i] = VTABLE_get_pmc_keyed_int(INTERP, other, i);
@@ -646,18 +652,18 @@
     VTABLE STRING *get_repr() {
 
         INTVAL  j;
-        INTVAL  n   = VTABLE_elements(INTERP, SELF);
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
         STRING *res = CONST_STRING(INTERP, "[ ");
 
         for (j = 0; j < n; ++j) {
-            PMC *val = SELF.get_pmc_keyed_int(j);
-            res      = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            PMC * const val = SELF.get_pmc_keyed_int(j);
+            res      = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        return Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        return Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
     }
 
 /*
@@ -680,7 +686,7 @@
 
         const INTVAL length = VTABLE_elements(INTERP, SELF);
         const INTVAL elems  = VTABLE_elements(INTERP, value);
-        INTVAL       shift  = elems - count;
+        const INTVAL shift  = elems - count;
         INTVAL       i;
 
         /* start from end? */
@@ -694,7 +700,7 @@
         /* shrink the array */
         if (shift < 0) {
             /* start at offset so we don't overwrite values we'll need */
-            for (i = offset + count; i < length; i++)
+            for (i = offset + count; i < length; ++i)
                 VTABLE_set_pmc_keyed_int(INTERP, SELF, i + shift,
                     VTABLE_get_pmc_keyed_int(INTERP, SELF, i));
 
@@ -706,13 +712,13 @@
 
             /* move the existing values */
             /* start at length-1 so we don't overwrite values we'll need */
-            for (i = length - 1; i >= offset; i--)
+            for (i = length - 1; i >= offset; --i)
                 VTABLE_set_pmc_keyed_int(INTERP, SELF, i + shift,
                     VTABLE_get_pmc_keyed_int(INTERP, SELF, i));
         }
 
         /* copy the new values */
-        for (i = 0; i < elems; i++)
+        for (i = 0; i < elems; ++i)
             VTABLE_set_pmc_keyed_int(INTERP, SELF, i + offset,
                 VTABLE_get_pmc_keyed_int(INTERP, value, i));
     }
@@ -731,12 +737,12 @@
 */
 
     METHOD shift() {
-        PMC *value = VTABLE_shift_pmc(INTERP, SELF);
+        PMC * const value = VTABLE_shift_pmc(INTERP, SELF);
         RETURN(PMC *value);
     }
 
     METHOD pop() {
-        PMC *value = VTABLE_pop_pmc(INTERP, SELF);
+        PMC * const value = VTABLE_pop_pmc(INTERP, SELF);
         RETURN(PMC *value);
     }
 

Modified: branches/ops_pct/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/ops_pct/src/pmc/resizablestringarray.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/resizablestringarray.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -18,6 +18,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ResizableStringArray extends FixedStringArray auto_attrs provides array {
     ATTR UINTVAL resize_threshold; /*max capacity before resizing */
 
@@ -39,7 +43,7 @@
 
         STRING **str_array;
         INTVAL size;
-        GET_ATTR_size(interp, SELF, size);
+        GET_ATTR_size(INTERP, SELF, size);
 
         if (key < 0) {
             if (key < -size)
@@ -50,12 +54,12 @@
         }
 
         if (key >= size)
-            return string_from_literal(INTERP, "");
+            return CONST_STRING(INTERP, "");
 
         GET_ATTR_str_array(INTERP, SELF, str_array);
 
         if (!str_array[key])
-            str_array[key] = Parrot_str_new(interp, NULL, 0);
+            str_array[key] = Parrot_str_new(INTERP, NULL, 0);
 
         return str_array[key];
     }
@@ -74,7 +78,7 @@
 
         STRING **str_array;
         INTVAL   size;
-        GET_ATTR_size(interp, SELF, size);
+        GET_ATTR_size(INTERP, SELF, size);
 
         if (key < 0) {
             if (key < -size)
@@ -104,7 +108,7 @@
 
     VTABLE void push_string(STRING *value) {
         INTVAL next_idx;
-        GET_ATTR_size(interp, SELF, next_idx);
+        GET_ATTR_size(INTERP, SELF, next_idx);
         SELF.set_string_keyed_int(next_idx, value);
     }
 
@@ -121,7 +125,7 @@
     VTABLE STRING *pop_string() {
         STRING *value;
         INTVAL  size;
-        GET_ATTR_size(interp, SELF, size);
+        GET_ATTR_size(INTERP, SELF, size);
 
         if (size == 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
@@ -162,7 +166,7 @@
 */
 
     VTABLE INTVAL pop_integer() {
-        PMC *pmcval = SELF.pop_pmc();
+        PMC * const pmcval = SELF.pop_pmc();
         return VTABLE_get_integer(INTERP, pmcval);
     }
 
@@ -177,7 +181,7 @@
 */
 
     VTABLE FLOATVAL pop_float() {
-        PMC *pmcval = SELF.pop_pmc();
+        PMC * const pmcval = SELF.pop_pmc();
         return VTABLE_get_number(INTERP, pmcval);
     }
 
@@ -218,10 +222,10 @@
             /* zero out anything that was previously allocated
              * if we're growing the array */
             INTVAL old_size;
-            GET_ATTR_size(interp, SELF, old_size);
+            GET_ATTR_size(INTERP, SELF, old_size);
             if (new_size > old_size) {
                 INTVAL i;
-                for (i = old_size; i < new_size; i++)
+                for (i = old_size; i < new_size; ++i)
                     str_array[i] = NULL;
             }
 
@@ -234,7 +238,7 @@
             INTVAL cur = i;
 
             if (cur < 8192)
-                cur = new_size < 2 * cur ? 2 * cur : new_size;
+                cur = (new_size < 2 * cur) ? (2 * cur) : new_size;
             else {
                 cur = new_size + 4096;
                 cur &= ~0xfff;
@@ -245,7 +249,7 @@
                             cur, resize_threshold, STRING*));
             GET_ATTR_str_array(INTERP, SELF, str_array);
 
-            for (; i < cur; i++)
+            for (; i < cur; ++i)
                 str_array[i] = NULL;
 
             SET_ATTR_size(INTERP, SELF, new_size);
@@ -264,9 +268,9 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *copy = SUPER();
+        PMC * const copy = SUPER();
         INTVAL size;
-        GET_ATTR_size(interp, SELF, size);
+        GET_ATTR_size(INTERP, SELF, size);
         /* copy trimmed extra space */
         SET_ATTR_resize_threshold(INTERP, copy, size);
         return copy;
@@ -285,7 +289,7 @@
     VTABLE STRING *shift_string() {
         STRING *value;
         INTVAL  size;
-        GET_ATTR_size(interp, SELF, size);
+        GET_ATTR_size(INTERP, SELF, size);
 
         if (size == 0)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
@@ -307,8 +311,8 @@
 */
 
     VTABLE PMC *shift_pmc() {
-        STRING *strval = SELF.shift_string();
-        PMC    *value  = Parrot_pmc_new(INTERP, enum_class_String);
+        STRING * const strval = SELF.shift_string();
+        PMC    * const value  = Parrot_pmc_new(INTERP, enum_class_String);
 
         VTABLE_set_string_native(INTERP, value, strval);
 
@@ -326,7 +330,7 @@
 */
 
     VTABLE INTVAL shift_integer() {
-        PMC *pmcval = SELF.shift_pmc();
+        PMC * const pmcval = SELF.shift_pmc();
         return VTABLE_get_integer(INTERP, pmcval);
     }
 
@@ -341,7 +345,7 @@
 */
 
     VTABLE FLOATVAL shift_float() {
-        PMC *pmcval = SELF.shift_pmc();
+        PMC * const pmcval = SELF.shift_pmc();
         return VTABLE_get_number(INTERP, pmcval);
     }
 
@@ -358,7 +362,7 @@
 */
 
     VTABLE void push_pmc(PMC *value) {
-        STRING *strvalue = VTABLE_get_string(INTERP, value);
+        STRING * const strvalue = VTABLE_get_string(INTERP, value);
         SELF.push_string(strvalue);
     }
 
@@ -374,7 +378,7 @@
 */
 
     VTABLE void push_integer(INTVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_integer_native(INTERP, ret, value);
@@ -394,7 +398,7 @@
 */
 
     VTABLE void push_float(FLOATVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_number_native(INTERP, ret, value);
@@ -470,7 +474,7 @@
 */
 
     VTABLE void unshift_pmc(PMC *value) {
-        STRING *strvalue = VTABLE_get_string(INTERP, value);
+        STRING * const strvalue = VTABLE_get_string(INTERP, value);
         SELF.unshift_string(strvalue);
     }
 
@@ -486,7 +490,7 @@
 */
 
     VTABLE void unshift_integer(INTVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_integer_native(INTERP, ret, value);
@@ -506,7 +510,7 @@
 */
 
     VTABLE void unshift_float(FLOATVAL value) {
-        PMC    *ret = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC    * const ret = Parrot_pmc_new(INTERP, enum_class_String);
         STRING *val;
 
         VTABLE_set_number_native(INTERP, ret, value);
@@ -548,7 +552,7 @@
 */
 
     VTABLE void delete_keyed(PMC *key) {
-        INTVAL    idx  = VTABLE_get_integer(INTERP, key);
+        const INTVAL idx = VTABLE_get_integer(INTERP, key);
         STRING  **str_array;
         UINTVAL   size, i;
 
@@ -601,7 +605,7 @@
         /* shrink the array */
         if (shift < 0) {
             /* start at offset so we don't overwrite values we'll need */
-            for (i = offset+count; i < length; i++)
+            for (i = offset+count; i < length; ++i)
                 VTABLE_set_pmc_keyed_int(INTERP, SELF, i + shift,
                     VTABLE_get_pmc_keyed_int(INTERP, SELF, i));
 
@@ -613,13 +617,13 @@
 
             /* move the existing values */
             /* start at length-1 so we don't overwrite values we'll need */
-            for (i = length - 1; i >= offset; i--)
+            for (i = length - 1; i >= offset; --i)
                 VTABLE_set_pmc_keyed_int(INTERP, SELF, i + shift,
                     VTABLE_get_pmc_keyed_int(INTERP, SELF, i));
         }
 
         /* copy the new values */
-        for (i = 0; i < elems; i++)
+        for (i = 0; i < elems; ++i)
             VTABLE_set_pmc_keyed_int(INTERP, SELF, i + offset,
                 VTABLE_get_pmc_keyed_int(INTERP, value, i));
     }
@@ -638,12 +642,12 @@
 */
 
     METHOD shift() {
-        PMC *value = SELF.shift_pmc();
+        PMC * const value = SELF.shift_pmc();
         RETURN(PMC *value);
     }
 
     METHOD pop() {
-        PMC *value = SELF.pop_pmc();
+        PMC * const value = SELF.pop_pmc();
         RETURN(PMC *value);
     }
 
@@ -677,13 +681,6 @@
 
 F<docs/pdds/pdd17_basic_types.pod>.
 
-=head1 HISTORY
-
-Initial version                  - Matt Fowles 2004-06-11
-Changed allocator to double size - Matt Fowles 2004-06-15
-Added push_string                - Bernhard Schmalhofer 2004-10-17
-moved available size to int_val2 - Matt Fowles 2005-07-22
-
 =cut
 
 */

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

Modified: branches/ops_pct/src/pmc/role.pmc
==============================================================================
--- branches/ops_pct/src/pmc/role.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/role.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -50,9 +50,29 @@
 
 #include "pmc/pmc_namespace.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void init_role_from_hash(PARROT_INTERP,
+    ARGIN(PMC *self),
+    ARGIN(PMC *info))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+#define ASSERT_ARGS_init_role_from_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(self) \
+    , PARROT_ASSERT_ARG(info))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /* Takes a hash and initializes the role based on it. */
-static void init_role_from_hash(PARROT_INTERP, PMC *self, PMC *info)
+static void
+init_role_from_hash(PARROT_INTERP, ARGIN(PMC *self), ARGIN(PMC *info))
 {
+    ASSERT_ARGS(init_role_from_hash)
     Parrot_Role_attributes * const role     = PARROT_ROLE(self);
     STRING * const ns_string     = CONST_STRING(interp, "NameSpace");
     STRING * const name_str      = CONST_STRING(interp, "name");
@@ -127,13 +147,13 @@
      * need to unset ourselves in the old namespace. */
     if (!PMC_IS_NULL(old_ns) && role->_namespace != old_ns) {
         STRING * const set_class_str = CONST_STRING(interp, "set_class");
-        Parrot_PCCINVOKE(interp, old_ns, set_class_str, "P->", PMCNULL);
+        Parrot_pcc_invoke_method_from_c_args(interp, old_ns, set_class_str, "P->", PMCNULL);
     }
 
     /* Link namespace to this role, if there is one. */
     if (!PMC_IS_NULL(role->_namespace)) {
         STRING * const set_class_str = CONST_STRING(interp, "set_class");
-        Parrot_PCCINVOKE(interp, role->_namespace, set_class_str, "P->", self);
+        Parrot_pcc_invoke_method_from_c_args(interp, role->_namespace, set_class_str, "P->", self);
     }
 
     /* Initialize roles, if we have any. */
@@ -143,7 +163,7 @@
         PMC    * const role_list = VTABLE_get_pmc_keyed_str(interp, info, roles_str);
         const int role_count     = VTABLE_elements(interp, role_list);
 
-        for (i = 0; i < role_count; i++) {
+        for (i = 0; i < role_count; ++i) {
             PMC * const cur_role = VTABLE_get_pmc_keyed_int(interp, role_list, i);
             VTABLE_add_role(interp, self, cur_role);
         }
@@ -157,7 +177,7 @@
 
         const int attrib_count = VTABLE_elements(interp, attrib_name_list);
 
-        for (i = 0; i < attrib_count; i++) {
+        for (i = 0; i < attrib_count; ++i) {
             STRING * const attrib_name = VTABLE_get_string_keyed_int(interp,
                 attrib_name_list, i);
             VTABLE_add_attribute(interp, self, attrib_name, PMCNULL);
@@ -228,11 +248,11 @@
         PObj_custom_mark_SET(SELF);
 
         /* Set up the object. */
-        role->name            = CONST_STRING(interp, "");
+        role->name            = CONST_STRING(INTERP, "");
         role->_namespace      = PMCNULL;
-        role->roles           = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        role->methods         = Parrot_pmc_new(interp, enum_class_Hash);
-        role->attrib_metadata = Parrot_pmc_new(interp, enum_class_Hash);
+        role->roles           = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        role->methods         = Parrot_pmc_new(INTERP, enum_class_Hash);
+        role->attrib_metadata = Parrot_pmc_new(INTERP, enum_class_Hash);
     }
 
     VTABLE void init_pmc(PMC *init_data) {
@@ -240,7 +260,7 @@
         SELF.init();
 
         /* Initialize the role with the supplied data. */
-        init_role_from_hash(interp, SELF, init_data);
+        init_role_from_hash(INTERP, SELF, init_data);
     }
 
 /*
@@ -256,11 +276,11 @@
     VTABLE void mark() {
         Parrot_Role_attributes * const role = PARROT_ROLE(SELF);
 
-        Parrot_gc_mark_STRING_alive(interp, role->name);
-        Parrot_gc_mark_PMC_alive(interp, role->_namespace);
-        Parrot_gc_mark_PMC_alive(interp, role->roles);
-        Parrot_gc_mark_PMC_alive(interp, role->methods);
-        Parrot_gc_mark_PMC_alive(interp, role->attrib_metadata);
+        Parrot_gc_mark_STRING_alive(INTERP, role->name);
+        Parrot_gc_mark_PMC_alive(INTERP, role->_namespace);
+        Parrot_gc_mark_PMC_alive(INTERP, role->roles);
+        Parrot_gc_mark_PMC_alive(INTERP, role->methods);
+        Parrot_gc_mark_PMC_alive(INTERP, role->attrib_metadata);
     }
 
 /*
@@ -276,16 +296,16 @@
 
     VTABLE void add_attribute(STRING *name, PMC *type) {
         Parrot_Role_attributes * const role  = PARROT_ROLE(SELF);
-        PMC           * const new_attribute  = Parrot_pmc_new(interp, enum_class_Hash);
+        PMC           * const new_attribute  = Parrot_pmc_new(INTERP, enum_class_Hash);
 
         /* Set name and type. */
-        VTABLE_set_string_keyed_str(interp, new_attribute, CONST_STRING(interp, "name"), name);
+        VTABLE_set_string_keyed_str(INTERP, new_attribute, CONST_STRING(INTERP, "name"), name);
 
         if (!PMC_IS_NULL(type))
-            VTABLE_set_pmc_keyed_str(interp, new_attribute, CONST_STRING(interp, "type"), type);
+            VTABLE_set_pmc_keyed_str(INTERP, new_attribute, CONST_STRING(INTERP, "type"), type);
 
         /* Enter the attribute in the attributes array. */
-        VTABLE_set_pmc_keyed_str(interp, role->attrib_metadata,
+        VTABLE_set_pmc_keyed_str(INTERP, role->attrib_metadata,
             name, new_attribute);
     }
 
@@ -303,15 +323,15 @@
         Parrot_Role_attributes * const role = PARROT_ROLE(SELF);
 
         /* If we have already added a method with this name... */
-        if (VTABLE_exists_keyed_str(interp, role->methods, name)) {
+        if (VTABLE_exists_keyed_str(INTERP, role->methods, name)) {
             /* XXX Need to handle multi methods here. */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
                 "Currently, adding multiple methods of the same name"
                 " is not supported.");
         }
         else {
             /* Enter it into the table. */
-            VTABLE_set_pmc_keyed_str(interp, role->methods, name, sub);
+            VTABLE_set_pmc_keyed_str(INTERP, role->methods, name, sub);
         }
     }
 
@@ -326,12 +346,12 @@
 */
     VTABLE void remove_method(STRING *name) {
         Parrot_Role_attributes * const role = PARROT_ROLE(SELF);
-        if (VTABLE_exists_keyed_str(interp, role->methods, name))
-            VTABLE_delete_keyed_str(interp, role->methods, name);
+        if (VTABLE_exists_keyed_str(INTERP, role->methods, name))
+            VTABLE_delete_keyed_str(INTERP, role->methods, name);
         else
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "No method named '%S' to remove in role '%S'.",
-                name, VTABLE_get_string(interp, SELF));
+                name, VTABLE_get_string(INTERP, SELF));
     }
 
 /*
@@ -349,7 +369,7 @@
         Parrot_Role_attributes * const this_role = PARROT_ROLE(SELF);
 
         /* Do the composition. */
-        Parrot_ComposeRole(interp, role, PMCNULL, 0, PMCNULL, 0,
+        Parrot_ComposeRole(INTERP, role, PMCNULL, 0, PMCNULL, 0,
                this_role->methods, this_role->roles);
     }
 
@@ -387,25 +407,25 @@
         /* What should we return? */
         PMC         *found;
 
-        if (Parrot_str_equal(interp, what, CONST_STRING(interp, "name"))) {
-            found = Parrot_pmc_new(interp, enum_class_String);
-            VTABLE_set_string_native(interp, found, role->name);
+        if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "name"))) {
+            found = Parrot_pmc_new(INTERP, enum_class_String);
+            VTABLE_set_string_native(INTERP, found, role->name);
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "namespace"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "namespace"))) {
             /* Don't clone the namespace, as it's not part of our state. */
             return role->_namespace;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "attributes"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "attributes"))) {
             found = role->attrib_metadata;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "methods"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "methods"))) {
             found = role->methods;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "roles"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "roles"))) {
             found = role->roles;
         }
         else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", what);
         }
 
@@ -414,16 +434,16 @@
         if (found->vtable->base_type == enum_class_Hash) {
             /* for Hash return values, create and return a shallow
              * clone because the VTABLE_clone does a deep clone */
-            PMC * const hash = Parrot_pmc_new(interp, enum_class_Hash);
-            PMC * const iter = VTABLE_get_iter(interp, found);
-            while (VTABLE_get_bool(interp, iter)) {
-                STRING * key = VTABLE_shift_string(interp, iter);
-                PMC * value  = VTABLE_get_pmc_keyed_str(interp, found, key);
-                VTABLE_set_pmc_keyed_str(interp, hash, key, value);
+            PMC * const hash = Parrot_pmc_new(INTERP, enum_class_Hash);
+            PMC * const iter = VTABLE_get_iter(INTERP, found);
+            while (VTABLE_get_bool(INTERP, iter)) {
+                STRING * key = VTABLE_shift_string(INTERP, iter);
+                PMC * value  = VTABLE_get_pmc_keyed_str(INTERP, found, key);
+                VTABLE_set_pmc_keyed_str(INTERP, hash, key, value);
             }
             return hash;
         }
-        return VTABLE_clone(interp, found);
+        return VTABLE_clone(INTERP, found);
     }
 
 
@@ -441,28 +461,28 @@
     VTABLE PMC *inspect() {
         /* Create a hash, then use inspect_str to get all of the data to
          * fill it up with. */
-        PMC * const metadata = Parrot_pmc_new(interp, enum_class_Hash);
+        PMC * const metadata = Parrot_pmc_new(INTERP, enum_class_Hash);
 
-        STRING * const name       = CONST_STRING(interp, "name");
-        STRING * const _namespace = CONST_STRING(interp, "namespace");
-        STRING * const attributes = CONST_STRING(interp, "attributes");
-        STRING * const methods    = CONST_STRING(interp, "methods");
-        STRING * const roles      = CONST_STRING(interp, "roles");
+        STRING * const name       = CONST_STRING(INTERP, "name");
+        STRING * const _namespace = CONST_STRING(INTERP, "namespace");
+        STRING * const attributes = CONST_STRING(INTERP, "attributes");
+        STRING * const methods    = CONST_STRING(INTERP, "methods");
+        STRING * const roles      = CONST_STRING(INTERP, "roles");
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, name,
-            VTABLE_inspect_str(interp, SELF, name));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, name,
+            VTABLE_inspect_str(INTERP, SELF, name));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, _namespace,
-            VTABLE_inspect_str(interp, SELF, _namespace));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, _namespace,
+            VTABLE_inspect_str(INTERP, SELF, _namespace));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, attributes,
-            VTABLE_inspect_str(interp, SELF, attributes));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, attributes,
+            VTABLE_inspect_str(INTERP, SELF, attributes));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, methods,
-            VTABLE_inspect_str(interp, SELF, methods));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, methods,
+            VTABLE_inspect_str(INTERP, SELF, methods));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, roles,
-            VTABLE_inspect_str(interp, SELF, roles));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, roles,
+            VTABLE_inspect_str(INTERP, SELF, roles));
         return metadata;
     }
 
@@ -485,17 +505,17 @@
              * to retrieve a fully qualified list of names, then join the list
              * with a semicolon.
              */
-            PMC * const names = Parrot_ns_get_name(interp, _namespace);
+            PMC * const names = Parrot_ns_get_name(INTERP, _namespace);
 
             if (!PMC_IS_NULL(names)) {
                 /* remove the HLL namespace name */
                 VTABLE_shift_string(INTERP, names);
-                return Parrot_str_join(interp, CONST_STRING(interp, ";"), names);
+                return Parrot_str_join(INTERP, CONST_STRING(INTERP, ";"), names);
             }
         }
 
         /* Otherwise, copy the stored string name of the class. */
-        return Parrot_str_copy(interp, role->name);
+        return role->name;
     }
 
 /*
@@ -512,13 +532,13 @@
         Parrot_Role_attributes * const role  = PARROT_ROLE(SELF);
         INTVAL      i, count;
 
-        if (Parrot_str_equal(interp, role->name, role_name))
+        if (Parrot_str_equal(INTERP, role->name, role_name))
             return 1;
 
-        count = VTABLE_elements(interp, role->roles);
-        for (i = 0; i < count; i++) {
-            PMC *cur_role = VTABLE_get_pmc_keyed_int(interp, role->roles, i);
-            if (VTABLE_does(interp, cur_role, role_name))
+        count = VTABLE_elements(INTERP, role->roles);
+        for (i = 0; i < count; ++i) {
+            PMC *cur_role = VTABLE_get_pmc_keyed_int(INTERP, role->roles, i);
+            if (VTABLE_does(INTERP, cur_role, role_name))
                 return 1;
         }
 
@@ -542,10 +562,10 @@
         if (role == SELF)
             return 1;
 
-        count = VTABLE_elements(interp, this_role->roles);
-        for (i = 0; i < count; i++) {
-            PMC *cur_role = VTABLE_get_pmc_keyed_int(interp, this_role->roles, i);
-            if (VTABLE_does_pmc(interp, cur_role, role))
+        count = VTABLE_elements(INTERP, this_role->roles);
+        for (i = 0; i < count; ++i) {
+            PMC *cur_role = VTABLE_get_pmc_keyed_int(INTERP, this_role->roles, i);
+            if (VTABLE_does_pmc(INTERP, cur_role, role))
                 return 1;
         }
 
@@ -553,7 +573,7 @@
     }
 
     /*
-     * Below here are non-vtable methods that eventually will go in a role
+     * Below here are methods that eventually will go in a role
      * that is composed into here to optionally give a nice interface from
      * PIR (ParrotRole isa Role does RoleMethods or something like this).
      */
@@ -583,9 +603,9 @@
         if (got_name) {
             /* We'll build a hash just containing the name, then give this to
              * init_role_from_hash - saves some code duplication. */
-            PMC *naming_hash = Parrot_pmc_new(interp, enum_class_Hash);
-            VTABLE_set_string_keyed_str(interp, naming_hash, CONST_STRING(interp, "name"), name);
-            init_role_from_hash(interp, SELF, naming_hash);
+            PMC *naming_hash = Parrot_pmc_new(INTERP, enum_class_Hash);
+            VTABLE_set_string_keyed_str(INTERP, naming_hash, CONST_STRING(INTERP, "name"), name);
+            init_role_from_hash(INTERP, SELF, naming_hash);
         }
 
         ret_name = role->name;
@@ -623,7 +643,7 @@
 
 */
     METHOD attributes() {
-        PMC *ret_attrib_metadata = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "attributes"));
+        PMC *ret_attrib_metadata = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "attributes"));
         RETURN(PMC *ret_attrib_metadata);
     }
 
@@ -641,7 +661,7 @@
 */
     METHOD add_attribute(STRING *attribute_name,
             PMC *attribute_type :optional, int got_type :opt_flag) {
-        VTABLE_add_attribute(interp, SELF, attribute_name,
+        VTABLE_add_attribute(INTERP, SELF, attribute_name,
             got_type ? attribute_type : PMCNULL);
     }
 
@@ -656,7 +676,7 @@
 
 */
     METHOD methods() {
-        PMC *ret_methods = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "methods"));
+        PMC *ret_methods = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "methods"));
         RETURN(PMC *ret_methods);
     }
 
@@ -671,7 +691,7 @@
 
 */
     METHOD add_method(STRING *name, PMC *sub) {
-        VTABLE_add_method(interp, SELF, name, sub);
+        VTABLE_add_method(INTERP, SELF, name, sub);
     }
 
 /*
@@ -685,7 +705,7 @@
 */
     METHOD remove_method(STRING *name)
     {
-        VTABLE_remove_method(interp, SELF, name);
+        VTABLE_remove_method(INTERP, SELF, name);
     }
 
 
@@ -699,7 +719,7 @@
 
 */
     METHOD roles() {
-        PMC *ret_roles = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "roles"));
+        PMC *ret_roles = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "roles"));
         RETURN(PMC *ret_roles);
     }
 
@@ -727,12 +747,12 @@
         STRING *s_name   = NULL;
         STRING *r_name   = NULL;
 
-        (STRING *s_name) = PCCINVOKE(interp, SELF, "name");
-        (STRING *r_name) = PCCINVOKE(interp, role, "name");
+        (STRING *s_name) = PCCINVOKE(INTERP, SELF, "name");
+        (STRING *r_name) = PCCINVOKE(INTERP, role, "name");
         UNUSED(s_name);
         UNUSED(r_name);
 
-        Parrot_ComposeRole(interp, role, exclude_method, got_exclude_method,
+        Parrot_ComposeRole(INTERP, role, exclude_method, got_exclude_method,
                            alias_method, got_alias_method,
                            role_info->methods, role_info->roles);
     }
@@ -750,11 +770,11 @@
     METHOD inspect(STRING *what :optional, int got_what :opt_flag) {
         PMC *found;
 
-        /* Just delegate to the appropriate vtable method. */
+        /* Just delegate to the appropriate vtable. */
         if (got_what)
-            found = VTABLE_inspect_str(interp, SELF, what);
+            found = VTABLE_inspect_str(INTERP, SELF, what);
         else
-            found = VTABLE_inspect(interp, SELF);
+            found = VTABLE_inspect(INTERP, SELF);
 
         RETURN(PMC *found);
     }

Modified: branches/ops_pct/src/pmc/scalar.pmc
==============================================================================
--- branches/ops_pct/src/pmc/scalar.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/scalar.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 #include "pmc/pmc_bigint.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass scalar {
 
 /*
@@ -628,7 +632,7 @@
 
     VTABLE PMC *concatenate(PMC *value, PMC *dest) {
         STRING * const s = Parrot_str_concat(INTERP, SELF.get_string(),
-            VTABLE_get_string(INTERP, value), 0);
+            VTABLE_get_string(INTERP, value));
 
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
@@ -638,7 +642,7 @@
 
     VTABLE PMC *concatenate_str(STRING *value, PMC *dest) {
         STRING * const s = Parrot_str_concat(INTERP,
-            SELF.get_string(), value, 0);
+            SELF.get_string(), value);
 
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
@@ -649,12 +653,12 @@
     VTABLE void i_concatenate(PMC *value) {
         STRING * const s = SELF.get_string();
         STRING * const v = VTABLE_get_string(INTERP, value);
-        SELF.set_string_native(Parrot_str_append(INTERP, s, v));
+        SELF.set_string_native(Parrot_str_concat(INTERP, s, v));
     }
 
     VTABLE void i_concatenate_str(STRING *value) {
         STRING * const s = SELF.get_string();
-        SELF.set_string_native(Parrot_str_append(INTERP, s, value));
+        SELF.set_string_native(Parrot_str_concat(INTERP, s, value));
     }
 
 /*
@@ -920,7 +924,7 @@
 
     VTABLE STRING *substr_str(INTVAL offset, INTVAL length) {
         return Parrot_str_substr(INTERP, VTABLE_get_string(INTERP, SELF),
-            offset, length, NULL, 0);
+                offset, length);
     }
 
 /*
@@ -934,15 +938,12 @@
 */
     VTABLE PMC *share_ro() {
         PMC         *ret  = pt_shared_fixup(INTERP, SELF);
-        PMC * const _true = Parrot_pmc_new(INTERP, enum_class_Integer);
-
-        VTABLE_set_integer_native(INTERP, _true, 1);
+        PMC * const _true = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, 1);
 
         /* first set readonly */
         VTABLE_setprop(INTERP, ret, CONST_STRING(INTERP, "_ro"), _true);
 
         /* We're sharing this, so make sure it has a PMC_sync */
-        Parrot_gc_add_pmc_sync(INTERP, ret);
         PObj_is_PMC_shared_SET(ret);
 
         /* XXX FIXME workaround lack of metadata sharing*/

Modified: branches/ops_pct/src/pmc/scheduler.pmc
==============================================================================
--- branches/ops_pct/src/pmc/scheduler.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/scheduler.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -20,6 +20,10 @@
 
 #include "parrot/scheduler_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Scheduler auto_attrs {
 
     ATTR INTVAL        id;         /* The scheduler's ID. */
@@ -57,10 +61,10 @@
         /* Set up the core struct. */
         core_struct->id          = 0;
         core_struct->max_tid     = 0;
-        core_struct->task_list   = Parrot_pmc_new(interp, enum_class_Hash);
-        core_struct->task_index  = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
-        core_struct->wait_index  = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-        core_struct->handlers    = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+        core_struct->task_list   = Parrot_pmc_new(INTERP, enum_class_Hash);
+        core_struct->task_index  = Parrot_pmc_new(INTERP, enum_class_ResizableIntegerArray);
+        core_struct->wait_index  = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
+        core_struct->handlers    = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
         core_struct->messages    = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
         core_struct->interp      = INTERP;
         MUTEX_INIT(core_struct->msg_lock);
@@ -137,7 +141,7 @@
         SCHEDULER_cache_valid_CLEAR(SELF);
 
         if (task->vtable->base_type != enum_class_Exception)
-            Parrot_cx_runloop_wake(core_struct->interp, SELF);
+            Parrot_cx_runloop_wake(core_struct->INTERP, SELF);
     }
 
 
@@ -160,7 +164,7 @@
          * deleted tasks. */
         while (PMC_IS_NULL(task)
         &&     VTABLE_elements(INTERP, core_struct->task_index) > 0) {
-            INTVAL tid = VTABLE_shift_integer(INTERP, core_struct->task_index);
+            const INTVAL tid = VTABLE_shift_integer(INTERP, core_struct->task_index);
 
             if (tid > 0)
                 task = VTABLE_get_pmc_keyed_int(INTERP,
@@ -198,8 +202,9 @@
 */
 
     VTABLE void delete_keyed_int(INTVAL key) {
-        Parrot_Scheduler_attributes *core_struct = PARROT_SCHEDULER(SELF);
-        STRING           *task_id_str = Parrot_str_from_int(INTERP, key);
+        Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
+        STRING                      * const task_id_str = Parrot_str_from_int(INTERP, key);
+
         VTABLE_delete_keyed_str(INTERP, core_struct->task_list, task_id_str);
         SCHEDULER_cache_valid_CLEAR(SELF);
     }
@@ -266,11 +271,11 @@
         if (PARROT_SCHEDULER(SELF)) {
             Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
 
-            Parrot_gc_mark_PMC_alive(interp, core_struct->task_list);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->task_index);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->wait_index);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->handlers);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->messages);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->task_list);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->task_index);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->wait_index);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->handlers);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->messages);
         }
     }
 
@@ -401,8 +406,8 @@
     METHOD delete_handler(STRING *type :optional, INTVAL have_type :opt_flag) {
         PMC    *handlers;
         INTVAL  elements, index;
-        STRING *except_str = CONST_STRING(INTERP, "exception");
-        STRING *event_str  = CONST_STRING(INTERP, "event");
+        STRING * const except_str = CONST_STRING(INTERP, "exception");
+        STRING * const event_str  = CONST_STRING(INTERP, "event");
 
         GET_ATTR_handlers(INTERP, SELF, handlers);
         elements = VTABLE_elements(INTERP, handlers);
@@ -412,7 +417,7 @@
 
         /* Loop from newest handler to oldest handler. */
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(INTERP, handlers, index);
+            const PMC * const handler = VTABLE_get_pmc_keyed_int(INTERP, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 if (Parrot_str_equal(INTERP, type, except_str)
                 &&  handler->vtable->base_type == enum_class_ExceptionHandler) {
@@ -427,7 +432,7 @@
             }
         }
 
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
             "No handler to delete.");
     }
 
@@ -444,35 +449,35 @@
 */
 
     METHOD find_handler(PMC *task) {
-        STRING * const handled_str = CONST_STRING(interp, "handled");
-        STRING * const iter_str    = CONST_STRING(interp, "handler_iter");
+        STRING * const handled_str = CONST_STRING(INTERP, "handled");
+        STRING * const iter_str    = CONST_STRING(INTERP, "handler_iter");
         PMC    *iter;
 
         /* Exceptions store the handler iterator for rethrow, other kinds of
          * tasks don't (though they could). */
         if (task->vtable->base_type == enum_class_Exception
-        &&  VTABLE_get_integer_keyed_str(interp, task, handled_str) == -1) {
-            iter = VTABLE_get_attr_str(interp, task, iter_str);
+        &&  VTABLE_get_integer_keyed_str(INTERP, task, handled_str) == -1) {
+            iter = VTABLE_get_attr_str(INTERP, task, iter_str);
         }
         else {
             PMC *handlers;
-            GET_ATTR_handlers(interp, SELF, handlers);
-            iter = VTABLE_get_iter(interp, handlers);
+            GET_ATTR_handlers(INTERP, SELF, handlers);
+            iter = VTABLE_get_iter(INTERP, handlers);
 
             if (task->vtable->base_type == enum_class_Exception)
-                VTABLE_set_attr_str(interp, task, iter_str, iter);
+                VTABLE_set_attr_str(INTERP, task, iter_str, iter);
         }
 
         /* Loop from newest handler to oldest handler. */
-        while (VTABLE_get_bool(interp, iter)) {
-            PMC *handler = VTABLE_shift_pmc(INTERP, iter);
+        while (VTABLE_get_bool(INTERP, iter)) {
+            PMC * const handler = VTABLE_shift_pmc(INTERP, iter);
 
             INTVAL valid_handler = 0;
             if (!PMC_IS_NULL(handler)) {
-                (INTVAL valid_handler) = PCCINVOKE(INTERP, handler, "can_handle", PMC *task);
+                (const INTVAL valid_handler) = PCCINVOKE(INTERP, handler, "can_handle", PMC *task);
                 if (valid_handler) {
                     if (task->vtable->base_type == enum_class_Exception)
-                        VTABLE_set_integer_native(interp, handler, 1);
+                        VTABLE_set_integer_native(INTERP, handler, 1);
                     RETURN(PMC *handler);
                 }
             }
@@ -509,16 +514,16 @@
             RETURN(INTVAL elements);
 
         for (index = 0; index < elements; ++index) {
-            PMC    *handler   = VTABLE_get_pmc_keyed_int(INTERP, handlers, index);
-            STRING *exception = CONST_STRING(INTERP, "exception");
-            STRING *event     = CONST_STRING(INTERP, "event");
+            const PMC * const handler   = VTABLE_get_pmc_keyed_int(INTERP, handlers, index);
+            STRING    * const exception = CONST_STRING(INTERP, "exception");
+            STRING    * const event     = CONST_STRING(INTERP, "event");
 
             if (!PMC_IS_NULL(handler)) {
                 if ((Parrot_str_equal(INTERP, type, exception)
                 &&   handler->vtable->base_type == enum_class_ExceptionHandler)
                 || (Parrot_str_equal(INTERP, type, event)
                 &&  handler->vtable->base_type == enum_class_EventHandler))
-                        count++;
+                        ++count;
             }
         }
 

Modified: branches/ops_pct/src/pmc/schedulermessage.pmc
==============================================================================
--- branches/ops_pct/src/pmc/schedulermessage.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/schedulermessage.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -20,6 +20,10 @@
 
 #include "parrot/scheduler_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass SchedulerMessage auto_attrs {
     ATTR INTVAL  id;        /* The message's ID. */
     ATTR STRING *type;      /* The message's type. */
@@ -110,7 +114,10 @@
 */
 
     VTABLE INTVAL get_integer() {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        const Parrot_SchedulerMessage_attributes * const
+            core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(INTERP);
+
         return core_struct->id;
     }
 
@@ -125,7 +132,8 @@
 */
 
     VTABLE void set_integer_native(INTVAL value) {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        Parrot_SchedulerMessage_attributes * const core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(INTERP);
         core_struct->id = value;
     }
 
@@ -141,7 +149,9 @@
 */
 
     STRING *  get_string() {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        const Parrot_SchedulerMessage_attributes * const core_struct =
+            PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(INTERP);
         return core_struct->type;
     }
 
@@ -156,7 +166,8 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        Parrot_SchedulerMessage_attributes * core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        Parrot_SchedulerMessage_attributes * const core_struct = PARROT_SCHEDULERMESSAGE(SELF);
+        UNUSED(INTERP);
         core_struct->type = value;
     }
 
@@ -199,8 +210,8 @@
             Parrot_SchedulerMessage_attributes * const core_struct =
                 PARROT_SCHEDULERMESSAGE(SELF);
 
-            Parrot_gc_mark_STRING_alive(interp, core_struct->type);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->data);
+            Parrot_gc_mark_STRING_alive(INTERP, core_struct->type);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->data);
         }
     }
 

Modified: branches/ops_pct/src/pmc/sockaddr.pmc
==============================================================================
--- branches/ops_pct/src/pmc/sockaddr.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/sockaddr.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -29,6 +29,10 @@
 }
 #endif
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Sockaddr auto_attrs {
     ATTR void   *pointer; /* The stored pointer. */
 

Modified: branches/ops_pct/src/pmc/socket.pmc
==============================================================================
--- branches/ops_pct/src/pmc/socket.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/socket.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 #include "../src/io/io_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Socket extends Handle provides socket auto_attrs {
     ATTR PMC *local;           /* Local addr                   */
     ATTR PMC *remote;          /* Remote addr                  */
@@ -59,8 +63,8 @@
         Parrot_Socket_attributes * const old_struct = PARROT_SOCKET(SELF);
         Parrot_Socket_attributes * const data_struct = PARROT_SOCKET(copy);
 
-        data_struct->local      = VTABLE_clone(interp, old_struct->local);
-        data_struct->remote     = VTABLE_clone(interp, old_struct->remote);
+        data_struct->local      = VTABLE_clone(INTERP, old_struct->local);
+        data_struct->remote     = VTABLE_clone(INTERP, old_struct->remote);
 
         return SELF;
     }
@@ -79,8 +83,8 @@
         Parrot_Socket_attributes * const data = PARROT_SOCKET(SELF);
 
         if (data) {
-            Parrot_gc_mark_PMC_alive(interp, data->local);
-            Parrot_gc_mark_PMC_alive(interp, data->remote);
+            Parrot_gc_mark_PMC_alive(INTERP, data->local);
+            Parrot_gc_mark_PMC_alive(INTERP, data->remote);
         }
     }
 /*
@@ -97,7 +101,7 @@
             Parrot_Socket_attributes *data_struct = PARROT_SOCKET(SELF);
 
             if (data_struct->os_handle != PIO_INVALID_HANDLE)
-                Parrot_io_close_piohandle(interp, data_struct->os_handle);
+                Parrot_io_close_piohandle(INTERP, data_struct->os_handle);
             data_struct->os_handle = PIO_INVALID_HANDLE;
         }
     }
@@ -132,7 +136,7 @@
 
 
     METHOD socket(INTVAL fam, INTVAL type, INTVAL proto) {
-        if (Parrot_io_socket(interp, SELF, fam, type, proto) < 0)
+        if (Parrot_io_socket(INTERP, SELF, fam, type, proto) < 0)
             RETURN(PMC * PMCNULL);
         RETURN(PMC * SELF);
     }
@@ -167,7 +171,7 @@
 */
 
     METHOD sockaddr(STRING * address, INTVAL port) {
-        PMC * res = Parrot_io_sockaddr_in(interp, address, port);
+        PMC * res = Parrot_io_sockaddr_in(INTERP, address, port);
         RETURN(PMC * res);
     }
 
@@ -209,7 +213,7 @@
             Parrot_Socket_attributes *data_struct = PARROT_SOCKET(SELF);
 
             if (data_struct->os_handle != PIO_INVALID_HANDLE)
-                result = Parrot_io_close_piohandle(interp, data_struct->os_handle);
+                result = Parrot_io_close_piohandle(INTERP, data_struct->os_handle);
             data_struct->os_handle = PIO_INVALID_HANDLE;
         }
         RETURN(INTVAL result);

Modified: branches/ops_pct/src/pmc/string.pmc
==============================================================================
--- branches/ops_pct/src/pmc/string.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/string.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass String extends scalar provides string provides scalar auto_attrs {
     ATTR STRING * str_val;
 
@@ -34,7 +38,7 @@
 */
 
     VTABLE void init() {
-        STRING *str_val = STRINGNULL;
+        STRING * const str_val = STRINGNULL;
         SET_ATTR_str_val(INTERP, SELF, str_val);
 
         PObj_custom_mark_SET(SELF);
@@ -104,7 +108,7 @@
 
     VTABLE FLOATVAL get_number() {
         STRING *str_val;
-        GET_ATTR_str_val(interp, SELF, str_val);
+        GET_ATTR_str_val(INTERP, SELF, str_val);
         return Parrot_str_to_num(INTERP, str_val);
     }
 
@@ -121,8 +125,7 @@
     VTABLE STRING *get_string() {
         STRING *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-
-        return str_val ? Parrot_str_copy(INTERP, str_val) : NULL;
+        return str_val;
     }
 
 /*
@@ -187,7 +190,7 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        if (!value)
+        if (value == NULL)
             value = STRINGNULL;
 
         /* Only allow constant PMCs to embed constant strings */
@@ -213,12 +216,7 @@
 */
 
     VTABLE void assign_string_native(STRING *value) {
-        if (!STRING_IS_NULL(value)) {
-            SET_ATTR_str_val(INTERP, SELF,
-                Parrot_str_set(INTERP, SELF.get_string(), value));
-        }
-        else
-            SET_ATTR_str_val(INTERP, SELF, NULL);
+        SET_ATTR_str_val(INTERP, SELF, value);
     }
 
 /*
@@ -371,7 +369,7 @@
     VTABLE void substr(INTVAL offset, INTVAL length, PMC *dest) {
         STRING *str_val, *s2;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        s2 = Parrot_str_substr(INTERP, str_val, offset, length, NULL, 0);
+        s2 = Parrot_str_substr(INTERP, str_val, offset, length);
         VTABLE_set_string_native(INTERP, dest, s2);
     }
 
@@ -388,7 +386,7 @@
     VTABLE STRING *substr_str(INTVAL offset, INTVAL length) {
         STRING *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        return Parrot_str_substr(INTERP, str_val, offset, length, NULL, 0);
+        return Parrot_str_substr(INTERP, str_val, offset, length);
     }
 
 /*
@@ -443,7 +441,7 @@
     VTABLE STRING *get_string_keyed_int(INTVAL pos) {
         STRING      *str_val;
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        return Parrot_str_substr(INTERP, str_val, pos, 1, NULL, 0);
+        return Parrot_str_substr(INTERP, str_val, pos, 1);
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
@@ -474,7 +472,8 @@
         STRING      *str_val;
         const INTVAL len = Parrot_str_byte_length(INTERP, value);
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        Parrot_str_replace(INTERP, str_val, pos, len, value, &str_val);
+        str_val = Parrot_str_replace(INTERP, str_val, pos, len, value);
+        SET_ATTR_str_val(INTERP, SELF, str_val);
     }
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
@@ -485,7 +484,8 @@
         STRING      *str_val;
         STRING * const c = string_chr(INTERP, (UINTVAL) value);
         GET_ATTR_str_val(INTERP, SELF, str_val);
-        Parrot_str_replace(INTERP, str_val, pos, 1, c, &str_val);
+        str_val = Parrot_str_replace(INTERP, str_val, pos, 1, c);
+        SET_ATTR_str_val(INTERP, SELF, str_val);
     }
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
@@ -508,11 +508,11 @@
     METHOD replace(STRING *orig, STRING *_new) {
         const INTVAL   old_len = Parrot_str_byte_length(INTERP, orig);
         const INTVAL   new_len = Parrot_str_byte_length(INTERP, _new);
-        STRING * const s       = VTABLE_get_string(INTERP, SELF);
+        STRING       * s       = VTABLE_get_string(INTERP, SELF);
         INTVAL         i       = 0;
 
         while (-1 != (i = Parrot_str_find_index(INTERP, s, orig, i))) {
-            (void)Parrot_str_replace(INTERP, s, i, old_len, _new, NULL);
+            s = Parrot_str_replace(INTERP, s, i, old_len, _new);
             i += new_len;
         }
 
@@ -536,12 +536,12 @@
 */
 
     METHOD to_int(INTVAL base) {
-        PMC *result = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp,
+        PMC * const result = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(INTERP,
                         enum_class_Integer));
 
         /* TODO verify encoding */
         const STRING *me  = VTABLE_get_string(INTERP, SELF);
-        char         *str = Parrot_str_to_cstring(INTERP, me);
+        char  * const str = Parrot_str_to_cstring(INTERP, me);
         UINTVAL       i   = 0;
         size_t        j   = 0;
         size_t        len = strlen(str);
@@ -567,11 +567,11 @@
                 break;
 
             i = i * base + dig;
-            j++;
+            ++j;
         }
 
         if (j < len) {
-            char ch = str[j];
+            const char ch = str[j];
             Parrot_str_free_cstring(str);
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "invalid conversion to int - bad char %c", ch);
@@ -690,16 +690,16 @@
         INTVAL        *tr_data;
         INTVAL         i;
 
-        const INTVAL len = Parrot_str_byte_length(interp, src);
+        const INTVAL len = Parrot_str_byte_length(INTERP, src);
 
         if (!len)
             RETURN(void);
 
         if (src->charset != Parrot_ascii_charset_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_ENCODING,
                 "Can't translate non-ascii");
 
-        p = (unsigned char *)Buffer_bufstart(src);
+        p = (unsigned char *)(src->strstart);
         /* TODO verify trans table */
 
         GETATTR_FixedIntegerArray_int_array(INTERP, table, tr_data);
@@ -713,38 +713,6 @@
 
 /*
 
-=item C<void reverse(STRING *src)>
-
-Reverse the ascii STRING C<src> in place.
-
-=cut
-
-*/
-
-    METHOD reverse(STRING *src) {
-        INTVAL         i;
-        unsigned char *p;
-        INTVAL         len = Parrot_str_byte_length(interp, src);
-
-        if (!len)
-            RETURN(void);
-
-        if (src->charset != Parrot_ascii_charset_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
-                "Can't reverse non-ascii");
-
-        p = (unsigned char *)Buffer_bufstart(src);
-
-        for (i = 0, --len; i < len; ++i, --len) {
-            const unsigned char ch = p[len];
-
-            p[len] = p[i];
-            p[i]   = ch;
-        }
-    }
-
-/*
-
 =item C<INTEGER is_integer(STRING *src)>
 
 Checks if the ascii STRING C<str> is just an integer.
@@ -756,13 +724,13 @@
     METHOD is_integer(STRING *src) {
         INTVAL         i;
         unsigned char *p;
-        const INTVAL   len = Parrot_str_byte_length(interp, src);
+        const INTVAL   len = Parrot_str_byte_length(INTERP, src);
 
         if (!len)
             RETURN(INTVAL 0);
 
         if (src->charset != Parrot_ascii_charset_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_ENCODING,
                 "Can't is_integer non-ascii");
 
         i = 0;
@@ -814,7 +782,7 @@
         if (start < 0)
             RETURN(INTVAL res);
 
-        len = Parrot_str_byte_length(interp, src);
+        len = Parrot_str_byte_length(INTERP, src);
 
         if (!len)
             RETURN(INTVAL res);
@@ -822,7 +790,7 @@
         if (start >= (INTVAL)len)
             RETURN(INTVAL res);
 
-        if (!Parrot_str_byte_length(interp, substring))
+        if (!Parrot_str_byte_length(INTERP, substring))
             RETURN(INTVAL res);
 
         res = CHARSET_RINDEX(INTERP, src, substring, (UINTVAL)start);

Modified: branches/ops_pct/src/pmc/stringhandle.pmc
==============================================================================
--- branches/ops_pct/src/pmc/stringhandle.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/stringhandle.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2008, Parrot Foundation.
+Copyright (C) 2008-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -17,8 +17,18 @@
 
 #include "../src/io/io_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
 PARROT_INLINE
-static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(STRING *s));
+static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_encoding_is_utf8 __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 */
 
 /*
 
@@ -26,7 +36,7 @@
 
 =over 4
 
-=item C<static int encoding_is_utf8()>
+=item C<static int encoding_is_utf8(PARROT_INTERP, const STRING *s)>
 
 Helper function for internal usage. Return 1 if the string argument is
 not null and has utf8 encoding, 0 otherwise.
@@ -38,8 +48,10 @@
 */
 
 PARROT_INLINE
-static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(STRING *s))
+static int
+encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
+    ASSERT_ARGS(encoding_is_utf8)
     if (STRING_IS_NULL(s))
         return 0;
     else
@@ -69,7 +81,7 @@
 */
 
     VTABLE void init() {
-        Parrot_StringHandle_attributes *data_struct =
+        Parrot_StringHandle_attributes * const data_struct =
                 (Parrot_StringHandle_attributes *) PMC_data(SELF);
 
         data_struct->flags        = 0;
@@ -98,11 +110,11 @@
         Parrot_StringHandle_attributes * const data_struct = PARROT_STRINGHANDLE(copy);
 
         if (old_struct->stringhandle != NULL)
-            data_struct->stringhandle = Parrot_str_copy(INTERP, old_struct->stringhandle);
+            data_struct->stringhandle = old_struct->stringhandle;
         if (old_struct->mode != NULL)
-            data_struct->mode     = Parrot_str_copy(INTERP, old_struct->mode);
+            data_struct->mode     = old_struct->mode;
         if (old_struct->encoding != NULL)
-            data_struct->encoding = Parrot_str_copy(INTERP, old_struct->encoding);
+            data_struct->encoding = old_struct->encoding;
         data_struct->flags    = old_struct->flags;
 
         return copy;
@@ -120,10 +132,10 @@
 
     VTABLE void mark() {
         Parrot_StringHandle_attributes * const data_struct = PARROT_STRINGHANDLE(SELF);
-        Parrot_gc_mark_STRING_alive(interp, data_struct->stringhandle);
-        Parrot_gc_mark_STRING_alive(interp, data_struct->mode);
-        Parrot_gc_mark_STRING_alive(interp, data_struct->encoding);
-        Parrot_gc_mark_STRING_alive(interp, data_struct->filename);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->stringhandle);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->mode);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->encoding);
+        Parrot_gc_mark_STRING_alive(INTERP, data_struct->filename);
     }
 
 /*
@@ -170,10 +182,10 @@
         INTVAL flags;
 
         if (got_mode && !STRING_IS_NULL(mode))
-            SET_ATTR_mode(INTERP, SELF, Parrot_str_copy(INTERP, mode));
+            SET_ATTR_mode(INTERP, SELF, mode);
 
         if (got_filename && !STRING_IS_NULL(filename))
-            SET_ATTR_filename(INTERP, SELF, Parrot_str_copy(INTERP, filename));
+            SET_ATTR_filename(INTERP, SELF, filename);
 
 
         /* If StringHandle hasn't already been initialized, create a new string. */
@@ -243,8 +255,7 @@
 */
 
     METHOD is_closed() {
-        INTVAL status;
-        status = Parrot_io_is_closed(INTERP, SELF);
+        const INTVAL status = Parrot_io_is_closed(INTERP, SELF);
         RETURN(INTVAL status);
     }
 
@@ -260,8 +271,7 @@
 */
 
     METHOD read(INTVAL length) {
-        STRING *string_result;
-        string_result = Parrot_io_reads(INTERP, SELF, length);
+        STRING * const string_result = Parrot_io_reads(INTERP, SELF, length);
         RETURN(STRING *string_result);
     }
 
@@ -277,8 +287,7 @@
 */
 
     METHOD readline() {
-        STRING *string_result;
-        string_result = Parrot_io_readline(INTERP, SELF);
+        STRING * const string_result = Parrot_io_readline(INTERP, SELF);
         RETURN(STRING *string_result);
     }
 
@@ -305,8 +314,6 @@
             else
                 string_result = Parrot_str_new_constant(INTERP, "");
         }
-        else
-            string_result = Parrot_str_copy(INTERP, string_result);
 
         RETURN(STRING *string_result);
     }
@@ -339,7 +346,7 @@
     METHOD print(PMC *to_print) {
         STRING * const string_to_print = VTABLE_get_string(INTERP, to_print);
 
-        Parrot_io_putps(interp, SELF, string_to_print);
+        Parrot_io_putps(INTERP, SELF, string_to_print);
     }
 
 /*
@@ -358,19 +365,19 @@
 
         GET_ATTR_stringhandle(INTERP, SELF, old_string);
         if (STRING_IS_NULL(old_string))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot write to a closed filehandle");
 
         GET_ATTR_flags(INTERP, SELF, flags);
         if (!(flags & PIO_F_WRITE))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot write to a filehandle not opened for write");
 
-        new_string = Parrot_str_append(interp, old_string, to_print);
+        new_string = Parrot_str_concat(INTERP, old_string, to_print);
 
         SET_ATTR_stringhandle(INTERP, SELF, new_string);
 
-        status = Parrot_str_byte_length(interp, new_string);
+        status = Parrot_str_byte_length(INTERP, new_string);
         RETURN(INTVAL status);
     }
 
@@ -435,7 +442,7 @@
 
         if (STRING_IS_NULL(stringhandle))
             RETURN(INTVAL 0);
-        buffer_size = Parrot_str_byte_length(interp, stringhandle);
+        buffer_size = Parrot_str_byte_length(INTERP, stringhandle);
 
         RETURN(INTVAL buffer_size);
 
@@ -452,13 +459,9 @@
 */
 
     METHOD mode() {
-        STRING *mode, *mode_copy;
-
+        STRING *mode;
         GET_ATTR_mode(INTERP, SELF, mode);
-        mode_copy = Parrot_str_copy(INTERP, mode);
-
-        RETURN(STRING *mode_copy);
-
+        RETURN(STRING *mode);
     }
 
 /*
@@ -474,21 +477,14 @@
 
     METHOD encoding(STRING *new_encoding :optional, INTVAL got_encoding :opt_flag) {
         STRING *encoding;
-        STRING *encoding_copy = NULL;
 
         if (got_encoding) {
-            if (!STRING_IS_NULL(new_encoding))
-                encoding_copy = Parrot_str_copy(INTERP, new_encoding);
-            SET_ATTR_encoding(INTERP, SELF, encoding_copy);
+            SET_ATTR_encoding(INTERP, SELF, new_encoding);
             RETURN(STRING *new_encoding);
         }
 
         GET_ATTR_encoding(INTERP, SELF, encoding);
-        if (!STRING_IS_NULL(encoding))
-            encoding_copy = Parrot_str_copy(INTERP, encoding);
-
-        RETURN(STRING *encoding_copy);
-
+        RETURN(STRING *encoding);
     }
 
 /*
@@ -527,6 +523,7 @@
 */
 
     METHOD get_fd() {
+        UNUSED(INTERP);
         RETURN(INTVAL -1);
     }
 

Modified: branches/ops_pct/src/pmc/stringiterator.pmc
==============================================================================
--- branches/ops_pct/src/pmc/stringiterator.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/stringiterator.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -22,6 +22,10 @@
 */
 
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass StringIterator auto_attrs extends Iterator {
     ATTR PMC    *string;    /* String to iterate over */
     ATTR INTVAL  pos;       /* Current position of iterator for forward iterator */

Modified: branches/ops_pct/src/pmc/sub.pmc
==============================================================================
--- branches/ops_pct/src/pmc/sub.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/sub.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -21,9 +21,22 @@
 #include "parrot/oplib/ops.h"
 #include "sub.str"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void print_sub_name(PARROT_INTERP, ARGIN_NULLOK(PMC *sub))
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_print_sub_name __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 */
+
 static void
 print_sub_name(PARROT_INTERP, ARGIN_NULLOK(PMC *sub))
 {
+    ASSERT_ARGS(print_sub_name)
     Interp * const tracer = (interp->pdb && interp->pdb->debugger)
                           ? interp->pdb->debugger
                           : interp;
@@ -174,7 +187,7 @@
 
         field = CONST_STRING(INTERP, "n_regs_used");
         if (VTABLE_exists_keyed_str(INTERP, init, field)) {
-            PMC   *tmp = VTABLE_get_pmc_keyed_str(INTERP, init, field);
+            PMC * const tmp = VTABLE_get_pmc_keyed_str(INTERP, init, field);
             INTVAL i;
             for (i = 0; i < 4; ++i)
                 attrs->n_regs_used[i] = VTABLE_get_integer_keyed_int(INTERP, tmp, i);
@@ -182,7 +195,7 @@
 
         field = CONST_STRING(INTERP, "arg_info");
         if (VTABLE_exists_keyed_str(INTERP, init, field)) {
-            PMC   *tmp = VTABLE_get_pmc_keyed_str(INTERP, init, field);
+            PMC * const tmp = VTABLE_get_pmc_keyed_str(INTERP, init, field);
             /* Allocate structure to store argument information in. */
             attrs->arg_info = mem_gc_allocate_zeroed_typed(INTERP,
                     Parrot_sub_arginfo);
@@ -217,7 +230,7 @@
 */
 
     VTABLE void destroy() {
-        Parrot_Sub_attributes *sub = PARROT_SUB(SELF);
+        Parrot_Sub_attributes * const sub = PARROT_SUB(SELF);
 
         if (sub && sub->arg_info)
             mem_gc_free(INTERP, sub->arg_info);
@@ -239,20 +252,14 @@
 */
 
     VTABLE STRING *get_string() {
-        Parrot_Sub_attributes *sub;
-        PMC_get_sub(INTERP, SELF, sub);
-
-        if (sub->name)
-            return Parrot_str_copy(INTERP, sub->name);
-
-        return NULL;
+        STRING *name;
+        GET_ATTR_name(INTERP, SELF, name);
+        return name;
     }
 
 
     VTABLE void set_string_native(STRING *subname) {
-        Parrot_Sub_attributes *sub;
-        PMC_get_sub(INTERP, SELF, sub);
-        sub->name = Parrot_str_copy(INTERP, subname);
+        SET_ATTR_name(INTERP, SELF, subname);
     }
 
 
@@ -345,8 +352,9 @@
 */
 
     VTABLE opcode_t *invoke(void *next) {
-        PMC *caller_ctx = CURRENT_CONTEXT(interp);
+        PMC * const caller_ctx = CURRENT_CONTEXT(INTERP);
         PMC *ccont      = INTERP->current_cont;
+        PMC *object;
 
         /* plain subroutine call
          * create new context, place it in interpreter */
@@ -384,8 +392,10 @@
         pc                   = sub->seg->base.data + sub->start_offs;
         INTERP->current_cont = NULL;
 
-        if (ccont == NEED_CONTINUATION)
-            ccont = new_ret_continuation_pmc(interp, (opcode_t *)next);
+        if (ccont == NEED_CONTINUATION) {
+            ccont = pmc_new(INTERP, enum_class_Continuation);
+            VTABLE_set_pointer(INTERP, ccont, next);
+        }
 
         PARROT_ASSERT(!PMC_IS_NULL(ccont));
 
@@ -395,11 +405,14 @@
         CURRENT_CONTEXT(INTERP) = context;
         Parrot_pcc_set_caller_ctx(INTERP, context, caller_ctx);
         Parrot_pcc_allocate_registers(INTERP, context, sub->n_regs_used);
+        /* Preserve object */
+        object = Parrot_pcc_get_object(INTERP, context);
         Parrot_pcc_init_context(INTERP, context, caller_ctx);
+        Parrot_pcc_set_object(INTERP, context, object);
 
-        Parrot_pcc_set_sub(interp, context, SELF);
-        Parrot_pcc_set_continuation(interp, context, ccont);
-        Parrot_pcc_set_constants(interp, context, sub->seg->const_table->constants);
+        Parrot_pcc_set_sub(INTERP, context, SELF);
+        Parrot_pcc_set_continuation(INTERP, context, ccont);
+        Parrot_pcc_set_constants(INTERP, context, sub->seg->const_table->constants);
 
         /* check recursion/call depth */
         if (Parrot_pcc_inc_recursion_depth(INTERP, context) > INTERP->recursion_limit)
@@ -410,17 +423,9 @@
         PARROT_CONTINUATION(ccont)->from_ctx = context;
 
         /* if this is an outer sub, then we need to set sub->ctx
-         * to the new context (refcounted) and convert the
-         * retcontinuation to a normal continuation.  */
+         * to the new context (refcounted) */
         if (PObj_get_FLAGS(SELF) & SUB_FLAG_IS_OUTER) {
             sub->ctx = context;
-            /* convert retcontinuation to a continuation */
-            ccont->vtable = interp->vtables[enum_class_Continuation];
-        }
-
-        if (!PMC_IS_NULL(INTERP->current_object)) {
-            Parrot_pcc_set_object(interp, context, INTERP->current_object);
-            INTERP->current_object  = NULL;
         }
 
         /* create pad if needed
@@ -428,26 +433,26 @@
          *      and factor out common code with coroutine pmc
          */
         if (!PMC_IS_NULL(sub->lex_info)) {
-            Parrot_pcc_set_lex_pad(interp, context, Parrot_pmc_new_init(INTERP,
-                    Parrot_get_ctx_HLL_type(interp, enum_class_LexPad),
+            Parrot_pcc_set_lex_pad(INTERP, context, Parrot_pmc_new_init(INTERP,
+                    Parrot_get_ctx_HLL_type(INTERP, enum_class_LexPad),
                     sub->lex_info));
-            VTABLE_set_pointer(INTERP, Parrot_pcc_get_lex_pad(interp, context), context);
+            VTABLE_set_pointer(INTERP, Parrot_pcc_get_lex_pad(INTERP, context), context);
         }
 
         /* set outer context */
         if (!PMC_IS_NULL(sub->outer_ctx))
-            Parrot_pcc_set_outer_ctx(interp, context, sub->outer_ctx);
+            Parrot_pcc_set_outer_ctx(INTERP, context, sub->outer_ctx);
         else {
             /* autoclose */
             PMC *c       = context;
-            PMC *outer_c = Parrot_pcc_get_outer_ctx(interp, c);
+            PMC *outer_c = Parrot_pcc_get_outer_ctx(INTERP, c);
 
             for (c = context; PMC_IS_NULL(outer_c); c = outer_c) {
 
                 PMC *outer_pmc;
                 Parrot_Sub_attributes *current_sub, *outer_sub;
 
-                PMC_get_sub(INTERP, Parrot_pcc_get_sub(interp, c), current_sub);
+                PMC_get_sub(INTERP, Parrot_pcc_get_sub(INTERP, c), current_sub);
                 outer_pmc   = current_sub->outer_sub;
 
                 if (PMC_IS_NULL(outer_pmc))
@@ -458,26 +463,26 @@
                 if (PMC_IS_NULL(outer_sub->ctx)) {
                     PMC * const dummy = Parrot_alloc_context(INTERP,
                                                 outer_sub->n_regs_used, NULL);
-                    Parrot_pcc_set_sub(interp, dummy, outer_pmc);
+                    Parrot_pcc_set_sub(INTERP, dummy, outer_pmc);
 
                     if (!PMC_IS_NULL(outer_sub->lex_info)) {
-                        Parrot_pcc_set_lex_pad(interp, dummy,
+                        Parrot_pcc_set_lex_pad(INTERP, dummy,
                             Parrot_pmc_new_init(INTERP,
-                                Parrot_get_ctx_HLL_type(interp,
+                                Parrot_get_ctx_HLL_type(INTERP,
                                     enum_class_LexPad), outer_sub->lex_info));
 
                         VTABLE_set_pointer(INTERP,
-                            Parrot_pcc_get_lex_pad(interp, dummy), dummy);
+                            Parrot_pcc_get_lex_pad(INTERP, dummy), dummy);
                     }
 
                     if (!PMC_IS_NULL(outer_sub->outer_ctx))
-                        Parrot_pcc_set_outer_ctx(interp, dummy,
+                        Parrot_pcc_set_outer_ctx(INTERP, dummy,
                             outer_sub->outer_ctx);
 
                     outer_sub->ctx = dummy;
                 }
 
-                Parrot_pcc_set_outer_ctx(interp, c, outer_sub->ctx);
+                Parrot_pcc_set_outer_ctx(INTERP, c, outer_sub->ctx);
                 outer_c = outer_sub->ctx;
             }
         }
@@ -486,20 +491,6 @@
         if (INTERP->code != sub->seg)
             Parrot_switch_to_cs(INTERP, sub->seg, 1);
 
-        if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
-            if (!(*pc    == PARROT_OP_get_params_pc
-            ||   (*pc    == PARROT_OP_push_eh_ic
-            &&     pc[2] == PARROT_OP_get_params_pc))) {
-
-                /* TODO keep it or resize it */
-                Parrot_pcc_dec_recursion_depth(INTERP, context);
-
-                PObj_get_FLAGS(ccont) &= ~SUB_FLAG_TAILCALL;
-                Parrot_pcc_set_caller_ctx(interp, context,
-                        Parrot_pcc_get_caller_ctx(interp, caller_ctx));
-            }
-        }
-
         return pc;
     }
 
@@ -530,9 +521,6 @@
         /* first set the sub struct, Parrot_str_copy may cause GC */
         *sub = *dest_sub;
 
-        if (sub->name)
-            sub->name = Parrot_str_copy(INTERP, sub->name);
-
         /* Be sure not to share arg_info. */
         dest_sub->arg_info = NULL;
 
@@ -565,10 +553,6 @@
 
             /* copy the sub struct */
             memmove(my_sub, other_sub, sizeof (Parrot_Sub_attributes));
-
-            /* copy the name so it's a different string in memory */
-            if (my_sub->name)
-                my_sub->name = Parrot_str_copy(INTERP, my_sub->name);
         }
         else
             Parrot_ex_throw_from_c_args(INTERP, NULL,
@@ -598,10 +582,10 @@
         Parrot_gc_mark_STRING_alive(INTERP, sub->method_name);
         Parrot_gc_mark_STRING_alive(INTERP, sub->ns_entry_name);
 
-        Parrot_gc_mark_PMC_alive(interp, sub->ctx);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->ctx);
         Parrot_gc_mark_PMC_alive(INTERP, sub->eval_pmc);
         Parrot_gc_mark_PMC_alive(INTERP, sub->lex_info);
-        Parrot_gc_mark_PMC_alive(interp, sub->outer_ctx);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->outer_ctx);
         Parrot_gc_mark_PMC_alive(INTERP, sub->outer_sub);
         Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_name);
         Parrot_gc_mark_PMC_alive(INTERP, sub->multi_signature);
@@ -691,7 +675,7 @@
         VTABLE_push_integer(INTERP, info, (INTVAL) sub->start_offs);
         VTABLE_push_integer(INTERP, info, (INTVAL) sub->end_offs);
         VTABLE_push_integer(INTERP, info,
-            (INTVAL)(PObj_get_FLAGS(pmc) & SUB_FLAG_PF_MASK));
+            (INTVAL)(PObj_get_FLAGS(SELF) & SUB_FLAG_PF_MASK));
 
         VTABLE_push_string(INTERP, info, sub->name);
 
@@ -776,31 +760,31 @@
     {
         /* Create a hash, then use inspect_str to get all of its data */
 
-        PMC    * const metadata           = Parrot_pmc_new(interp, enum_class_Hash);
-        STRING * const pos_required_str   = CONST_STRING(interp, "pos_required");
-        STRING * const pos_optional_str   = CONST_STRING(interp, "pos_optional");
-        STRING * const named_required_str = CONST_STRING(interp, "named_required");
-        STRING * const named_optional_str = CONST_STRING(interp, "named_optional");
-        STRING * const pos_slurpy_str     = CONST_STRING(interp, "pos_slurpy");
-        STRING * const named_slurpy_str   = CONST_STRING(interp, "named_slurpy");
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, pos_required_str,
-            VTABLE_inspect_str(interp, SELF, pos_required_str));
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, pos_optional_str,
-            VTABLE_inspect_str(interp, SELF, pos_optional_str));
-
-        VTABLE_set_pmc_keyed_str(interp, metadata, named_required_str,
-            VTABLE_inspect_str(interp, SELF, named_required_str));
+        PMC    * const metadata           = Parrot_pmc_new(INTERP, enum_class_Hash);
+        STRING * const pos_required_str   = CONST_STRING(INTERP, "pos_required");
+        STRING * const pos_optional_str   = CONST_STRING(INTERP, "pos_optional");
+        STRING * const named_required_str = CONST_STRING(INTERP, "named_required");
+        STRING * const named_optional_str = CONST_STRING(INTERP, "named_optional");
+        STRING * const pos_slurpy_str     = CONST_STRING(INTERP, "pos_slurpy");
+        STRING * const named_slurpy_str   = CONST_STRING(INTERP, "named_slurpy");
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, pos_required_str,
+            VTABLE_inspect_str(INTERP, SELF, pos_required_str));
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, pos_optional_str,
+            VTABLE_inspect_str(INTERP, SELF, pos_optional_str));
+
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, named_required_str,
+            VTABLE_inspect_str(INTERP, SELF, named_required_str));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, named_optional_str,
-            VTABLE_inspect_str(interp, SELF, named_optional_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, named_optional_str,
+            VTABLE_inspect_str(INTERP, SELF, named_optional_str));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, pos_slurpy_str,
-            VTABLE_inspect_str(interp, SELF, pos_slurpy_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, pos_slurpy_str,
+            VTABLE_inspect_str(INTERP, SELF, pos_slurpy_str));
 
-        VTABLE_set_pmc_keyed_str(interp, metadata, named_slurpy_str,
-            VTABLE_inspect_str(interp, SELF, named_slurpy_str));
+        VTABLE_set_pmc_keyed_str(INTERP, metadata, named_slurpy_str,
+            VTABLE_inspect_str(INTERP, SELF, named_slurpy_str));
 
         return metadata;
     }
@@ -865,15 +849,15 @@
             /* If the first instruction is a get_params... */
             if (*pc == PARROT_OP_get_params_pc) {
                 /* Get the signature (the next thing in the bytecode). */
-                PMC    *sig        = PF_CONST(sub->seg, *(++pc))->u.key;
+                PMC * const sig = PF_CONST(sub->seg, *(++pc))->u.key;
 
                 /* Iterate over the signature and compute argument counts. */
-                INTVAL  sig_length = VTABLE_elements(INTERP, sig);
+                const INTVAL sig_length = VTABLE_elements(INTERP, sig);
                 int     i;
 
                 ASSERT_SIG_PMC(sig);
 
-                for (i = 0; i < sig_length; i++) {
+                for (i = 0; i < sig_length; ++i) {
                     int sig_item = VTABLE_get_integer_keyed_int(INTERP, sig, i);;
                     if (PARROT_ARG_SLURPY_ARRAY_ISSET(sig_item)){
                         if (PARROT_ARG_NAME_ISSET(sig_item))
@@ -882,49 +866,48 @@
                             sub->arg_info->pos_slurpy = 1;
                     }
                     else if (PARROT_ARG_NAME_ISSET(sig_item)) {
-                        i++;
+                        ++i;
                         sig_item = VTABLE_get_integer_keyed_int(INTERP, sig, i);;
                         if (PARROT_ARG_OPTIONAL_ISSET(sig_item))
-                            sub->arg_info->named_optional++;
+                            ++sub->arg_info->named_optional;
                         else
-                            sub->arg_info->named_required++;
+                            ++sub->arg_info->named_required;
                     }
                     else if (!PARROT_ARG_OPT_FLAG_ISSET(sig_item)) {
                         if (PARROT_ARG_OPTIONAL_ISSET(sig_item))
-                            sub->arg_info->pos_optional++;
+                            ++sub->arg_info->pos_optional;
                         else
-                            sub->arg_info->pos_required++;
+                            ++sub->arg_info->pos_required;
                     }
                 }
             }
         }
 
         /* Return the requested argument information */
-        if (Parrot_str_equal(interp, what, CONST_STRING(interp, "pos_required"))) {
+        if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "pos_required"))) {
             count_found = (INTVAL)sub->arg_info->pos_required;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "pos_optional"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "pos_optional"))) {
             count_found = (INTVAL)sub->arg_info->pos_optional;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "pos_slurpy"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "pos_slurpy"))) {
             count_found = (INTVAL)sub->arg_info->pos_slurpy;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "named_required"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "named_required"))) {
             count_found = (INTVAL)sub->arg_info->named_required;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "named_optional"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "named_optional"))) {
             count_found = (INTVAL)sub->arg_info->named_optional;
         }
-        else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "named_slurpy"))) {
+        else if (Parrot_str_equal(INTERP, what, CONST_STRING(INTERP, "named_slurpy"))) {
             count_found = (INTVAL)sub->arg_info->named_slurpy;
         }
         else
-            Parrot_ex_throw_from_c_args(interp, NULL,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
                 EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", what);
 
-        retval = Parrot_pmc_new(INTERP, enum_class_Integer);
-        VTABLE_set_integer_native(INTERP, retval, count_found);
+        retval = Parrot_pmc_new_init_int(INTERP, enum_class_Integer, count_found);
         return retval;
     }
 
@@ -1016,7 +999,7 @@
     METHOD __get_regs_used(STRING *reg) {
         /* TODO switch to canonical NiSP order
          * see also imcc/reg_alloc.c */
-        STRING                *types = CONST_STRING(INTERP, "INSP");
+        STRING                * const types = CONST_STRING(INTERP, "INSP");
         Parrot_Sub_attributes *sub;
         INTVAL                 regs_used;
         INTVAL                 kind;
@@ -1056,7 +1039,7 @@
         Parrot_Sub_attributes *sub;
         PMC_get_sub(INTERP, SELF, sub);
 
-        subid = sub->subid ? sub->subid : CONST_STRING(interp, "");
+        subid = sub->subid ? sub->subid : CONST_STRING(INTERP, "");
 
         RETURN(STRING *subid);
     }
@@ -1086,21 +1069,21 @@
 
         /* Ensure we have lex info. */
         if (PMC_IS_NULL(sub->lex_info)) {
-            const INTVAL lex_info_id = Parrot_get_ctx_HLL_type(interp,
+            const INTVAL lex_info_id = Parrot_get_ctx_HLL_type(INTERP,
                                            enum_class_LexInfo);
-            sub->lex_info = Parrot_pmc_new_init(interp, lex_info_id, SELF);
+            sub->lex_info = Parrot_pmc_new_init(INTERP, lex_info_id, SELF);
         }
 
         /* If we've got a context around for the outer sub, set it as the
          * outer context. */
-        outer_ctx = CURRENT_CONTEXT(interp);
+        outer_ctx = CURRENT_CONTEXT(INTERP);
 
         while (!PMC_IS_NULL(outer_ctx)) {
-            if (Parrot_pcc_get_sub(interp, outer_ctx) == outer) {
+            if (Parrot_pcc_get_sub(INTERP, outer_ctx) == outer) {
                 sub->outer_ctx = outer_ctx;
                 break;
             }
-            outer_ctx = Parrot_pcc_get_caller_ctx(interp, outer_ctx);
+            outer_ctx = Parrot_pcc_get_caller_ctx(INTERP, outer_ctx);
         }
     }
 
@@ -1117,8 +1100,8 @@
 
 
     METHOD arity() {
-        PMC * const pos_required   = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "pos_required"));
-        PMC * const named_required = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "named_required"));
+        PMC * const pos_required   = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "pos_required"));
+        PMC * const named_required = VTABLE_inspect_str(INTERP, SELF, CONST_STRING(INTERP, "named_required"));
 
         const INTVAL arity = VTABLE_get_integer(INTERP, pos_required)
                            + VTABLE_get_integer(INTERP, named_required);

Modified: branches/ops_pct/src/pmc/task.pmc
==============================================================================
--- branches/ops_pct/src/pmc/task.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/task.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -20,6 +20,10 @@
 
 #include "parrot/scheduler_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Task auto_attrs {
     ATTR INTVAL        id;        /* The task ID. */
     ATTR INTVAL        priority;  /* The priority of the task. */
@@ -50,10 +54,10 @@
 
         /* Set up the core struct. */
         core_struct->id          = 0;
-        core_struct->type        = CONST_STRING(interp, "");
-        core_struct->subtype     = CONST_STRING(interp, "");
+        core_struct->type        = CONST_STRING(INTERP, "");
+        core_struct->subtype     = CONST_STRING(INTERP, "");
         core_struct->priority    = 0;
-        core_struct->status      = CONST_STRING(interp, "created");
+        core_struct->status      = CONST_STRING(INTERP, "created");
         core_struct->birthtime   = 0.0;
         core_struct->codeblock   = PMCNULL;
         core_struct->data        = PMCNULL;
@@ -180,11 +184,11 @@
     VTABLE PMC *clone() {
         /* Create the new task PMC, of the same type of this one (we may
          * have been subclassed). */
-        PMC * const copy  = Parrot_pmc_new(interp, SELF->vtable->base_type);
+        PMC * const copy  = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
         Parrot_Task_attributes * const new_struct = PARROT_TASK(copy);
         Parrot_Task_attributes * const old_struct = PARROT_TASK(SELF);
 
-        new_struct->codeblock = VTABLE_clone(interp, old_struct->codeblock);
+        new_struct->codeblock = VTABLE_clone(INTERP, old_struct->codeblock);
         new_struct->data      = old_struct->data;
         new_struct->type      = old_struct->type;
         new_struct->subtype   = old_struct->subtype;
@@ -205,29 +209,29 @@
         Parrot_Task_attributes * const core_struct = PARROT_TASK(SELF);
         PMC *value;
 
-        if (Parrot_str_equal(interp, name, CONST_STRING(interp, "id"))) {
-            value = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, value, core_struct->id);
-        }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "type"))) {
-            value = Parrot_pmc_new(interp, enum_class_String);
-            VTABLE_set_string_native(interp, value, core_struct->type);
-        }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "subtype"))) {
-            value = Parrot_pmc_new(interp, enum_class_String);
-            VTABLE_set_string_native(interp, value, core_struct->subtype);
-        }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "priority"))) {
-            value = Parrot_pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, value, core_struct->priority);
-        }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "status"))) {
-            value = Parrot_pmc_new(interp, enum_class_String);
-            VTABLE_set_string_native(interp, value, core_struct->status);
-        }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "birthtime"))) {
-            value = Parrot_pmc_new(interp, enum_class_Float);
-            VTABLE_set_number_native(interp, value, core_struct->birthtime);
+        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "id"))) {
+            value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer,
+                    core_struct->id);
+        }
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
+            value = Parrot_pmc_new(INTERP, enum_class_String);
+            VTABLE_set_string_native(INTERP, value, core_struct->type);
+        }
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "subtype"))) {
+            value = Parrot_pmc_new(INTERP, enum_class_String);
+            VTABLE_set_string_native(INTERP, value, core_struct->subtype);
+        }
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "priority"))) {
+            value = Parrot_pmc_new_init_int(INTERP, enum_class_Integer,
+                    core_struct->priority);
+        }
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "status"))) {
+            value = Parrot_pmc_new(INTERP, enum_class_String);
+            VTABLE_set_string_native(INTERP, value, core_struct->status);
+        }
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "birthtime"))) {
+            value = Parrot_pmc_new(INTERP, enum_class_Float);
+            VTABLE_set_number_native(INTERP, value, core_struct->birthtime);
         }
         else {
             value = PMCNULL;
@@ -248,28 +252,28 @@
     VTABLE void set_attr_str(STRING *name, PMC *value) {
         Parrot_Task_attributes * const core_struct = PARROT_TASK(SELF);
 
-        if (Parrot_str_equal(interp, name, CONST_STRING(interp, "id"))) {
-            core_struct->id = VTABLE_get_integer(interp, value);
+        if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "id"))) {
+            core_struct->id = VTABLE_get_integer(INTERP, value);
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "type"))) {
-            core_struct->type = VTABLE_get_string(interp, value);
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "type"))) {
+            core_struct->type = VTABLE_get_string(INTERP, value);
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "subtype"))) {
-            core_struct->subtype = VTABLE_get_string(interp, value);
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "subtype"))) {
+            core_struct->subtype = VTABLE_get_string(INTERP, value);
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "priority"))) {
-            core_struct->priority = VTABLE_get_integer(interp, value);
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "priority"))) {
+            core_struct->priority = VTABLE_get_integer(INTERP, value);
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "status"))) {
-            core_struct->status = VTABLE_get_string(interp, value);
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "status"))) {
+            core_struct->status = VTABLE_get_string(INTERP, value);
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "birthtime"))) {
-            core_struct->birthtime = VTABLE_get_number(interp, value);
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "birthtime"))) {
+            core_struct->birthtime = VTABLE_get_number(INTERP, value);
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "code"))) {
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "code"))) {
             core_struct->codeblock = value;
         }
-        else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "data"))) {
+        else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "data"))) {
             core_struct->data = value;
         }
     }
@@ -375,11 +379,11 @@
         if (PARROT_TASK(SELF)) {
             Parrot_Task_attributes * const core_struct = PARROT_TASK(SELF);
 
-            Parrot_gc_mark_STRING_alive(interp, core_struct->type);
-            Parrot_gc_mark_STRING_alive(interp, core_struct->subtype);
-            Parrot_gc_mark_STRING_alive(interp, core_struct->status);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->codeblock);
-            Parrot_gc_mark_PMC_alive(interp, core_struct->data);
+            Parrot_gc_mark_STRING_alive(INTERP, core_struct->type);
+            Parrot_gc_mark_STRING_alive(INTERP, core_struct->subtype);
+            Parrot_gc_mark_STRING_alive(INTERP, core_struct->status);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->codeblock);
+            Parrot_gc_mark_PMC_alive(INTERP, core_struct->data);
         }
     }
 

Copied: branches/ops_pct/src/pmc/threadinterpreter.pmc (from r46301, trunk/src/pmc/threadinterpreter.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/src/pmc/threadinterpreter.pmc	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/src/pmc/threadinterpreter.pmc)
@@ -0,0 +1,98 @@
+/*
+Copyright (C) 2001-2007, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/threadinterpreter.pmc - INTERNAL Interpreter for OS level worker thread(pthread).
+
+=head1 DESCRIPTION
+
+ThreadInterpreter extends ParrotInterpreter to provide a interpreter
+to be used internally in a OS level worker thread(pthread).
+which supports:
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/embed.h"
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void stop_GC(ARGMOD(Interp *parent), ARGMOD(Interp *thread))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*parent)
+        FUNC_MODIFIES(*thread);
+
+#define ASSERT_ARGS_stop_GC __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(parent) \
+    , PARROT_ASSERT_ARG(thread))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
+#define PMC_interp(x) ((Parrot_ParrotInterpreter_attributes *)PMC_data(x))->interp
+
+/*
+ * can't do multi-threaded GC yet
+ * XXX a quick hack to pass the few tests
+ */
+static void
+stop_GC(ARGMOD(Interp *parent), ARGMOD(Interp *thread))
+{
+    ASSERT_ARGS(stop_GC)
+    Parrot_block_GC_mark(parent);
+    Parrot_block_GC_mark(thread);
+    Parrot_block_GC_sweep(parent);
+    Parrot_block_GC_sweep(thread);
+}
+
+
+
+pmclass ThreadInterpreter extends ParrotInterpreter no_ro manual_attrs {
+
+/*
+
+=item C<void init()>
+
+Initializes the thread.
+
+=cut
+
+*/
+
+    VTABLE void init() {
+        /* protect interpreter creation and list handling */
+        LOCK(interpreter_array_mutex);
+
+        SUPER();
+        pt_add_to_interpreters(INTERP, PMC_interp(SELF));
+
+        UNLOCK(interpreter_array_mutex);
+
+        /* can't allow GC runs for now */
+        stop_GC(INTERP, PMC_interp(SELF));
+    }
+}
+
+/*
+
+=back
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_pct/src/pmc/timer.pmc
==============================================================================
--- branches/ops_pct/src/pmc/timer.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/timer.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -57,6 +57,10 @@
 
 #include "parrot/scheduler_private.h"
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Timer extends Task provides event auto_attrs {
     ATTR FLOATVAL duration;  /* The duration of the timer pause */
     ATTR FLOATVAL interval;  /* How often to repeat */
@@ -82,8 +86,8 @@
 
         /* Set up the core struct. */
         core_struct->id          = 0;
-        core_struct->type        = CONST_STRING(interp, "timer");
-        core_struct->subtype     = CONST_STRING(interp, "");
+        core_struct->type        = CONST_STRING(INTERP, "timer");
+        core_struct->subtype     = CONST_STRING(INTERP, "");
         core_struct->priority    = 0;
         core_struct->status      = CONST_STRING(interp, "created");
         core_struct->birthtime   = 0.0;
@@ -309,7 +313,7 @@
             Parrot_Timer_attributes * const core_struct = PARROT_TIMER(SELF);
             core_struct->codeblock = value;
 */
-            SET_ATTR_codeblock(interp, SELF, value);
+            SET_ATTR_codeblock(INTERP, SELF, value);
         }
     }
 

Modified: branches/ops_pct/src/pmc/undef.pmc
==============================================================================
--- branches/ops_pct/src/pmc/undef.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/undef.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -26,6 +26,10 @@
 #include "pmc/pmc_object.h"
 #define UNDEF_STRING_CLASS enum_class_String
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Undef no_ro {
 
 /*
@@ -46,7 +50,7 @@
         }
         else {
             PMC * const class_  = PARROT_OBJECT(other)->_class;
-            PMC        *clone   = VTABLE_clone(interp, other);
+            PMC        *clone   = VTABLE_clone(INTERP, other);
             void       *attrs   = PMC_data(clone);
             PMC        *meta    = PMC_metadata(clone);
 
@@ -57,11 +61,11 @@
 
             /* Restore metadata. */
             if (!PMC_IS_NULL(meta)) {
-                PMC * const iter = VTABLE_get_iter(interp, meta);
-                while (VTABLE_get_bool(interp, iter)) {
-                    STRING * const key = VTABLE_shift_string(interp, iter);
-                    PMC * const value  = VTABLE_get_pmc_keyed_str(interp, meta, key);
-                    VTABLE_setprop(interp, SELF, key, value);
+                PMC * const iter = VTABLE_get_iter(INTERP, meta);
+                while (VTABLE_get_bool(INTERP, iter)) {
+                    STRING * const key = VTABLE_shift_string(INTERP, iter);
+                    PMC * const value  = VTABLE_get_pmc_keyed_str(INTERP, meta, key);
+                    VTABLE_setprop(INTERP, SELF, key, value);
                 }
             }
             PMC_data(clone) = NULL;
@@ -171,7 +175,7 @@
 */
 
     VTABLE STRING *get_string() {
-        Parrot_warn(interp, PARROT_WARNINGS_UNDEF_FLAG,
+        Parrot_warn(INTERP, PARROT_WARNINGS_UNDEF_FLAG,
             "Stringifying an Undef PMC");
 
         return Parrot_str_new_noinit(INTERP, enum_stringrep_one, 0);
@@ -188,7 +192,7 @@
 */
 
     VTABLE void set_string_native(STRING *value) {
-        Parrot_pmc_reuse(interp, SELF, enum_class_String, 0);
+        Parrot_pmc_reuse(INTERP, SELF, enum_class_String, 0);
         VTABLE_set_string_native(INTERP, SELF, value);
     }
 

Modified: branches/ops_pct/src/pmc/unmanagedstruct.pmc
==============================================================================
--- branches/ops_pct/src/pmc/unmanagedstruct.pmc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc/unmanagedstruct.pmc	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,13 +24,151 @@
 
 #include "parrot/compiler.h"
 
-static INTVAL key_2_idx(PARROT_INTERP, PMC *pmc, PMC *key);
-static size_t calc_offsets(PARROT_INTERP, PMC*, PMC *init, size_t toff);
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_WARN_UNUSED_RESULT
+static int calc_align(PARROT_INTERP,
+    ARGIN(PMC *type_pmc),
+    int type,
+    size_t offs)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void calc_offsets(PARROT_INTERP,
+    ARGIN(PMC *pmc),
+    ARGIN(PMC *value),
+    size_t toff)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static char * char_offset_int(PARROT_INTERP,
+    ARGIN(PMC *pmc),
+    INTVAL ix,
+    ARGOUT(int *type))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*type);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static char * char_offset_key(PARROT_INTERP,
+    ARGIN(PMC *pmc),
+    ARGIN(PMC *key),
+    ARGOUT(int *type))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*type);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL key_2_idx(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+static FLOATVAL ret_float(PARROT_INTERP, ARGIN(const char *p), int type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+static INTVAL ret_int(PARROT_INTERP, ARGIN(const char *p), int type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static PMC* ret_pmc(PARROT_INTERP,
+    ARGIN(PMC *pmc),
+    ARGIN(char *p),
+    int type,
+    INTVAL idx)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static STRING* ret_string(PARROT_INTERP, ARGIN(char *p), int type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void set_float(PARROT_INTERP,
+    ARGIN(char *p),
+    int type,
+    FLOATVAL value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void set_int(PARROT_INTERP, ARGIN(char *p), int type, INTVAL value)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void set_string(PARROT_INTERP,
+    ARGIN(char *p),
+    int type,
+    ARGIN(STRING *value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4);
+
+#define ASSERT_ARGS_calc_align __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(type_pmc))
+#define ASSERT_ARGS_calc_offsets __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_char_offset_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(type))
+#define ASSERT_ARGS_char_offset_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(type))
+#define ASSERT_ARGS_key_2_idx __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(key))
+#define ASSERT_ARGS_ret_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(p))
+#define ASSERT_ARGS_ret_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(p))
+#define ASSERT_ARGS_ret_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc) \
+    , PARROT_ASSERT_ARG(p))
+#define ASSERT_ARGS_ret_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(p))
+#define ASSERT_ARGS_set_float __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(p))
+#define ASSERT_ARGS_set_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(p))
+#define ASSERT_ARGS_set_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(p) \
+    , PARROT_ASSERT_ARG(value))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
 
 /*
 
-=item C<static char *
-char_offset_int(PARROT_INTERP, PMC *pmc, INTVAL ix, int *type)>
+=item C<static char * char_offset_int(PARROT_INTERP, PMC *pmc, INTVAL ix, int
+*type)>
 
 Returns the pointer for the element at index C<ix>, and sets the element
 type in C<*type>.
@@ -39,9 +177,12 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static char *
-char_offset_int(PARROT_INTERP, PMC *pmc, INTVAL ix, int *type)
+char_offset_int(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL ix, ARGOUT(int *type))
 {
+    ASSERT_ARGS(char_offset_int)
     size_t offs, n;
     ix *= 3;
 
@@ -67,8 +208,7 @@
 
 /*
 
-=item C<static INTVAL
-key_2_idx(PARROT_INTERP, PMC *pmc, PMC *key)>
+=item C<static INTVAL key_2_idx(PARROT_INTERP, PMC *pmc, PMC *key)>
 
 Returns the index for the element associated with key C<*key>. Raises an
 exception if the key doesn't exist.
@@ -77,9 +217,11 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-key_2_idx(PARROT_INTERP, PMC *pmc, PMC *key)
+key_2_idx(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *key))
 {
+    ASSERT_ARGS(key_2_idx)
     int ix = 0;
 
     if (!PARROT_UNMANAGEDSTRUCT(pmc)->init)
@@ -115,8 +257,8 @@
 
 /*
 
-=item C<static char *
-char_offset_key(PARROT_INTERP, PMC *pmc, PMC *key, int *type)>
+=item C<static char * char_offset_key(PARROT_INTERP, PMC *pmc, PMC *key, int
+*type)>
 
 Returns the pointer for the element associated with key C<*key>, and
 sets the element type in C<*type>.
@@ -125,9 +267,12 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static char *
-char_offset_key(PARROT_INTERP, PMC *pmc, PMC *key, int *type)
+char_offset_key(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *key), ARGOUT(int *type))
 {
+    ASSERT_ARGS(char_offset_key)
     size_t offs, count, size, max;
     int    ix;
     PMC   *next, *init;
@@ -217,8 +362,7 @@
 
 /*
 
-=item C<static INTVAL
-ret_int(PARROT_INTERP, const char *p, int type)>
+=item C<static INTVAL ret_int(PARROT_INTERP, const char *p, int type)>
 
 Returns the element of type C<type> starting at C<*p> as an C<INTVAL>.
 
@@ -229,13 +373,11 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static INTVAL
-ret_int(PARROT_INTERP, const char *p, int type)
-    __attribute__nonnull__(1);
-
-static INTVAL
-ret_int(PARROT_INTERP, const char *p, int type)
+ret_int(PARROT_INTERP, ARGIN(const char *p), int type)
 {
+    ASSERT_ARGS(ret_int)
     switch (type) {
       case enum_type_INTVAL:
         return *(const INTVAL*) p;
@@ -292,8 +434,7 @@
 
 /*
 
-=item C<static FLOATVAL
-ret_float(PARROT_INTERP, const char *p, int type)>
+=item C<static FLOATVAL ret_float(PARROT_INTERP, const char *p, int type)>
 
 Returns the element of type C<type> starting at C<*p> as a C<FLOATVAL>.
 
@@ -301,13 +442,11 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static FLOATVAL
-ret_float(PARROT_INTERP, const char *p, int type)
-    __attribute__nonnull__(1);
-
-static FLOATVAL
-ret_float(PARROT_INTERP, const char *p, int type)
+ret_float(PARROT_INTERP, ARGIN(const char *p), int type)
 {
+    ASSERT_ARGS(ret_float)
     switch (type) {
       case enum_type_FLOATVAL:
         return (FLOATVAL) *(const FLOATVAL *)p;
@@ -323,8 +462,7 @@
 
 /*
 
-=item C<static STRING*
-ret_string(PARROT_INTERP, char *p, int type)>
+=item C<static STRING* ret_string(PARROT_INTERP, char *p, int type)>
 
 Returns the element of type C<type> starting at C<*p> as a Parrot string.
 
@@ -332,13 +470,16 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 static STRING*
-ret_string(PARROT_INTERP, char *p, int type)
+ret_string(PARROT_INTERP, ARGIN(char *p), int type)
 {
+    ASSERT_ARGS(ret_string)
     if (type == enum_type_cstr) {
         char  *cstr = *(char **) p;
         if (cstr) {
-            size_t len  = strlen(cstr);
+            const size_t len  = strlen(cstr);
             /* TODO
                Can't assume that the C string is constant during the
                life of the returned parrot string, so can't be
@@ -359,8 +500,8 @@
 
 /*
 
-=item C<static PMC*
-ret_pmc(PARROT_INTERP, PMC *pmc, char *p, int type, INTVAL idx)>
+=item C<static PMC* ret_pmc(PARROT_INTERP, PMC *pmc, char *p, int type, INTVAL
+idx)>
 
 Returns the element of type C<type> starting at C<*p> as a PMC.
 
@@ -368,12 +509,15 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
 static PMC*
-ret_pmc(PARROT_INTERP, PMC *pmc, char *p, int type, INTVAL idx)
+ret_pmc(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(char *p), int type, INTVAL idx)
 {
+    ASSERT_ARGS(ret_pmc)
+    PMC * const init = PARROT_UNMANAGEDSTRUCT(pmc)->init;
+    PMC * const ptr  = VTABLE_get_pmc_keyed_int(interp, init, idx * 3);
     PMC *ret  = NULL;
-    PMC *init = PARROT_UNMANAGEDSTRUCT(pmc)->init;
-    PMC *ptr  = VTABLE_get_pmc_keyed_int(interp, init, idx * 3);
 
     switch (type) {
       case enum_type_func_ptr:
@@ -383,9 +527,9 @@
         /* now check if initializer has a signature attached */
         if (PMC_metadata(ptr)) {
             STRING *signature_str = CONST_STRING(interp, "_signature");
-            PMC *sig = VTABLE_getprop(interp, ptr, signature_str);
+            PMC * const sig = VTABLE_getprop(interp, ptr, signature_str);
             if (VTABLE_defined(interp, sig)) {
-                STRING *sig_str = VTABLE_get_string(interp, sig);
+                STRING * const sig_str = VTABLE_get_string(interp, sig);
                 ret             = Parrot_pmc_new(interp, enum_class_NCI);
                 VTABLE_set_pointer_keyed_str(interp, ret, sig_str,
                             *(PMC **)p);
@@ -416,16 +560,16 @@
 
 /*
 
-=item C<static void
-set_int(PARROT_INTERP, char *p, int type, INTVAL value)>
+=item C<static void set_int(PARROT_INTERP, char *p, int type, INTVAL value)>
 
 =cut
 
 */
 
 static void
-set_int(PARROT_INTERP, char *p, int type, INTVAL value)
+set_int(PARROT_INTERP, ARGIN(char *p), int type, INTVAL value)
 {
+    ASSERT_ARGS(set_int)
     switch (type) {
       case enum_type_uint8:
       case enum_type_int8:
@@ -453,8 +597,7 @@
 
 /*
 
-=item C<static void
-set_float(PARROT_INTERP, char *p, int type, FLOATVAL value)>
+=item C<static void set_float(PARROT_INTERP, char *p, int type, FLOATVAL value)>
 
 Sets the value of the element of type C<type> starting at C<*p> to
 C<value>.
@@ -464,8 +607,9 @@
 */
 
 static void
-set_float(PARROT_INTERP, char *p, int type, FLOATVAL value)
+set_float(PARROT_INTERP, ARGIN(char *p), int type, FLOATVAL value)
 {
+    ASSERT_ARGS(set_float)
     switch (type) {
       case enum_type_FLOATVAL:
         *(FLOATVAL *)p = (FLOATVAL)value;
@@ -485,8 +629,7 @@
 
 /*
 
-=item C<static void
-set_string(PARROT_INTERP, char *p, int type, STRING *value)>
+=item C<static void set_string(PARROT_INTERP, char *p, int type, STRING *value)>
 
 Sets the value of the element of type C<type> starting at C<*p> to
 C<*value>.
@@ -496,8 +639,9 @@
 */
 
 static void
-set_string(PARROT_INTERP, char *p, int type, STRING *value)
+set_string(PARROT_INTERP, ARGIN(char *p), int type, ARGIN(STRING *value))
 {
+    ASSERT_ARGS(set_string)
     if (type == enum_type_cstr) {
         /* assuming 0-terminated C-string here;
          * we can't use Parrot_str_to_cstring easily */
@@ -511,9 +655,8 @@
 
 /*
 
-=item C<static int
-calc_align(PARROT_INTERP, PMC *pmc, PMC *type_pmc,
-        int type, size_t offs)>
+=item C<static int calc_align(PARROT_INTERP, PMC *type_pmc, int type, size_t
+offs)>
 
 Alignment of contained structures is the alignment of the biggest item in that
 C<struct>.
@@ -526,10 +669,11 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 static int
-calc_align(PARROT_INTERP, PMC *pmc, PMC *type_pmc,
-        int type, size_t offs)
+calc_align(PARROT_INTERP, ARGIN(PMC *type_pmc), int type, size_t offs)
 {
+    ASSERT_ARGS(calc_align)
     int  align       = data_types[type - enum_first_type].size;
     PMC *nested      = NULL;
     PMC *nested_init = NULL;
@@ -541,7 +685,8 @@
         nested_init = PARROT_UNMANAGEDSTRUCT(nested)->init;
     }
     if (type == enum_type_struct) {
-        INTVAL i, n    = (size_t)VTABLE_elements(interp, nested_init);
+        INTVAL i;
+        const INTVAL n = (size_t)VTABLE_elements(interp, nested_init);
         int    a_max   = 0;
         int    new_offs;
 
@@ -550,11 +695,11 @@
                     "Illegal initializer for struct");
 
         for (i = 0; i < n; i += 3) {
-            PMC *nested_type_pmc = VTABLE_get_pmc_keyed_int(interp,
+            PMC * const nested_type_pmc = VTABLE_get_pmc_keyed_int(interp,
                     nested_init, i);
-            int  nested_type     = (int)VTABLE_get_integer(interp,
+            const int nested_type     = (int)VTABLE_get_integer(interp,
                 nested_type_pmc);
-            new_offs             = calc_align(interp, nested,
+            new_offs             = calc_align(interp,
                     nested_type_pmc, nested_type, offs);
 
             if (new_offs > a_max)
@@ -577,8 +722,8 @@
 
 /*
 
-=item C<static size_t
-calc_offsets(PARROT_INTERP, PMC *pmc, PMC *value, size_t toff)>
+=item C<static void calc_offsets(PARROT_INTERP, PMC *pmc, PMC *value, size_t
+toff)>
 
 Calculates the offsets for the C<struct>. See C<init_pmc()> for a description
 of C<*value>.
@@ -587,23 +732,25 @@
 
 */
 
-static size_t
-calc_offsets(PARROT_INTERP, PMC *pmc, PMC *value, size_t toff)
+static void
+calc_offsets(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(PMC *value), size_t toff)
 {
-    STRING *_struct = CONST_STRING(interp, "_struct");
-    INTVAL  n       = (size_t)VTABLE_elements(interp, value);
+    ASSERT_ARGS(calc_offsets)
+    STRING * const _struct = CONST_STRING(interp, "_struct");
+    const INTVAL n         = (size_t)VTABLE_elements(interp, value);
     INTVAL  i;
-    int     size;
 
     if (n % 3)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
                 "Illegal initializer for struct");
 
     for (i = 0; i < n; i += 3) {
-        PMC *type_pmc = VTABLE_get_pmc_keyed_int(interp, value, i);
-        int  type     = (int)VTABLE_get_integer(interp, type_pmc);
+        PMC * const type_pmc = VTABLE_get_pmc_keyed_int(interp, value, i);
+        const int type       = (int)VTABLE_get_integer(interp, type_pmc);
+
         int  count    = (int)VTABLE_get_integer_keyed_int(interp, value, i + 1);
         int  offs     = (int)VTABLE_get_integer_keyed_int(interp, value, i + 2);
+        int  size;
 
         if (type < enum_first_type || type >= enum_last_type)
             Parrot_ex_throw_from_c_args(interp, NULL,
@@ -616,18 +763,18 @@
         }
 
         if (offs <= 0) {
-            offs = toff = calc_align(interp, pmc, type_pmc, type, toff);
+            offs = toff = calc_align(interp, type_pmc, type, toff);
             VTABLE_set_integer_keyed_int(interp, value, i + 2, offs);
         }
         else
             toff = offs;
 
         if (type == enum_type_struct) {
-            PMC *nested = VTABLE_getprop(interp, type_pmc, _struct);
+            PMC * const nested = VTABLE_getprop(interp, type_pmc, _struct);
             size        = VTABLE_get_integer(interp, nested);
         }
         else if (type == enum_type_struct_ptr) {
-            PMC *nested = VTABLE_getprop(interp, type_pmc, _struct);
+            PMC * const nested = VTABLE_getprop(interp, type_pmc, _struct);
 
             /* must clone this struct so as not to share its memory */
             if (nested->vtable->base_type == enum_class_ManagedStruct)
@@ -645,8 +792,6 @@
         if (i == n - 3)
             VTABLE_set_integer_native(interp, pmc, (INTVAL)toff);
     }
-
-    return toff;
 }
 
 pmclass UnManagedStruct auto_attrs no_ro {
@@ -703,7 +848,8 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *clone = Parrot_pmc_new(INTERP, enum_class_UnManagedStruct);
+        PMC * const clone = Parrot_pmc_new(INTERP, enum_class_UnManagedStruct);
+
         mem_sys_memmove(PMC_data(clone), PMC_data(SELF),
                 sizeof (Parrot_UnManagedStruct_attributes));
         PARROT_UNMANAGEDSTRUCT(clone)->init =
@@ -738,7 +884,7 @@
 */
 
     VTABLE void mark() {
-        PMC *init = PARROT_UNMANAGEDSTRUCT(SELF)->init;
+        PMC * const init = PARROT_UNMANAGEDSTRUCT(SELF)->init;
         Parrot_gc_mark_PMC_alive(INTERP, init);
     }
 
@@ -754,7 +900,7 @@
 
     VTABLE INTVAL is_equal(PMC *value) {
         return (SELF->vtable   == value->vtable
-        &&      SELF.get_pointer() == VTABLE_get_pointer(interp, value));
+        &&      SELF.get_pointer() == VTABLE_get_pointer(INTERP, value));
     }
 
 /*
@@ -811,7 +957,7 @@
 
     VTABLE INTVAL get_integer_keyed_int(INTVAL ix) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, ix, &type);
+        const char * const p = char_offset_int(INTERP, SELF, ix, &type);
         return ret_int(INTERP, p, type);
     }
 
@@ -827,7 +973,7 @@
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
         return ret_int(INTERP, p, type);
     }
 
@@ -843,7 +989,7 @@
 
     VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, SELF, key, &type);
         return ret_float(INTERP, p, type);
     }
 
@@ -859,7 +1005,7 @@
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
         return ret_float(INTERP, p, type);
     }
 
@@ -875,7 +1021,7 @@
 
     VTABLE STRING *get_string_keyed_int(INTVAL key) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, SELF, key, &type);
         return ret_string(INTERP, p, type);
     }
 
@@ -891,7 +1037,7 @@
 
     VTABLE STRING *get_string_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
         return ret_string(INTERP, p, type);
     }
 
@@ -907,8 +1053,8 @@
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
-        return ret_pmc(INTERP, pmc, p, type, key);
+        char * const p = char_offset_int(INTERP, SELF, key, &type);
+        return ret_pmc(INTERP, SELF, p, type, key);
     }
 
 /*
@@ -923,8 +1069,8 @@
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
-        return ret_pmc(INTERP, pmc, p, type, key_2_idx(INTERP, pmc, key));
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
+        return ret_pmc(INTERP, SELF, p, type, key_2_idx(INTERP, SELF, key));
     }
 
 /*
@@ -967,7 +1113,7 @@
 
     VTABLE void set_integer_keyed_int(INTVAL ix, INTVAL value) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, ix, &type);
+        char * const p = char_offset_int(INTERP, SELF, ix, &type);
         set_int(INTERP, p, type, value);
     }
 
@@ -985,7 +1131,7 @@
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
         set_int(INTERP, p, type, value);
     }
 
@@ -1001,7 +1147,7 @@
 
     VTABLE void set_number_keyed_int(INTVAL key, FLOATVAL value) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, SELF, key, &type);
         set_float(INTERP, p, type, value);
     }
 
@@ -1017,7 +1163,7 @@
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
         int type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
         set_float(INTERP, p, type, value);
     }
 
@@ -1033,7 +1179,7 @@
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, SELF, key, &type);
         set_string(INTERP, p, type, value);
     }
 
@@ -1049,7 +1195,7 @@
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, SELF, key, &type);
         set_string(INTERP, p, type, value);
     }
 
@@ -1059,10 +1205,6 @@
 
 =back
 
-=head1 HISTORY
-
-Initial revision by sean 2002/08/04
-
 =head1 SEE ALSO
 
 F<docs/pmc/struct.pod>

Modified: branches/ops_pct/src/pmc_freeze.c
==============================================================================
--- branches/ops_pct/src/pmc_freeze.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/pmc_freeze.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -49,44 +49,123 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 STRING*
 Parrot_freeze(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze)
-    PMC *image = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const image = Parrot_pmc_new(interp, enum_class_ImageIO);
     VTABLE_set_pmc(interp, image, pmc);
     return VTABLE_get_string(interp, image);
 }
 
 /*
 
+=item C<STRING * Parrot_freeze_pbc(PARROT_INTERP, PMC *pmc, const
+PackFile_ConstTable *pf)>
+
+Freeze to a PackFile.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+STRING *
+Parrot_freeze_pbc(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(const PackFile_ConstTable *pf))
+{
+    ASSERT_ARGS(Parrot_freeze_pbc)
+    PMC *visitor;
+
+    PMC * const pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+    VTABLE_set_pointer(interp, pf_pmc, (void *)pf);
+
+    visitor  = Parrot_pmc_new_init(interp, enum_class_ImageIO, pf_pmc);
+    VTABLE_set_pmc(interp, visitor, pmc);
+
+    return VTABLE_get_string(interp, visitor);
+}
+
+
+/*
+
 =item C<UINTVAL Parrot_freeze_size(PARROT_INTERP, PMC *pmc)>
 
 Get the size of an image to be frozen without allocating a large buffer.
 
-Used in C<Packfile_Constant_pack_size>.
-
 =cut
 
 */
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
 UINTVAL
 Parrot_freeze_size(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze_size)
     UINTVAL int_result;
     PMC    *pmc_result;
-    PMC    *visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
+    PMC    * const visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
     VTABLE_set_pmc(interp, visitor, pmc);
     pmc_result = VTABLE_get_pmc(interp, visitor);
     int_result = VTABLE_get_integer(interp, pmc_result);
     return int_result;
 }
 
+/*
+
+=item C<UINTVAL Parrot_freeze_pbc_size(PARROT_INTERP, PMC *pmc, const
+PackFile_ConstTable *pf)>
+
+Get the size of an image if it were created using C<Parrot_freeze_pbc>.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+UINTVAL
+Parrot_freeze_pbc_size(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(const PackFile_ConstTable *pf))
+{
+    ASSERT_ARGS(Parrot_freeze_pbc_size)
+    PMC     *pf_pmc, *visitor, *pmc_result;
+
+    pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+    VTABLE_set_pointer(interp, pf_pmc, (void *)pf);
+
+    visitor = Parrot_pmc_new_init(interp, enum_class_ImageIOSize, pf_pmc);
+    VTABLE_set_pmc(interp, visitor, pmc);
+
+    pmc_result = VTABLE_get_pmc(interp, visitor);
+    return VTABLE_get_integer(interp, pmc_result);
+}
+
+
+/*
+
+=item C<PMC * Parrot_freeze_strings(PARROT_INTERP, PMC *pmc)>
+
+Get the strings of a PMC to be frozen.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+PMC *
+Parrot_freeze_strings(PARROT_INTERP, ARGIN(PMC *pmc))
+{
+    ASSERT_ARGS(Parrot_freeze_strings)
+    PMC * const visitor = Parrot_pmc_new(interp, enum_class_ImageIOStrings);
+    VTABLE_set_pmc(interp, visitor, pmc);
+    return VTABLE_get_pmc(interp, visitor);
+}
+
 
 /*
 
@@ -106,13 +185,13 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PMC*
 Parrot_thaw(PARROT_INTERP, ARGIN(STRING *image))
 {
     ASSERT_ARGS(Parrot_thaw)
 
-    PMC        *info     = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const info = Parrot_pmc_new(interp, enum_class_ImageIO);
     int         gc_block = 0;
     PMC        *result;
 
@@ -147,6 +226,47 @@
 
 /*
 
+=item C<PMC* Parrot_thaw_pbc(PARROT_INTERP, STRING *image, PackFile_ConstTable
+*pf)>
+
+Thaw a pmc frozen by Parrot_freeze_pbc.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+PMC*
+Parrot_thaw_pbc(PARROT_INTERP, ARGIN(STRING *image), ARGIN(PackFile_ConstTable *pf))
+{
+    ASSERT_ARGS(Parrot_thaw_pbc)
+    PMC *info, *pf_pmc, *result;
+
+    pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+    VTABLE_set_pointer(interp, pf_pmc, pf);
+
+    info = Parrot_pmc_new_init(interp, enum_class_ImageIO, pf_pmc);
+
+    /* TODO
+     * Find out what broken code depends on blocking GC here and fix it, regardless of performance
+     * wins.
+     */
+    Parrot_block_GC_mark(interp);
+    Parrot_block_GC_sweep(interp);
+
+    VTABLE_set_string_native(interp, info, image);
+    result = VTABLE_get_pmc(interp, info);
+
+    Parrot_unblock_GC_mark(interp);
+    Parrot_unblock_GC_sweep(interp);
+
+    return result;
+}
+
+/*
+
 =item C<PMC* Parrot_thaw_constants(PARROT_INTERP, STRING *image)>
 
 Thaws constants, used by PackFile for unpacking PMC constants.
@@ -158,7 +278,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 PMC*
 Parrot_thaw_constants(PARROT_INTERP, ARGIN(STRING *image))
 {
@@ -199,15 +319,16 @@
 */
 
 void
-Parrot_visit_loop_visit(PARROT_INTERP, ARGIN(PMC *info)) {
+Parrot_visit_loop_visit(PARROT_INTERP, ARGIN(PMC *info))
+{
     ASSERT_ARGS(Parrot_visit_loop_visit)
 
     INTVAL      i;
     PMC * const todo    = VTABLE_get_iter(interp, info);
 
     /* can't cache upper limit, visit may append items */
-    for (i = 0; i < VTABLE_elements(interp, todo); i++) {
-        PMC *current = VTABLE_get_pmc_keyed_int(interp, todo, i);
+    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");
@@ -231,7 +352,8 @@
 */
 
 void
-Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info)) {
+Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info))
+{
     ASSERT_ARGS(Parrot_visit_loop_thawfinish)
 
     /* call thawfinish for each processed PMC */
@@ -267,10 +389,6 @@
 
 Lot of discussion on p6i and F<docs/dev/pmc_freeze.pod>.
 
-=head1 HISTORY
-
-Initial version by leo 2003.11.03 - 2003.11.07.
-
 =cut
 
 */

Modified: branches/ops_pct/src/runcore/cores.c
==============================================================================
--- branches/ops_pct/src/runcore/cores.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/runcore/cores.c	Wed May  5 08:45:29 2010	(r46302)
@@ -73,7 +73,7 @@
 structure to execute opcodes. Here's a brief example of how this
 architecture works:
 
-  for( ; ; current_opcode++) {
+  for( ; ; ++current_opcode) {
       switch(*current_opcode) {
           case opcode_1:
               ...
@@ -249,17 +249,11 @@
 
 #include "parrot/oplib/ops.h"
 #include "parrot/oplib/core_ops.h"
-#include "parrot/oplib/core_ops_switch.h"
 #include "parrot/dynext.h"
 
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 
-#ifdef HAVE_COMPUTED_GOTO
-#  include "parrot/oplib/core_ops_cg.h"
-#  include "parrot/oplib/core_ops_cgp.h"
-#endif
-
 #ifdef WIN32
 #  define getpid _getpid
 #endif
@@ -271,29 +265,10 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-static opcode_t * runops_cgoto_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
-    ARGIN(opcode_t *pc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static opcode_t * runops_cgp_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
-    ARGIN(opcode_t *pc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
 static opcode_t * runops_debugger_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
@@ -308,59 +283,35 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_fast_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_gc_debug_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t * runops_slow_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
-    ARGIN(opcode_t *pc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static opcode_t * runops_switch_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
+    SHIM(Parrot_runcore_t *runcore),
     ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-static opcode_t * runops_trace_core(PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore),
-    ARGIN(opcode_t *pc))
+static opcode_t * runops_trace_core(PARROT_INTERP, ARGIN(opcode_t *pc))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2);
 
-#define ASSERT_ARGS_runops_cgoto_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
-    , PARROT_ASSERT_ARG(pc))
-#define ASSERT_ARGS_runops_cgp_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
-    , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_debugger_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_exec_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -368,23 +319,15 @@
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_fast_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_gc_debug_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_slow_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
-    , PARROT_ASSERT_ARG(pc))
-#define ASSERT_ARGS_runops_switch_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 #define ASSERT_ARGS_runops_trace_core __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore) \
     , PARROT_ASSERT_ARG(pc))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -405,7 +348,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_slow_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "slow");
     coredata->id               = PARROT_SLOW_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -435,7 +378,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_fast_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "fast");
     coredata->id               = PARROT_FAST_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -452,36 +395,6 @@
 
 /*
 
-=item C<void Parrot_runcore_switch_init(PARROT_INTERP)>
-
-Registers the switch runcore with Parrot.
-
-=cut
-
-*/
-
-void
-Parrot_runcore_switch_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_runcore_switch_init)
-
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
-    coredata->name             = CONST_STRING(interp, "switch");
-    coredata->id               = PARROT_SWITCH_CORE;
-    coredata->opinit           = PARROT_CORE_SWITCH_OPLIB_INIT;
-    coredata->runops           = runops_switch_core;
-    coredata->prepare_run      = init_prederef;
-    coredata->destroy          = NULL;
-    coredata->flags            = 0;
-
-    PARROT_RUNCORE_PREDEREF_OPS_SET(coredata);
-
-    Parrot_runcore_register(interp, coredata);
-}
-
-
-/*
-
 =item C<void Parrot_runcore_exec_init(PARROT_INTERP)>
 
 Registers the exec runcore with Parrot.
@@ -495,7 +408,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_exec_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "exec");
     coredata->id               = PARROT_EXEC_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -523,7 +436,7 @@
 {
     ASSERT_ARGS(Parrot_runcore_gc_debug_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "gc_debug");
     coredata->id               = PARROT_GC_DEBUG_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
@@ -553,11 +466,11 @@
 {
     ASSERT_ARGS(Parrot_runcore_debugger_init)
 
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
+    Parrot_runcore_t * const coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
     coredata->name             = CONST_STRING(interp, "debugger");
     coredata->id               = PARROT_DEBUGGER_CORE;
     coredata->opinit           = PARROT_CORE_OPLIB_INIT;
-    coredata->prepare_run      = init_prederef;
+    coredata->prepare_run      = NULL;
     coredata->runops           = runops_debugger_core;
     coredata->destroy          = NULL;
     coredata->flags            = 0;
@@ -570,75 +483,6 @@
 
 /*
 
-=item C<void Parrot_runcore_cgp_init(PARROT_INTERP)>
-
-Registers the CGP runcore with Parrot.
-
-=cut
-
-*/
-
-#ifdef HAVE_COMPUTED_GOTO
-
-void
-Parrot_runcore_cgp_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_runcore_cgp_init)
-
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
-    coredata->name             = CONST_STRING(interp, "cgp");
-    coredata->id               = PARROT_CGP_CORE;
-    coredata->opinit           = PARROT_CORE_CGP_OPLIB_INIT;
-    coredata->prepare_run      = init_prederef;
-    coredata->runops           = runops_cgp_core;
-    coredata->flags            = 0;
-
-    coredata->destroy          = NULL;
-
-    PARROT_RUNCORE_CGOTO_OPS_SET(coredata);
-    PARROT_RUNCORE_EVENT_CHECK_SET(coredata);
-    PARROT_RUNCORE_PREDEREF_OPS_SET(coredata);
-
-    Parrot_runcore_register(interp, coredata);
-}
-
-
-/*
-
-=item C<void Parrot_runcore_cgoto_init(PARROT_INTERP)>
-
-Registers the cgoto runcore with Parrot.
-
-=cut
-
-*/
-
-void
-Parrot_runcore_cgoto_init(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_runcore_cgoto_init)
-
-    Parrot_runcore_t *coredata = mem_gc_allocate_zeroed_typed(interp, Parrot_runcore_t);
-    coredata->name             = CONST_STRING(interp, "cgoto");
-    coredata->id               = PARROT_CGOTO_CORE;
-    coredata->opinit           = PARROT_CORE_CG_OPLIB_INIT;
-    coredata->runops           = runops_cgoto_core;
-    coredata->destroy          = NULL;
-    coredata->prepare_run      = NULL;
-    coredata->flags            = 0;
-
-    PARROT_RUNCORE_FUNC_TABLE_SET(coredata);
-    PARROT_RUNCORE_CGOTO_OPS_SET(coredata);
-
-    Parrot_runcore_register(interp, coredata);
-}
-
-
-#endif /* #ifdef HAVE_COMPUTED_GOTO */
-
-
-/*
-
 =item C<static opcode_t * runops_fast_core(PARROT_INTERP, Parrot_runcore_t
 *runcore, opcode_t *pc)>
 
@@ -652,7 +496,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_fast_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_fast_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_fast_core)
 
@@ -674,42 +518,6 @@
 }
 
 
-/*
-
-=item C<static opcode_t * runops_cgoto_core(PARROT_INTERP, Parrot_runcore_t
-*runcore, opcode_t *pc)>
-
-Runs the Parrot operations starting at C<pc> until there are no more
-operations, using the computed C<goto> core, performing no bounds checking,
-profiling, or tracing.
-
-If computed C<goto> is not available then Parrot exits with exit code 1.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-runops_cgoto_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
-{
-    ASSERT_ARGS(runops_cgoto_core)
-
-    /* disable pc */
-    Parrot_pcc_set_pc(interp, CURRENT_CONTEXT(interp), NULL);
-
-#ifdef HAVE_COMPUTED_GOTO
-    pc = cg_core(pc, interp);
-    return pc;
-#else
-    UNUSED(pc);
-    Parrot_io_eprintf(interp,
-            "Computed goto unavailable in this configuration.\n");
-    Parrot_exit(interp, 1);
-#endif
-}
-
 #ifdef code_start
 #  undef code_start
 #endif
@@ -724,8 +532,7 @@
 
 /*
 
-=item C<static opcode_t * runops_trace_core(PARROT_INTERP, Parrot_runcore_t
-*runcore, opcode_t *pc)>
+=item C<static opcode_t * runops_trace_core(PARROT_INTERP, opcode_t *pc)>
 
 Runs the Parrot operations starting at C<pc> until there are no more
 operations, using the tracing interpreter.
@@ -737,7 +544,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_trace_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_trace_core(PARROT_INTERP, ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_trace_core)
 
@@ -757,13 +564,9 @@
          * using a distinct interpreter for tracing should be ok
          * - just in case, make it easy to switch
          */
-#if 0
-        debugger = interp:
-#else
         Parrot_debugger_init(interp);
         PARROT_ASSERT(interp->pdb);
         debugger = interp->pdb->debugger;
-#endif
         PARROT_ASSERT(debugger);
 
         /* set the top of the stack so GC can trace it for GC-able pointers
@@ -827,16 +630,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_slow_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_slow_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_slow_core)
 
     if (Interp_trace_TEST(interp, PARROT_TRACE_OPS_FLAG))
-        return runops_trace_core(interp, runcore, pc);
-#if 0
-    if (interp->debugger && interp->debugger->pdb)
-        return Parrot_debug(interp, interp->debugger, pc);
-#endif
+        return runops_trace_core(interp, pc);
 
     while (pc) {
         if (pc < code_start || pc >= code_end)
@@ -868,7 +667,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_gc_debug_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_gc_debug_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_gc_debug_core)
     while (pc) {
@@ -903,7 +702,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static opcode_t *
-runops_debugger_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
+runops_debugger_core(PARROT_INTERP, SHIM(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
 {
     ASSERT_ARGS(runops_debugger_core)
 
@@ -950,120 +749,6 @@
 }
 
 
-/*
-
-=item C<static opcode_t * runops_switch_core(PARROT_INTERP, Parrot_runcore_t
-*runcore, opcode_t *pc)>
-
-Runs the C<switch> core.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static opcode_t *
-runops_switch_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
-{
-    ASSERT_ARGS(runops_switch_core)
-    opcode_t * const code_start = (opcode_t *)interp->code->base.data;
-    opcode_t        *pc_prederef;
-
-    init_prederef(interp, runcore);
-    pc_prederef = (opcode_t*)interp->code->prederef.code + (pc - code_start);
-
-    return switch_core(pc_prederef, interp);
-}
-
-
-/*
-
-=item C<void * init_prederef(PARROT_INTERP, Parrot_runcore_t *runcore)>
-
-Initialize: load prederef C<func_table>, file prederef.code.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-void *
-init_prederef(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
-{
-    ASSERT_ARGS(init_prederef)
-    load_prederef(interp, runcore);
-
-    if (!interp->code->prederef.code) {
-        void        *pred_func;
-        opcode_t    *pc = interp->code->base.data;
-        const size_t N  = interp->code->base.size;
-        size_t       i, n_pics;
-
-        void **temp = (void **)Parrot_memalign_if_possible(256,
-                N * sizeof (void *));
-        /* calc and remember pred_offset */
-        CONTEXT(interp)->pred_offset = pc - (opcode_t *)temp;
-
-        /* fill with the prederef__ opcode function */
-        if (PARROT_RUNCORE_PREDEREF_OPS_TEST(runcore)
-        && !PARROT_RUNCORE_CGOTO_OPS_TEST(runcore))
-            pred_func = (void *)CORE_OPS_prederef__;
-        else {
-            PARROT_ASSERT(interp->op_lib->op_func_table);
-            pred_func = ((void **)
-                    interp->op_lib->op_func_table)[CORE_OPS_prederef__];
-        }
-
-        for (i = n_pics = 0; i < N;) {
-            op_info_t * const opinfo = &interp->op_info_table[*pc];
-            size_t            n      = opinfo->op_count;
-
-            temp[i] = pred_func;
-
-            ADD_OP_VAR_PART(interp, interp->code, pc, n);
-
-            pc += n;
-            i  += n;
-        }
-
-        interp->code->prederef.code = temp;
-    }
-
-    return NULL;
-}
-
-
-/*
-
-=item C<void load_prederef(PARROT_INTERP, Parrot_runcore_t *runcore)>
-
-C<< interp->op_lib >> = prederefed oplib.
-
-=cut
-
-*/
-
-void
-load_prederef(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
-{
-    ASSERT_ARGS(load_prederef)
-    const oplib_init_f init_func = get_core_op_lib_init(interp, runcore);
-
-    int (*get_op)(PARROT_INTERP, const char * name, int full);
-
-    get_op          = interp->op_lib->op_code;
-    interp->op_lib  = init_func(interp, 1);
-
-    /* preserve the get_op function */
-    interp->op_lib->op_code = get_op;
-
-    if (interp->op_lib->op_count != interp->op_count)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PREDEREF_LOAD_ERROR,
-            "Illegal op count (%d) in prederef oplib\n",
-            (int)interp->op_lib->op_count);
-}
-
 
 /*
 
@@ -1079,7 +764,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 oplib_init_f
-get_core_op_lib_init(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
+get_core_op_lib_init(SHIM_INTERP, ARGIN(Parrot_runcore_t *runcore))
 {
     ASSERT_ARGS(get_core_op_lib_init)
     return runcore->opinit;
@@ -1105,6 +790,7 @@
     ASSERT_ARGS(runops_exec_core)
 
     UNUSED(interp);
+    UNUSED(runcore);
     UNUSED(pc);
 
     return NULL;
@@ -1113,41 +799,6 @@
 
 /*
 
-=item C<static opcode_t * runops_cgp_core(PARROT_INTERP, Parrot_runcore_t
-*runcore, opcode_t *pc)>
-
-Runs the computed goto and predereferenced core.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static opcode_t *
-runops_cgp_core(PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore), ARGIN(opcode_t *pc))
-{
-    ASSERT_ARGS(runops_cgp_core)
-#ifdef HAVE_COMPUTED_GOTO
-    opcode_t * const code_start = (opcode_t *)interp->code->base.data;
-    opcode_t        *pc_prederef;
-
-    init_prederef(interp, runcore);
-
-    pc_prederef = (opcode_t *)interp->code->prederef.code + (pc - code_start);
-    return cgp_core(pc_prederef, interp);
-
-#else
-    UNUSED(pc);
-    Parrot_io_eprintf(interp,
-            "Computed goto unavailable in this configuration.\n");
-    Parrot_exit(interp, 1);
-#endif
-
-}
-
-/*
-
 =back
 
 */

Modified: branches/ops_pct/src/runcore/main.c
==============================================================================
--- branches/ops_pct/src/runcore/main.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/runcore/main.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -22,14 +22,9 @@
 #include "parrot/runcore_api.h"
 #include "parrot/runcore_profiling.h"
 #include "parrot/oplib/core_ops.h"
-#include "parrot/oplib/core_ops_switch.h"
 #include "parrot/oplib/ops.h"
 #include "main.str"
 
-#ifdef HAVE_COMPUTED_GOTO
-#  include "parrot/oplib/core_ops_cg.h"
-#  include "parrot/oplib/core_ops_cgp.h"
-#endif
 #include "parrot/dynext.h"
 #include "pmc/pmc_parrotlibrary.h"
 #include "pmc/pmc_callcontext.h"
@@ -44,12 +39,6 @@
 static void dynop_register_switch(PARROT_INTERP, size_t n_old, size_t n_new)
         __attribute__nonnull__(1);
 
-static void dynop_register_xx(PARROT_INTERP,
-    size_t n_old,
-    size_t n_new,
-    oplib_init_f init_func)
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static oplib_init_f get_dynamic_op_lib_init(SHIM_INTERP,
@@ -62,25 +51,13 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void stop_prederef(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-static void turn_ev_check(PARROT_INTERP, int on)
-        __attribute__nonnull__(1);
-
 #define ASSERT_ARGS_dynop_register_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_dynop_register_xx __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))
-#define ASSERT_ARGS_stop_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_turn_ev_check __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 */
 
@@ -105,7 +82,6 @@
 
     Parrot_runcore_slow_init(interp);
     Parrot_runcore_fast_init(interp);
-    Parrot_runcore_switch_init(interp);
 
     Parrot_runcore_exec_init(interp);
     Parrot_runcore_gc_debug_init(interp);
@@ -115,11 +91,6 @@
 
     /* set the default runcore */
     Parrot_runcore_switch(interp, default_core);
-
-#ifdef HAVE_COMPUTED_GOTO
-    Parrot_runcore_cgp_init(interp);
-    Parrot_runcore_cgoto_init(interp);
-#endif
 }
 
 
@@ -187,44 +158,6 @@
 
 /*
 
-=item C<static void turn_ev_check(PARROT_INTERP, int on)>
-
-Turn on or off event checking for prederefed cores.
-
-Fills in the C<event_checker> opcode, or restores original ops in all
-branch locations of the opcode stream.
-
-Note that when C<on> is true, this is being called from the event
-handler thread.
-
-=cut
-
-*/
-
-static void
-turn_ev_check(PARROT_INTERP, int on)
-{
-    ASSERT_ARGS(turn_ev_check)
-    const Prederef * const pi = &interp->code->prederef;
-    size_t i;
-
-    if (!pi->branches)
-        return;
-
-    for (i = 0; i < pi->n_branches; ++i) {
-        const size_t offs = pi->branches[i].offs;
-        if (on)
-            interp->code->prederef.code[offs] =
-                ((void **)interp->op_lib->op_func_table)
-                            [CORE_OPS_check_events__];
-        else
-            interp->code->prederef.code[offs] = pi->branches[i].op;
-    }
-}
-
-
-/*
-
 =item C<static oplib_init_f get_dynamic_op_lib_init(PARROT_INTERP, const PMC
 *lib)>
 
@@ -249,33 +182,6 @@
 
 /*
 
-=item C<static void stop_prederef(PARROT_INTERP)>
-
-Restore the interpreter's op function tables to their initial state.
-Also recreate the event function pointers. This is only necessary
-for run-core changes, but we don't know the old run core.
-
-=cut
-
-*/
-
-static void
-stop_prederef(PARROT_INTERP)
-{
-    ASSERT_ARGS(stop_prederef)
-    interp->op_func_table = PARROT_CORE_OPLIB_INIT(interp, 1)->op_func_table;
-
-    if (interp->evc_func_table) {
-        mem_gc_free(interp, interp->evc_func_table);
-        interp->evc_func_table = NULL;
-    }
-
-    Parrot_setup_event_func_ptrs(interp);
-}
-
-
-/*
-
 =item C<void prepare_for_run(PARROT_INTERP)>
 
 Prepares to run the interpreter's run core.
@@ -337,7 +243,6 @@
             if ((int)interp->resume_offset < 0)
                 Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "branch_cs: illegal resume offset");
-            stop_prederef(interp);
         }
     }
 }
@@ -397,13 +302,12 @@
 Parrot_runcore_destroy(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_runcore_destroy)
-    op_lib_t         *cg_lib;
     size_t            num_cores = interp->num_cores;
     size_t            i;
 
     for (i = 0; i < num_cores; ++i) {
-        Parrot_runcore_t        *core    = interp->cores[i];
-        runcore_destroy_fn_type  destroy = core->destroy;
+        Parrot_runcore_t * const core = interp->cores[i];
+        const runcore_destroy_fn_type destroy = core->destroy;
 
         if (destroy)
             (*destroy)(interp, core);
@@ -421,19 +325,6 @@
     if (interp->n_libs <= 0)
         return;
 
-#ifdef HAVE_COMPUTED_GOTO
-    cg_lib = PARROT_CORE_CGP_OPLIB_INIT(interp, 1);
-
-    if (cg_lib->op_func_table)
-        mem_gc_free(interp, cg_lib->op_func_table);
-    cg_lib->op_func_table = NULL;
-
-    cg_lib = PARROT_CORE_CG_OPLIB_INIT(interp, 1);
-    if (cg_lib->op_func_table)
-        mem_gc_free(interp, cg_lib->op_func_table);
-    cg_lib->op_func_table = NULL;
-#endif
-
     mem_gc_free(interp, interp->op_info_table);
     mem_gc_free(interp, interp->op_func_table);
     interp->op_info_table = NULL;
@@ -457,6 +348,7 @@
 
 */
 
+PARROT_EXPORT
 void
 dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
 {
@@ -557,125 +449,10 @@
     core->flags         = OP_FUNC_IS_ALLOCATED | OP_INFO_IS_ALLOCATED;
 
     /* done for plain core */
-#ifdef HAVE_COMPUTED_GOTO
-    dynop_register_xx(interp, n_old, n_new, PARROT_CORE_CGP_OPLIB_INIT);
-    dynop_register_xx(interp, n_old, n_new, PARROT_CORE_CG_OPLIB_INIT);
-#endif
-
     dynop_register_switch(interp, n_old, n_new);
 }
 
 
-/*
-
-=item C<static void dynop_register_xx(PARROT_INTERP, size_t n_old, size_t n_new,
-oplib_init_f init_func)>
-
-Register C<op_lib> with other cores.
-
-=cut
-
-*/
-
-static void
-dynop_register_xx(PARROT_INTERP,
-        size_t n_old, size_t n_new, oplib_init_f init_func)
-{
-    ASSERT_ARGS(dynop_register_xx)
-    const size_t n_tot    = n_old + n_new;
-    op_func_t   *ops_addr = NULL;
-    op_lib_t    *cg_lib   = init_func(interp, 1);
-
-#if 0
-    /* related to CG and CGP ops issue below */
-    op_lib_t    *new_lib;
-    STRING *op_variant;
-    oplib_init_f new_init_func;
-    PMC *lib_variant;
-#endif
-
-    if (cg_lib->flags & OP_FUNC_IS_ALLOCATED) {
-        ops_addr = mem_gc_realloc_n_typed_zeroed(interp,
-                cg_lib->op_func_table, n_tot, n_old, op_func_t);
-    }
-    else {
-        size_t i;
-
-        ops_addr      = mem_gc_allocate_n_zeroed_typed(interp, n_tot, op_func_t);
-        cg_lib->flags = OP_FUNC_IS_ALLOCATED;
-
-        for (i = 0; i < n_old; ++i)
-            ops_addr[i] = cg_lib->op_func_table[i];
-    }
-
-    /*
-     * XXX running CG and CGP ops currently works only via the wrapper
-     *
-     * the problem is:
-     *  The actual runcores cg_core and cgp_core are very big functions.
-     *  The C compiler usually addresses "spilled" registers in the C stack.
-     *  The loaded opcode lib is another possibly big function, but with
-     *  a likely different stack layout. Directly jumping around between
-     *  code locations in these two opcode functions works, but access
-     *  to stack-ed (or spilled) variables fails badly.
-     *
-     *  We would need to prepare the assembly source of the opcode
-     *  lib so that all variable access on the stack has the same
-     *  layout and compile the prepared assembly to ops_cgp?.o
-     *
-     *  The switched core is different anyway, as we can't extend the
-     *  compiled big switch statement with the new cases. We have
-     *  always to use the wrapper__ opcode called from the default case.
-     */
-#if 0
-    /* check if the lib_pmc exists with a _xx flavor */
-    new_init_func = get_op_lib_init(0, 0, lib_pmc);
-    new_lib       = new_init_func(1);
-    op_variant    = Parrot_sprintf_c(interp, "%s_ops%s",
-                        new_lib->name, cg_lib->suffix);
-    lib_variant   = Parrot_load_lib(interp, op_variant, NULL);
-
-    /* XXX running CG and CGP ops currently works only via the wrapper */
-    if (0 /*lib_variant */) {
-        size_t i;
-
-        new_init_func = get_dynamic_op_lib_init(interp, lib_variant);
-        new_lib       = new_init_func(1);
-
-        for (i = n_old; i < n_tot; ++i)
-            ops_addr[i] = (new_lib->op_func_table)[i - n_old];
-
-        new_lib->op_func_table = ops_addr;
-        new_lib->op_count      = n_tot;
-
-        new_init_func((long) ops_addr);
-    }
-    else
-#endif
-    {
-        size_t i;
-
-        /* if not install wrappers */
-        /* fill new entries with the wrapper op */
-        for (i = n_old; i < n_tot; ++i)
-            ops_addr[i] = ops_addr[CORE_OPS_wrapper__];
-    }
-
-    /* if we are running this core, update event check ops */
-    if (interp->run_core->id == cg_lib->core_type) {
-        size_t i;
-
-        for (i = n_old; i < n_tot; ++i)
-            interp->evc_func_table[i] =
-                (op_func_t)ops_addr[CORE_OPS_check_events__];
-        interp->save_func_table = ops_addr;
-    }
-
-    /* tell the cg_core about the new jump table */
-    cg_lib->op_func_table = ops_addr;
-    cg_lib->op_count      = n_tot;
-    init_func(interp, (long) ops_addr);
-}
 
 
 /*
@@ -695,7 +472,7 @@
 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_SWITCH_OPLIB_INIT(interp, 1);
+    op_lib_t * const lib = PARROT_CORE_OPLIB_INIT(interp, 1);
     lib->op_count        = n_old + n_new;
 }
 
@@ -722,9 +499,6 @@
         PARROT_ASSERT(table);
         interp->op_func_table = table;
     }
-
-    if (PARROT_RUNCORE_EVENT_CHECK_TEST(interp->run_core))
-        turn_ev_check(interp, on);
 }
 
 

Modified: branches/ops_pct/src/runcore/profiling.c
==============================================================================
--- branches/ops_pct/src/runcore/profiling.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/runcore/profiling.c	Wed May  5 08:45:29 2010	(r46302)
@@ -148,7 +148,7 @@
 {
     ASSERT_ARGS(init_profiling_core)
 
-    char *profile_filename, *output_cstr, *filename_cstr, *annotations_cstr;
+    char *profile_filename, *output_cstr, *filename_cstr;
 
     /* initialize the runcore struct */
     runcore->runops  = (Parrot_runcore_runops_fn_t)  runops_profiling_core;
@@ -227,12 +227,14 @@
     }
 
     /* figure out if annotations are wanted */
-    annotations_cstr = Parrot_getenv(interp, CONST_STRING(interp, "PARROT_PROFILING_ANNOTATIONS"));
-
-    if (annotations_cstr) {
+    if (Parrot_getenv(interp, CONST_STRING(interp, "PARROT_PROFILING_ANNOTATIONS"))) {
         Profiling_report_annotations_SET(runcore);
     }
 
+    if (Parrot_getenv(interp, CONST_STRING(interp, "PARROT_PROFILING_CANONICAL_OUTPUT"))) {
+        Profiling_canonical_output_SET(runcore);
+    }
+
     /* put profile_filename in the gc root set so it won't get collected */
     Parrot_pmc_gc_register(interp, (PMC *) runcore->profile_filename);
 
@@ -332,7 +334,7 @@
         preop_ctx->current_pc = pc;
         preop_pc              = pc;
 
-        runcore->level++;
+        ++runcore->level;
         Profiling_exit_check_CLEAR(runcore);
 
         runcore->op_start  = Parrot_hires_get_time();
@@ -347,7 +349,7 @@
         else
             op_time = runcore->op_finish - runcore->op_start;
 
-        runcore->level--;
+        --runcore->level;
 
         /* if current context changed since the last printing of a CS line... */
         /* Occasionally the ctx stays the same while the sub changes, possible
@@ -373,7 +375,7 @@
                 ns_separator = Parrot_str_new(interp, ";", 1);
 
                 i = MAX_NS_DEPTH - 1;
-                for (;ns ; i--) {
+                for (;ns ; --i) {
                     if (i < 0) {
                         /* should probably warn about truncated namespace here */
                         break;
@@ -382,21 +384,28 @@
                     GETATTR_NameSpace_parent(interp, ns, ns);
                 }
 
-                i++;
-                i++; /* the root namespace has an empty name, so ignore it */
-                for (;i < MAX_NS_DEPTH; i++) {
-                    full_ns = Parrot_str_concat(interp, full_ns, ns_names[i], 0);
-                    full_ns = Parrot_str_concat(interp, full_ns, ns_separator, 0);
+                i += 2; /* the root namespace has an empty name, so ignore it */
+                for (;i < MAX_NS_DEPTH; ++i) {
+                    full_ns = Parrot_str_concat(interp, full_ns, ns_names[i]);
+                    full_ns = Parrot_str_concat(interp, full_ns, ns_separator);
                 }
 
                 GETATTR_Sub_name(interp, preop_ctx->current_sub, sub_name);
-                full_ns = Parrot_str_concat(interp, full_ns, sub_name, 0);
+                full_ns = Parrot_str_concat(interp, full_ns, sub_name);
                 full_ns_cstr = Parrot_str_to_cstring(interp, full_ns);
 
                 pprof_data[PPROF_DATA_NAMESPACE] = (PPROF_DATA) full_ns_cstr;
                 pprof_data[PPROF_DATA_FILENAME]  = (PPROF_DATA) filename_cstr;
-                pprof_data[PPROF_DATA_SUB_ADDR]  = (PPROF_DATA) preop_ctx->current_sub;
-                pprof_data[PPROF_DATA_CTX_ADDR]  = (PPROF_DATA) preop_ctx;
+
+                if (Profiling_canonical_output_TEST(runcore)) {
+                    pprof_data[PPROF_DATA_SUB_ADDR]  = (PPROF_DATA) 0x3;
+                    pprof_data[PPROF_DATA_CTX_ADDR]  = (PPROF_DATA) 0x3;
+                }
+                else {
+                    pprof_data[PPROF_DATA_SUB_ADDR]  = (PPROF_DATA) preop_ctx->current_sub;
+                    pprof_data[PPROF_DATA_CTX_ADDR]  = (PPROF_DATA) preop_ctx;
+                }
+
                 runcore->output_fn(runcore, pprof_data, PPROF_LINE_CONTEXT_SWITCH);
 
                 Parrot_str_free_cstring(full_ns_cstr);
@@ -443,8 +452,13 @@
             }
         }
 
+        if (Profiling_canonical_output_TEST(runcore)) {
+            pprof_data[PPROF_DATA_TIME] = 1;
+        }
+        else {
+            pprof_data[PPROF_DATA_TIME] = op_time;
+        }
         pprof_data[PPROF_DATA_LINE]   = preop_line;
-        pprof_data[PPROF_DATA_TIME]   = op_time;
         pprof_data[PPROF_DATA_OPNAME] = (PPROF_DATA)(interp->op_info_table)[*preop_pc].name;
         runcore->output_fn(runcore, pprof_data, PPROF_LINE_OP);
     }
@@ -496,7 +510,7 @@
     pprof_data[PPROF_DATA_OPNAME] = (PPROF_DATA) "noop";
     runcore->output_fn(runcore, pprof_data, PPROF_LINE_OP);
 
-    runcore->runloop_count++;
+    ++runcore->runloop_count;
 }
 
 /*

Modified: branches/ops_pct/src/runcore/trace.c
==============================================================================
--- branches/ops_pct/src/runcore/trace.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/runcore/trace.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -25,6 +25,7 @@
 
 #include "parrot/runcore_trace.h"
 #include "parrot/oplib/ops.h"
+#include "parrot/context.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_callcontext.h"
 
@@ -79,18 +80,18 @@
 trace_class_name(PARROT_INTERP, ARGIN(const PMC* pmc))
 {
     ASSERT_ARGS(trace_class_name)
-    STRING *class_name;
+
     if (PObj_is_class_TEST(pmc)) {
-        SLOTTYPE * const class_array = (SLOTTYPE *)PMC_data(pmc);
-        PMC * const class_name_pmc = get_attrib_num(class_array,
+        SLOTTYPE * const class_array    = PMC_data_typed(pmc, SLOTTYPE *);
+        PMC      * const class_name_pmc = get_attrib_num(class_array,
                                                     PCD_CLASS_NAME);
-        class_name = VTABLE_get_string(interp, class_name_pmc);
+        return VTABLE_get_string(interp, class_name_pmc);
     }
     else
-        class_name = pmc->vtable->whoami;
-    return class_name;
+        return pmc->vtable->whoami;
 }
 
+
 /*
 
 =item C<void trace_pmc_dump(PARROT_INTERP, PMC *pmc)>
@@ -112,17 +113,21 @@
         Parrot_io_eprintf(debugger, "(null)");
         return;
     }
+
     if (PMC_IS_NULL(pmc))  {
         Parrot_io_eprintf(debugger, "PMCNULL");
         return;
     }
+
     if (!pmc->vtable || (UINTVAL)pmc->vtable == 0xdeadbeef) {
         Parrot_io_eprintf(debugger, "<!!no vtable!!>");
         return;
     }
-    if (PObj_on_free_list_TEST(pmc)) {
-        Parrot_io_eprintf(debugger, "**************** PMC is on free list *****\n");
-    }
+
+    if (PObj_on_free_list_TEST(pmc))
+        Parrot_io_eprintf(debugger,
+            "**************** PMC is on free list *****\n");
+
     if (pmc->vtable->pmc_class == pmc) {
         STRING * const name = trace_class_name(interp, pmc);
         Parrot_io_eprintf(debugger, "Class=%Ss:PMC(%#p)", name, pmc);
@@ -133,25 +138,23 @@
             Parrot_io_eprintf(debugger, "%S=PMC(%#p Str:(NULL))",
                     VTABLE_name(interp, pmc), pmc);
         else {
-            STRING* const escaped = Parrot_str_escape_truncate(
-                            interp, s, 20);
+            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
             if (escaped)
                 Parrot_io_eprintf(debugger, "%S=PMC(%#p Str:\"%Ss\")",
-                    VTABLE_name(interp, pmc), pmc,
-                    escaped);
+                    VTABLE_name(interp, pmc), pmc, escaped);
             else
                 Parrot_io_eprintf(debugger, "%S=PMC(%#p Str:\"(null)\")",
                     VTABLE_name(interp, pmc), pmc);
         }
     }
-    else if (pmc->vtable->base_type == enum_class_Boolean) {
+    else if (pmc->vtable->base_type == enum_class_Boolean)
         Parrot_io_eprintf(debugger, "Boolean=PMC(%#p: %d)",
                 pmc, VTABLE_get_integer(interp, pmc));
-    }
-    else if (pmc->vtable->base_type == enum_class_Integer) {
+
+    else if (pmc->vtable->base_type == enum_class_Integer)
         Parrot_io_eprintf(debugger, "Integer=PMC(%#p: %d)",
                 pmc, VTABLE_get_integer(interp, pmc));
-    }
+
     else if (pmc->vtable->base_type == enum_class_BigInt) {
         STRING * const s = VTABLE_get_string(interp, pmc);
         Parrot_io_eprintf(debugger, "BigInt=PMC(%#p: %Ss)",
@@ -159,8 +162,7 @@
     }
     else if (pmc->vtable->base_type == enum_class_Complex) {
         STRING * const s = VTABLE_get_string(interp, pmc);
-        Parrot_io_eprintf(debugger, "Complex=PMC(%#p: %Ss)",
-                pmc, s);
+        Parrot_io_eprintf(debugger, "Complex=PMC(%#p: %Ss)", pmc, s);
     }
     else if (pmc->vtable->base_type == enum_class_Sub) {
         PMC_get_sub(interp, pmc, sub);
@@ -177,6 +179,7 @@
     }
 }
 
+
 /*
 
 =item C<int trace_key_dump(PARROT_INTERP, PMC *key)>
@@ -198,16 +201,18 @@
     while (key) {
         switch (PObj_get_FLAGS(key) & KEY_type_FLAGS) {
           case KEY_integer_FLAG:
-            len += Parrot_io_eprintf(debugger, "%vi", VTABLE_get_integer(interp, key));
+              len += Parrot_io_eprintf(debugger, "%vi",
+                 VTABLE_get_integer(interp, key));
             break;
           case KEY_number_FLAG:
-            len += Parrot_io_eprintf(debugger, "%vg", VTABLE_get_number(interp, key));
+              len += Parrot_io_eprintf(debugger, "%vg",
+                  VTABLE_get_number(interp, key));
             break;
           case KEY_string_FLAG:
             {
             const STRING * const s = key_string(interp, key);
-            STRING* const escaped = Parrot_str_escape_truncate(
-                            interp, s, 20);
+            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
+
             if (escaped)
                 len += Parrot_io_eprintf(debugger, "\"%Ss\"", escaped);
             else
@@ -215,33 +220,37 @@
             }
             break;
           case KEY_integer_FLAG|KEY_register_FLAG:
-            len += Parrot_io_eprintf(debugger, "I%vd=%vd", VTABLE_get_integer(interp, key),
+              len += Parrot_io_eprintf(debugger, "I%vd=%vd",
+                  VTABLE_get_integer(interp, key),
                     REG_INT(interp, VTABLE_get_integer(interp, key)));
             break;
           case KEY_number_FLAG|KEY_register_FLAG:
-            len += Parrot_io_eprintf(debugger, "I%vd=%vd", VTABLE_get_integer(interp, key),
+              len += Parrot_io_eprintf(debugger, "I%vd=%vd",
+                  VTABLE_get_integer(interp, key),
                     REG_NUM(interp, VTABLE_get_integer(interp, key)));
             break;
           case KEY_string_FLAG|KEY_register_FLAG:
             {
-            const STRING * const s = REG_STR(interp, VTABLE_get_integer(interp, key));
-            STRING* const escaped = Parrot_str_escape_truncate(
-                            interp, s, 20);
+            const STRING * const s = REG_STR(interp,
+                 VTABLE_get_integer(interp, key));
+            STRING * const escaped = Parrot_str_escape_truncate(interp, s, 20);
             if (escaped)
-                len += Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"", VTABLE_get_integer(interp, key),
-                        escaped);
+                len += Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"",
+                    VTABLE_get_integer(interp, key), escaped);
             else
                 len += Parrot_io_eprintf(debugger, "S%vd=\"(null)\"",
                         VTABLE_get_integer(interp, key));
             }
             break;
           case KEY_pmc_FLAG|KEY_register_FLAG:
-            len += Parrot_io_eprintf(debugger, "P%vd=", VTABLE_get_integer(interp, key));
-            trace_pmc_dump(debugger, REG_PMC(interp, VTABLE_get_integer(interp, key)));
+              len += Parrot_io_eprintf(debugger, "P%vd=",
+                  VTABLE_get_integer(interp, key));
+              trace_pmc_dump(debugger, REG_PMC(interp,
+                  VTABLE_get_integer(interp, key)));
             break;
           default:
             len += Parrot_io_eprintf(debugger, "??");
-            key = NULL;
+            key  = NULL;
             break;
         }
 
@@ -250,12 +259,13 @@
             if (key)
                 len += Parrot_io_eprintf(debugger, ";");
         }
-    } /* while */
+    }
 
     len += Parrot_io_eprintf(debugger, "]");
     return len;
 }
 
+
 /*
 
 =item C<void trace_op_dump(PARROT_INTERP, const opcode_t *code_start, const
@@ -275,29 +285,23 @@
         ARGIN(const opcode_t *pc))
 {
     ASSERT_ARGS(trace_op_dump)
-    INTVAL s, n;
-    int more = 0, var_args;
-    Interp * const debugger = debugger_or_interp(interp);
-    op_info_t * const info = &interp->op_info_table[*pc];
-    PMC *sig;
-    int type;
-    int len;
-#define ARGS_COLUMN 40
+    Interp    * const debugger = debugger_or_interp(interp);
+    op_info_t * const info     = &interp->op_info_table[*pc];
+    PMC *sig                   = PMCNULL;
+    INTVAL n                   = info->op_count;
+    INTVAL s                   = 1;
+    int more                   = 0, type;
+    int var_args               = 0;
 
-    PARROT_ASSERT(debugger);
-    sig = NULL; /* silence compiler uninit warning */
+    int len = Parrot_io_eprintf(debugger, "%04vx ", (UINTVAL)(pc - code_start))
+            + Parrot_io_eprintf(debugger, "%s", info->name);
+
+#define ARGS_COLUMN 40
 
-    s = 1;
-    len = Parrot_io_eprintf(debugger, "%6vu ", (UINTVAL)(pc - code_start));
-    len += Parrot_io_eprintf(debugger, "%s", info->name);
-
-    n = info->op_count;
-    var_args = 0;
-
-    if (*pc == PARROT_OP_set_args_pc ||
-            *pc == PARROT_OP_get_results_pc ||
-            *pc == PARROT_OP_get_params_pc ||
-            *pc == PARROT_OP_set_returns_pc) {
+    if (*pc == PARROT_OP_set_args_pc
+    ||  *pc == PARROT_OP_get_results_pc
+    ||  *pc == PARROT_OP_get_params_pc
+    ||  *pc == PARROT_OP_set_returns_pc) {
         sig = interp->code->const_table->constants[pc[1]]->u.key;
 
         if (!sig)
@@ -305,18 +309,18 @@
                 "NULL sig PMC detected in trace_op_dump");
 
         var_args = VTABLE_elements(interp, sig);
-        n += var_args;
+        n       += var_args;
     }
 
     if (n > 1) {
         INTVAL i;
         len += Parrot_io_eprintf(debugger, " ");
         /* pass 1 print arguments */
-        for (i = s; i < n; i++) {
+        for (i = s; i < n; ++i) {
             const opcode_t o = pc[i];
-            if (i < info->op_count) {
+
+            if (i < info->op_count)
                 type = info->types[i - 1];
-            }
             else {
                 if (!sig)
                     Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -325,19 +329,22 @@
                 type = VTABLE_get_integer_keyed_int(interp, sig, i - 2) &
                     (PARROT_ARG_TYPE_MASK|PARROT_ARG_CONSTANT);
             }
-            if (i > s &&
-                    type != PARROT_ARG_KC &&
-                    type != PARROT_ARG_KIC &&
-                    type != PARROT_ARG_KI &&
-                    type != PARROT_ARG_K) {
+
+            if (i > s
+            &&  type != PARROT_ARG_KC
+            &&  type != PARROT_ARG_KIC
+            &&  type != PARROT_ARG_KI
+            &&  type != PARROT_ARG_K)
                 len += Parrot_io_eprintf(debugger, ", ");
-            }
+
             switch (type) {
               case PARROT_ARG_IC:
                 len += Parrot_io_eprintf(debugger, "%vd", o);
                 break;
               case PARROT_ARG_NC:
-                len += Parrot_io_eprintf(debugger, "%vg", PCONST(o)->u.number);
+                len += Parrot_io_eprintf(debugger, "%vg",
+                        Parrot_pcc_get_num_constant(interp,
+                            CURRENT_CONTEXT(interp), o));
                 break;
               case PARROT_ARG_PC:
                 if (var_args)
@@ -348,9 +355,9 @@
                 break;
               case PARROT_ARG_SC:
                 {
-                    STRING* const escaped = Parrot_str_escape_truncate(
-                            interp,
-                            PCONST(o)->u.string, 20);
+                    STRING * const escaped = Parrot_str_escape_truncate(
+                            interp, Parrot_pcc_get_string_constant(interp,
+                                        CURRENT_CONTEXT(interp), o), 20);
                     if (escaped)
                         len += Parrot_io_eprintf(debugger, "\"%Ss\"", escaped);
                     else
@@ -358,7 +365,9 @@
                 }
                 break;
               case PARROT_ARG_KC:
-                len += trace_key_dump(interp, PCONST(o)->u.key);
+                len += trace_key_dump(interp,
+                        Parrot_pcc_get_pmc_constant(interp,
+                            CURRENT_CONTEXT(interp), o));
                 break;
               case PARROT_ARG_KIC:
                 len += Parrot_io_eprintf(debugger, "[%vd]", o);
@@ -393,29 +402,30 @@
                 break;
             }
         }
+
         if (!more)
             goto done;
+
         if (len < ARGS_COLUMN)  {
             STRING * const fill = Parrot_str_repeat(debugger,
-                    Parrot_str_new_constant(debugger, " "),
-                    ARGS_COLUMN);
+                    Parrot_str_new_constant(debugger, " "), ARGS_COLUMN);
             Parrot_io_putps(debugger, Parrot_io_STDERR(debugger), fill);
         }
-        else {
+        else
             Parrot_io_eprintf(debugger, "\t");
-        }
 
         /* pass 2 print argument details if needed */
-        for (i = 1; i < n; i++) {
+        for (i = 1; i < n; ++i) {
             const opcode_t o = pc[i];
             if (i < info->op_count)
                 type = info->types[i - 1];
             else
                 type = VTABLE_get_integer_keyed_int(interp, sig, i - 2) &
                     (PARROT_ARG_TYPE_MASK|PARROT_ARG_CONSTANT);
-            if (i > s) {
+
+            if (i > s)
                 Parrot_io_eprintf(debugger, " ");
-            }
+
             switch (type) {
               case PARROT_ARG_I:
                 Parrot_io_eprintf(debugger, "I%vd=%vd", o, REG_INT(interp, o));
@@ -425,7 +435,8 @@
                 break;
               case PARROT_ARG_PC:
                 Parrot_io_eprintf(debugger, "PC%vd=", o);
-                trace_pmc_dump(interp, PCONST(o)->u.key);
+                trace_pmc_dump(interp, Parrot_pcc_get_pmc_constant(interp,
+                                            CURRENT_CONTEXT(interp), o));
                 break;
               case PARROT_ARG_P:
                 Parrot_io_eprintf(debugger, "P%vd=", o);
@@ -433,10 +444,9 @@
                 break;
               case PARROT_ARG_S:
                 if (REG_STR(interp, o)) {
-                    STRING* const escaped = Parrot_str_escape_truncate(
+                    STRING * const escaped = Parrot_str_escape_truncate(
                                 interp, REG_STR(interp, o), 20);
-                    Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"", o,
-                                escaped);
+                    Parrot_io_eprintf(debugger, "S%vd=\"%Ss\"", o, escaped);
                 }
                 else
                     Parrot_io_eprintf(debugger, "S%vd=\"(null)\"", o);
@@ -456,20 +466,21 @@
 done:
 
     if (interp->code->annotations) {
-        PMC * const annot = PackFile_Annotations_lookup(interp, interp->code->annotations,
-                pc - code_start + 1, NULL);
+        PMC * const annot = PackFile_Annotations_lookup(interp,
+                interp->code->annotations, pc - code_start + 1, NULL);
+
         if (!PMC_IS_NULL(annot)) {
             PMC * const pfile = VTABLE_get_pmc_keyed_str(interp, annot,
                     Parrot_str_new_constant(interp, "file"));
             PMC * const pline = VTABLE_get_pmc_keyed_str(interp, annot,
                     Parrot_str_new_constant(interp, "line"));
+
             if ((!PMC_IS_NULL(pfile)) && (!PMC_IS_NULL(pline))) {
                 /* The debugger interpreter may not be the same as
                  * the main interpreter, extract values from the
-                 * PMC instad of passing them directly
-                 */
+                 * PMC instad of passing them directly */
                 STRING * const file = VTABLE_get_string(interp, pfile);
-                const INTVAL line   = VTABLE_get_integer(interp, pline);
+                const INTVAL   line = VTABLE_get_integer(interp, pline);
                 Parrot_io_eprintf(debugger, " (%Ss:%li)", file, (long)line);
             }
         }
@@ -478,13 +489,13 @@
     Parrot_io_eprintf(debugger, "\n");
 }
 
+
 /*
 
 =item C<void trace_op(PARROT_INTERP, const opcode_t *code_start, const opcode_t
 *code_end, const opcode_t *pc)>
 
-Prints the PC, OP and ARGS. Used by C<runops_trace()>. With bounds
-checking.
+Prints the PC, OP and ARGS. Used by C<runops_trace()>. With bounds checking.
 
 I<Not really part of the API.>
 
@@ -499,16 +510,18 @@
         ARGIN_NULLOK(const opcode_t *pc))
 {
     ASSERT_ARGS(trace_op)
-    if (!pc) {
+
+    if (!pc)
         return;
-    }
 
     if (pc >= code_start && pc < code_end)
         trace_op_dump(interp, code_start, pc);
     else
-        Parrot_io_eprintf(interp, "PC=%ld; OP=<err>\n", (long)(pc - code_start));
+        Parrot_io_eprintf(interp, "PC=%ld; OP=<err>\n",
+        (long)(pc - code_start));
 }
 
+
 /*
 
 =back

Modified: branches/ops_pct/src/scheduler.c
==============================================================================
--- branches/ops_pct/src/scheduler.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/scheduler.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -18,6 +18,7 @@
 
 #include "parrot/parrot.h"
 #include "parrot/scheduler_private.h"
+#include "parrot/runcore_api.h"
 
 #include "pmc/pmc_scheduler.h"
 #include "pmc/pmc_task.h"
@@ -328,7 +329,7 @@
     FLOATVAL duration = VTABLE_get_number_keyed_int(interp, task,
             PARROT_TIMER_INTERVAL);
     if (repeat != 0) {
-        PMC *repeat_task = VTABLE_clone(interp, task);
+        PMC * const repeat_task = VTABLE_clone(interp, task);
         VTABLE_set_number_keyed_int(interp, repeat_task, PARROT_TIMER_NSEC, duration);
 
         if (repeat > 0)
@@ -356,7 +357,7 @@
         ARGIN(PMC *user_data), ARGIN(char *ext_data))
 {
     ASSERT_ARGS(Parrot_cx_schedule_callback)
-    PMC *callback = Parrot_pmc_new(interp, enum_class_Task);
+    PMC * const callback = Parrot_pmc_new(interp, enum_class_Task);
     Parrot_Task_attributes * const task_struct = PARROT_TASK(callback);
 
     task_struct->type    = CONST_STRING(interp, "callback");
@@ -444,7 +445,7 @@
         LOCK(sched_struct->msg_lock);
         /* Search the task index for GC suspend tasks */
         num_tasks = VTABLE_elements(interp, sched_struct->messages);
-        for (index = 0; index < num_tasks; index++) {
+        for (index = 0; index < num_tasks; ++index) {
             PMC *message = VTABLE_get_pmc_keyed_int(interp, sched_struct->messages, index);
             if (!PMC_IS_NULL(message)
             &&   Parrot_str_equal(interp, VTABLE_get_string(interp, message),
@@ -530,11 +531,10 @@
             Parrot_str_equal(interp, handler_type, event_str) ?
                 Hevent :
                 Hunknown;
-        STRING * const handler_name = (htype == Hexception) ?
-            handler_str : (STRING *) NULL;
+        STRING * const handler_name = (htype == Hexception) ? handler_str : (STRING *)NULL;
 
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
+            PMC * const handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 switch (htype) {
                   case Hexception:
@@ -578,7 +578,7 @@
 Parrot_cx_count_handlers_local(PARROT_INTERP, ARGIN(STRING *handler_type))
 {
     ASSERT_ARGS(Parrot_cx_count_handlers_local)
-    PMC *handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
+    PMC * const handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
     INTVAL elements;
 
     if (PMC_IS_NULL(handlers))
@@ -604,20 +604,19 @@
             (Parrot_str_equal(interp, handler_type, event_str)) ?
                 Hevent :
                 Hunknown;
-        STRING * const handler_name = (htype == Hexception) ?
-            handler_str : (STRING *) NULL;
+        STRING * const handler_name = (htype == Hexception) ? handler_str : (STRING *)NULL;
 
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
+            PMC * const handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 switch (htype) {
                   case Hexception:
                     if (VTABLE_isa(interp, handler, handler_name))
-                        count++;
+                        ++count;
                     break;
                   case Hevent:
                     if (handler->vtable->base_type == enum_class_EventHandler)
-                        count++;
+                        ++count;
                     break;
                   default:
                     break;
@@ -644,7 +643,7 @@
 Parrot_cx_add_handler(PARROT_INTERP, ARGIN(PMC *handler))
 {
     ASSERT_ARGS(Parrot_cx_add_handler)
-    STRING *add_handler = CONST_STRING(interp, "add_handler");
+    STRING * const add_handler = CONST_STRING(interp, "add_handler");
     if (!interp->scheduler)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
             "Scheduler was not initialized for this interpreter.\n");
@@ -894,7 +893,7 @@
         keep_context = context;
         /* Loop from newest handler to oldest handler. */
         while (!PMC_IS_NULL(iter) && VTABLE_get_bool(interp, iter)) {
-            PMC *handler = VTABLE_shift_pmc(interp, iter);
+            PMC * const handler = VTABLE_shift_pmc(interp, iter);
 
             if (!PMC_IS_NULL(handler)) {
                 INTVAL valid_handler = 0;
@@ -1070,7 +1069,7 @@
 
     /* Sweep the wait list for completed timers */
     num_tasks = VTABLE_elements(interp, sched_struct->wait_index);
-    for (index = 0; index < num_tasks; index++) {
+    for (index = 0; index < num_tasks; ++index) {
         INTVAL tid = VTABLE_get_integer_keyed_int(interp, sched_struct->wait_index, index);
         if (tid > 0) {
             PMC *task = VTABLE_get_pmc_keyed_int(interp, sched_struct->task_list, tid);

Modified: branches/ops_pct/src/spf_render.c
==============================================================================
--- branches/ops_pct/src/spf_render.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/spf_render.c	Wed May  5 08:45:29 2010	(r46302)
@@ -65,19 +65,19 @@
         FUNC_MODIFIES(*out)
         FUNC_MODIFIES(*info);
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * handle_flags(PARROT_INTERP,
     ARGIN(const SpfInfo *info),
-    ARGMOD(STRING *str),
+    ARGIN(STRING *str),
     INTVAL is_int_type,
     ARGIN_NULLOK(STRING* prefix))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*str);
+        __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* str_append_w_flags(PARROT_INTERP,
+static STRING* str_concat_w_flags(PARROT_INTERP,
     ARGOUT(STRING *dest),
     ARGIN(const SpfInfo *info),
     ARGMOD(STRING *src),
@@ -96,7 +96,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(info) \
     , PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_str_append_w_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_str_concat_w_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(dest) \
     , PARROT_ASSERT_ARG(info) \
@@ -123,9 +123,10 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-handle_flags(PARROT_INTERP, ARGIN(const SpfInfo *info), ARGMOD(STRING *str),
+handle_flags(PARROT_INTERP, ARGIN(const SpfInfo *info), ARGIN(STRING *str),
         INTVAL is_int_type, ARGIN_NULLOK(STRING* prefix))
 {
     ASSERT_ARGS(handle_flags)
@@ -135,52 +136,38 @@
         if (info->flags & FLAG_PREC && info->prec == 0 &&
                 len == 1 &&
                 string_ord(interp, str, 0) == '0') {
-            Parrot_str_chopn_inplace(interp, str, len);
+            str = Parrot_str_chopn(interp, str, len);
             len = 0;
         }
         /* +, space */
         if (!len || string_ord(interp, str, 0) != '-') {
             if (info->flags & FLAG_PLUS) {
                 STRING * const cs = CONST_STRING(interp, "+");
-                str = Parrot_str_concat(interp, cs, str, 0);
-                len++;
+                str = Parrot_str_concat(interp, cs, str);
+                ++len;
             }
             else if (info->flags & FLAG_SPACE) {
                 STRING * const cs = CONST_STRING(interp, " ");
-                str = Parrot_str_concat(interp, cs, str, 0);
-                len++;
+                str = Parrot_str_concat(interp, cs, str);
+                ++len;
             }
         }
 
         /* # 0x ... */
         if ((info->flags & FLAG_SHARP) && prefix) {
-            str = Parrot_str_concat(interp, prefix, str, 0);
+            str = Parrot_str_concat(interp, prefix, str);
             len += Parrot_str_byte_length(interp, prefix);
         }
         /* XXX sharp + fill ??? */
-
-#if 0
-        /* precision - only for floats, which is handled elsewhere */
-        if (info->flags & FLAG_PREC) {
-            info->flags |= FLAG_WIDTH;
-            if (string_ord(interp, str, 0) == '-' ||
-                    string_ord(interp, str, 0) == '+') {
-                info->width = info->prec + 1;
-            }
-            else {
-                info->width = info->prec;
-            }
-        }
-#endif
     }
     else {
         /* string precision */
         if (info->flags & FLAG_PREC && info->prec == 0) {
-            Parrot_str_chopn_inplace(interp, str, len);
+            str = Parrot_str_chopn(interp, str, len);
             len = 0;
         }
         else if (info->flags & FLAG_PREC && info->prec < len) {
-            Parrot_str_chopn_inplace(interp, str, -(INTVAL)(info->prec));
+            str = Parrot_str_chopn(interp, str, -(INTVAL)(info->prec));
             len = info->prec;
         }
     }
@@ -193,7 +180,7 @@
         STRING * const fill = Parrot_str_repeat(interp, filler, info->width - len);
 
         if (info->flags & FLAG_MINUS) { /* left-align */
-            str = Parrot_str_concat(interp, str, fill, 0);
+            str = Parrot_str_concat(interp, str, fill);
         }
         else {                  /* right-align */
             /* signed and zero padded */
@@ -202,14 +189,13 @@
                     string_ord(interp, str, 0) == '+')) {
                 STRING *temp = NULL;
                 STRING *ignored;
-                ignored = Parrot_str_substr(interp, str, 1, len-1, &temp, 0);
-                UNUSED(ignored);
-                Parrot_str_chopn_inplace(interp, str, -1);
-                str = Parrot_str_append(interp, str, fill);
-                str = Parrot_str_append(interp, str, temp);
+                temp = Parrot_str_substr(interp, str, 1, len-1);
+                str = Parrot_str_chopn(interp, str, -1);
+                str = Parrot_str_concat(interp, str, fill);
+                str = Parrot_str_concat(interp, str, temp);
             }
             else {
-                str = Parrot_str_concat(interp, fill, str, 0);
+                str = Parrot_str_concat(interp, fill, str);
             }
         }
     }
@@ -218,7 +204,7 @@
 
 /*
 
-=item C<static STRING* str_append_w_flags(PARROT_INTERP, STRING *dest, const
+=item C<static STRING* str_concat_w_flags(PARROT_INTERP, STRING *dest, const
 SpfInfo *info, STRING *src, STRING *prefix)>
 
 Used by Parrot_sprintf_format.  Prepends supplied prefix for numeric
@@ -232,12 +218,12 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-str_append_w_flags(PARROT_INTERP, ARGOUT(STRING *dest), ARGIN(const SpfInfo *info),
+str_concat_w_flags(PARROT_INTERP, ARGOUT(STRING *dest), ARGIN(const SpfInfo *info),
         ARGMOD(STRING *src), ARGIN_NULLOK(STRING *prefix))
 {
-    ASSERT_ARGS(str_append_w_flags)
+    ASSERT_ARGS(str_concat_w_flags)
     src = handle_flags(interp, info, src, 1, prefix);
-    dest = Parrot_str_append(interp, dest, src);
+    dest = Parrot_str_concat(interp, dest, src);
     return dest;
 }
 
@@ -309,8 +295,8 @@
 
 /*
 
-=item C<STRING * Parrot_sprintf_format(PARROT_INTERP, STRING *pat, SPRINTF_OBJ
-*obj)>
+=item C<STRING * Parrot_sprintf_format(PARROT_INTERP, const STRING *pat,
+SPRINTF_OBJ *obj)>
 
 This is the engine that does all the formatting.
 
@@ -321,14 +307,13 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_sprintf_format(PARROT_INTERP,
-        ARGIN(STRING *pat), ARGIN(SPRINTF_OBJ *obj))
+Parrot_sprintf_format(PARROT_INTERP, ARGIN(const STRING *pat), ARGMOD(SPRINTF_OBJ *obj))
 {
     ASSERT_ARGS(Parrot_sprintf_format)
     INTVAL i;
     INTVAL len     = 0;
     INTVAL old     = 0;
-    INTVAL pat_len = (INTVAL)Parrot_str_byte_length(interp, pat);
+    const INTVAL pat_len = (INTVAL)Parrot_str_byte_length(interp, pat);
     HUGEINTVAL num;
 
     /* start with a buffer; double the pattern length to avoid realloc #1 */
@@ -341,23 +326,21 @@
     STRING *substr = NULL;
     char tc[PARROT_SPRINTF_BUFFER_SIZE];
 
-    for (i = 0; i < pat_len; i++) {
+    for (i = 0; i < pat_len; ++i) {
         if (string_ord(interp, pat, i) == '%') {        /* % */
             if (len) {
-                STRING *ignored
-                    = Parrot_str_substr(interp, pat, old, len, &substr, 1);
-                UNUSED(ignored);
+                substr = Parrot_str_substr(interp, pat, old, len);
                 /* XXX This shouldn't modify targ the pointer */
-                targ = Parrot_str_append(interp, targ, substr);
+                targ = Parrot_str_concat(interp, targ, substr);
             }
             len = 0;
             old = i;
             if (string_ord(interp, pat, i + 1) == '%') {
                 /* skip this one, make next the first char
                  * of literal sequence, starting at old */
-                i++;
-                old++;
-                len++;
+                ++i;
+                ++old;
+                ++len;
                 continue;
             }
             else {
@@ -462,7 +445,7 @@
  *  set flags--the last does all the work.
  */
 
-                for (i++; i < pat_len && info.phase != PHASE_DONE; i++) {
+                for (++i; i < pat_len && info.phase != PHASE_DONE; ++i) {
                     const INTVAL ch = string_ord(interp, pat, i);
 
                     switch (info.phase) {
@@ -602,7 +585,7 @@
                             {
                             STRING * const ts = string_chr(interp,
                                  (UINTVAL)obj->getint(interp, info.type, obj));
-                            targ = str_append_w_flags(interp, targ, &info, ts, NULL);
+                            targ = str_concat_w_flags(interp, targ, &info, ts, NULL);
                             }
                             break;
 
@@ -616,7 +599,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -631,7 +614,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -641,13 +624,13 @@
                             STRING * const prefix = CONST_STRING(interp, "0X");
                             const UHUGEINTVAL theuint =
                                 obj->getuint(interp, info.type, obj);
-                            STRING * const ts =
+                            STRING * ts =
                                 Parrot_str_from_uint(interp, tc, theuint, 16, 0);
-                            Parrot_str_upcase_inplace(interp, ts);
+                            ts = Parrot_str_upcase(interp, ts);
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -662,7 +645,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -677,7 +660,7 @@
 
                             /* unsigned conversion - no plus */
                             info.flags &= ~FLAG_PLUS;
-                            targ        = str_append_w_flags(interp, targ,
+                            targ        = str_concat_w_flags(interp, targ,
                                             &info, ts, prefix);
                             }
                             break;
@@ -716,7 +699,7 @@
 #endif
                                 Parrot_str_free_cstring(tempstr);
                             }
-                            targ = Parrot_str_append(interp, targ, cstr2pstr(tc));
+                            targ = Parrot_str_concat(interp, targ, cstr2pstr(tc));
                             }
                             break;
 
@@ -728,7 +711,7 @@
                             STRING * const ts = Parrot_str_from_uint(interp, tc,
                                        (UHUGEINTVAL) (size_t) ptr, 16, 0);
 
-                            targ = str_append_w_flags(interp, targ, &info,
+                            targ = str_concat_w_flags(interp, targ, &info,
                                     ts, prefix);
                             }
                             break;
@@ -786,7 +769,7 @@
                              || ch == 'e' || ch == 'E') {
                                 const size_t tclen = strlen(tc);
                                 size_t j;
-                                for (j = 0; j < tclen; j++) {
+                                for (j = 0; j < tclen; ++j) {
                                     if ((tc[j] == 'e' || tc[j] == 'E')
                                         && (tc[j+1] == '+' || tc[j+1] == '-')
                                         && tc[j+2] == '0'
@@ -816,7 +799,7 @@
                             }
 #endif /* WIN32 */
 
-                            targ = Parrot_str_append(interp, targ, cstr2pstr(tc));
+                            targ = Parrot_str_concat(interp, targ, cstr2pstr(tc));
                             }
                             break;
 
@@ -834,9 +817,9 @@
                                 STRING * const string = (VTABLE_get_repr(interp, tmp));
                                 STRING * const ts     = handle_flags(interp, &info,
                                                     string, 0, NULL);
-                                obj->index++;
+                                ++obj->index;
 
-                                targ = Parrot_str_append(interp, targ, ts);
+                                targ = Parrot_str_concat(interp, targ, ts);
                                 break;
                             }
 
@@ -849,7 +832,7 @@
                             if (!STRING_IS_NULL(string)) {
                                 STRING * const ts = handle_flags(interp,
                                         &info, string, 0, NULL);
-                                targ = Parrot_str_append(interp, targ, ts);
+                                targ = Parrot_str_concat(interp, targ, ts);
                             }
                             }
                             break;
@@ -858,7 +841,7 @@
                             /* fake the old %P and %S commands */
                             if (info.type == SIZE_PMC
                              || info.type == SIZE_PSTR) {
-                                i--;
+                                --i;
                                 goto CASE_s;
                                 /* case 's' will see the SIZE_PMC or SIZE_PSTR
                                  * and assume it was %Ps (or %Ss).  Genius,
@@ -885,16 +868,15 @@
             }
 
             old = i;
-            i--;
+            --i;
         }
         else {
-            len++;
+            ++len;
         }
     }
     if (len) {
-        STRING *ignored = Parrot_str_substr(interp, pat, old, len, &substr, 1);
-        UNUSED(ignored);
-        targ = Parrot_str_append(interp, targ, substr);
+        substr = Parrot_str_substr(interp, pat, old, len);
+        targ = Parrot_str_concat(interp, targ, substr);
     }
 
     return targ;

Modified: branches/ops_pct/src/spf_vtable.c
==============================================================================
--- branches/ops_pct/src/spf_vtable.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/spf_vtable.c	Wed May  5 08:45:29 2010	(r46302)
@@ -450,10 +450,10 @@
             ((PMC *)obj->data),
             (obj->index));
 
-    obj->index++;
+    ++obj->index;
     s = VTABLE_get_string(interp, tmp);
     /* XXX Parrot_str_copy like below? + adjusting bufused */
-    return Parrot_str_substr(interp, s, 0, 1, NULL, 0);
+    return Parrot_str_substr(interp, s, 0, 1);
 }
 
 /*
@@ -473,13 +473,12 @@
 getint_pmc(PARROT_INTERP, INTVAL size, ARGIN(SPRINTF_OBJ *obj))
 {
     ASSERT_ARGS(getint_pmc)
-    HUGEINTVAL ret;
+
     PMC * const tmp = VTABLE_get_pmc_keyed_int(interp,
             ((PMC *)obj->data),
-            (obj->index));
+            (obj->index++));
 
-    obj->index++;
-    ret = VTABLE_get_integer(interp, tmp);
+    HUGEINTVAL ret  = VTABLE_get_integer(interp, tmp);
 
     switch (size) {
       case SIZE_SHORT:
@@ -513,13 +512,12 @@
 getuint_pmc(PARROT_INTERP, INTVAL size, ARGIN(SPRINTF_OBJ *obj))
 {
     ASSERT_ARGS(getuint_pmc)
-    UHUGEINTVAL ret;
+
     PMC * const tmp = VTABLE_get_pmc_keyed_int(interp,
             ((PMC *)obj->data),
-            (obj->index));
+            (obj->index++));
 
-    obj->index++;
-    ret = (UINTVAL)VTABLE_get_integer(interp, tmp);
+    UHUGEINTVAL ret = (UINTVAL)VTABLE_get_integer(interp, tmp);
 
     switch (size) {
       case SIZE_SHORT:
@@ -553,13 +551,11 @@
 getfloat_pmc(PARROT_INTERP, INTVAL size, ARGIN(SPRINTF_OBJ *obj))
 {
     ASSERT_ARGS(getfloat_pmc)
-    HUGEFLOATVAL ret;
-    PMC * const tmp = VTABLE_get_pmc_keyed_int(interp,
+    PMC * const tmp  = VTABLE_get_pmc_keyed_int(interp,
             ((PMC *)obj->data),
-            (obj->index));
+            (obj->index++));
 
-    obj->index++;
-    ret = (HUGEFLOATVAL)(VTABLE_get_number(interp, tmp));
+    HUGEFLOATVAL ret = (HUGEFLOATVAL)(VTABLE_get_number(interp, tmp));
 
     switch (size) {
     case SIZE_SHORT:
@@ -591,14 +587,13 @@
 getstring_pmc(PARROT_INTERP, SHIM(INTVAL size), ARGIN(SPRINTF_OBJ *obj))
 {
     ASSERT_ARGS(getstring_pmc)
-    STRING *s;
+
     PMC * const tmp = VTABLE_get_pmc_keyed_int(interp,
             ((PMC *)obj->data),
-            (obj->index));
+            (obj->index++));
 
-    obj->index++;
-    s = (STRING *)(VTABLE_get_string(interp, tmp));
-    return s;
+    STRING * const str = (STRING *)(VTABLE_get_string(interp, tmp));
+    return str;
 }
 
 /*
@@ -619,11 +614,9 @@
 {
     ASSERT_ARGS(getptr_pmc)
     PMC * const tmp = VTABLE_get_pmc_keyed_int(interp,
-            ((PMC *)obj->data), (obj->index));
+            ((PMC *)obj->data), (obj->index++));
     const INTVAL i  = VTABLE_get_integer(interp, tmp);
 
-    obj->index++;
-
     /* XXX correct? */
     return (void *)i;
 }

Modified: branches/ops_pct/src/string/api.c
==============================================================================
--- branches/ops_pct/src/string/api.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/api.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -28,10 +28,12 @@
 #include "api.str"
 
 /* for parrot/interpreter.h */
+#if PARROT_CATCH_NULL
 STRING *STRINGNULL;
+#endif
 
 #define nonnull_encoding_name(s) (s) ? (s)->encoding->name : "null string"
-#define saneify_string(s) \
+#define ASSERT_STRING_SANITY(s) \
     PARROT_ASSERT((s)->encoding); \
     PARROT_ASSERT((s)->charset); \
     PARROT_ASSERT(!PObj_on_free_list_TEST(s))
@@ -41,16 +43,8 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void make_writable(PARROT_INTERP,
-    ARGMOD(STRING **s),
-    const size_t len,
-    parrot_string_representation_t representation)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
 PARROT_INLINE
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
 static const CHARSET * string_rep_compatible(SHIM_INTERP,
     ARGIN(const STRING *a),
@@ -61,9 +55,6 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*e);
 
-#define ASSERT_ARGS_make_writable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_rep_compatible __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(a) \
     , PARROT_ASSERT_ARG(b) \
@@ -82,185 +73,13 @@
 */
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL
 Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_is_null)
-    return !s || s == STRINGNULL;
-}
-
-
-/*
-
-=item C<INTVAL STRING_is_null(PARROT_INTERP, const STRING *s)>
-
-Tests if the given STRING is STRINGNULL.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-INTVAL
-STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
-{
-    ASSERT_ARGS(STRING_is_null)
-    return !s || s == STRINGNULL;
-}
-
-
-/*
-
-=item C<void Parrot_str_write_COW(PARROT_INTERP, STRING *s)>
-
-If the specified Parrot string is copy-on-write then the memory is
-copied over and the copy-on-write flag is cleared.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_write_COW(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_write_COW)
-
-    /* COW_FLAG | constant_FLAG | external_FLAG) */
-    if (PObj_is_cowed_TESTALL(s)) {
-        STRING for_alloc;
-
-        /* Create new pool data for this header to use,
-         * independent of the original COW data */
-        PObj_constant_CLEAR(s);
-
-        /* constant may have been marked */
-        PObj_live_CLEAR(s);
-
-        /*
-         * allocate a dummy strings memory
-         * buflen might be bigger and used, so pass this length
-         * also be sure not to allocate from the constant pool
-         */
-        PObj_flags_CLEARALL(&for_alloc);
-        Parrot_gc_allocate_string_storage(interp, &for_alloc, Buffer_buflen(s));
-
-        /* now copy memory over */
-        mem_sys_memcopy(for_alloc.strstart, s->strstart, s->bufused);
-
-        /* and finally use that string memory */
-
-        Buffer_bufstart(s) = Buffer_bufstart(&for_alloc);
-        s->strstart      = for_alloc.strstart;
-        Buffer_buflen(s)   = Buffer_buflen(&for_alloc);
-
-        /* COW_FLAG | external_FLAG */
-        PObj_is_external_CLEARALL(s);
-    }
-
-    s->hashval = 0;
-}
-
-/*
-
-=item C<STRING * Parrot_str_new_COW(PARROT_INTERP, STRING *s)>
-
-Creates a copy-on-write string, cloning a string header without
-allocating a new buffer.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING *
-Parrot_str_new_COW(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_new_COW)
-    STRING *d;
-
-    if (PObj_constant_TEST(s)) {
-        d = Parrot_gc_new_string_header(interp,
-            PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        /* we can't move the memory, because constants aren't
-         * scanned in compact_pool, therefore the other end
-         * would point to garbage.
-         */
-        PObj_constant_CLEAR(d);
-        PObj_external_SET(d);
-    }
-    else {
-        d = Parrot_gc_new_string_header(interp, PObj_get_FLAGS(s));
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_sysmem_CLEAR(d);
-    }
-    return d;
-}
-
-/*
-
-=item C<STRING * Parrot_str_reuse_COW(PARROT_INTERP, STRING *s, STRING *d)>
-
-Creates a copy-on-write string by cloning a string header without
-allocating a new buffer. Doesn't allocate a new string header, instead
-using the one passed in and returns it.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_reuse_COW(SHIM_INTERP, ARGMOD(STRING *s), ARGOUT(STRING *d))
-{
-    ASSERT_ARGS(Parrot_str_reuse_COW)
-
-    if (PObj_constant_TEST(s)) {
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_constant_CLEAR(d);
-        PObj_external_SET(d);
-    }
-    else {
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_sysmem_CLEAR(d);
-    }
-    return d;
-}
-
-/*
-
-=item C<STRING * Parrot_str_set(PARROT_INTERP, STRING *dest, STRING *src)>
-
-Makes the contents of first Parrot string a copy of the contents of
-second.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_set(PARROT_INTERP, ARGIN_NULLOK(STRING *dest), ARGMOD(STRING *src))
-{
-    ASSERT_ARGS(Parrot_str_set)
-    if (dest == src)
-        return dest;
-    if (dest) { /* && dest != src */
-        /* they are different, dest is not an external string */
-        dest = Parrot_str_reuse_COW(interp, src, dest);
-    }
-    else
-        dest = Parrot_str_new_COW(interp, src);
-    return dest;
+    return STRING_IS_NULL(s);
 }
 
 
@@ -292,15 +111,16 @@
     const size_t n_parrot_cstrings =
         sizeof (parrot_cstrings) / sizeof (parrot_cstrings[0]);
 
-    if (interp->parent_interpreter) {
+    if (interp->parent_interpreter)
         interp->hash_seed = interp->parent_interpreter->hash_seed;
-    }
+
     /* interp is initialized from zeroed memory, so this is fine */
     else if (interp->hash_seed == 0) {
         /* TT #64 - use an entropy source once available */
         Parrot_srand(Parrot_intval_time());
         interp->hash_seed = Parrot_uint_rand(0);
     }
+
     /* initialize the constant string table */
     if (interp->parent_interpreter) {
         interp->const_cstring_table =
@@ -315,10 +135,12 @@
     interp->const_cstring_hash  = const_cstring_hash;
     Parrot_charsets_encodings_init(interp);
 
+#if PARROT_CATCH_NULL
     /* initialize STRINGNULL, but not in the constant table */
     STRINGNULL = Parrot_str_new_init(interp, NULL, 0,
                        PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
                        PObj_constant_FLAG);
+#endif
 
     interp->const_cstring_table =
         mem_gc_allocate_n_zeroed_typed(interp, n_parrot_cstrings, STRING *);
@@ -337,6 +159,7 @@
     }
 }
 
+
 /*
 
 =item C<void Parrot_str_finish(PARROT_INTERP)>
@@ -352,6 +175,7 @@
 Parrot_str_finish(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_str_finish)
+
     /* all are shared between interpreters */
     if (!interp->parent_interpreter) {
         mem_internal_free(interp->const_cstring_table);
@@ -361,28 +185,6 @@
     }
 }
 
-/*
-
-=item C<UINTVAL string_capacity(PARROT_INTERP, const STRING *s)>
-
-Returns the capacity of the specified Parrot string in bytes, that
-is how many bytes can be appended onto strstart.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-UINTVAL
-string_capacity(SHIM_INTERP, ARGIN(const STRING *s))
-{
-    ASSERT_ARGS(string_capacity)
-
-    return ((ptrcast_t)Buffer_bufstart(s) + Buffer_buflen(s) -
-            (ptrcast_t)s->strstart);
-}
 
 /*
 
@@ -418,6 +220,7 @@
     return s;
 }
 
+
 /*
 
 =item C<static const CHARSET * string_rep_compatible(PARROT_INTERP, const STRING
@@ -428,20 +231,21 @@
   ascii <op> utf8 => utf8
                   => ascii, B<if> C<STRING *b> has ascii chars only.
 
-Returs NULL, if no compatible string representation can be found.
+Returns NULL, if no compatible string representation can be found.
 
 =cut
 
 */
 
 PARROT_INLINE
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CAN_RETURN_NULL
 static const CHARSET *
 string_rep_compatible(SHIM_INTERP,
     ARGIN(const STRING *a), ARGIN(const STRING *b), ARGOUT(const ENCODING **e))
 {
     ASSERT_ARGS(string_rep_compatible)
+
     if (a->encoding == b->encoding && a->charset == b->charset) {
         *e = a->encoding;
         return a->charset;
@@ -449,7 +253,7 @@
 
     /* a table could possibly simplify the logic */
     if (a->encoding == Parrot_utf8_encoding_ptr
-    &&  b->charset == Parrot_ascii_charset_ptr) {
+    &&  b->charset  == Parrot_ascii_charset_ptr) {
         if (a->strlen == a->bufused) {
             *e = Parrot_fixed_8_encoding_ptr;
             return b->charset;
@@ -459,7 +263,7 @@
     }
 
     if (b->encoding == Parrot_utf8_encoding_ptr
-    &&  a->charset == Parrot_ascii_charset_ptr) {
+    &&  a->charset  == Parrot_ascii_charset_ptr) {
         if (b->strlen == b->bufused) {
             *e = Parrot_fixed_8_encoding_ptr;
             return a->charset;
@@ -493,14 +297,47 @@
 
 /*
 
-=item C<STRING * Parrot_str_concat(PARROT_INTERP, STRING *a, STRING *b, UINTVAL
-Uflags)>
+=item C<STRING* Parrot_str_clone(PARROT_INTERP, const STRING *s)>
 
-Concatenates two Parrot strings. If necessary, converts the second
-string's encoding and/or type to match those of the first string. If
-either string is C<NULL>, then a copy of the non-C<NULL> string is
-returned. If both strings are C<NULL>, then a new zero-length string is
-created and returned.
+Helper function to clone string.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING*
+Parrot_str_clone(PARROT_INTERP, ARGIN(const STRING *s))
+{
+    ASSERT_ARGS(Parrot_str_clone)
+
+    const size_t alloc_size = s->bufused;
+    STRING * const result = Parrot_gc_new_string_header(interp, 0);
+
+    /* Copy encoding/charset/etc */
+    STRUCT_COPY(result, s);
+
+    /* Clear COW flag. We own buffer */
+    PObj_get_FLAGS(result)  = PObj_is_string_FLAG
+                            | PObj_is_COWable_FLAG
+                            | PObj_live_FLAG;
+
+    /* Allocate new chunk of memory */
+    Parrot_gc_allocate_string_storage(interp, result, alloc_size);
+
+    /* and copy it over */
+    mem_sys_memcopy(result->strstart, s->strstart, alloc_size);
+
+    return result;
+}
+
+
+/*
+
+=item C<STRING * Parrot_str_copy(PARROT_INTERP, const STRING *s)>
+
+Creates and returns a shallow copy of the specified Parrot string.
 
 =cut
 
@@ -508,50 +345,58 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING *
-Parrot_str_concat(PARROT_INTERP, ARGIN_NULLOK(STRING *a),
-            ARGIN_NULLOK(STRING *b), UINTVAL Uflags)
+Parrot_str_copy(PARROT_INTERP, ARGIN(const STRING *s))
 {
-    ASSERT_ARGS(Parrot_str_concat)
-    if (a && a->strlen) {
-        if (b && b->strlen) {
-            STRING *result = Parrot_str_copy(interp, a);
-            Parrot_str_write_COW(interp, result);
-            return Parrot_str_append(interp, result, b);
-        }
+    ASSERT_ARGS(Parrot_str_copy)
+    STRING *d;
+    const int is_movable = PObj_is_movable_TESTALL(s);
 
-        return Parrot_str_copy(interp, a);
+    /* We set COW flag to avoid cloning buffer in compact_pool */
+
+    d = Parrot_gc_new_string_header(interp,
+        PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
+    STRUCT_COPY(d, s);
+
+    /* Now check that buffer allocated from pool and affected by compacting */
+    if (is_movable) {
+        /* If so, mark it as shared */
+        INTVAL * const buffer_flags = Buffer_bufrefcountptr(d);
+        *buffer_flags |= Buffer_shared_FLAG;
     }
 
-    return b
-        ? Parrot_str_copy(interp, b)
-        : string_make(interp, NULL, 0, NULL, Uflags);
+    PARROT_ASSERT(is_movable == PObj_is_movable_TESTALL(d));
+
+    return d;
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_append(PARROT_INTERP, STRING *a, STRING *b)>
+=item C<STRING * Parrot_str_concat(PARROT_INTERP, STRING *a, STRING *b)>
 
-Take in two Parrot strings and append the second to the first.  NOTE THAT
-RETURN VALUE MAY NOT BE THE FIRST STRING, if the first string is COW'd or
-read-only.  So make sure to _use_ the return value.
+Concatenates two Parrot strings. If necessary, converts the second
+string's encoding and/or type to match those of the first string. If
+either string is C<NULL>, then a copy of the non-C<NULL> string is
+returned. If both strings are C<NULL>, then a new zero-length string is
+created and returned.
 
 =cut
 
 */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_append(PARROT_INTERP, ARGMOD_NULLOK(STRING *a), ARGIN_NULLOK(STRING *b))
+Parrot_str_concat(PARROT_INTERP, ARGIN_NULLOK(STRING *a),
+            ARGIN_NULLOK(STRING *b))
 {
-    ASSERT_ARGS(Parrot_str_append)
-    UINTVAL a_capacity;
-    UINTVAL total_length;
-    const CHARSET *cs;
-    const ENCODING *enc;
+    ASSERT_ARGS(Parrot_str_concat)
+    const CHARSET   *cs;
+    const ENCODING  *enc;
+    STRING          *dest;
+    UINTVAL          total_length;
 
     /* XXX should this be a CHARSET method? */
 
@@ -561,16 +406,11 @@
         return a;
 
     /* Is A real? */
-    if (a == NULL || Buffer_bufstart(a) == NULL)
-        return Parrot_str_copy(interp, b);
-
-    saneify_string(a);
-    saneify_string(b);
+    if (STRING_IS_NULL(a) || Buffer_bufstart(a) == NULL)
+        return b;
 
-    /* If the destination's constant, or external then just fall back to
-       Parrot_str_concat */
-    if (PObj_is_cowed_TESTALL(a))
-        return Parrot_str_concat(interp, a, b, 0);
+    ASSERT_STRING_SANITY(a);
+    ASSERT_STRING_SANITY(b);
 
     cs = string_rep_compatible(interp, a, b, &enc);
 
@@ -584,46 +424,45 @@
            ||  b->encoding == Parrot_utf16_encoding_ptr
            ||  a->encoding == Parrot_ucs2_encoding_ptr
            ||  b->encoding == Parrot_ucs2_encoding_ptr)
-              ? Parrot_utf16_encoding_ptr
-              : Parrot_utf8_encoding_ptr;
+            ? Parrot_utf16_encoding_ptr
+            : Parrot_utf8_encoding_ptr;
 
-        Parrot_unicode_charset_ptr->to_charset(interp, a, NULL);
-        b = Parrot_unicode_charset_ptr->to_charset(interp, b,
-                Parrot_gc_new_string_header(interp, 0));
+        a = Parrot_unicode_charset_ptr->to_charset(interp, a);
+        b = Parrot_unicode_charset_ptr->to_charset(interp, b);
 
         if (a->encoding != enc)
-            enc->to_encoding(interp, a, NULL);
+            a = enc->to_encoding(interp, a);
         if (b->encoding != enc)
-            enc->to_encoding(interp, b, NULL);
+            b = enc->to_encoding(interp, b);
     }
 
     /* calc usable and total bytes */
-    a_capacity   = string_capacity(interp, a);
     total_length = a->bufused + b->bufused;
 
-    /* make sure A's big enough for both  */
-    if (total_length > a_capacity)
-        Parrot_gc_reallocate_string_storage(interp, a, total_length << 1);
+    dest = Parrot_str_new_noinit(interp, enum_stringrep_one, total_length);
+    dest->encoding = a->encoding;
+    dest->charset  = a->charset;
 
-    /* A is now ready to receive the contents of B */
+    /* Copy A first */
+    mem_sys_memcopy(dest->strstart, a->strstart, a->bufused);
 
     /* Tack B on the end of A */
-    mem_sys_memcopy((void *)((ptrcast_t)a->strstart + a->bufused),
+    mem_sys_memcopy((void *)((ptrcast_t)dest->strstart + a->bufused),
             b->strstart, b->bufused);
 
-    a->bufused += b->bufused;
-    a->strlen  += b_len;
-    a->hashval  = 0;
+    dest->bufused = a->bufused + b->bufused;
+    dest->strlen  = a->strlen + b_len;
 
-    return a;
+    return dest;
 }
 
+
 /*
 
-=item C<STRING * Parrot_str_new(PARROT_INTERP, const char * const buffer, const
-UINTVAL len)>
+=item C<STRING * Parrot_str_new(PARROT_INTERP, const char *buffer, const UINTVAL
+len)>
 
-Make a Parrot string from a specified C string.
+Makes a Parrot string from a specified C string.
 
 =cut
 
@@ -634,14 +473,14 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_new(PARROT_INTERP, ARGIN_NULLOK(const char * const buffer), const UINTVAL len)
+Parrot_str_new(PARROT_INTERP, ARGIN_NULLOK(const char *buffer), const UINTVAL len)
 {
     ASSERT_ARGS(Parrot_str_new)
-    return Parrot_str_new_init(interp, buffer, len ? len :
-            buffer ? strlen(buffer) : 0,
-                              PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
-                              0); /* Force an 8-bit encoding at some
-                                     point? */
+    /* Force an 8-bit encoding at some point? */
+    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);
 }
 
 
@@ -650,9 +489,10 @@
 =item C<STRING * Parrot_str_new_from_buffer(PARROT_INTERP, Buffer *buffer, const
 UINTVAL len)>
 
-Make a Parrot string from a Buffer.
+Makes a Parrot string from a Buffer.
 
-The Buffer is nulled afterwards - only one PObj can point at a given string pool object.
+The Buffer is nulled afterwards, as only one PObj can point at a given string
+pool object.
 
 =cut
 
@@ -666,23 +506,23 @@
 Parrot_str_new_from_buffer(PARROT_INTERP, ARGMOD(Buffer *buffer), const UINTVAL len)
 {
     ASSERT_ARGS(Parrot_str_new_from_buffer)
-    STRING *result;
 
-    result = Parrot_gc_new_string_header(interp, 0);
+    STRING * const result   = Parrot_gc_new_string_header(interp, 0);
     Buffer_bufstart(result) = Buffer_bufstart(buffer);
     Buffer_buflen(result)   = Buffer_buflen(buffer);
-    result->strstart        = (char *) Buffer_bufstart(result);
+    result->strstart        = (char *)Buffer_bufstart(result);
     result->bufused         = len;
     result->strlen          = len;
     result->encoding        = Parrot_fixed_8_encoding_ptr;
     result->charset         = Parrot_binary_charset_ptr;
 
-    Buffer_bufstart(buffer) = NULL;
     Buffer_buflen(buffer)   = 0;
+    Buffer_bufstart(buffer) = NULL;
 
     return result;
 }
 
+
 /*
 
 =item C<const char* string_primary_encoding_for_representation(PARROT_INTERP,
@@ -713,6 +553,7 @@
         "invalid string representation");
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_new_constant(PARROT_INTERP, const char *buffer)>
@@ -731,10 +572,9 @@
 {
     ASSERT_ARGS(Parrot_str_new_constant)
     DECL_CONST_CAST;
-    STRING *s;
     Hash   * const cstring_cache = (Hash *)interp->const_cstring_hash;
-
-    s = (STRING *)parrot_hash_get(interp, cstring_cache, buffer);
+    STRING *s                    = (STRING *)parrot_hash_get(interp,
+                                        cstring_cache, buffer);
 
     if (s)
         return s;
@@ -788,18 +628,17 @@
     ASSERT_ARGS(string_make)
     const CHARSET *charset;
 
-    if (!charset_name)
-        charset_name = "ascii";
-
-    charset = Parrot_find_charset(interp, charset_name);
-
-    if (!charset)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-            "Can't make '%s' charset strings", charset_name);
+    if (charset_name) {
+        charset = Parrot_find_charset(interp, charset_name);
+        if (!charset)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+                "Can't make '%s' charset strings", charset_name);
+    }
+    else
+        charset = Parrot_get_charset(interp, 0);
 
     return Parrot_str_new_init(interp, buffer, len,
         charset->preferred_encoding, charset, flags);
-
 }
 
 
@@ -889,7 +728,7 @@
         if (encoding == Parrot_fixed_8_encoding_ptr)
             s->strlen = len;
         else
-            Parrot_str_length(interp, s);
+            s->strlen = CHARSET_CODEPOINTS(interp, s);
 
         return s;
     }
@@ -902,37 +741,11 @@
         if (encoding == Parrot_fixed_8_encoding_ptr)
             s->strlen = len;
         else
-            Parrot_str_length(interp, s);
+            s->strlen = CHARSET_CODEPOINTS(interp, s);
     }
-    else {
+    else
         s->strlen = s->bufused = 0;
-    }
-
-    return s;
-}
-
-
-/*
-
-=item C<STRING * Parrot_str_resize(PARROT_INTERP, STRING *s, UINTVAL addlen)>
 
-Grows the Parrot string's buffer by the specified number of characters.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_resize(PARROT_INTERP, ARGMOD(STRING *s), UINTVAL addlen)
-{
-    ASSERT_ARGS(Parrot_str_resize)
-    Parrot_str_write_COW(interp, s);
-
-    /* Don't check buflen, if we are here, we already checked. */
-    Parrot_gc_reallocate_string_storage(interp,
-        s, Buffer_buflen(s) + string_max_bytes(interp, s, addlen));
     return s;
 }
 
@@ -960,7 +773,7 @@
 {
     ASSERT_ARGS(Parrot_str_byte_length)
 
-    return s ? s->strlen : 0;
+    return STRING_IS_NULL(s) ? 0 : s->strlen;
 }
 
 
@@ -985,7 +798,7 @@
 Parrot_str_indexed(PARROT_INTERP, ARGIN(const STRING *s), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_str_indexed)
-    saneify_string(s);
+    ASSERT_STRING_SANITY(s);
     return (INTVAL)CHARSET_GET_CODEPOINT(interp, s, idx);
 }
 
@@ -1010,9 +823,7 @@
         ARGIN(const STRING *s2), INTVAL start)
 {
     ASSERT_ARGS(Parrot_str_find_index)
-    STRING *src, *search;
     UINTVAL len;
-    DECL_CONST_CAST;
 
     if (start < 0)
         return -1;
@@ -1027,11 +838,13 @@
 
     if (!Parrot_str_byte_length(interp, s2))
         return -1;
+    else {
+        DECL_CONST_CAST;
+        STRING *src    = PARROT_const_cast(STRING *, s);
+        STRING *search = PARROT_const_cast(STRING *, s2);
 
-    src    = PARROT_const_cast(STRING *, s);
-    search = PARROT_const_cast(STRING *, s2);
-
-    return CHARSET_INDEX(interp, src, search, (UINTVAL)start);
+        return CHARSET_INDEX(interp, src, search, (UINTVAL)start);
+    }
 }
 
 
@@ -1049,12 +862,17 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-string_ord(PARROT_INTERP, ARGIN_NULLOK(const STRING *s), INTVAL idx)
+string_ord(PARROT_INTERP, ARGIN(const STRING *s), INTVAL idx)
 {
     ASSERT_ARGS(string_ord)
-    const UINTVAL len        = s ? Parrot_str_byte_length(interp, s) : 0;
+    UINTVAL len;
     UINTVAL       true_index = (UINTVAL)idx;
 
+    if (STRING_IS_NULL(s))
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ORD_OUT_OF_STRING,
+            "Cannot get character of NULL string");
+
+    len = Parrot_str_byte_length(interp, s);
     if (len == 0)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ORD_OUT_OF_STRING,
             "Cannot get character of empty string");
@@ -1111,34 +929,13 @@
 
 /*
 
-=item C<STRING * Parrot_str_copy(PARROT_INTERP, STRING *s)>
-
-Creates and returns a copy of the specified Parrot string.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING *
-Parrot_str_copy(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_copy)
-    return Parrot_str_new_COW(interp, s);
-}
-
-
-/*
-
 =back
 
 =head2 Vtable Dispatch Functions
 
 =over 4
 
-=item C<INTVAL Parrot_str_length(PARROT_INTERP, STRING *s)>
+=item C<INTVAL Parrot_str_length(PARROT_INTERP, const STRING *s)>
 
 Calculates and returns the number of characters in the specified Parrot string.
 
@@ -1147,13 +944,12 @@
 */
 
 PARROT_EXPORT
-PARROT_IGNORABLE_RESULT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
-Parrot_str_length(PARROT_INTERP, ARGMOD(STRING *s))
+Parrot_str_length(SHIM_INTERP, ARGIN(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_length)
 
-    s->strlen = CHARSET_CODEPOINTS(interp, s);
     return s->strlen;
 }
 
@@ -1171,6 +967,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 INTVAL
 string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
 {
@@ -1179,6 +976,7 @@
     return ENCODING_MAX_BYTES_PER_CODEPOINT(interp, s) * nchars;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_repeat(PARROT_INTERP, const STRING *s, UINTVAL num)>
@@ -1204,26 +1002,26 @@
         UINTVAL i;
         char *             destpos = dest->strstart;
         const char * const srcpos  = s->strstart;
-        for (i = 0; i < num; i++) {
+        for (i = 0; i < num; ++i) {
             mem_sys_memcopy(destpos, srcpos, length);
             destpos += length;
         }
 
+        dest->strlen  = s->strlen  * num;
         dest->bufused = s->bufused * num;
-        dest->strlen  = s->strlen * num;
     }
 
     return dest;
 }
 
+
 /*
 
-=item C<STRING * Parrot_str_substr(PARROT_INTERP, STRING *src, INTVAL offset,
-INTVAL length, STRING **d, int replace_dest)>
+=item C<STRING * Parrot_str_substr(PARROT_INTERP, const STRING *src, INTVAL
+offset, INTVAL length)>
 
-Copies the substring of length C<length> from C<offset> from the specified
-Parrot string and stores it in C<**d>, allocating memory if necessary. The
-substring is also returned.
+Returns substring of length C<length> from C<offset> from the specified
+Parrot string.
 
 =cut
 
@@ -1234,66 +1032,45 @@
 PARROT_WARN_UNUSED_RESULT
 STRING *
 Parrot_str_substr(PARROT_INTERP,
-        ARGIN_NULLOK(STRING *src), INTVAL offset, INTVAL length,
-        ARGOUT_NULLOK(STRING **d), int replace_dest)
+        ARGIN_NULLOK(const STRING *src), INTVAL offset, INTVAL length)
 {
     ASSERT_ARGS(Parrot_str_substr)
-    if (src == NULL)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
-            "Cannot substr on a null string");
-    else {
-        STRING *dest;
-        UINTVAL true_length;
-        UINTVAL true_offset = (UINTVAL)offset;
-
-        saneify_string(src);
-
-        /* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
-        if (offset == (INTVAL)Parrot_str_byte_length(interp, src) || length < 1)
-            return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
-        if (offset < 0)
-            true_offset = (UINTVAL)(src->strlen + offset);
+    UINTVAL true_length;
+    UINTVAL true_offset = (UINTVAL)offset;
 
-        /* 0 based... */
-        if (src->strlen == 0 || true_offset > src->strlen - 1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
-                "Cannot take substr outside string");
+    if (STRING_IS_NULL(src))
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING, "Cannot substr on a null string");
 
-        true_length = (UINTVAL)length;
-        if (true_length > (src->strlen - true_offset))
-            true_length = (UINTVAL)(src->strlen - true_offset);
+    ASSERT_STRING_SANITY(src);
 
-        /* do in-place i.e. reuse existing header if one */
-        if (replace_dest && d && *d) {
-            PARROT_ASSERT(src->encoding == Parrot_fixed_8_encoding_ptr);
-            dest           = *d;
+    /* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
+    if (offset == (INTVAL)Parrot_str_byte_length(interp, src) || length < 1)
+        return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
-            dest->encoding = src->encoding;
-            dest->charset  = src->charset;
+    if (offset < 0)
+        true_offset = (UINTVAL)(src->strlen + offset);
 
-            dest->strstart = (char *)src->strstart + true_offset;
-            dest->bufused  = true_length;
+    /* 0 based... */
+    if (src->strlen == 0 || true_offset > src->strlen - 1)
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING,
+            "Cannot take substr outside string");
 
-            dest->strlen   = true_length;
-            dest->hashval  = 0;
-        }
-        else
-            dest = CHARSET_GET_CODEPOINTS(interp, src, true_offset,
-                    true_length);
+    true_length = (UINTVAL)length;
 
-        if (d)
-            *d = dest;
+    if (true_length > (src->strlen - true_offset))
+        true_length = (UINTVAL)(src->strlen - true_offset);
 
-        return dest;
-    }
+    return CHARSET_GET_CODEPOINTS(interp, src, true_offset, true_length);
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_replace(PARROT_INTERP, STRING *src, INTVAL offset,
-INTVAL length, STRING *rep, STRING **d)>
+=item C<STRING * Parrot_str_replace(PARROT_INTERP, const STRING *src, INTVAL
+offset, INTVAL length, const STRING *rep)>
 
 Replaces a sequence of C<length> characters from C<offset> in the first
 Parrot string with the second Parrot string, returning what was
@@ -1317,35 +1094,25 @@
 
 PARROT_EXPORT
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING *
-Parrot_str_replace(PARROT_INTERP, ARGIN(STRING *src),
-    INTVAL offset, INTVAL length, ARGIN(STRING *rep), ARGOUT_NULLOK(STRING **d))
+Parrot_str_replace(PARROT_INTERP, ARGIN(const STRING *src),
+    INTVAL offset, INTVAL length, ARGIN(const STRING *rep))
 {
     ASSERT_ARGS(Parrot_str_replace)
-    UINTVAL         start_byte, end_byte;
-    INTVAL          diff;
     String_iter     iter;
-
     const CHARSET  *cs;
     const ENCODING *enc;
     STRING         *dest        = NULL;
     UINTVAL         true_offset = (UINTVAL)offset;
     UINTVAL         true_length = (UINTVAL)length;
 
-    /* special case */
-    if (d             == NULL
-    &&  src->encoding == Parrot_fixed_8_encoding_ptr
-    &&  rep->encoding == Parrot_fixed_8_encoding_ptr
-    &&  offset        >= 0
-    &&  true_offset   <  src->strlen
-    &&  length        == 1
-    &&  rep->strlen   == 1) {
-        if (PObj_is_cowed_TESTALL(src))
-            Parrot_str_write_COW(interp, src);
-
-        ((char *)src->strstart)[offset] = ((char *)rep->strstart)[0];
+    UINTVAL         start_byte, end_byte;
+    INTVAL          buf_size;
 
-        return NULL;
+    if (STRING_IS_NULL(src)) {
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
+            "Can't replace in NULL string");
     }
 
     /* abs(-offset) may not be > strlen-1 */
@@ -1357,29 +1124,22 @@
      * Only give exception if caller trys to replace end of string + 2
      */
     if (true_offset > src->strlen)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING,
             "Can only replace inside string or index after end of string");
 
     if (true_length > (src->strlen - true_offset))
         true_length = (UINTVAL)(src->strlen - true_offset);
 
-    /* Save the substring that is replaced for the return value */
-    if (d) {
-        dest = CHARSET_GET_CODEPOINTS(interp, src, true_offset, true_length);
-        *d = dest;
-    }
-
     /* may have different reps..... */
     cs = string_rep_compatible(interp, src, rep, &enc);
 
     if (!cs) {
-        Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
-        rep = Parrot_utf16_encoding_ptr->to_encoding(interp, rep,
-                Parrot_gc_new_string_header(interp, 0));
-    }
-    else {
-        src->charset  = cs;
-        src->encoding = enc;
+        src = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
+        rep = Parrot_utf16_encoding_ptr->to_encoding(interp, rep);
+        /* Remember selected charset and encoding */
+        enc = src->encoding;
+        cs  = src->charset;
     }
 
     /* get byte position of the part that will be replaced */
@@ -1393,65 +1153,54 @@
 
     /* not possible.... */
     if (end_byte < start_byte)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING,
             "replace: subend somehow is less than substart");
 
     /* Now do the replacement */
+    dest = Parrot_gc_new_string_header(interp, 0);
 
-    /*
-     * If the replacement string fits inside the original substring
-     * don't create a new string, just pack it.
-     */
-    diff = (end_byte - start_byte) - rep->bufused;
-
-    if (diff >= 0
-    || ((INTVAL)src->bufused - (INTVAL)Buffer_buflen(src)) <= diff) {
-        Parrot_str_write_COW(interp, src);
-
-        if (diff != 0) {
-            mem_sys_memmove((char *)src->strstart + start_byte + rep->bufused,
-                    (char *)src->strstart + end_byte,
-                    src->bufused - end_byte);
-            src->bufused -= diff;
-        }
-
-        mem_sys_memcopy((char *)src->strstart + start_byte,
-                rep->strstart, rep->bufused);
+    /* Set encoding and charset to compatible */
+    dest->encoding = enc;
+    dest->charset  = cs;
+
+    /* Clear COW flag. We own buffer */
+    PObj_get_FLAGS(dest) = PObj_is_string_FLAG
+                         | PObj_is_COWable_FLAG
+                         | PObj_live_FLAG;
+
+            /* size            removed bytes            added bytes */
+    buf_size = src->bufused - (end_byte - start_byte) + rep->bufused;
+
+    /* Alloctate new string size. */
+    Parrot_gc_allocate_string_storage(interp, dest, buf_size);
+    dest->bufused = buf_size;
+
+    /* Copy begin of string */
+    mem_sys_memcopy(dest->strstart, src->strstart, start_byte);
+
+    /* Copy the replacement in */
+    mem_sys_memcopy((char *)dest->strstart + start_byte, rep->strstart,
+            rep->bufused);
+
+    /* Copy the end of old string */
+    mem_sys_memcopy((char *)dest->strstart + start_byte + rep->bufused,
+            (char *)src->strstart + end_byte,
+            src->bufused - end_byte);
 
-        if (diff)
-            (void)Parrot_str_length(interp, src);
-    }
-
-    /* Replacement is larger than avail buffer, grow the string */
-    else {
-        /* diff is negative here, make it positive */
-        diff = -(diff);
-        Parrot_str_resize(interp, src, (UINTVAL)diff);
-
-        /* Move the end of old string that isn't replaced to new offset first */
-        mem_sys_memmove((char *)src->strstart + end_byte + diff,
-                (char *)src->strstart + end_byte,
-                src->bufused - end_byte);
-
-        /* Copy the replacement in */
-        mem_sys_memcopy((char *)src->strstart + start_byte, rep->strstart,
-                rep->bufused);
-        src->bufused += diff;
-        (void)Parrot_str_length(interp, src);
-    }
+    dest->strlen  = CHARSET_CODEPOINTS(interp, dest);
+    dest->hashval = 0;
 
-    /* src is modified, now return the original substring */
     return dest;
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_chopn(PARROT_INTERP, STRING *s, INTVAL n)>
+=item C<STRING * Parrot_str_chopn(PARROT_INTERP, const STRING *s, INTVAL n)>
 
-Removes the last C<n> characters of the specified Parrot string. If C<n> is
-negative, cuts the string after C<+n> characters. The returned string is a copy
-of the one passed in.
+Removes the last C<n> characters of the specified Parrot string and returns the
+modified string. If C<n> is negative, cuts the string after C<+n> characters.
 
 =cut
 
@@ -1460,71 +1209,50 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_chopn(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
+Parrot_str_chopn(PARROT_INTERP, ARGIN(const STRING *s), INTVAL n)
 {
     ASSERT_ARGS(Parrot_str_chopn)
-    STRING * const chopped = Parrot_str_copy(interp, s);
-    Parrot_str_chopn_inplace(interp, chopped, n);
-    return chopped;
-}
-
 
-/*
-
-=item C<void Parrot_str_chopn_inplace(PARROT_INTERP, STRING *s, INTVAL n)>
-
-Removes the last C<n> characters of the specified Parrot string. If C<n> is
-negative, cuts the string after C<+n> characters. The string passed in is
-modified and returned.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_chopn_inplace(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
-{
-    ASSERT_ARGS(Parrot_str_chopn_inplace)
+    STRING * const chopped = Parrot_str_copy(interp, s);
     UINTVAL new_length, uchar_size;
 
     if (n < 0) {
         new_length = -n;
-        if (new_length > s->strlen)
-            return;
+        if (new_length > chopped->strlen)
+            return chopped;
     }
     else {
-        if (s->strlen > (UINTVAL)n)
-            new_length = s->strlen - n;
+        if (chopped->strlen > (UINTVAL)n)
+            new_length = chopped->strlen - n;
         else
             new_length = 0;
     }
 
-    s->hashval = 0;
+    chopped->hashval = 0;
 
-    if (!new_length || !s->strlen) {
-        s->bufused = s->strlen = 0;
-        return;
+    if (!new_length || !chopped->strlen) {
+        chopped->bufused = chopped->strlen = 0;
+        return chopped;
     }
 
-    uchar_size = s->bufused / s->strlen;
-    s->strlen  = new_length;
+    uchar_size      = chopped->bufused / chopped->strlen;
+    chopped->strlen = new_length;
 
-    if (s->encoding == Parrot_fixed_8_encoding_ptr) {
-        s->bufused = new_length;
+    if (chopped->encoding == Parrot_fixed_8_encoding_ptr) {
+        chopped->bufused = new_length;
     }
-    else if (s->encoding == Parrot_ucs2_encoding_ptr) {
-        s->bufused = new_length * uchar_size;
+    else if (chopped->encoding == Parrot_ucs2_encoding_ptr) {
+        chopped->bufused = new_length * uchar_size;
     }
     else {
         String_iter iter;
 
         ENCODING_ITER_INIT(interp, s, &iter);
         iter.set_position(interp, &iter, new_length);
-        s->bufused = iter.bytepos;
+        chopped->bufused = iter.bytepos;
     }
 
-    return;
+    return chopped;
 }
 
 
@@ -1548,14 +1276,14 @@
 Parrot_str_compare(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1), ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_compare)
-    if (!s2)
+    if (STRING_IS_NULL(s2))
         return s1 && (s1->strlen != 0);
 
-    if (!s1)
+    if (STRING_IS_NULL(s1))
         return -(s2->strlen != 0);
 
-    saneify_string(s1);
-    saneify_string(s2);
+    ASSERT_STRING_SANITY(s1);
+    ASSERT_STRING_SANITY(s2);
 
     return CHARSET_COMPARE(interp, s1, s2);
 }
@@ -1582,6 +1310,7 @@
     return !Parrot_str_equal(interp, s1, s2);
 }
 
+
 /*
 
 =item C<INTVAL Parrot_str_equal(PARROT_INTERP, const STRING *s1, const STRING
@@ -1602,73 +1331,44 @@
 Parrot_str_equal(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1), ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_equal)
-    if ((s1 == s2) || (!s1 && !s2)) {
+
+    if ((s1 == s2) || (STRING_IS_NULL(s1) && STRING_IS_NULL(s2)))
         return 1;
-    }
-    else if (!s2) {
+    else if (STRING_IS_NULL(s2))
         return s1->strlen == 0;
-    }
-    else if (!s1) {
+    else if (STRING_IS_NULL(s1))
         return s2->strlen == 0;
-    }
-    else if (s1->strlen != s2->strlen) {
-        return 0;       /* we don't care which is bigger */
-    }
-    else if (s1->hashval != s2->hashval && s1->hashval && s2->hashval) {
+
+   /* we don't care which is bigger */
+    else if (s1->strlen != s2->strlen)
         return 0;
-    }
-    else if (!s1->strlen) {   /* s2->strlen is the same here */
+    else if ((s1->hashval != s2->hashval) && s1->hashval && s2->hashval)
+        return 0;
+
+    /* s2->strlen is the same here */
+    else if (s1->strlen == 0)
         return 1;
-    }
+
     /* COWed strings */
-    else if (s1->strstart == s2->strstart && s1->bufused == s2->bufused) {
+    else if ((s1->strstart == s2->strstart) && (s1->bufused == s2->bufused))
         return 1;
-    }
 
     /*
      * now,
      * both strings are non-null
      * both strings have same length
      */
-    return !CHARSET_COMPARE(interp, s1, s2);
-}
-
-
-/*
-
-=item C<static void make_writable(PARROT_INTERP, STRING **s, const size_t len,
-parrot_string_representation_t representation)>
-
-Makes the specified Parrot string writable with minimum length C<len>.  The
-C<representation> argument is required in case a new Parrot string has to be
-created.
-
-=cut
-
-*/
-
-static void
-make_writable(PARROT_INTERP, ARGMOD(STRING **s),
-    const size_t len, parrot_string_representation_t representation)
-{
-    ASSERT_ARGS(make_writable)
-    if (!*s)
-        *s = Parrot_str_new_noinit(interp, representation, len);
-    else if ((*s)->strlen < len)
-        Parrot_str_resize(interp, *s, (UINTVAL)(len - (*s)->strlen));
-    else if (PObj_is_cowed_TESTALL(*s))
-        Parrot_str_write_COW(interp, *s);
+    return CHARSET_COMPARE(interp, s1, s2) == 0;
 }
 
 
 /*
 
 =item C<STRING * Parrot_str_bitwise_and(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
-Performs a bitwise C<AND> on two Parrot string, performing type and encoding
-conversions if necessary. If the second string is not C<NULL> then it is
-reused.  Otherwise a new Parrot string is created.
+Performs a bitwise C<AND> on two Parrot strings, performing type and encoding
+conversions if necessary. Returns the result as a new string.
 
 =cut
 
@@ -1678,7 +1378,7 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_bitwise_and(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1),
-        ARGIN_NULLOK(const STRING *s2), ARGOUT_NULLOK(STRING **dest))
+        ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_bitwise_and)
     STRING *res;
@@ -1696,21 +1396,15 @@
             nonnull_encoding_name(s1), s2->encoding->name);
 
     /* think about case of dest string is one of the operands */
-    if (s1 && s2)
+    if (!STRING_IS_NULL(s1) && !STRING_IS_NULL(s2))
         minlen = s1->strlen > s2->strlen ? s2->strlen : s1->strlen;
     else
         minlen = 0;
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, minlen,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, minlen,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
-    if (!s1 || !s2) {
+    if (STRING_IS_NULL(s1) || STRING_IS_NULL(s2)) {
         res->bufused = 0;
         res->strlen  = 0;
 
@@ -1723,8 +1417,6 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, minlen, enum_stringrep_one);
-
     { /* bitwise AND the strings */
         const Parrot_UInt1 *curr1 = (Parrot_UInt1 *)s1->strstart;
         const Parrot_UInt1 *curr2 = (Parrot_UInt1 *)s2->strstart;
@@ -1737,12 +1429,10 @@
 
     res->bufused = res->strlen = minlen;
 
-    if (dest)
-        *dest = res;
-
     return res;
 }
 
+
 #define BITWISE_XOR_STRINGS(type1, type2, restype, s1, s2, res, maxlen) \
 do { \
     const type1 *curr1   = NULL; \
@@ -1752,11 +1442,11 @@
     restype     *dp; \
     size_t       _index; \
  \
-    if (s1) { \
+    if (!STRING_IS_NULL(s1)) { \
         curr1   = (type1 *)(s1)->strstart; \
         length1 = (s1)->strlen; \
     } \
-    if (s2) { \
+    if (!STRING_IS_NULL(s2)) { \
         curr2   = (type2 *)(s2)->strstart; \
         length2 = (s2)->strlen; \
     } \
@@ -1787,11 +1477,11 @@
     restype     *dp; \
     size_t       _index; \
  \
-    if (s1) { \
+    if (!STRING_IS_NULL(s1)) { \
         curr1   = (type1 *)(s1)->strstart; \
         length1 = (s1)->strlen; \
     } \
-    if (s2) { \
+    if (!STRING_IS_NULL(s2)) { \
         curr2   = (type2 *)(s2)->strstart; \
         length2 = (s2)->strlen; \
     } \
@@ -1816,11 +1506,10 @@
 /*
 
 =item C<STRING * Parrot_str_bitwise_or(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
 Performs a bitwise C<OR> on two Parrot strings, performing type and encoding
-conversions if necessary. If the third string is not C<NULL>, then it is
-reused.  Otherwise a new Parrot string is created.
+conversions if necessary.  Returns the result as a new string.
 
 =cut
 
@@ -1830,24 +1519,26 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_bitwise_or(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1),
-        ARGIN_NULLOK(const STRING *s2), ARGOUT_NULLOK(STRING **dest))
+        ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_bitwise_or)
     STRING *res;
     size_t  maxlen = 0;
 
-    if (s1) {
+    if (!STRING_IS_NULL(s1)) {
         if (s1->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_or (%s/%s) unsupported",
                 s1->encoding->name, nonnull_encoding_name(s2));
 
         maxlen = s1->bufused;
     }
 
-    if (s2) {
+    if (!STRING_IS_NULL(s2)) {
         if (s2->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_or (%s/%s) unsupported",
                 nonnull_encoding_name(s1), s2->encoding->name);
 
@@ -1855,14 +1546,8 @@
             maxlen = s2->bufused;
     }
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, maxlen,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, maxlen,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
     if (!maxlen) {
         res->bufused = 0;
@@ -1876,15 +1561,10 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, maxlen, enum_stringrep_one);
-
     BITWISE_OR_STRINGS(Parrot_UInt1, Parrot_UInt1, Parrot_UInt1,
             s1, s2, res, maxlen);
     res->bufused = res->strlen = maxlen;
 
-    if (dest)
-        *dest = res;
-
     return res;
 }
 
@@ -1892,11 +1572,10 @@
 /*
 
 =item C<STRING * Parrot_str_bitwise_xor(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
 Performs a bitwise C<XOR> on two Parrot strings, performing type and encoding
-conversions if necessary. If the second string is not C<NULL>, then it is
-reused.  Otherwise a new Parrot string is created.
+conversions if necessary.  Returns the result as a new string.
 
 =cut
 
@@ -1906,24 +1585,26 @@
 PARROT_CANNOT_RETURN_NULL
 STRING *
 Parrot_str_bitwise_xor(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1),
-        ARGIN_NULLOK(const STRING *s2), ARGOUT_NULLOK(STRING **dest))
+        ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_bitwise_xor)
     STRING *res;
     size_t  maxlen = 0;
 
-    if (s1) {
+    if (!STRING_IS_NULL(s1)) {
         if (s1->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_xor (%s/%s) unsupported",
                 s1->encoding->name, nonnull_encoding_name(s2));
 
         maxlen = s1->bufused;
     }
 
-    if (s2) {
+    if (!STRING_IS_NULL(s2)) {
         if (s2->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_xor (%s/%s) unsupported",
                 nonnull_encoding_name(s1), s2->encoding->name);
 
@@ -1931,14 +1612,8 @@
             maxlen = s2->bufused;
     }
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, maxlen,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, maxlen,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
     if (!maxlen) {
         res->bufused = 0;
@@ -1952,22 +1627,17 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, maxlen, enum_stringrep_one);
-
     BITWISE_XOR_STRINGS(Parrot_UInt1, Parrot_UInt1, Parrot_UInt1,
             s1, s2, res, maxlen);
     res->bufused = res->strlen = maxlen;
 
-    if (dest)
-        *dest = res;
-
     return res;
 }
 
 
 #define BITWISE_NOT_STRING(type, s, res) \
 do { \
-    if ((s) && (res)) { \
+    if (!STRING_IS_NULL(s) && !STRING_IS_NULL(res)) { \
         const type   *curr   = (type *)(s)->strstart; \
         size_t        length = (s)->strlen; \
         Parrot_UInt1 *dp     = (Parrot_UInt1 *)(res)->strstart; \
@@ -1977,13 +1647,13 @@
     } \
 } while (0)
 
+
 /*
 
-=item C<STRING * Parrot_str_bitwise_not(PARROT_INTERP, const STRING *s, STRING
-**dest)>
+=item C<STRING * Parrot_str_bitwise_not(PARROT_INTERP, const STRING *s)>
 
-Performs a bitwise C<NOT> on a Parrot string. If the second string is
-not C<NULL> then it is reused, otherwise a new Parrot string is created.
+Performs a bitwise C<NOT> on a Parrot string.  Returns the result as a new
+string.
 
 =cut
 
@@ -1992,16 +1662,16 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_bitwise_not(PARROT_INTERP, ARGIN_NULLOK(const STRING *s),
-    ARGOUT_NULLOK(STRING **dest))
+Parrot_str_bitwise_not(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_bitwise_not)
     STRING *res;
     size_t  len;
 
-    if (s) {
+    if (!STRING_IS_NULL(s)) {
         if (s->encoding != Parrot_fixed_8_encoding_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_ENCODING,
                 "string bitwise_not (%s/%s) unsupported",
                 s->encoding->name, s->encoding->name);
 
@@ -2010,14 +1680,8 @@
     else
         len = 0;
 
-    if (dest && *dest) {
-        res           = *dest;
-        res->encoding = Parrot_fixed_8_encoding_ptr;
-        res->charset  = Parrot_binary_charset_ptr;
-    }
-    else
-        res = Parrot_str_new_init(interp, NULL, len,
-                Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
+    res = Parrot_str_new_init(interp, NULL, len,
+            Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0);
 
     if (!len) {
         res->bufused = 0;
@@ -2031,13 +1695,9 @@
         Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 #endif
 
-    make_writable(interp, &res, len, enum_stringrep_one);
-
     res->strlen = res->bufused = len;
 
     BITWISE_NOT_STRING(Parrot_UInt1, s, res);
-    if (dest)
-        *dest = res;
 
     return res;
 }
@@ -2060,7 +1720,7 @@
 Parrot_str_boolean(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_boolean)
-    const INTVAL len = s ? Parrot_str_byte_length(interp, s) : 0;
+    const INTVAL len = !STRING_IS_NULL(s) ? Parrot_str_byte_length(interp, s) : 0;
 
     if (len == 0)
         return 0;
@@ -2106,12 +1766,15 @@
     return output;
 }
 
+
 /*
+
 State of FSM during number value parsing.
 
 Integer uses only parse_start, parse_before_dot and parse_end.
 
 */
+
 typedef enum number_parse_state {
     parse_start,
     parse_before_dot,
@@ -2151,13 +1814,13 @@
 Parrot_str_to_int(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_int)
-    if (s == NULL)
+    if (STRING_IS_NULL(s))
         return 0;
-    {
-        const INTVAL        max_safe  = PARROT_INTVAL_MAX / 10;
-        const INTVAL        last_dig  = PARROT_INTVAL_MAX % 10;
+    else {
+        const UINTVAL       max_safe  = -(UINTVAL)PARROT_INTVAL_MIN / 10;
+        const UINTVAL       last_dig  = (-(UINTVAL)PARROT_INTVAL_MIN) % 10;
         int                 sign      = 1;
-        INTVAL              i         = 0;
+        UINTVAL             i         = 0;
         String_iter         iter;
         UINTVAL             offs;
         number_parse_state  state = parse_start;
@@ -2173,12 +1836,13 @@
             switch (state) {
               case parse_start:
                 if (isdigit((unsigned char)c)) {
-                    const INTVAL nextval = c - '0';
+                    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);
+                        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 == '-') {
@@ -2196,12 +1860,13 @@
 
               case parse_before_dot:
                 if (isdigit((unsigned char)c)) {
-                    const INTVAL nextval = c - '0';
+                    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);
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_ERR_OVERFLOW,
+                            "Integer value of String '%S' too big", s);
                 }
                 else
                     state = parse_end;
@@ -2213,12 +1878,15 @@
             }
         }
 
-        i *= sign;
-
-        return i;
+        if (sign == 1 && i > (UINTVAL)PARROT_INTVAL_MAX)
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                    EXCEPTION_ERR_OVERFLOW,
+                    "Integer value of String '%S' too big", s);
+        return sign == -1 ? -i : i;
     }
 }
 
+
 /*
 
 =item C<FLOATVAL Parrot_str_to_num(PARROT_INTERP, const STRING *s)>
@@ -2253,7 +1921,7 @@
     UINTVAL     offs;
     number_parse_state state = parse_start;
 
-    if (!s)
+    if (STRING_IS_NULL(s))
         return 0.0;
 
     ENCODING_ITER_INIT(interp, s, &iter);
@@ -2326,7 +1994,7 @@
                 d = d*10 + (c-'0');
                 if (d >= max_safe)
                     d_is_safe = 0;
-                d_length++;
+                ++d_length;
             }
             else if (c == 'e' || c == 'E')
                 state = parse_after_e;
@@ -2364,16 +2032,16 @@
     }
 
     /* Support for non-canonical NaN and Inf */
-    /* charpos <=2 because for "-i" iter will be advanced to next char already */
+    /* charpos <= 2 because for "-i" iter already advanced to next char */
     if (check_nan && (iter.charpos <= 2)) {
         STRING *t = Parrot_str_upcase(interp, s);
         if (Parrot_str_equal(interp, t, CONST_STRING(interp, "NAN")))
             return PARROT_FLOATVAL_NAN_QUIET;
         else if (Parrot_str_equal(interp, t, CONST_STRING(interp, "INF"))
-                || Parrot_str_equal(interp, t, CONST_STRING(interp, "INFINITY")))
+             ||  Parrot_str_equal(interp, t, CONST_STRING(interp, "INFINITY")))
             return PARROT_FLOATVAL_INF_POSITIVE;
         else if (Parrot_str_equal(interp, t, CONST_STRING(interp, "-INF"))
-                || Parrot_str_equal(interp, t, CONST_STRING(interp, "-INFINITY")))
+             ||  Parrot_str_equal(interp, t, CONST_STRING(interp, "-INFINITY")))
             return PARROT_FLOATVAL_INF_NEGATIVE;
         else
             return 0.0;
@@ -2457,8 +2125,8 @@
 =item C<char * Parrot_str_to_cstring(PARROT_INTERP, const STRING *s)>
 
 Returns a C string for the specified Parrot string. Use
-C<Parrot_str_free_cstring()> to free the string. Failure to do this will result in
-a memory leak.
+C<Parrot_str_free_cstring()> to free the string. Failure to do this will result
+in a memory leak.
 
 =cut
 
@@ -2471,12 +2139,13 @@
 Parrot_str_to_cstring(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_cstring)
-    if (! s) {
+
+    if (STRING_IS_NULL(s)) {
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't convert NULL string");
     }
-    else
-      return string_to_cstring_nullable(interp, s);
+
+    return string_to_cstring_nullable(interp, s);
 }
 
 
@@ -2485,8 +2154,9 @@
 =item C<char * string_to_cstring_nullable(PARROT_INTERP, const STRING *s)>
 
 Returns a C string for the specified Parrot string. Use
-C<Parrot_str_free_cstring()> to free the string. Failure to do this will result in
-a memory leak.
+C<Parrot_str_free_cstring()> to free the string, if it's not NULL. Failure to
+do this will result in a memory leak.  Failure to check if the return value is
+NULL will result in embarrassment for you.
 
 =cut
 
@@ -2499,7 +2169,7 @@
 string_to_cstring_nullable(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(string_to_cstring_nullable)
-    if (!s)
+    if (STRING_IS_NULL(s))
         return NULL;
     else {
         char * const p = (char*)mem_internal_allocate(s->bufused + 1);
@@ -2525,7 +2195,7 @@
 
 PARROT_EXPORT
 void
-Parrot_str_free_cstring(ARGIN_NULLOK(char *p))
+Parrot_str_free_cstring(ARGFREE(char *p))
 {
     ASSERT_ARGS(Parrot_str_free_cstring)
     mem_internal_free((void *)p);
@@ -2544,24 +2214,15 @@
 
 PARROT_EXPORT
 void
-Parrot_str_pin(PARROT_INTERP, ARGMOD(STRING *s))
+Parrot_str_pin(SHIM_INTERP, ARGMOD(STRING *s))
 {
     ASSERT_ARGS(Parrot_str_pin)
-    char  *memory;
-    size_t size;
-
-    /* XXX -lt: COW strings have the external_FLAG set, so this will
-     *          not work for these
-     *          so probably only sysmem should be tested
-     */
-    Parrot_str_write_COW(interp, s);
-
-    size   = Buffer_buflen(s);
-    memory = (char *)mem_internal_allocate(size);
+    size_t size   = Buffer_buflen(s);
+    char  *memory = (char *)mem_internal_allocate(size);
 
     mem_sys_memcopy(memory, Buffer_bufstart(s), size);
     Buffer_bufstart(s) = memory;
-    s->strstart      = memory;
+    s->strstart        = memory;
 
     /* Mark the memory as both from the system and immobile */
     PObj_sysmem_SET(s);
@@ -2587,12 +2248,10 @@
     size_t size;
 
     /* If this string is not marked using system memory,
-     * we just don't do this
-     */
+     * we just don't do this */
     if (!PObj_sysmem_TEST(s))
         return;
 
-    Parrot_str_write_COW(interp, s);
     size = Buffer_buflen(s);
 
     /* We need a handle on the fixed memory so we can get rid of it later */
@@ -2638,18 +2297,22 @@
     UINTVAL     offs;
     size_t      hashval = interp->hash_seed;
 
-    if (!s)
+    if (STRING_IS_NULL(s) || !s->strlen)
         return hashval;
 
-    /* ZZZZZ workaround for something not setting up encodings right */
-    saneify_string(s);
+    if (s->encoding->hash)
+        hashval = ENCODING_HASH(interp, s, hashval);
+    else {
+        /* ZZZZZ workaround for something not setting up encodings right */
+        ASSERT_STRING_SANITY(s);
 
-    ENCODING_ITER_INIT(interp, s, &iter);
+        ENCODING_ITER_INIT(interp, s, &iter);
 
-    for (offs = 0; offs < s->strlen; ++offs) {
-        const UINTVAL c = iter.get_and_advance(interp, &iter);
-        hashval += hashval << 5;
-        hashval += c;
+        for (offs = 0; offs < s->strlen; ++offs) {
+            const UINTVAL c = iter.get_and_advance(interp, &iter);
+            hashval += hashval << 5;
+            hashval += c;
+        }
     }
 
     s->hashval = hashval;
@@ -2706,8 +2369,8 @@
     String_iter iter;
     unsigned char *dp;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     len = src->strlen;
 
@@ -2793,7 +2456,7 @@
         else
             hex = Parrot_sprintf_c(interp, "\\u%04x", c);
 
-        result = Parrot_str_append(interp, result, hex);
+        result = Parrot_str_concat(interp, result, hex);
 
         /* adjust our insert idx */
         i += hex->strlen;
@@ -2900,8 +2563,8 @@
         if (d == offs) {
             /* we did it in place - no action */
             ++d;
-            iter.bytepos++;
-            iter.charpos++;
+            ++(iter.bytepos);
+            ++(iter.charpos);
             continue;
         }
 
@@ -2913,9 +2576,9 @@
     result->strlen  = d;
     result->bufused = iter.bytepos;
 
-    /* this also validates the string */
+    /* Force validating the string */
     if (encoding != result->encoding)
-        Parrot_str_length(interp, result);
+        result->strlen = CHARSET_CODEPOINTS(interp, result);
 
     if (!CHARSET_VALIDATE(interp, result))
         Parrot_ex_throw_from_c_args(interp, NULL,
@@ -2943,41 +2606,13 @@
 Parrot_str_upcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_upcase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't upcase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_upcase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_upcase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to upper case.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_upcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_upcase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't upcase NULL string");
-    }
     else {
-        Parrot_str_write_COW(interp, s);
-        CHARSET_UPCASE(interp, s);
+        STRING * const res = CHARSET_UPCASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3000,47 +2635,14 @@
 Parrot_str_downcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_downcase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't downcase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_downcase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_downcase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to lower case.
-
-=cut
-
-*/
 
-PARROT_EXPORT
-void
-Parrot_str_downcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_downcase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't downcase NULL string");
-    }
     else {
-        /*
-         * TODO get rid of all the inplace variants. We have for utf8:
-         * * 1 Parrot_str_copy from the non-incase variant
-         * * conversion to utf16, with doubling the buffer
-         * * possibly one more reallocation in downcase
-         */
-        Parrot_str_write_COW(interp, s);
-        CHARSET_DOWNCASE(interp, s);
+        STRING * const res = CHARSET_DOWNCASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3063,41 +2665,14 @@
 Parrot_str_titlecase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_titlecase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't titlecase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_titlecase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_titlecase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to title case.
-
-=cut
 
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_titlecase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_titlecase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't titlecase NULL string");
-    }
     else {
-        Parrot_str_write_COW(interp, s);
-        CHARSET_TITLECASE(interp, s);
+        STRING * const res = CHARSET_TITLECASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3141,7 +2716,7 @@
 
 /*
 
-=item C<const char * Parrot_string_cstring(PARROT_INTERP, const STRING *str)>
+=item C<const char * Parrot_str_cstring(PARROT_INTERP, const STRING *str)>
 
 Returns a C string from a Parrot string.  Both sides are treated
 as constants -- i.e. do not resize the result.
@@ -3154,10 +2729,10 @@
 PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 const char *
-Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
+Parrot_str_cstring(SHIM_INTERP, ARGIN(const STRING *str))
 {
-    ASSERT_ARGS(Parrot_string_cstring)
-    /* TODO handle NUL and friends */
+    ASSERT_ARGS(Parrot_str_cstring)
+    /* TODO handle NULL and friends */
     return str->strstart;
 }
 
@@ -3182,6 +2757,7 @@
         ARGIN(const STRING *s), UINTVAL offset)
 {
     ASSERT_ARGS(Parrot_str_is_cclass)
+
     if (!Parrot_str_byte_length(interp, s))
         return 0;
 
@@ -3191,8 +2767,8 @@
 
 /*
 
-=item C<INTVAL Parrot_str_find_cclass(PARROT_INTERP, INTVAL flags, STRING *s,
-UINTVAL offset, UINTVAL count)>
+=item C<INTVAL Parrot_str_find_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*s, UINTVAL offset, UINTVAL count)>
 
 Finds the first occurrence of the given character class in C<flags> in the
 string, and returns its glyph-wise index.
@@ -3204,20 +2780,22 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-Parrot_str_find_cclass(PARROT_INTERP, INTVAL flags, ARGIN_NULLOK(STRING *s),
+Parrot_str_find_cclass(PARROT_INTERP, INTVAL flags, ARGIN_NULLOK(const STRING *s),
                           UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(Parrot_str_find_cclass)
-    if (!s)
+
+    if (STRING_IS_NULL(s))
         return -1;
 
     return CHARSET_FIND_CCLASS(interp, flags, s, offset, count);
 }
 
+
 /*
 
-=item C<INTVAL Parrot_str_find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
-*s, UINTVAL offset, UINTVAL count)>
+=item C<INTVAL Parrot_str_find_not_cclass(PARROT_INTERP, INTVAL flags, const
+STRING *s, UINTVAL offset, UINTVAL count)>
 
 Finds the first occurrence of the a character I<not> in the given character
 class in C<flags> in the string starting from C<offset> and looking at C<count>
@@ -3232,10 +2810,11 @@
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_str_find_not_cclass(PARROT_INTERP, INTVAL flags,
-    ARGIN_NULLOK(STRING *s), UINTVAL offset, UINTVAL count)
+    ARGIN_NULLOK(const STRING *s), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(Parrot_str_find_not_cclass)
-    if (!s)
+
+    if (STRING_IS_NULL(s))
         return -1;
 
     return CHARSET_FIND_NOT_CCLASS(interp, flags, s, offset, count);
@@ -3245,10 +2824,10 @@
 /*
 
 =item C<STRING* Parrot_str_change_charset(PARROT_INTERP, STRING *src, INTVAL
-charset_nr, STRING *dest)>
+charset_nr)>
 
-If C<dest> == NULL, converts C<src> to the given charset or encoding inplace.
-Otherwise returns a copy of C<src> with the charset/encoding in C<dest>.
+Converts C<src> to the given charset or encoding and returns the result as a
+new string.
 
 =cut
 
@@ -3259,13 +2838,13 @@
 PARROT_CAN_RETURN_NULL
 STRING*
 Parrot_str_change_charset(PARROT_INTERP, ARGMOD_NULLOK(STRING *src),
-        INTVAL charset_nr, ARGOUT_NULLOK(STRING *dest))
+        INTVAL charset_nr)
 {
     ASSERT_ARGS(Parrot_str_change_charset)
     const CHARSET *new_charset;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     new_charset = Parrot_get_charset(interp, charset_nr);
 
@@ -3273,41 +2852,20 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
                 "charset #%d not found", (int) charset_nr);
 
-    /*
-     * dest is an empty string header or NULL, if an inplace
-     * operation is desired
-     */
-    if (dest) {
-        if (new_charset == src->charset) {
-            dest          = Parrot_str_reuse_COW(interp, src, dest);
-            dest->charset = new_charset;
-            /* keep encoding */
-            return dest;
-        }
-
-        dest->charset  = new_charset;
-
-        /* get prefered encoding for charset */
-        dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
-    }
-    else {
-        if (new_charset == src->charset)
-            return src;
-
-        Parrot_str_write_COW(interp, src);
-    }
+    if (new_charset == src->charset)
+        return src;
 
-    return new_charset->to_charset(interp, src, dest);
+    return new_charset->to_charset(interp, src);
 }
 
 
 /*
 
 =item C<STRING* Parrot_str_change_encoding(PARROT_INTERP, STRING *src, INTVAL
-encoding_nr, STRING *dest)>
+encoding_nr)>
 
-If C<dest> == NULL, converts C<src> to the given charset or encoding in place.
-Otherwise returns a copy of C<src> with the charset/encoding in C<dest>
+Converts C<src> to the given charset or encoding and returns the result as a
+new string.
 
 =cut
 
@@ -3317,14 +2875,14 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING*
-Parrot_str_change_encoding(PARROT_INTERP, ARGIN_NULLOK(STRING *src),
-        INTVAL encoding_nr, ARGOUT_NULLOK(STRING *dest))
+Parrot_str_change_encoding(PARROT_INTERP, ARGMOD_NULLOK(STRING *src),
+        INTVAL encoding_nr)
 {
     ASSERT_ARGS(Parrot_str_change_encoding)
     const ENCODING *new_encoding;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     new_encoding = Parrot_get_encoding(interp, encoding_nr);
 
@@ -3332,31 +2890,16 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
             "encoding #%d not found", (int) encoding_nr);
 
-    /*
-     * dest is an empty string header or NULL, if an inplace
-     * operation is desired
-     */
-    if (dest) {
-        dest->encoding = new_encoding;
-        if (new_encoding == src->encoding) {
-            dest = Parrot_str_reuse_COW(interp, src, dest);
-            return dest;
-        }
-    }
-    else {
-        if (new_encoding == src->encoding)
-            return src;
-
-        Parrot_str_write_COW(interp, src);
-    }
+    if (new_encoding == src->encoding)
+        return src;
 
-    return new_encoding->to_encoding(interp, src, dest);
+    return new_encoding->to_encoding(interp, src);
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_compose(PARROT_INTERP, STRING *src)>
+=item C<STRING * Parrot_str_compose(PARROT_INTERP, const STRING *src)>
 
 Normalizes the string.
 
@@ -3368,10 +2911,11 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING *
-Parrot_str_compose(PARROT_INTERP, ARGIN_NULLOK(STRING *src))
+Parrot_str_compose(PARROT_INTERP, ARGIN_NULLOK(const STRING *src))
 {
     ASSERT_ARGS(Parrot_str_compose)
-    if (!src)
+
+    if (STRING_IS_NULL(src))
         return NULL;
 
     if (!src->strlen)
@@ -3399,24 +2943,105 @@
 Parrot_str_join(PARROT_INTERP, ARGIN_NULLOK(STRING *j), ARGIN(PMC *ar))
 {
     ASSERT_ARGS(Parrot_str_join)
-    STRING *res;
-    STRING *s;
-    const int ar_len = VTABLE_elements(interp, ar);
-    int i;
+    STRING  **chunks;
+    STRING   *res;
+    STRING   *s;
+    char     *pos;
+    const int ar_len       = VTABLE_elements(interp, ar);
+    int       total_length = 0;
+    int       transcoded   = 0;
+    int       i;
 
     if (ar_len == 0)
         return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
-    s   = VTABLE_get_string_keyed_int(interp, ar, 0);
-    res = s ? Parrot_str_copy(interp, s) : NULL;
+    if (STRING_IS_NULL(j))
+        j = Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
+
+    chunks = (STRING **)Parrot_gc_allocate_fixed_size_storage(interp,
+        ar_len * sizeof (STRING *));
+
+    for (i = 0; i < ar_len; ++i) {
+        STRING *next = VTABLE_get_string_keyed_int(interp, ar, i);
+
+        if (STRING_IS_NULL(next)) {
+            chunks[i] = STRINGNULL;
+            continue;
+        }
+
+        if (next->encoding != j->encoding) {
+            const ENCODING *e = j->encoding;
+
+            string_rep_compatible(interp, next, j, &e);
+            if (e == Parrot_fixed_8_encoding_ptr)
+                e = Parrot_utf8_encoding_ptr;
+            j           = e->to_encoding(interp, j);
+            transcoded  = 1;
+        }
+
+        chunks[i]     = next;
+        total_length += next->bufused;
+    }
+
+    /* with the right charset, transcode any strings if necessary */
+    if (transcoded) {
+        const CHARSET  *c = j->charset;
+        const ENCODING *e = j->encoding;
+
+        for (i = 0; i < ar_len; ++i) {
+            STRING *s = chunks[i];
+
+            if (STRING_IS_NULL(s))
+                continue;
+
+            if (s->encoding != e || s->charset != c) {
+                STRING *new_s = e->to_encoding(interp, s);
+                chunks[i]     = new_s;
+                total_length += s->bufused - new_s->bufused;
+            }
+        }
+    }
+
+    /* add the length of the separator, now that it's transcoded */
+    total_length += j->bufused * ar_len;
+
+    res = Parrot_gc_new_string_header(interp, 0);
+    Parrot_gc_allocate_string_storage(interp, res, total_length);
+
+    res->charset  = j->charset;
+    res->encoding = j->encoding;
+
+    /* Iterate over chunks and append it to res */
+    pos = res->strstart;
+
+    /* Copy first chunk */
+    s = chunks[0];
+    if (!STRING_IS_NULL(s)) {
+        mem_sys_memcopy(pos, s->strstart, s->bufused);
+        pos += s->bufused;
+    }
 
     for (i = 1; i < ar_len; ++i) {
-        STRING * const next = VTABLE_get_string_keyed_int(interp, ar, i);
+        STRING *next = chunks[i];
+
+        if (STRING_IS_NULL(next))
+            continue;
+
+        mem_sys_memcopy(pos, j->strstart, j->bufused);
+        pos += j->bufused;
 
-        res  = Parrot_str_append(interp, res, j);
-        res  = Parrot_str_append(interp, res, next);
+        mem_sys_memcopy(pos, next->strstart, next->bufused);
+        pos += next->bufused;
+
+        PARROT_ASSERT(pos <= res->strstart + Buffer_buflen(res));
     }
 
+    res->bufused  = pos - res->strstart;
+    res->strlen = CHARSET_CODEPOINTS(interp, res);
+
+    Parrot_gc_free_fixed_size_storage(interp, ar_len * sizeof (STRING *),
+        chunks);
+
     return res;
 }
 
@@ -3426,8 +3051,8 @@
 =item C<PMC* Parrot_str_split(PARROT_INTERP, STRING *delim, STRING *str)>
 
 Splits the string C<str> at the delimiter C<delim>, returning a
-C<ResizableStringArray>, or his mapped type in the current HLL,
-of results. Returns PMCNULL if the string or the delimiter is NULL.
+C<ResizableStringArray>, or his mapped type in the current HLL, of results.
+Returns PMCNULL if the string or the delimiter is NULL.
 
 =cut
 
@@ -3435,7 +3060,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
+PARROT_CAN_RETURN_NULL
 PMC*
 Parrot_str_split(PARROT_INTERP,
     ARGIN_NULLOK(STRING *delim), ARGIN_NULLOK(STRING *str))
@@ -3447,7 +3072,8 @@
     if (STRING_IS_NULL(delim) || STRING_IS_NULL(str))
         return PMCNULL;
 
-    res  = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_ResizableStringArray));
+    res  = Parrot_pmc_new(interp,
+            Parrot_get_ctx_HLL_type(interp, enum_class_ResizableStringArray));
     slen = Parrot_str_byte_length(interp, str);
 
     if (!slen)
@@ -3460,7 +3086,7 @@
         VTABLE_set_integer_native(interp, res, slen);
 
         for (i = 0; i < slen; ++i) {
-            STRING * const p = Parrot_str_substr(interp, str, i, 1, NULL, 0);
+            STRING * const p = Parrot_str_substr(interp, str, i, 1);
             VTABLE_set_string_keyed_int(interp, res, i, p);
         }
 
@@ -3478,7 +3104,7 @@
 
     while (ps <= slen) {
         const int      pl   = pe - ps;
-        STRING * const tstr = Parrot_str_substr(interp, str, ps, pl, NULL, 0);
+        STRING * const tstr = Parrot_str_substr(interp, str, ps, pl);
 
         VTABLE_push_string(interp, res, tstr);
         ps = pe + Parrot_str_byte_length(interp, delim);
@@ -3520,6 +3146,7 @@
     unsigned int base, int minus)
 {
     ASSERT_ARGS(Parrot_str_from_uint)
+
     /* the buffer must be at least as long as this */
     char               *p    = tc + sizeof (UHUGEINTVAL)*8 + 1;
     const char * const  tail = p;
@@ -3528,18 +3155,18 @@
 
     do {
         const char cur = (char)(num % base);
-        if (cur < 10) {
+
+        if (cur < 10)
             *--p = (char)('0' + cur);
-        }
-        else {
+        else
             *--p = (char)('a' + cur - 10);
-        }
+
     } while (num /= base);
 
     if (minus)
         *--p = '-';
 
-    return string_make(interp, p, (UINTVAL)(tail - p), "ascii", 0);
+    return string_make(interp, p, (UINTVAL)(tail - p), NULL, 0);
 }
 
 
@@ -3572,6 +3199,7 @@
     return Parrot_str_from_uint(interp, tc, (UHUGEINTVAL)num, base, is_neg);
 }
 
+
 /*
 
 =back

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

Modified: branches/ops_pct/src/string/charset/ascii.c
==============================================================================
--- branches/ops_pct/src/string/charset/ascii.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/ascii.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -32,26 +32,29 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* compose(PARROT_INTERP, ARGIN(STRING *src))
+static STRING* compose(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* decompose(PARROT_INTERP, ARGMOD(STRING *src))
+static STRING* decompose(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src);
+        __attribute__nonnull__(2);
 
-static void downcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void downcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 static INTVAL find_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
@@ -59,7 +62,7 @@
 
 static INTVAL find_not_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
@@ -68,65 +71,48 @@
 PARROT_WARN_UNUSED_RESULT
 static INTVAL is_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(const STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void titlecase_first(SHIM_INTERP, ARGMOD(STRING *source_string))
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*source_string);
-
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_ascii(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING* titlecase_first(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING * to_ascii(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_unicode(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_charset(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-static void upcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL validate(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL validate(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -137,41 +123,40 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_downcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       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(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_titlecase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_to_ascii __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_to_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_to_unicode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+#define ASSERT_ARGS_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
 #define ASSERT_ARGS_upcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -180,10 +165,10 @@
 
 /*
 
-=item C<STRING * ascii_get_graphemes(PARROT_INTERP, STRING *source_string,
-UINTVAL offset, UINTVAL count)>
+=item C<STRING * ascii_get_graphemes(PARROT_INTERP, const STRING *src, UINTVAL
+offset, UINTVAL count)>
 
-Retrieves the graphemes for the STRING C<source_string>, starting at
+Retrieves the graphemes for the STRING C<src>, starting at
 C<offset> and ending at C<offset + count>.
 
 =cut
@@ -193,62 +178,15 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING *
-ascii_get_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count)
+ascii_get_graphemes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(ascii_get_graphemes)
-    return ENCODING_GET_BYTES(interp, source_string, offset, count);
-}
-
-/*
-
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets the graphemes for C<source_string>, starting at C<offset>. Replace
-C<replace_count> graphemes with those from STRING C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_BYTES(interp, source_string, offset,
-            replace_count, insert_string);
-
-}
-
-/*
-
-=item C<STRING * ascii_get_graphemes_inplace(PARROT_INTERP, STRING
-*source_string, UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Retrieves the graphemes in place for ascii STRING C<source_string>,
-starting at C<offset>. Retrieves C<count> graphemes and puts them
-into C<dest_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-ascii_get_graphemes_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *dest_string))
-{
-    ASSERT_ARGS(ascii_get_graphemes_inplace)
-    return ENCODING_GET_BYTES_INPLACE(interp, source_string,
-            offset, count, dest_string);
+    return ENCODING_GET_BYTES(interp, src, offset, count);
 }
 
 /*
 
-=item C<static STRING * to_ascii(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_ascii(PARROT_INTERP, const STRING *src)>
 
 Attempts to convert STRING C<src> to ASCII in STRING C<dest>. Throws
 an exception if unconvertable UNICODE characters are involved.
@@ -259,7 +197,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_ascii(PARROT_INTERP, ARGIN(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_ascii(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_ascii)
     String_iter iter;
@@ -267,13 +205,9 @@
     unsigned char *p;
     const UINTVAL len = src->strlen;
 
-    if (dest) {
-        Parrot_gc_reallocate_string_storage(interp, dest, len);
-    }
-    else {
-        /* the string can't grow - replace inplace */
-        dest = src;
-    }
+    /* the string can't grow. Just clone it */
+    STRING * const dest = Parrot_str_clone(interp, src);
+
     p = (unsigned char *)dest->strstart;
     ENCODING_ITER_INIT(interp, src, &iter);
     for (offs = 0; offs < len; ++offs) {
@@ -292,35 +226,7 @@
 
 /*
 
-=item C<static STRING * to_unicode(PARROT_INTERP, STRING *src, STRING *dest)>
-
-Converts the ASCII STRING C<src> to UNICODE STRING C<dest>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-to_unicode(PARROT_INTERP, ARGMOD(STRING *src), ARGMOD_NULLOK(STRING *dest))
-{
-    ASSERT_ARGS(to_unicode)
-    if (dest) {
-        dest->charset = Parrot_unicode_charset_ptr;
-        dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        return dest;
-    }
-    else {
-        src->charset = Parrot_unicode_charset_ptr;
-        src->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, src);
-        return src;
-    }
-}
-
-/*
-
-=item C<static STRING * to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_charset(PARROT_INTERP, const STRING *src)>
 
 Converts STRING C<src> to ASCII charset STRING C<dest>.
 
@@ -330,24 +236,23 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_charset)
     const charset_converter_t conversion_func =
         Parrot_find_charset_converter(interp, src->charset, Parrot_ascii_charset_ptr);
 
     if (conversion_func) {
-         return conversion_func(interp, src, dest);
+         return conversion_func(interp, src);
     }
     else {
-        return to_ascii(interp, src, dest);
+        return to_ascii(interp, src);
     }
 }
 
-/* A noop. can't compose ascii */
 /*
 
-=item C<static STRING* compose(PARROT_INTERP, STRING *src)>
+=item C<static STRING* compose(PARROT_INTERP, const STRING *src)>
 
 Can't compose ASCII strings, so performs a string copy on it and
 returns the new string.
@@ -358,16 +263,18 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-compose(PARROT_INTERP, ARGIN(STRING *src))
+compose(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(compose)
-    return Parrot_str_copy(interp, src);
+
+    STRING * const dest = Parrot_str_copy(interp, src);
+
+    return dest;
 }
 
-/* A noop. can't decompose ascii */
 /*
 
-=item C<static STRING* decompose(PARROT_INTERP, STRING *src)>
+=item C<static STRING* decompose(PARROT_INTERP, const STRING *src)>
 
 Can't decompose ASCII, so we perform a string copy instead and return
 a pointer to the new string.
@@ -378,69 +285,80 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-decompose(PARROT_INTERP, ARGMOD(STRING *src))
+decompose(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(decompose)
-    return Parrot_str_copy(interp, src);
+
+    STRING * const dest = Parrot_str_copy(interp, src);
+
+    return dest;
 }
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *src)>
 
-Converts the STRING C<source_string> to all uppercase.
+Converts the STRING C<src> to all uppercase.
 
 =cut
 
 */
 
-static void
-upcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(upcase)
-    const UINTVAL n = source_string->strlen;
+    STRING * const result = Parrot_str_clone(interp, src);
+    const UINTVAL n = src->strlen;
 
     if (n) {
-        char * const buffer = source_string->strstart;
+        char * const buffer = result->strstart;
         UINTVAL offset;
 
-        for (offset = 0; offset < n; offset++) {
+        for (offset = 0; offset < n; ++offset) {
             buffer[offset] = (char)toupper((unsigned char)buffer[offset]);
         }
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *src)>
 
-Converts the STRING C<source_string> to all lower-case.
+Converts the STRING C<src> to all lower-case.
 
 =cut
 
 */
 
-static void
-downcase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(downcase)
-    const UINTVAL n = source_string->strlen;
+    STRING       *result = Parrot_str_clone(interp, src);
+    const UINTVAL n      = src->strlen;
 
     if (n) {
-        char * const buffer = source_string->strstart;
+        char * const buffer = result->strstart;
         UINTVAL offset;
 
-        for (offset = 0; offset < n; offset++) {
+        for (offset = 0; offset < n; ++offset) {
             buffer[offset] = (char)tolower((unsigned char)buffer[offset]);
         }
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *src)>
 
-Converts the STRING given by C<source_string> to title case, where
+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.
 
@@ -448,84 +366,103 @@
 
 */
 
-static void
-titlecase(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(titlecase)
-    const UINTVAL n = source_string->strlen;
+    STRING       *result = Parrot_str_clone(interp, src);
+    const UINTVAL n      = src->strlen;
 
     if (n) {
-        char * const buffer = source_string->strstart;
+        char * const buffer = result->strstart;
         UINTVAL offset;
 
         buffer[0] = (char)toupper((unsigned char)buffer[0]);
-        for (offset = 1; offset < n; offset++) {
+        for (offset = 1; offset < n; ++offset) {
             buffer[offset] = (char)tolower((unsigned char)buffer[offset]);
         }
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *src)>
 
-Sets the first character in the STRING C<source_string> to upper case,
+Sets the first character in the STRING C<src> to upper case,
 but doesn't modify the rest of the string.
 
 =cut
 
 */
 
-static void
-upcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(upcase_first)
-    if (source_string->strlen) {
-        char * const buffer = source_string->strstart;
+    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 void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING *src)>
 
-Sets the first character of the STRING C<source_string> to lowercase,
+Sets the first character of the STRING C<src> to lowercase,
 but doesn't modify the rest of the characters.
 
 =cut
 
 */
 
-static void
-downcase_first(SHIM_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(downcase_first)
-    if (source_string->strlen) {
-        char * const buffer = source_string->strstart;
+    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 void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first letter of STRING C<source_string> to upper case,
+Converts the first letter of STRING C<src> to upper case,
 but doesn't modify the rest of the string.
 
 =cut
 
 */
 
-static void
-titlecase_first(SHIM_INTERP, ARGMOD(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(titlecase_first)
-    if (source_string->strlen) {
-        char * const buffer = source_string->strstart;
+    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;
 }
 
 /*
@@ -550,8 +487,7 @@
     const UINTVAL min_len = l_len > r_len ? r_len : l_len;
     String_iter iter;
 
-    if (lhs->encoding == Parrot_fixed_8_encoding_ptr &&
-            rhs->encoding == Parrot_fixed_8_encoding_ptr) {
+    if (lhs->encoding == rhs->encoding) {
         const int ret_val = memcmp(lhs->strstart, rhs->strstart, min_len);
         if (ret_val)
             return ret_val < 0 ? -1 : 1;
@@ -577,8 +513,8 @@
 
 /*
 
-=item C<INTVAL mixed_cs_index(PARROT_INTERP, STRING *src, STRING *search,
-UINTVAL offs)>
+=item C<INTVAL mixed_cs_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.
@@ -591,7 +527,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-mixed_cs_index(PARROT_INTERP, ARGIN(STRING *src), ARGIN(STRING *search),
+mixed_cs_index(PARROT_INTERP, ARGIN(const STRING *src), ARGIN(const STRING *search),
     UINTVAL offs)
 {
     ASSERT_ARGS(mixed_cs_index)
@@ -637,7 +573,7 @@
 
 /*
 
-=item C<INTVAL ascii_cs_index(PARROT_INTERP, STRING *source_string, STRING
+=item C<INTVAL ascii_cs_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>.
@@ -650,28 +586,28 @@
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-ascii_cs_index(PARROT_INTERP, ARGIN(STRING *source_string),
-        ARGIN(STRING *search_string), UINTVAL offset)
+ascii_cs_index(PARROT_INTERP, ARGIN(const STRING *src),
+        ARGIN(const STRING *search_string), UINTVAL offset)
 {
     ASSERT_ARGS(ascii_cs_index)
     INTVAL retval;
-    if (source_string->charset != search_string->charset) {
-        return mixed_cs_index(interp, source_string, search_string, offset);
+    if (src->charset != search_string->charset) {
+        return mixed_cs_index(interp, src, search_string, offset);
     }
 
-    PARROT_ASSERT(source_string->encoding == Parrot_fixed_8_encoding_ptr);
-    retval = Parrot_byte_index(interp, source_string,
+    PARROT_ASSERT(src->encoding == Parrot_fixed_8_encoding_ptr);
+    retval = Parrot_byte_index(interp, src,
             search_string, offset);
     return retval;
 }
 
 /*
 
-=item C<INTVAL ascii_cs_rindex(PARROT_INTERP, STRING *source_string, STRING
+=item C<INTVAL ascii_cs_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<source_string>. Starts searching at C<offset>.
+C<src>. Starts searching at C<offset>.
 
 =cut
 
@@ -679,25 +615,25 @@
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL
-ascii_cs_rindex(PARROT_INTERP, ARGIN(STRING *source_string),
-        ARGIN(STRING *search_string), UINTVAL offset)
+ascii_cs_rindex(PARROT_INTERP, ARGIN(const STRING *src),
+        ARGIN(const STRING *search_string), UINTVAL offset)
 {
     ASSERT_ARGS(ascii_cs_rindex)
     INTVAL retval;
 
-    if (source_string->charset != search_string->charset)
+    if (src->charset != search_string->charset)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
             "Cross-charset index not supported");
 
-    PARROT_ASSERT(source_string->encoding == Parrot_fixed_8_encoding_ptr);
-    retval = Parrot_byte_rindex(interp, source_string,
+    PARROT_ASSERT(src->encoding == Parrot_fixed_8_encoding_ptr);
+    retval = Parrot_byte_rindex(interp, src,
             search_string, offset);
     return retval;
 }
 
 /*
 
-=item C<static UINTVAL validate(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL validate(PARROT_INTERP, const STRING *src)>
 
 Verifies that the given string is valid ASCII. Returns 1 if it is ASCII,
 returns 0 otherwise.
@@ -708,7 +644,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-validate(PARROT_INTERP, ARGIN(STRING *src))
+validate(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(validate)
     UINTVAL offset;
@@ -747,8 +683,8 @@
 
 /*
 
-=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING
-*source_string, UINTVAL offset)>
+=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING *src,
+UINTVAL offset)>
 
 =cut
 
@@ -756,17 +692,16 @@
 
 PARROT_WARN_UNUSED_RESULT
 static INTVAL
-is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *source_string), UINTVAL offset)
+is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset)
 {
     ASSERT_ARGS(is_cclass)
     UINTVAL codepoint;
 
-    if (offset >= source_string->strlen)
+    if (offset >= src->strlen)
         return 0;
-    codepoint = ENCODING_GET_CODEPOINT(interp, source_string, offset);
+    codepoint = ENCODING_GET_CODEPOINT(interp, src, offset);
 
-    if (codepoint >= sizeof (Parrot_ascii_typetable) /
-            sizeof (Parrot_ascii_typetable[0])) {
+    if (codepoint >= sizeof (Parrot_ascii_typetable) / sizeof (Parrot_ascii_typetable[0])) {
         return 0;
     }
     return (Parrot_ascii_typetable[codepoint] & flags) ? 1 : 0;
@@ -774,8 +709,8 @@
 
 /*
 
-=item C<static INTVAL find_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL 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.
@@ -786,38 +721,37 @@
 
 PARROT_WARN_UNUSED_RESULT
 static INTVAL
-find_cclass(PARROT_INTERP, INTVAL flags, ARGIN(STRING *source_string),
-            UINTVAL offset, UINTVAL count)
+find_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_cclass)
     UINTVAL pos = offset;
     UINTVAL end = offset + count;
 
-    end = source_string->strlen < end ? source_string->strlen : end;
-    return ENCODING_FIND_CCLASS(interp, source_string, Parrot_ascii_typetable,
+    end = src->strlen < end ? src->strlen : end;
+    return ENCODING_FIND_CCLASS(interp, src, Parrot_ascii_typetable,
             flags, pos, end);
 }
 
 /*
 
-=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
 
 =cut
 
 */
 
 static INTVAL
-find_not_cclass(PARROT_INTERP, INTVAL flags, ARGIN(STRING *source_string),
-                UINTVAL offset, UINTVAL count)
+find_not_cclass(PARROT_INTERP,
+                INTVAL flags, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_not_cclass)
     UINTVAL pos = offset;
     UINTVAL end = offset + count;
 
-    end = source_string->strlen < end ? source_string->strlen : end;
+    end = src->strlen < end ? src->strlen : end;
     for (; pos < end; ++pos) {
-        const UINTVAL codepoint = ENCODING_GET_CODEPOINT(interp, source_string, pos);
+        const UINTVAL codepoint = ENCODING_GET_CODEPOINT(interp, src, pos);
         if ((Parrot_ascii_typetable[codepoint] & flags) == 0) {
             return pos;
         }
@@ -827,10 +761,10 @@
 
 /*
 
-=item C<size_t ascii_compute_hash(PARROT_INTERP, const STRING *source_string,
-size_t seed)>
+=item C<size_t ascii_compute_hash(PARROT_INTERP, const STRING *src, size_t
+seed)>
 
-Computes the hash of STRING C<source_string> starting with seed value
+Computes the hash of STRING C<src> starting with seed value
 C<seed>.
 
 =cut
@@ -839,14 +773,14 @@
 
 PARROT_PURE_FUNCTION
 size_t
-ascii_compute_hash(SHIM_INTERP, ARGIN(const STRING *source_string), size_t seed)
+ascii_compute_hash(SHIM_INTERP, ARGIN(const STRING *src), size_t seed)
 {
     ASSERT_ARGS(ascii_compute_hash)
     size_t hashval = seed;
-    const char *buffptr = (const char *)source_string->strstart;
-    UINTVAL len = source_string->strlen;
+    const char *buffptr = (const char *)src->strstart;
+    UINTVAL len = src->strlen;
 
-    PARROT_ASSERT(source_string->encoding == Parrot_fixed_8_encoding_ptr);
+    PARROT_ASSERT(src->encoding == Parrot_fixed_8_encoding_ptr);
     while (len--) {
         hashval += hashval << 5;
         hashval += *buffptr++;
@@ -856,7 +790,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_ascii_init(PARROT_INTERP)>
+=item C<void Parrot_charset_ascii_init(PARROT_INTERP)>
 
 Initialize the ASCII charset but registering all the necessary
 function pointers and settings.
@@ -865,8 +799,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_ascii_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_ascii_init)
@@ -874,8 +807,6 @@
     static const CHARSET base_set = {
         "ascii",
         ascii_get_graphemes,
-        ascii_get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -900,13 +831,13 @@
     STRUCT_COPY_FROM_STRUCT(return_set, base_set);
     return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
     Parrot_register_charset(interp, "ascii", return_set);
-    return return_set;
+
+    return;
 }
 
 /*
 
-=item C<STRING * charset_cvt_ascii_to_binary(PARROT_INTERP, STRING *src, STRING
-*dest)>
+=item C<STRING * charset_cvt_ascii_to_binary(PARROT_INTERP, const STRING *src)>
 
 Converts an ASCII STRING C<src> to a binary STRING C<dest>.
 
@@ -916,29 +847,25 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING *
-charset_cvt_ascii_to_binary(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+charset_cvt_ascii_to_binary(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(charset_cvt_ascii_to_binary)
-    if (dest) {
-        UINTVAL offs;
+    STRING * const dest = Parrot_str_clone(interp, src);
+    UINTVAL offs;
 
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        dest->bufused = src->bufused;
-        dest->strlen  = src->strlen;
-        for (offs = 0; offs < src->strlen; ++offs) {
-            const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
-            ENCODING_SET_BYTE(interp, dest, offs, c);
-        }
-        return dest;
+    for (offs = 0; offs < src->strlen; ++offs) {
+        const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
+        ENCODING_SET_BYTE(interp, dest, offs, c);
     }
-    src->charset = Parrot_binary_charset_ptr;
-    return src;
+
+    dest->charset = Parrot_binary_charset_ptr;
+    return dest;
 }
 
 /*
 
-=item C<STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, STRING *src,
-STRING *dest)>
+=item C<STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, const STRING
+*src)>
 
 Converts ASCII STRING C<src> to ISO8859-1 STRING C<dest>.
 
@@ -948,24 +875,19 @@
 
 PARROT_CANNOT_RETURN_NULL
 STRING *
-charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(charset_cvt_ascii_to_iso_8859_1)
-    if (dest) {
-        UINTVAL offs;
+    STRING * const dest = Parrot_str_clone(interp, src);
+    UINTVAL offs;
 
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        dest->bufused = src->bufused;
-        dest->strlen  = src->strlen;
-        for (offs = 0; offs < src->strlen; ++offs) {
-            const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
-            ENCODING_SET_BYTE(interp, dest, offs, c);
-        }
-        return dest;
+    for (offs = 0; offs < src->strlen; ++offs) {
+        const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
+        ENCODING_SET_BYTE(interp, dest, offs, c);
     }
-    src->charset = Parrot_iso_8859_1_charset_ptr;
-    return src;
+
+    dest->charset = Parrot_iso_8859_1_charset_ptr;
+    return dest;
 }
 
 /*

Modified: branches/ops_pct/src/string/charset/ascii.h
==============================================================================
--- branches/ops_pct/src/string/charset/ascii.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/ascii.h	Wed May  5 08:45:29 2010	(r46302)
@@ -30,14 +30,14 @@
 
 PARROT_PURE_FUNCTION
 size_t ascii_compute_hash(SHIM_INTERP,
-    ARGIN(const STRING *source_string),
+    ARGIN(const STRING *src),
     size_t seed)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL ascii_cs_index(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    ARGIN(STRING *search_string),
+    ARGIN(const STRING *src),
+    ARGIN(const STRING *search_string),
     UINTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -45,8 +45,8 @@
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL ascii_cs_rindex(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    ARGIN(STRING *search_string),
+    ARGIN(const STRING *src),
+    ARGIN(const STRING *search_string),
     UINTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -55,49 +55,34 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * ascii_get_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING * ascii_get_graphemes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 PARROT_CANNOT_RETURN_NULL
 STRING * charset_cvt_ascii_to_binary(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+    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(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+    ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 INTVAL mixed_cs_index(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN(STRING *search),
+    ARGIN(const STRING *src),
+    ARGIN(const STRING *search),
     UINTVAL offs)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_ascii_init(PARROT_INTERP)
+void Parrot_charset_ascii_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_ascii_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -105,22 +90,18 @@
     , PARROT_ASSERT_ARG(lhs) \
     , PARROT_ASSERT_ARG(rhs))
 #define ASSERT_ARGS_ascii_compute_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_ascii_cs_index __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
+    , 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(source_string) \
+    , 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(source_string))
-#define ASSERT_ARGS_ascii_get_graphemes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
+    , 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))

Modified: branches/ops_pct/src/string/charset/binary.c
==============================================================================
--- branches/ops_pct/src/string/charset/binary.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/binary.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -34,80 +34,74 @@
         __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* compose(PARROT_INTERP, SHIM(STRING *source_string))
+static STRING* compose(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
 static INTVAL cs_index(SHIM_INTERP,
-    SHIM(STRING *source_string),
-    SHIM(STRING *search_string),
+    SHIM(const STRING *src),
+    SHIM(const STRING *search_string),
     SHIM(UINTVAL offset));
 
 static INTVAL cs_rindex(SHIM_INTERP,
-    SHIM(STRING *source_string),
-    SHIM(STRING *search_string),
+    SHIM(const STRING *src),
+    SHIM(const STRING *search_string),
     SHIM(UINTVAL offset));
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* decompose(PARROT_INTERP, SHIM(STRING *source_string))
+static STRING* decompose(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static void downcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static void downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
 static INTVAL find_cclass(SHIM_INTERP,
     SHIM(INTVAL flags),
-    SHIM(STRING *source_string),
+    SHIM(const STRING *src),
     UINTVAL offset,
     UINTVAL count);
 
 static INTVAL find_not_cclass(SHIM_INTERP,
     SHIM(INTVAL flags),
-    SHIM(STRING *source_string),
+    SHIM(const STRING *src),
     UINTVAL offset,
     UINTVAL count);
 
 static INTVAL is_cclass(SHIM_INTERP,
     SHIM(INTVAL flags),
-    SHIM(const STRING *source_string),
+    SHIM(const STRING *src),
     SHIM(UINTVAL offset));
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static void titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase_first(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING* to_charset(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static void upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static UINTVAL validate(SHIM_INTERP, SHIM(STRING *source_string));
+static UINTVAL validate(SHIM_INTERP, SHIM(const STRING *src));
 #define ASSERT_ARGS_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(lhs) \
     , PARROT_ASSERT_ARG(rhs))
@@ -124,10 +118,6 @@
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -152,31 +142,10 @@
 #define EXCEPTION(err, str) \
     Parrot_ex_throw_from_c_args(interp, NULL, (err), (str))
 
-/*
-
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets the graphemes for STRING C<source_string>, starting at offset
-C<offset>. Replaces C<replace_count> graphemes from STRING
-C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_BYTES(interp, source_string, offset,
-            replace_count, insert_string);
-}
 
 /*
 
-=item C<static STRING* to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING* to_charset(PARROT_INTERP, const STRING *src)>
 
 Converts the STRING C<src> to STRING C<dest> in binary mode. Throws
 an exception if a suitable conversion function is not found.
@@ -187,14 +156,14 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_charset)
     charset_converter_t conversion_func =
         Parrot_find_charset_converter(interp, src->charset, Parrot_binary_charset_ptr);
 
     if (conversion_func)
-         return conversion_func(interp, src, dest);
+         return conversion_func(interp, src);
 
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
         "to_charset for binary not implemented");
@@ -202,7 +171,7 @@
 
 /*
 
-=item C<static STRING* compose(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* compose(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot compose a binary string.
 
@@ -213,7 +182,7 @@
 /* A err. can't compose binary */
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-compose(PARROT_INTERP, SHIM(STRING *source_string))
+compose(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(compose)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't compose binary data");
@@ -221,7 +190,7 @@
 
 /*
 
-=item C<static STRING* decompose(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* decompose(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot decompose a binary string.
 
@@ -232,7 +201,7 @@
 /* A err. can't decompose binary */
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-decompose(PARROT_INTERP, SHIM(STRING *source_string))
+decompose(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(decompose)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't decompose binary data");
@@ -240,7 +209,7 @@
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot convert a binary string to
 upper case.
@@ -249,8 +218,9 @@
 
 */
 
-static void
-upcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(upcase)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't upcase binary data");
@@ -258,7 +228,7 @@
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot convert a binary string to
 lower-case.
@@ -267,8 +237,9 @@
 
 */
 
-static void
-downcase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(downcase)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't downcase binary data");
@@ -276,7 +247,7 @@
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot convert a binary string to
 title case.
@@ -285,8 +256,9 @@
 
 */
 
-static void
-titlecase(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(titlecase)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't titlecase binary data");
@@ -294,7 +266,7 @@
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot set the first "character" of the
 binary string to uppercase.
@@ -303,8 +275,9 @@
 
 */
 
-static void
-upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(upcase_first)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't upcase binary data");
@@ -312,7 +285,7 @@
 
 /*
 
-=item C<static void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we cannot set the first "character"
 of the binary string to lowercase.
@@ -321,8 +294,9 @@
 
 */
 
-static void
-downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(downcase_first)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't downcase binary data");
@@ -330,7 +304,7 @@
 
 /*
 
-=item C<static void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING *src)>
 
 Throws an exception because we can't convert the first "character"
 of binary data to title case.
@@ -339,8 +313,9 @@
 
 */
 
-static void
-titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(titlecase_first)
     EXCEPTION(EXCEPTION_INVALID_CHARTYPE, "Can't titlecase binary data");
@@ -371,7 +346,7 @@
 
 /*
 
-=item C<static INTVAL cs_index(PARROT_INTERP, STRING *source_string, STRING
+=item C<static INTVAL cs_index(PARROT_INTERP, const STRING *src, const STRING
 *search_string, UINTVAL offset)>
 
 Returns -1. It makes no sense to try and search for a substring in
@@ -382,8 +357,8 @@
 */
 
 static INTVAL
-cs_index(SHIM_INTERP, SHIM(STRING *source_string),
-        SHIM(STRING *search_string), SHIM(UINTVAL offset))
+cs_index(SHIM_INTERP, SHIM(const STRING *src),
+        SHIM(const STRING *search_string), SHIM(UINTVAL offset))
 {
     ASSERT_ARGS(cs_index)
     return -1;
@@ -391,7 +366,7 @@
 
 /*
 
-=item C<static INTVAL cs_rindex(PARROT_INTERP, STRING *source_string, STRING
+=item C<static INTVAL cs_rindex(PARROT_INTERP, const STRING *src, const STRING
 *search_string, UINTVAL offset)>
 
 Returns -1. It makes no sense to search for the last substring match
@@ -402,8 +377,8 @@
 */
 
 static INTVAL
-cs_rindex(SHIM_INTERP, SHIM(STRING *source_string),
-        SHIM(STRING *search_string), SHIM(UINTVAL offset))
+cs_rindex(SHIM_INTERP, SHIM(const STRING *src),
+        SHIM(const STRING *search_string), SHIM(UINTVAL offset))
 {
     ASSERT_ARGS(cs_rindex)
     return -1;
@@ -411,7 +386,7 @@
 
 /*
 
-=item C<static UINTVAL validate(PARROT_INTERP, STRING *source_string)>
+=item C<static UINTVAL validate(PARROT_INTERP, const STRING *src)>
 
 Returns 1. All sequential data is valid binary data.
 
@@ -421,7 +396,7 @@
 
 /* Binary's always valid */
 static UINTVAL
-validate(SHIM_INTERP, SHIM(STRING *source_string))
+validate(SHIM_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(validate)
     return 1;
@@ -429,16 +404,15 @@
 
 /*
 
-=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING
-*source_string, UINTVAL offset)>
+=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING *src,
+UINTVAL offset)>
 
 =cut
 
 */
 
 static INTVAL
-is_cclass(SHIM_INTERP, SHIM(INTVAL flags), SHIM(const STRING *source_string),
-        SHIM(UINTVAL offset))
+is_cclass(SHIM_INTERP, SHIM(INTVAL flags), SHIM(const STRING *src), SHIM(UINTVAL offset))
 {
     ASSERT_ARGS(is_cclass)
     return 0;
@@ -446,8 +420,8 @@
 
 /*
 
-=item C<static INTVAL find_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL find_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
 
 =cut
 
@@ -455,7 +429,7 @@
 
 static INTVAL
 find_cclass(SHIM_INTERP, SHIM(INTVAL flags),
-            SHIM(STRING *source_string), UINTVAL offset, UINTVAL count)
+            SHIM(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_cclass)
     return offset + count;
@@ -463,8 +437,8 @@
 
 /*
 
-=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
 
 =cut
 
@@ -472,7 +446,7 @@
 
 static INTVAL
 find_not_cclass(SHIM_INTERP, SHIM(INTVAL flags),
-               SHIM(STRING *source_string), UINTVAL offset, UINTVAL count)
+               SHIM(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_not_cclass)
     return offset + count;
@@ -500,7 +474,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_binary_init(PARROT_INTERP)>
+=item C<void Parrot_charset_binary_init(PARROT_INTERP)>
 
 Initialize the binary charset, including function pointers and
 settings.
@@ -509,8 +483,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_binary_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_binary_init)
@@ -518,8 +491,6 @@
     static const CHARSET base_set = {
         "binary",
         ascii_get_graphemes,
-        ascii_get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -544,7 +515,8 @@
     STRUCT_COPY_FROM_STRUCT(return_set, base_set);
     return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
     Parrot_register_charset(interp, "binary", return_set);
-    return return_set;
+
+    return;
 
 }
 

Modified: branches/ops_pct/src/string/charset/binary.h
==============================================================================
--- branches/ops_pct/src/string/charset/binary.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/binary.h	Wed May  5 08:45:29 2010	(r46302)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/charset/binary.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_binary_init(PARROT_INTERP)
+void Parrot_charset_binary_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_charset_binary_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/src/string/charset/iso-8859-1.c
==============================================================================
--- branches/ops_pct/src/string/charset/iso-8859-1.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/iso-8859-1.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,25 +27,27 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-static STRING* compose(PARROT_INTERP, ARGIN(STRING *src))
+static STRING* compose(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* decompose(PARROT_INTERP, SHIM(STRING *src))
+static STRING* decompose(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static void downcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void downcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 static INTVAL find_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
@@ -53,7 +55,7 @@
 
 static INTVAL find_not_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
@@ -61,66 +63,52 @@
 
 static INTVAL is_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(const STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void titlecase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase_first(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-static STRING * to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING * to_charset(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_iso_8859_1(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_iso_8859_1(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_unicode(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_unicode(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-static void upcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static UINTVAL validate(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL validate(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -131,31 +119,27 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_downcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_titlecase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_to_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -167,10 +151,10 @@
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_upcase_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_validate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -181,28 +165,7 @@
 
 /*
 
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets C<replace_count> graphemes in STRING C<source_string> starting at offset C<offset>.
-Gets the replacement graphemes from STRING C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_BYTES(interp, source_string, offset,
-            replace_count, insert_string);
-}
-
-/*
-
-=item C<static STRING * to_iso_8859_1(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_iso_8859_1(PARROT_INTERP, const STRING *src)>
 
 Converts STRING C<src> to iso-8859-1 in STRING C<dest>.
 
@@ -212,22 +175,16 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_iso_8859_1(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_iso_8859_1)
     UINTVAL offs, src_len;
     String_iter iter;
+    /* iso-8859-1 is never bigger then source */
+    STRING * dest = Parrot_str_clone(interp, src);
 
     ENCODING_ITER_INIT(interp, src, &iter);
     src_len = src->strlen;
-    if (dest) {
-        Parrot_gc_reallocate_string_storage(interp, dest, src_len);
-        dest->strlen  = src_len;
-    }
-    else {
-        /* iso-8859-1 is never bigger then source */
-        dest = src;
-    }
     dest->bufused = src_len;
     dest->charset = Parrot_iso_8859_1_charset_ptr;
     dest->encoding = Parrot_fixed_8_encoding_ptr;
@@ -244,7 +201,7 @@
 
 /*
 
-=item C<static STRING * to_unicode(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_unicode(PARROT_INTERP, const STRING *src)>
 
 Converts STRING C<src> to unicode STRING C<dest>.
 
@@ -254,40 +211,37 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_unicode(PARROT_INTERP, ARGIN(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_unicode(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_unicode)
-    if (dest) {
-        UINTVAL offs;
-        String_iter iter;
-
-        dest->charset = Parrot_unicode_charset_ptr;
-        dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        ENCODING_ITER_INIT(interp, dest, &iter);
-        for (offs = 0; offs < src->strlen; ++offs) {
-            const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
-
-            if (iter.bytepos >= Buffer_buflen(dest) - 4) {
-                UINTVAL need = (UINTVAL)((src->strlen - offs) * 1.5);
-                if (need < 16)
-                    need = 16;
-                Parrot_gc_reallocate_string_storage(interp, dest,
-                        Buffer_buflen(dest) + need);
-            }
-            iter.set_and_advance(interp, &iter, c);
+    STRING * dest = Parrot_str_clone(interp, src);
+    UINTVAL offs;
+    String_iter iter;
+
+    dest->charset = Parrot_unicode_charset_ptr;
+    dest->encoding = CHARSET_GET_PREFERRED_ENCODING(interp, dest);
+    Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
+    ENCODING_ITER_INIT(interp, dest, &iter);
+    for (offs = 0; offs < src->strlen; ++offs) {
+        const UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
+
+        if (iter.bytepos >= Buffer_buflen(dest) - 4) {
+            UINTVAL need = (UINTVAL)((src->strlen - offs) * 1.5);
+            if (need < 16)
+                need = 16;
+            Parrot_gc_reallocate_string_storage(interp, dest,
+                    Buffer_buflen(dest) + need);
         }
-        dest->bufused = iter.bytepos;
-        dest->strlen  = iter.charpos;
-        return dest;
+        iter.set_and_advance(interp, &iter, c);
     }
-    Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
-            "to_unicode inplace for iso-8859-1 not implemented");
+    dest->bufused = iter.bytepos;
+    dest->strlen  = iter.charpos;
+    return dest;
 }
 
 /*
 
-=item C<static STRING * to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_charset(PARROT_INTERP, const STRING *src)>
 
 Converts the STRING C<src> to an ISO-8859-1 STRING C<dest>.
 
@@ -298,22 +252,22 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static STRING *
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_charset)
     const charset_converter_t conversion_func =
         Parrot_find_charset_converter(interp, src->charset, Parrot_iso_8859_1_charset_ptr);
 
     if (conversion_func)
-        return conversion_func(interp, src, dest);
+        return conversion_func(interp, src);
     else
-        return to_iso_8859_1(interp, src, dest);
+        return to_iso_8859_1(interp, src);
 }
 
 
 /*
 
-=item C<static STRING* compose(PARROT_INTERP, STRING *src)>
+=item C<static STRING* compose(PARROT_INTERP, const STRING *src)>
 
 ISO-8859-1 does not support composing, so we just copy the STRING C<src> and return the
 copy.
@@ -322,19 +276,21 @@
 
 */
 
-/* A noop. can't compose iso-8859-1 */
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static STRING*
-compose(PARROT_INTERP, ARGIN(STRING *src))
+compose(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(compose)
-    return Parrot_str_copy(interp, src);
+
+    STRING * const dest = Parrot_str_copy(interp, src);
+
+    return dest;
 }
 
 /*
 
-=item C<static STRING* decompose(PARROT_INTERP, STRING *src)>
+=item C<static STRING* decompose(PARROT_INTERP, const STRING *src)>
 
 SO-8859-1 does not support decomposing, so we throw an exception.
 
@@ -344,7 +300,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-decompose(PARROT_INTERP, SHIM(STRING *src))
+decompose(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(decompose)
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
@@ -353,28 +309,29 @@
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *src)>
 
-Convert all graphemes in the STRING C<source_string> to upper case, for those
+Convert all graphemes in the STRING C<src> to upper case, for those
 graphemes that support cases.
 
 =cut
 
 */
 
-static void
-upcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(upcase)
     unsigned char *buffer;
-    UINTVAL offset = 0;
+    UINTVAL        offset = 0;
+    STRING        *result = Parrot_str_clone(interp, src);
 
-    if (!source_string->strlen)
-        return;
+    if (!result->strlen)
+        return result;
 
-    Parrot_str_write_COW(interp, source_string);
-    buffer = (unsigned char *)source_string->strstart;
-    for (offset = 0; offset < source_string->strlen; offset++) {
+    buffer = (unsigned char *)result->strstart;
+    for (offset = 0; offset < result->strlen; ++offset) {
         unsigned int c = buffer[offset]; /* XXX use encoding ? */
         if (c >= 0xe0 && c != 0xf7)
             c &= ~0x20;
@@ -382,64 +339,71 @@
             c = toupper((unsigned char)c);
         buffer[offset] = (unsigned char)c;
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *src)>
 
-Converts all graphemes in STRING C<source_string> to lower-case, for those graphemes
+Converts all graphemes in STRING C<src> to lower-case, for those graphemes
 that support cases.
 
 =cut
 
 */
 
-static void
-downcase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(downcase)
-    if (source_string->strlen) {
-        UINTVAL offset;
-        unsigned char *buffer;
-
-        Parrot_str_write_COW(interp, source_string);
-        buffer = (unsigned char *)source_string->strstart;
-        for (offset = 0; offset < source_string->strlen; offset++) {
-            unsigned int c = buffer[offset];
-            if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
-                c |= 0x20;
-            else
-                c = tolower((unsigned char)c);
-            buffer[offset] = (unsigned char)c;
-        }
+    unsigned char *buffer;
+    UINTVAL        offset = 0;
+    STRING        *result = Parrot_str_clone(interp, 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 void titlecase(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *src)>
 
-Converts the graphemes in STRING C<source_string> to title case, for those graphemes
+Converts the graphemes in STRING C<src> to title case, for those graphemes
 that support cases.
 
 =cut
 
 */
 
-static void
-titlecase(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(titlecase)
     unsigned char *buffer;
-    unsigned int c;
-    UINTVAL offset;
+    unsigned int   c;
+    UINTVAL        offset;
+    STRING        *result = Parrot_str_clone(interp, src);
 
-    if (!source_string->strlen)
-        return;
+    if (!result->strlen)
+        return result;
 
-    Parrot_str_write_COW(interp, source_string);
-    buffer = (unsigned char *)source_string->strstart;
+    buffer = (unsigned char *)result->strstart;
     c = buffer[0];
     if (c >= 0xe0 && c != 0xf7)
         c &= ~0x20;
@@ -447,7 +411,7 @@
         c = toupper((unsigned char)c);
     buffer[0] = (unsigned char)c;
 
-    for (offset = 1; offset < source_string->strlen; offset++) {
+    for (offset = 1; offset < result->strlen; ++offset) {
         c = buffer[offset];
         if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
             c |= 0x20;
@@ -455,90 +419,101 @@
             c = tolower((unsigned char)c);
         buffer[offset] = (unsigned char)c;
     }
+
+    return result;
 }
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first grapheme in STRING C<source_string> to upper case, if it
+Converts the first grapheme in STRING C<src> to upper case, if it
 supports cases.
 
 =cut
 
 */
 
-static void
-upcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(upcase_first)
-    if (source_string->strlen) {
-        unsigned char *buffer;
-        unsigned int c;
-
-        Parrot_str_write_COW(interp, source_string);
-        buffer = (unsigned char *)source_string->strstart;
-        c = buffer[0];
-        if (c >= 0xe0 && c != 0xf7)
-            c &= ~0x20;
-        else
-            c = toupper((unsigned char)c);
-        buffer[0] = (unsigned char)c;
-    }
+    unsigned char *buffer;
+    unsigned int   c;
+    STRING        *result = Parrot_str_clone(interp, 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 void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first character of the STRING C<source_string> to lower case, if the
+Converts the first character of the STRING C<src> to lower case, if the
 grapheme supports lower case.
 
 =cut
 
 */
 
-static void
-downcase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(downcase_first)
-    if (source_string->strlen) {
-        unsigned char *buffer;
-        unsigned int c;
-
-        Parrot_str_write_COW(interp, source_string);
-        buffer = (unsigned char *)source_string->strstart;
-        c = buffer[0];
-        if (c >= 0xc0 && c != 0xd7 && c <= 0xde)
-            c &= ~0x20;
-        else
-            c = tolower((unsigned char)c);
-        buffer[0] = (unsigned char)c;
-    }
+    unsigned char *buffer;
+    unsigned int   c;
+    STRING        *result = Parrot_str_clone(interp, 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 void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first grapheme in STRING C<source_string> to title case, if the grapheme
+Converts the first grapheme in STRING C<src> to title case, if the grapheme
 supports case.
 
 =cut
 
 */
 
-static void
-titlecase_first(PARROT_INTERP, ARGIN(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(titlecase_first)
-    upcase_first(interp, source_string);
+    return upcase_first(interp, src);
 }
 
 
 /*
 
-=item C<static UINTVAL validate(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL validate(PARROT_INTERP, const STRING *src)>
 
 Returns 1 if the STRING C<src> is a valid ISO-8859-1 STRING. Returns 0 otherwise.
 
@@ -547,7 +522,7 @@
 */
 
 static UINTVAL
-validate(PARROT_INTERP, ARGIN(STRING *src))
+validate(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(validate)
     UINTVAL offset;
@@ -562,22 +537,21 @@
 
 /*
 
-=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING
-*source_string, UINTVAL offset)>
+=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING *src,
+UINTVAL offset)>
 
 =cut
 
 */
 
 static INTVAL
-is_cclass(PARROT_INTERP, INTVAL flags,
-          ARGIN(const STRING *source_string), UINTVAL offset)
+is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset)
 {
     ASSERT_ARGS(is_cclass)
     UINTVAL codepoint;
 
-    if (offset >= source_string->strlen) return 0;
-    codepoint = ENCODING_GET_CODEPOINT(interp, source_string, offset);
+    if (offset >= src->strlen) return 0;
+    codepoint = ENCODING_GET_CODEPOINT(interp, src, offset);
 
     if (codepoint >= sizeof (Parrot_ascii_typetable) /
                      sizeof (Parrot_ascii_typetable[0])) {
@@ -588,8 +562,8 @@
 
 /*
 
-=item C<static INTVAL find_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL 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.
@@ -600,21 +574,21 @@
 
 static INTVAL
 find_cclass(PARROT_INTERP, INTVAL flags,
-            ARGIN(STRING *source_string), UINTVAL offset, UINTVAL count)
+                ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_cclass)
-    UINTVAL pos = offset;
+    const UINTVAL pos = offset;
     UINTVAL end = offset + count;
 
-    end = source_string->strlen < end ? source_string->strlen : end;
-    return ENCODING_FIND_CCLASS(interp, source_string,
+    end = src->strlen < end ? src->strlen : end;
+    return ENCODING_FIND_CCLASS(interp, src,
             Parrot_iso_8859_1_typetable, flags, pos, end);
 }
 
 /*
 
-=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
 
 =cut
 
@@ -622,15 +596,15 @@
 
 static INTVAL
 find_not_cclass(PARROT_INTERP, INTVAL flags,
-                ARGIN(STRING *source_string), UINTVAL offset, UINTVAL count)
+                ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_not_cclass)
     UINTVAL pos = offset;
     UINTVAL end = offset + count;
 
-    end = source_string->strlen < end ? source_string->strlen : end;
+    end = src->strlen < end ? src->strlen : end;
     for (; pos < end; ++pos) {
-        const UINTVAL codepoint = ENCODING_GET_CODEPOINT(interp, source_string, pos);
+        const UINTVAL codepoint = ENCODING_GET_CODEPOINT(interp, src, pos);
         if ((Parrot_iso_8859_1_typetable[codepoint] & flags) == 0) {
             return pos;
         }
@@ -662,7 +636,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_iso_8859_1_init(PARROT_INTERP)>
+=item C<void Parrot_charset_iso_8859_1_init(PARROT_INTERP)>
 
 Initializes the ISO-8859-1 charset by installing all the necessary function pointers.
 
@@ -670,8 +644,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_iso_8859_1_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_iso_8859_1_init)
@@ -679,8 +652,6 @@
     static const CHARSET base_set = {
         "iso-8859-1",
         ascii_get_graphemes,
-        ascii_get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -705,13 +676,14 @@
     STRUCT_COPY_FROM_STRUCT(return_set, base_set);
     return_set->preferred_encoding = Parrot_fixed_8_encoding_ptr;
     Parrot_register_charset(interp, "iso-8859-1", return_set);
-    return return_set;
+
+    return;
 }
 
 /*
 
-=item C<STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, STRING *src,
-STRING *dest)>
+=item C<STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, const STRING
+*src)>
 
 Converts STRING C<src> in ISO-8859-1 to ASCII STRING C<dest>.
 
@@ -722,29 +694,21 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING *
-charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, ARGIN(STRING *src),
-        ARGMOD_NULLOK(STRING *dest))
+charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(charset_cvt_iso_8859_1_to_ascii)
     UINTVAL offs;
-    if (dest) {
-        Parrot_gc_reallocate_string_storage(interp, dest, src->strlen);
-        dest->bufused = src->bufused;
-        dest->strlen  = src->strlen;
-    }
+    STRING *dest = Parrot_str_clone(interp, src);
+
     for (offs = 0; offs < src->strlen; ++offs) {
         UINTVAL c = ENCODING_GET_BYTE(interp, src, offs);
         if (c >= 0x80)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LOSSY_CONVERSION,
                 "lossy conversion to ascii");
 
-        if (dest)
-            ENCODING_SET_BYTE(interp, dest, offs, c);
+        ENCODING_SET_BYTE(interp, dest, offs, c);
     }
-    if (dest)
-        return dest;
-    src->charset = Parrot_ascii_charset_ptr;
-    return src;
+    return dest;
 }
 
 /*

Modified: branches/ops_pct/src/string/charset/iso-8859-1.h
==============================================================================
--- branches/ops_pct/src/string/charset/iso-8859-1.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/iso-8859-1.h	Wed May  5 08:45:29 2010	(r46302)
@@ -19,14 +19,11 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+    ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_iso_8859_1_init(PARROT_INTERP)
+void Parrot_charset_iso_8859_1_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_charset_cvt_iso_8859_1_to_ascii \

Modified: branches/ops_pct/src/string/charset/unicode.c
==============================================================================
--- branches/ops_pct/src/string/charset/unicode.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/unicode.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2005-2009, Parrot Foundation.
+Copyright (C) 2005-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -34,7 +34,7 @@
         __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* compose(PARROT_INTERP, ARGIN(STRING *src))
+static STRING* compose(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -45,25 +45,27 @@
         __attribute__nonnull__(2);
 
 static INTVAL cs_rindex(PARROT_INTERP,
-    SHIM(STRING *source_string),
-    SHIM(STRING *search_string),
+    SHIM(const STRING *src),
+    SHIM(const STRING *search_string),
     SHIM(UINTVAL offset))
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* decompose(PARROT_INTERP, SHIM(STRING *src))
+static STRING* decompose(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static void downcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* downcase_first(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
 static INTVAL find_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
@@ -71,7 +73,7 @@
 
 static INTVAL find_not_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
@@ -79,69 +81,50 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_graphemes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 static INTVAL is_cclass(PARROT_INTERP,
     INTVAL flags,
-    ARGIN(const STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-static void set_graphemes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL replace_count,
-    ARGMOD(STRING *insert_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*insert_string);
-
 PARROT_CANNOT_RETURN_NULL
 static STRING * string_from_codepoint(PARROT_INTERP, UINTVAL codepoint)
         __attribute__nonnull__(1);
 
-static void titlecase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* titlecase_first(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
 PARROT_CANNOT_RETURN_NULL
-static STRING* to_charset(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING* to_charset(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 static int u_iscclass(PARROT_INTERP, UINTVAL codepoint, INTVAL flags)
         __attribute__nonnull__(1);
 
-static void upcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING* upcase_first(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-static UINTVAL validate(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL validate(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -166,24 +149,16 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_find_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_find_not_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_get_graphemes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(insert_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_string_from_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_titlecase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -223,34 +198,13 @@
 
 #define UNIMPL EXCEPTION(EXCEPTION_UNIMPLEMENTED, "unimplemented unicode")
 
-/*
-
-=item C<static void set_graphemes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL replace_count, STRING *insert_string)>
-
-Sets C<replace_count> graphemes in STRING C<source_string> starting at offset
-C<offset>.  Gets the graphemes to be replaced from STRING C<insert_string>.
-
-=cut
-
-*/
-
-static void
-set_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL replace_count, ARGMOD(STRING *insert_string))
-{
-    ASSERT_ARGS(set_graphemes)
-    ENCODING_SET_CODEPOINTS(interp, source_string, offset,
-            replace_count, insert_string);
-}
-
 
 /*
 
-=item C<static STRING * get_graphemes(PARROT_INTERP, STRING *source_string,
-UINTVAL offset, UINTVAL count)>
+=item C<static STRING * get_graphemes(PARROT_INTERP, const STRING *src, UINTVAL
+offset, UINTVAL count)>
 
-Gets the graphemes from STRING C<source_string> starting at C<offset>. Gets
+Gets the graphemes from STRING C<src> starting at C<offset>. Gets
 C<count> graphemes total.
 
 =cut
@@ -259,40 +213,16 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_graphemes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count)
+get_graphemes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_graphemes)
-    return ENCODING_GET_CODEPOINTS(interp, source_string, offset, count);
+    return ENCODING_GET_CODEPOINTS(interp, src, offset, count);
 }
 
 
 /*
 
-=item C<static STRING * get_graphemes_inplace(PARROT_INTERP, STRING
-*source_string, UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Gets C<count> graphemes in place from STRING C<source_string> starting at
-offset C<offset>. Puts them into STRING C<dest_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_graphemes_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *dest_string))
-{
-    ASSERT_ARGS(get_graphemes_inplace)
-    return ENCODING_GET_CODEPOINTS_INPLACE(interp, source_string,
-            offset, count, dest_string);
-}
-
-
-/*
-
-=item C<static STRING* to_charset(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING* to_charset(PARROT_INTERP, const STRING *src)>
 
 Converts input STRING C<src> to unicode STRING C<dest>.
 
@@ -302,7 +232,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-to_charset(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_charset(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_charset)
     const charset_converter_t conversion_func =
@@ -310,15 +240,15 @@
                     Parrot_unicode_charset_ptr);
 
     if (conversion_func)
-         return conversion_func(interp, src, dest);
+         return conversion_func(interp, src);
 
-    return Parrot_utf8_encoding_ptr->to_encoding(interp, src, dest);
+    return Parrot_utf8_encoding_ptr->to_encoding(interp, src);
 }
 
 
 /*
 
-=item C<static STRING* compose(PARROT_INTERP, STRING *src)>
+=item C<static STRING* 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.
@@ -331,7 +261,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-compose(PARROT_INTERP, ARGIN(STRING *src))
+compose(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(compose)
 #if PARROT_HAS_ICU
@@ -381,7 +311,7 @@
 
 /*
 
-=item C<static STRING* decompose(PARROT_INTERP, STRING *src)>
+=item C<static STRING* decompose(PARROT_INTERP, const STRING *src)>
 
 Decompose function for unicode charset. This function is not yet implemented.
 
@@ -391,7 +321,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING*
-decompose(PARROT_INTERP, SHIM(STRING *src))
+decompose(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(decompose)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -401,7 +331,7 @@
 
 /*
 
-=item C<static void upcase(PARROT_INTERP, STRING *src)>
+=item C<static STRING* upcase(PARROT_INTERP, const STRING *src)>
 
 Converts the STRING C<src> to all upper-case graphemes, for those characters
 which support upper-case versions.
@@ -412,23 +342,25 @@
 
 */
 
-static void
-upcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(upcase)
 #if PARROT_HAS_ICU
     UErrorCode err;
     int dest_len, src_len, needed;
+    STRING *res;
 #endif
 
     if (src->bufused  == src->strlen
             && src->encoding == Parrot_utf8_encoding_ptr) {
-        Parrot_ascii_charset_ptr->upcase(interp, src);
-        return;
+        return Parrot_ascii_charset_ptr->upcase(interp, src);
     }
 
 #if PARROT_HAS_ICU
-    src = Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
     /*
        U_CAPI int32_t U_EXPORT2
        u_strToUpper(UChar *dest, int32_t destCapacity,
@@ -440,8 +372,8 @@
 
     /* use all available space - see below XXX */
     /* TODO downcase, titlecase too */
-    dest_len = Buffer_buflen(src) / sizeof (UChar);
-    src_len  = src->bufused     / sizeof (UChar);
+    dest_len = Buffer_buflen(res) / sizeof (UChar);
+    src_len  = res->bufused       / sizeof (UChar);
 
     /*
      * XXX troubles:
@@ -460,33 +392,35 @@
      *  TODO downcase, titlecase
      */
     needed = u_strToUpper(NULL, 0,
-            (UChar *)src->strstart, src_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* locale = default */
             &err);
 
     if (needed > dest_len) {
-        Parrot_gc_reallocate_string_storage(interp, src, needed * sizeof (UChar));
+        Parrot_gc_reallocate_string_storage(interp, res, needed * sizeof (UChar));
         dest_len = needed;
     }
 
     err      = U_ZERO_ERROR;
-    dest_len = u_strToUpper((UChar *)src->strstart, dest_len,
-            (UChar *)src->strstart, src_len,
+    dest_len = u_strToUpper((UChar *)res->strstart, dest_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* locale = default */
             &err);
     PARROT_ASSERT(U_SUCCESS(err));
-    src->bufused = dest_len * sizeof (UChar);
+    res->bufused = dest_len * sizeof (UChar);
 
     /* downgrade if possible */
     if (dest_len == (int)src->strlen)
-        src->encoding = Parrot_ucs2_encoding_ptr;
+        res->encoding = Parrot_ucs2_encoding_ptr;
     else {
         /* string is likely still ucs2 if it was earlier
          * but strlen changed due to combining char
          */
-        src->strlen = dest_len;
+        res->strlen = dest_len;
     }
 
+    return res;
+
 #else
     UNUSED(src);
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
@@ -497,7 +431,7 @@
 
 /*
 
-=item C<static void downcase(PARROT_INTERP, STRING *src)>
+=item C<static STRING* downcase(PARROT_INTERP, const STRING *src)>
 
 Converts all graphemes to lower-case, for those graphemes which have cases.
 
@@ -507,23 +441,25 @@
 
 */
 
-static void
-downcase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(downcase)
 #if PARROT_HAS_ICU
     UErrorCode err;
     int dest_len, src_len;
+    STRING *res;
 #endif
 
     if (src->bufused  == src->strlen
             && src->encoding == Parrot_utf8_encoding_ptr) {
-        Parrot_ascii_charset_ptr->downcase(interp, src);
-        return;
+        return Parrot_ascii_charset_ptr->downcase(interp, src);
     }
 
 #if PARROT_HAS_ICU
-    src = Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
     /*
 U_CAPI int32_t U_EXPORT2
 u_strToLower(UChar *dest, int32_t destCapacity,
@@ -532,26 +468,29 @@
              UErrorCode *pErrorCode);
      */
     err      = U_ZERO_ERROR;
-    src_len  = src->bufused / sizeof (UChar);
-    dest_len = u_strToLower((UChar *)src->strstart, src_len,
-            (UChar *)src->strstart, src_len,
+    src_len  = res->bufused / sizeof (UChar);
+    dest_len = u_strToLower((UChar *)res->strstart, src_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* locale = default */
             &err);
-    src->bufused = dest_len * sizeof (UChar);
+    res->bufused = dest_len * sizeof (UChar);
 
     if (!U_SUCCESS(err)) {
         err = U_ZERO_ERROR;
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        dest_len = u_strToLower((UChar *)src->strstart, dest_len,
-                (UChar *)src->strstart, src_len,
+        Parrot_gc_reallocate_string_storage(interp, res, res->bufused);
+        dest_len = u_strToLower((UChar *)res->strstart, dest_len,
+                (UChar *)res->strstart, src_len,
                 NULL,       /* locale = default */
                 &err);
         PARROT_ASSERT(U_SUCCESS(err));
     }
 
     /* downgrade if possible */
-    if (dest_len == (int)src->strlen)
-        src->encoding = Parrot_ucs2_encoding_ptr;
+    if (dest_len == (int)res->strlen)
+        res->encoding = Parrot_ucs2_encoding_ptr;
+
+    return res;
+
 #else
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
         "no ICU lib loaded");
@@ -561,7 +500,7 @@
 
 /*
 
-=item C<static void titlecase(PARROT_INTERP, STRING *src)>
+=item C<static STRING* titlecase(PARROT_INTERP, const STRING *src)>
 
 Converts the string to title case, for those characters which support cases.
 
@@ -571,22 +510,24 @@
 
 */
 
-static void
-titlecase(PARROT_INTERP, ARGIN(STRING *src))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(titlecase)
 #if PARROT_HAS_ICU
 
     UErrorCode err;
     int dest_len, src_len;
+    STRING *res;
 
     if (src->bufused  == src->strlen
     &&  src->encoding == Parrot_utf8_encoding_ptr) {
-        Parrot_ascii_charset_ptr->titlecase(interp, src);
-        return;
+        return Parrot_ascii_charset_ptr->titlecase(interp, src);
     }
 
-    src = Parrot_utf16_encoding_ptr->to_encoding(interp, src, NULL);
+    /* to_encoding will allocate new string */
+    res = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
 
     /*
 U_CAPI int32_t U_EXPORT2
@@ -598,27 +539,30 @@
      */
 
     err      = U_ZERO_ERROR;
-    src_len  = src->bufused / sizeof (UChar);
-    dest_len = u_strToTitle((UChar *)src->strstart, src_len,
-            (UChar *)src->strstart, src_len,
+    src_len  = res->bufused / sizeof (UChar);
+    dest_len = u_strToTitle((UChar *)res->strstart, src_len,
+            (UChar *)res->strstart, src_len,
             NULL,       /* default titleiter */
             NULL,       /* locale = default */
             &err);
-    src->bufused = dest_len * sizeof (UChar);
+    res->bufused = dest_len * sizeof (UChar);
 
     if (!U_SUCCESS(err)) {
         err = U_ZERO_ERROR;
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        dest_len = u_strToTitle((UChar *)src->strstart, dest_len,
-                (UChar *)src->strstart, src_len,
+        Parrot_gc_reallocate_string_storage(interp, res, res->bufused);
+        dest_len = u_strToTitle((UChar *)res->strstart, dest_len,
+                (UChar *)res->strstart, src_len,
                 NULL, NULL,
                 &err);
         PARROT_ASSERT(U_SUCCESS(err));
     }
 
     /* downgrade if possible */
-    if (dest_len == (int)src->strlen)
-        src->encoding = Parrot_ucs2_encoding_ptr;
+    if (dest_len == (int)res->strlen)
+        res->encoding = Parrot_ucs2_encoding_ptr;
+
+    return res;
+
 #else
     UNUSED(src);
     Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
@@ -629,17 +573,18 @@
 
 /*
 
-=item C<static void upcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* upcase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first grapheme in the STRING C<source_string> to uppercase, if the
+Converts the first grapheme in the STRING C<src> to uppercase, if the
 grapheme supports it. Not implemented.
 
 =cut
 
 */
 
-static void
-upcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+upcase_first(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(upcase_first)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -649,17 +594,18 @@
 
 /*
 
-=item C<static void downcase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* downcase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first grapheme in the STRING C<source_string> to lower-case, if
+Converts the first grapheme in the STRING C<src> to lower-case, if
 the grapheme supports it. Not implemented
 
 =cut
 
 */
 
-static void
-downcase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+downcase_first(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(downcase_first)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -669,17 +615,18 @@
 
 /*
 
-=item C<static void titlecase_first(PARROT_INTERP, STRING *source_string)>
+=item C<static STRING* titlecase_first(PARROT_INTERP, const STRING *src)>
 
-Converts the first grapheme in STRING C<source_string> to title case, if the
+Converts the first grapheme in STRING C<src> to title case, if the
 string supports it. Not implemented.
 
 =cut
 
 */
 
-static void
-titlecase_first(PARROT_INTERP, SHIM(STRING *source_string))
+PARROT_CANNOT_RETURN_NULL
+static STRING*
+titlecase_first(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(titlecase_first)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -735,10 +682,10 @@
 
 /*
 
-=item C<static INTVAL cs_rindex(PARROT_INTERP, STRING *source_string, STRING
+=item C<static INTVAL cs_rindex(PARROT_INTERP, const STRING *src, const STRING
 *search_string, UINTVAL offset)>
 
-Finds the last index of substring C<search_string> in STRING C<source_string>,
+Finds the last index of substring C<search_string> in STRING C<src>,
 starting from C<offset>. Not implemented.
 
 =cut
@@ -746,8 +693,8 @@
 */
 
 static INTVAL
-cs_rindex(PARROT_INTERP, SHIM(STRING *source_string),
-        SHIM(STRING *search_string), SHIM(UINTVAL offset))
+cs_rindex(PARROT_INTERP, SHIM(const STRING *src),
+        SHIM(const STRING *search_string), SHIM(UINTVAL offset))
 {
     ASSERT_ARGS(cs_rindex)
     /* TODO: https://trac.parrot.org/parrot/wiki/StringsTasklist Implement this. */
@@ -757,7 +704,7 @@
 
 /*
 
-=item C<static UINTVAL validate(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL validate(PARROT_INTERP, const STRING *src)>
 
 Returns 1 if the STRING C<src> is a valid unicode string, returns 0 otherwise.
 
@@ -766,7 +713,7 @@
 */
 
 static UINTVAL
-validate(PARROT_INTERP, ARGIN(STRING *src))
+validate(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(validate)
     UINTVAL     offset;
@@ -799,6 +746,7 @@
 {
     ASSERT_ARGS(u_iscclass)
 #if PARROT_HAS_ICU
+    UNUSED(interp);
             /* XXX which one
                return u_charDigitValue(codepoint);
                */
@@ -882,24 +830,23 @@
 
 /*
 
-=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING
-*source_string, UINTVAL offset)>
+=item C<static INTVAL is_cclass(PARROT_INTERP, INTVAL flags, const STRING *src,
+UINTVAL offset)>
 
 =cut
 
 */
 
 static INTVAL
-is_cclass(PARROT_INTERP, INTVAL flags,
-          ARGIN(const STRING *source_string), UINTVAL offset)
+is_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset)
 {
     ASSERT_ARGS(is_cclass)
     UINTVAL codepoint;
 
-    if (offset >= source_string->strlen)
+    if (offset >= src->strlen)
         return 0;
 
-    codepoint = ENCODING_GET_CODEPOINT(interp, source_string, offset);
+    codepoint = ENCODING_GET_CODEPOINT(interp, src, offset);
 
     if (codepoint >= 256)
         return u_iscclass(interp, codepoint, flags) != 0;
@@ -910,16 +857,15 @@
 
 /*
 
-=item C<static INTVAL find_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL find_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
 
 =cut
 
 */
 
 static INTVAL
-find_cclass(PARROT_INTERP, INTVAL flags,
-            ARGIN(STRING *source_string), UINTVAL offset, UINTVAL count)
+find_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_cclass)
     String_iter iter;
@@ -927,11 +873,11 @@
     UINTVAL     pos = offset;
     UINTVAL     end = offset + count;
 
-    ENCODING_ITER_INIT(interp, source_string, &iter);
+    ENCODING_ITER_INIT(interp, src, &iter);
 
     iter.set_position(interp, &iter, pos);
 
-    end = source_string->strlen < end ? source_string->strlen : end;
+    end = src->strlen < end ? src->strlen : end;
 
     for (; pos < end; ++pos) {
         codepoint = iter.get_and_advance(interp, &iter);
@@ -951,16 +897,16 @@
 
 /*
 
-=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
-*source_string, UINTVAL offset, UINTVAL count)>
+=item C<static INTVAL find_not_cclass(PARROT_INTERP, INTVAL flags, const STRING
+*src, UINTVAL offset, UINTVAL count)>
 
 =cut
 
 */
 
 static INTVAL
-find_not_cclass(PARROT_INTERP, INTVAL flags,
-                ARGIN(STRING *source_string), UINTVAL offset, UINTVAL count)
+find_not_cclass(PARROT_INTERP, INTVAL flags, ARGIN(const STRING *src),
+        UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(find_not_cclass)
     String_iter iter;
@@ -969,17 +915,17 @@
     UINTVAL     end = offset + count;
     int         bit;
 
-    if (pos > source_string->strlen) {
+    if (pos > src->strlen) {
         /* XXX: Throw in this case? */
         return offset + count;
     }
 
-    ENCODING_ITER_INIT(interp, source_string, &iter);
+    ENCODING_ITER_INIT(interp, src, &iter);
 
     if (pos)
         iter.set_position(interp, &iter, pos);
 
-    end = source_string->strlen < end ? source_string->strlen : end;
+    end = src->strlen < end ? src->strlen : end;
 
     if (flags == enum_cclass_any)
         return end;
@@ -1064,7 +1010,7 @@
 
 /*
 
-=item C<const CHARSET * Parrot_charset_unicode_init(PARROT_INTERP)>
+=item C<void Parrot_charset_unicode_init(PARROT_INTERP)>
 
 Initializes the Unicode charset by installing all the necessary function
 pointers.
@@ -1073,8 +1019,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET *
+void
 Parrot_charset_unicode_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_charset_unicode_init)
@@ -1082,8 +1027,6 @@
     static const CHARSET base_set   = {
         "unicode",
         get_graphemes,
-        get_graphemes_inplace,
-        set_graphemes,
         to_charset,
         compose,
         decompose,
@@ -1115,7 +1058,8 @@
      */
     return_set->preferred_encoding = Parrot_utf8_encoding_ptr;
     Parrot_register_charset(interp, "unicode", return_set);
-    return return_set;
+
+    return;
 }
 
 

Modified: branches/ops_pct/src/string/charset/unicode.h
==============================================================================
--- branches/ops_pct/src/string/charset/unicode.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/charset/unicode.h	Wed May  5 08:45:29 2010	(r46302)
@@ -21,8 +21,7 @@
 /* HEADERIZER BEGIN: src/string/charset/unicode.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_unicode_init(PARROT_INTERP)
+void Parrot_charset_unicode_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_charset_unicode_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/src/string/encoding.c
==============================================================================
--- branches/ops_pct/src/string/encoding.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -114,6 +114,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING *
@@ -173,6 +174,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_encoding_number(PARROT_INTERP, ARGIN(const STRING *encodingname))
@@ -199,6 +201,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_encoding_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
@@ -226,6 +229,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING*
@@ -250,6 +254,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING*
@@ -275,6 +280,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const char *
@@ -321,7 +327,7 @@
     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->n_encodings;
     all_encodings->enc[n].encoding = encoding;
 
     return 1;
@@ -345,7 +351,7 @@
 {
     ASSERT_ARGS(Parrot_str_internal_register_encoding_names)
     int n;
-    for (n = 0; n < all_encodings->n_encodings; 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);
 }
@@ -428,6 +434,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 const ENCODING *

Modified: branches/ops_pct/src/string/encoding/fixed_8.c
==============================================================================
--- branches/ops_pct/src/string/encoding/fixed_8.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/fixed_8.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,24 +24,20 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *source_string))
-        __attribute__nonnull__(1);
-
-static UINTVAL bytes(SHIM_INTERP, ARGIN(STRING *source_string))
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(STRING *source_string))
+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(STRING *s),
+static UINTVAL find_cclass(SHIM_INTERP,
+    ARGIN(const STRING *s),
     ARGIN(const INTVAL *typetable),
     INTVAL flags,
     UINTVAL pos,
     UINTVAL end)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
@@ -63,37 +59,29 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*iter);
 
+static size_t fixed_8_hash(SHIM_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(2);
+
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL get_byte(PARROT_INTERP,
-    ARGIN(const STRING *source_string),
+static UINTVAL get_byte(SHIM_INTERP,
+    ARGIN(const STRING *src),
     UINTVAL offset)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_bytes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*return_string);
-
-PARROT_WARN_UNUSED_RESULT
 static UINTVAL get_codepoint(PARROT_INTERP,
-    ARGIN(const STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -101,24 +89,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 static void iter_init(SHIM_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -127,56 +103,24 @@
         FUNC_MODIFIES(*iter);
 
 static void set_byte(PARROT_INTERP,
-    ARGIN(const STRING *source_string),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL byte)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *new_bytes))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*new_bytes);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *new_codepoints))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*new_codepoints);
-
 PARROT_DOES_NOT_RETURN
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, SHIM(const STRING *src))
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , 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(s) \
     , PARROT_ASSERT_ARG(typetable))
 #define ASSERT_ARGS_fixed8_get_next __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -186,43 +130,25 @@
     , PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_fixed8_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(iter))
+#define ASSERT_ARGS_fixed_8_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_get_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+       PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(return_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_iter_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src) \
     , PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(new_bytes))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_set_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(new_codepoints))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -233,7 +159,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -247,7 +173,7 @@
 PARROT_DOES_NOT_RETURN
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, SHIM(STRING *src), SHIM(STRING *dest))
+to_encoding(PARROT_INTERP, SHIM(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     UNIMPL;
@@ -256,8 +182,8 @@
 
 /*
 
-=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *source_string,
-UINTVAL offset)>
+=item C<static UINTVAL get_codepoint(PARROT_INTERP, const STRING *src, UINTVAL
+offset)>
 
 codepoints are bytes, so delegate
 
@@ -267,36 +193,17 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-get_codepoint(PARROT_INTERP, ARGIN(const STRING *source_string),
+get_codepoint(PARROT_INTERP, ARGIN(const STRING *src),
         UINTVAL offset)
 {
     ASSERT_ARGS(get_codepoint)
-    return get_byte(interp, source_string, offset);
-}
-
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL codepoint)>
-
-This is the same as set byte
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    set_byte(interp, source_string, offset, codepoint);
+    return get_byte(interp, src, offset);
 }
 
 
 /*
 
-=item C<static UINTVAL find_cclass(PARROT_INTERP, STRING *s, const INTVAL
+=item C<static UINTVAL find_cclass(PARROT_INTERP, const STRING *s, const INTVAL
 *typetable, INTVAL flags, UINTVAL pos, UINTVAL end)>
 
 codepoints are bytes, so delegate
@@ -307,11 +214,11 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
+find_cclass(SHIM_INTERP, ARGIN(const STRING *s), ARGIN(const INTVAL *typetable),
 INTVAL flags, UINTVAL pos, UINTVAL end)
 {
     ASSERT_ARGS(find_cclass)
-    unsigned char *contents = (unsigned char *)s->strstart;
+    const unsigned char *contents = (const unsigned char *)s->strstart;
     for (; pos < end; ++pos) {
         if ((typetable[contents[pos]] & flags) != 0) {
             return pos;
@@ -322,8 +229,8 @@
 
 /*
 
-=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *source_string,
-UINTVAL offset)>
+=item C<static UINTVAL get_byte(PARROT_INTERP, const STRING *src, UINTVAL
+offset)>
 
 Returns the byte in string C<src> at position C<offset>.
 
@@ -333,15 +240,15 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-get_byte(PARROT_INTERP, ARGIN(const STRING *source_string), UINTVAL offset)
+get_byte(SHIM_INTERP, ARGIN(const STRING *src), UINTVAL offset)
 {
     ASSERT_ARGS(get_byte)
-    unsigned char *contents = (unsigned char *)source_string->strstart;
+    const unsigned char *contents = (const unsigned char *)src->strstart;
 
-    if (offset >= source_string->bufused) {
+    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, source_string->bufused); */
+                offset, src->bufused); */
         return 0;
     }
 
@@ -350,8 +257,8 @@
 
 /*
 
-=item C<static void set_byte(PARROT_INTERP, const STRING *source_string, UINTVAL
-offset, UINTVAL byte)>
+=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>.
 
@@ -360,24 +267,23 @@
 */
 
 static void
-set_byte(PARROT_INTERP, ARGIN(const STRING *source_string),
-        UINTVAL offset, UINTVAL byte)
+set_byte(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL byte)
 {
     ASSERT_ARGS(set_byte)
     unsigned char *contents;
 
-    if (offset >= source_string->bufused)
+    if (offset >= src->bufused)
         Parrot_ex_throw_from_c_args(interp, NULL, 0,
             "set_byte past the end of the buffer");
 
-    contents = (unsigned char *)source_string->strstart;
+    contents = (unsigned char *)src->strstart;
     contents[offset] = (unsigned char)byte;
 }
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, STRING *source_string,
-UINTVAL offset, UINTVAL count)>
+=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>.  (Delegates to C<get_bytes>.)
@@ -389,19 +295,17 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count)
+get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
-    STRING * const return_string = get_bytes(interp, source_string,
-            offset, count);
-    return_string->charset = source_string->charset;
+    STRING * const return_string = get_bytes(interp, src, offset, count);
+    return_string->charset = src->charset;
     return return_string;
 }
 
 /*
 
-=item C<static STRING * get_bytes(PARROT_INTERP, STRING *source_string, UINTVAL
+=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>.
@@ -413,67 +317,13 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_bytes(PARROT_INTERP, ARGIN(STRING *source_string), UINTVAL offset, UINTVAL count)
+get_bytes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_bytes)
-    STRING * const return_string = Parrot_str_new_COW(interp,
-            source_string);
-    return_string->encoding = source_string->encoding;
-    return_string->charset = source_string->charset;
+    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 STRING * get_codepoints_inplace(PARROT_INTERP, STRING
-*source_string, UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.  (Delegates to C<get_bytes>.)
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *dest_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    return get_bytes_inplace(interp, source_string, offset,
-            count, dest_string);
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *source_string,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    Parrot_str_reuse_COW(interp, source_string, return_string);
+    return_string->encoding = src->encoding;
+    return_string->charset = src->charset;
 
     return_string->strstart = (char *)return_string->strstart + offset ;
     return_string->bufused = count;
@@ -484,66 +334,10 @@
     return return_string;
 }
 
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL count, STRING *new_codepoints)>
-
-Delegate to set_bytes
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    set_bytes(interp, source_string, offset, count, new_codepoints);
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *source_string, UINTVAL
-offset, UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, ARGIN(STRING *source_string),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    Parrot_str_replace(interp, source_string, offset, count, new_bytes, NULL);
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *source_string)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *source_string))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
 
 /*
 
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *source_string)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -552,15 +346,15 @@
 */
 
 static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(STRING *source_string))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
-    return bytes(interp, source_string);
+    return bytes(interp, src);
 }
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *source_string)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -569,10 +363,10 @@
 */
 
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *source_string))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
-    return source_string->bufused;
+    return src->bufused;
 }
 
 /*
@@ -594,7 +388,7 @@
 {
     ASSERT_ARGS(fixed8_get_next)
     const UINTVAL c = get_byte(interp, iter->str, iter->charpos++);
-    iter->bytepos++;
+    ++iter->bytepos;
     return c;
 }
 
@@ -615,7 +409,7 @@
 {
     ASSERT_ARGS(fixed8_set_next)
     set_byte(interp, iter->str, iter->charpos++, c);
-    iter->bytepos++;
+    ++iter->bytepos;
 }
 
 /*
@@ -660,9 +454,37 @@
     iter->set_position    = fixed8_set_position;
 }
 
+
 /*
 
-=item C<ENCODING * Parrot_encoding_fixed_8_init(PARROT_INTERP)>
+=item C<static size_t fixed_8_hash(PARROT_INTERP, const STRING *s, size_t
+hashval)>
+
+Returns the hashed value of the string, given a seed in hashval.
+
+=cut
+
+*/
+
+static size_t
+fixed_8_hash(SHIM_INTERP, ARGIN(const STRING *s), size_t hashval)
+{
+    ASSERT_ARGS(fixed_8_hash)
+    const unsigned char *pos = (const unsigned char *)s->strstart;
+    UINTVAL        len = s->strlen;
+
+    while (len--) {
+        hashval += hashval << 5;
+        hashval += *(pos++);
+    }
+
+    return hashval;
+}
+
+
+/*
+
+=item C<void Parrot_encoding_fixed_8_init(PARROT_INTERP)>
 
 Initializes the fixed-8 encoding.
 
@@ -670,8 +492,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_fixed_8_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_fixed_8_init)
@@ -682,25 +503,21 @@
         1, /* Max bytes per codepoint */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
-
+        find_cclass,
+        fixed_8_hash
     };
+
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "fixed_8", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 

Modified: branches/ops_pct/src/string/encoding/fixed_8.h
==============================================================================
--- branches/ops_pct/src/string/encoding/fixed_8.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/fixed_8.h	Wed May  5 08:45:29 2010	(r46302)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/fixed_8.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_fixed_8_init(PARROT_INTERP)
+void Parrot_encoding_fixed_8_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_fixed_8_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/src/string/encoding/ucs2.c
==============================================================================
--- branches/ops_pct/src/string/encoding/ucs2.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/ucs2.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -36,22 +36,18 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *src))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(PARROT_INTERP, ARGIN(STRING *src))
-        __attribute__nonnull__(1)
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL find_cclass(PARROT_INTERP,
-    ARGIN(STRING *s),
+    ARGIN(const STRING *s),
     ARGIN(const INTVAL *typetable),
     INTVAL flags,
     UINTVAL pos,
@@ -68,20 +64,11 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
+    SHIM(const STRING *src),
     SHIM(UINTVAL offset),
     SHIM(UINTVAL count))
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *return_string))
-        __attribute__nonnull__(1);
-
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset)
@@ -91,21 +78,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(STRING *src),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *dest_string))
-        __attribute__nonnull__(1);
-
 static void iter_init(PARROT_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -120,61 +98,36 @@
     SHIM(UINTVAL byte))
         __attribute__nonnull__(1);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_codepoints))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-static UINTVAL ucs2_decode_and_advance(PARROT_INTERP,
-    ARGMOD(String_iter *i))
-        __attribute__nonnull__(1)
+static UINTVAL ucs2_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-static void ucs2_encode_and_advance(PARROT_INTERP,
+static void ucs2_encode_and_advance(SHIM_INTERP,
     ARGMOD(String_iter *i),
     UINTVAL c)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
+static size_t ucs2_hash(PARROT_INTERP,
+    ARGIN(const STRING *s),
+    size_t hashval)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 static void ucs2_set_position(SHIM_INTERP,
     ARGMOD(String_iter *i),
     UINTVAL n)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
+       PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -186,39 +139,28 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_iter_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src) \
     , PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(dest))
+    , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_ucs2_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
+       PARROT_ASSERT_ARG(i))
 #define ASSERT_ARGS_ucs2_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_ucs2_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_ucs2_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(i))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -235,7 +177,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -248,11 +190,11 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(STRING *src), ARGMOD(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     STRING * const result =
-        Parrot_utf16_encoding_ptr->to_encoding(interp, src, dest);
+        Parrot_utf16_encoding_ptr->to_encoding(interp, src);
 
     /* conversion to utf16 downgrads to ucs-2 if possible - check result */
     if (result->encoding == Parrot_utf16_encoding_ptr)
@@ -278,43 +220,20 @@
 {
     ASSERT_ARGS(get_codepoint)
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) src->strstart;
+    const UChar * const s = (const UChar*) src->strstart;
+    UNUSED(interp);
     return s[offset];
 #else
-    UNUSED(offset)
+    UNUSED(offset);
+    UNUSED(src);
     no_ICU_lib(interp);
 #endif
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-#if PARROT_HAS_ICU
-    UChar * const s = (UChar*) src->strstart;
-    s[offset] = codepoint;
-#else
-    UNUSED(src)
-    UNUSED(offset)
-    UNUSED(codepoint)
-    no_ICU_lib(interp);
-#endif
-}
 
 /*
 
-=item C<static UINTVAL find_cclass(PARROT_INTERP, STRING *s, const INTVAL
+=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.
@@ -325,9 +244,15 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
+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");
@@ -372,7 +297,7 @@
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, STRING *src, UINTVAL
+=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
@@ -385,10 +310,11 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL count)
+get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
+
 #if PARROT_HAS_ICU
     return_string->strstart = (char*)src->strstart + offset * sizeof (UChar);
     return_string->bufused = count * sizeof (UChar);
@@ -412,8 +338,8 @@
 
 /*
 
-=item C<static STRING * get_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count)>
+=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>.
 
@@ -424,7 +350,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_bytes(PARROT_INTERP, SHIM(STRING *src), SHIM(UINTVAL offset),
+get_bytes(PARROT_INTERP, SHIM(const STRING *src), SHIM(UINTVAL offset),
         SHIM(UINTVAL count))
 {
     ASSERT_ARGS(get_bytes)
@@ -434,109 +360,7 @@
 
 /*
 
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *dest_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *dest_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    UNIMPL;
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -546,19 +370,21 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
 #if PARROT_HAS_ICU
+    UNUSED(interp);
     return src->bufused / sizeof (UChar);
 #else
+    UNUSED(src);
     no_ICU_lib(interp);
 #endif
 }
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -568,7 +394,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-bytes(PARROT_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -585,19 +411,19 @@
 */
 
 static UINTVAL
-ucs2_decode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i))
+ucs2_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
 {
     ASSERT_ARGS(ucs2_decode_and_advance)
 
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) i->str->strstart;
+    const UChar * const s = (const UChar*) i->str->strstart;
     size_t pos = i->bytepos / sizeof (UChar);
 
     /* TODO either make sure that we don't go past end or use SAFE
      *      iter versions
      */
     const UChar c = s[pos++];
-    i->charpos++;
+    ++i->charpos;
     i->bytepos = pos * sizeof (UChar);
     return c;
 #else
@@ -605,6 +431,7 @@
      * See TT #557
      */
     PARROT_ASSERT(0);
+    UNUSED(i);
     return (UINTVAL)0; /* Stop the static analyzers from panicing */
 #endif
 }
@@ -622,26 +449,63 @@
 */
 
 static void
-ucs2_encode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+ucs2_encode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL c)
 {
     ASSERT_ARGS(ucs2_encode_and_advance)
 
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) i->str->strstart;
+    UChar    *s = (UChar*) i->str->strstart;
     UINTVAL pos = i->bytepos / sizeof (UChar);
-    s[pos++] = (UChar)c;
-    i->charpos++;
+    s[pos++]    = (UChar)c;
+    ++i->charpos;
     i->bytepos = pos * sizeof (UChar);
 #else
     /* This function must never be called if compiled without ICU.
      * See TT #557
      */
+    UNUSED(i);
+    UNUSED(c);
     PARROT_ASSERT(0);
 #endif
 }
 
 /*
 
+=item C<static size_t ucs2_hash(PARROT_INTERP, const STRING *s, size_t hashval)>
+
+Returns the hashed value of the string, given a seed in hashval.
+
+=cut
+
+*/
+
+static size_t
+ucs2_hash(PARROT_INTERP, ARGIN(const STRING *s), size_t hashval)
+{
+    ASSERT_ARGS(ucs2_hash)
+#if PARROT_HAS_ICU
+    const UChar *pos = (const UChar*) s->strstart;
+    UINTVAL len = s->strlen;
+    UNUSED(interp);
+
+    while (len--) {
+        hashval += hashval << 5;
+        hashval += *(pos++);
+    }
+
+    return hashval;
+
+#else
+    UNUSED(s);
+    UNUSED(hashval);
+
+    no_ICU_lib(interp);
+#endif
+}
+
+
+/*
+
 =item C<static void ucs2_set_position(PARROT_INTERP, String_iter *i, UINTVAL n)>
 
 Moves the string iterator C<i> to the position C<n> in the string.
@@ -662,6 +526,8 @@
     /* This function must never be called if compiled without ICU.
      * See TT #557
      */
+    UNUSED(i);
+    UNUSED(n);
     PARROT_ASSERT(0);
 #endif
 }
@@ -683,6 +549,7 @@
 {
     ASSERT_ARGS(iter_init)
 #if PARROT_HAS_ICU
+    UNUSED(interp);
     iter->str             = src;
     iter->bytepos         = 0;
     iter->charpos         = 0;
@@ -690,13 +557,15 @@
     iter->set_and_advance = ucs2_encode_and_advance;
     iter->set_position    = ucs2_set_position;
 #else
+    UNUSED(src);
+    UNUSED(iter);
     no_ICU_lib(interp);
 #endif
 }
 
 /*
 
-=item C<ENCODING * Parrot_encoding_ucs2_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_ucs2_init(PARROT_INTERP)>
 
 Initializes the UCS-2 encoding.
 
@@ -704,8 +573,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_ucs2_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_ucs2_init)
@@ -716,24 +584,20 @@
         2, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        ucs2_hash
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "ucs2", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/ops_pct/src/string/encoding/ucs2.h
==============================================================================
--- branches/ops_pct/src/string/encoding/ucs2.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/ucs2.h	Wed May  5 08:45:29 2010	(r46302)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/ucs2.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_ucs2_init(PARROT_INTERP)
+void Parrot_encoding_ucs2_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_ucs2_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/src/string/encoding/utf16.c
==============================================================================
--- branches/ops_pct/src/string/encoding/utf16.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/utf16.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -26,21 +26,18 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *src))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL bytes(SHIM_INTERP, ARGIN(STRING *src))
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL codepoints(PARROT_INTERP, ARGIN(STRING *src))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL find_cclass(PARROT_INTERP,
-    ARGIN(STRING *s),
+    ARGIN(const STRING *s),
     ARGIN(const INTVAL *typetable),
     INTVAL flags,
     UINTVAL pos,
@@ -57,23 +54,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_bytes(PARROT_INTERP,
-    ARGIN(STRING *src),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGIN(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5);
-
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset)
@@ -83,24 +69,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(STRING *src),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*return_string);
-
 static void iter_init(PARROT_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -116,60 +90,29 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGIN(STRING *new_codepoints))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
-static UINTVAL utf16_decode_and_advance(PARROT_INTERP,
-    ARGMOD(String_iter *i))
-        __attribute__nonnull__(1)
+static UINTVAL utf16_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-static void utf16_encode_and_advance(PARROT_INTERP,
+static void utf16_encode_and_advance(SHIM_INTERP,
     ARGMOD(String_iter *i),
     UINTVAL c)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-static void utf16_set_position(PARROT_INTERP,
+static void utf16_set_position(SHIM_INTERP,
     ARGMOD(String_iter *i),
     UINTVAL n)
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*i);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -184,20 +127,12 @@
 #define ASSERT_ARGS_get_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(return_string))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(return_string))
 #define ASSERT_ARGS_iter_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src) \
@@ -205,27 +140,15 @@
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(new_codepoints))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_utf16_decode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
+       PARROT_ASSERT_ARG(i))
 #define ASSERT_ARGS_utf16_encode_and_advance __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
+       PARROT_ASSERT_ARG(i))
 #define ASSERT_ARGS_utf16_set_position __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(i))
+       PARROT_ASSERT_ARG(i))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -242,7 +165,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -256,7 +179,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGIN(STRING *src), ARGIN_NULLOK(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
 #if PARROT_HAS_ICU
@@ -265,45 +188,28 @@
     UChar *p;
 #endif
     int src_len;
-    int in_place = dest == NULL;
     STRING *result;
 
     if (src->encoding == Parrot_utf16_encoding_ptr ||
             src->encoding == Parrot_ucs2_encoding_ptr)
-        return in_place ? src : Parrot_str_copy(interp, src);
+        return Parrot_str_clone(interp, src);
+
+    result = Parrot_gc_new_string_header(interp, 0);
+
     /*
      * TODO adapt string creation functions
      */
     src_len = src->strlen;
-    if (in_place) {
-        result = src;
-    }
-    else {
-        result = dest;
-    }
     if (!src_len) {
         result->charset  = Parrot_unicode_charset_ptr;
         result->encoding = Parrot_ucs2_encoding_ptr;
         result->strlen = result->bufused = 0;
         return result;
     }
-    /*
-       u_strFromUTF8(UChar *dest,
-       int32_t destCapacity,
-       int32_t *pDestLength,
-       const char *src,
-       int32_t srcLength,
-       UErrorCode *pErrorCode);
-       */
 #if PARROT_HAS_ICU
-    if (in_place) {
-        /* need intermediate memory */
-        p = mem_gc_allocate_n_typed(interp, src_len, UChar);
-    }
-    else {
-        Parrot_gc_reallocate_string_storage(interp, dest, sizeof (UChar) * src_len);
-        p = (UChar *)dest->strstart;
-    }
+    Parrot_gc_allocate_string_storage(interp, result, sizeof (UChar) * src_len);
+    p = (UChar *)result->strstart;
+
     if (src->charset == Parrot_iso_8859_1_charset_ptr ||
             src->charset == Parrot_ascii_charset_ptr) {
         for (dest_len = 0; dest_len < (int)src->strlen; ++dest_len) {
@@ -318,25 +224,16 @@
             /*
              * have to resize - required len in UChars is in dest_len
              */
-            if (in_place)
-                p = mem_gc_realloc_n_typed(interp, p, dest_len, UChar);
-            else {
-                result->bufused = dest_len * sizeof (UChar);
-                Parrot_gc_reallocate_string_storage(interp, dest,
-                                         sizeof (UChar) * dest_len);
-                p = (UChar *)dest->strstart;
-            }
+            result->bufused = dest_len * sizeof (UChar);
+            Parrot_gc_reallocate_string_storage(interp, result,
+                                     sizeof (UChar) * dest_len);
+            p = (UChar *)result->strstart;
             u_strFromUTF8(p, dest_len,
                     &dest_len, src->strstart, src->bufused, &err);
             PARROT_ASSERT(U_SUCCESS(err));
         }
     }
     result->bufused = dest_len * sizeof (UChar);
-    if (in_place) {
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        memcpy(src->strstart, p, src->bufused);
-        mem_gc_free(interp, p);
-    }
     result->charset  = Parrot_unicode_charset_ptr;
     result->encoding = Parrot_utf16_encoding_ptr;
     result->strlen = src_len;
@@ -367,8 +264,9 @@
 {
     ASSERT_ARGS(get_codepoint)
 #if PARROT_HAS_ICU
-    UChar * const s = (UChar*) src->strstart;
+    const UChar * const s = (UChar*) src->strstart;
     UINTVAL c, pos;
+    UNUSED(interp);
 
     pos = 0;
     U16_FWD_N_UNSAFE(s, pos, offset);
@@ -383,31 +281,10 @@
 #endif
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset);
-    UNUSED(codepoint);
-    UNIMPL;
-}
 
 /*
 
-=item C<static UINTVAL find_cclass(PARROT_INTERP, STRING *s, const INTVAL
+=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.
@@ -418,9 +295,15 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
+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");
@@ -478,7 +361,7 @@
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, STRING *src, UINTVAL
+=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
@@ -491,12 +374,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL count)
+get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
     String_iter iter;
     UINTVAL start;
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
 
     iter_init(interp, src, &iter);
     iter.set_position(interp, &iter, offset);
@@ -512,41 +395,8 @@
 
 /*
 
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGIN(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    String_iter iter;
-    UINTVAL start;
-    Parrot_str_reuse_COW(interp, src, return_string);
-    iter_init(interp, src, &iter);
-    iter.set_position(interp, &iter, offset);
-    start = iter.bytepos;
-    return_string->strstart = (char *)return_string->strstart + start ;
-    iter.set_position(interp, &iter, offset + count);
-    return_string->bufused = iter.bytepos - start;
-    return_string->strlen = count;
-    return_string->hashval = 0;
-    return return_string;
-}
-
-/*
-
-=item C<static STRING * get_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count)>
+=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>.
 
@@ -557,7 +407,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_bytes(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL count)
+get_bytes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_bytes)
     UNUSED(interp);
@@ -569,100 +419,7 @@
 
 /*
 
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, ARGIN(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGIN(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset)
-    UNUSED(count);
-    UNUSED(return_string);
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, ARGIN(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGIN(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNUSED(interp);
-    UNUSED(src);
-    UNUSED(offset)
-    UNUSED(count);
-    UNUSED(new_codepoints);
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        UINTVAL offset, UINTVAL count, SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNUSED(interp);
-    UNUSED(offset)
-    UNUSED(count);
-    UNIMPL;
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -672,7 +429,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-codepoints(PARROT_INTERP, ARGIN(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
     String_iter iter;
@@ -688,7 +445,7 @@
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -698,7 +455,7 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -717,17 +474,18 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-utf16_decode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i))
+utf16_decode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i))
 {
     ASSERT_ARGS(utf16_decode_and_advance)
-    UChar *s = (UChar*) i->str->strstart;
-    UINTVAL c, pos;
-    pos = i->bytepos / sizeof (UChar);
+    const UChar * const s = (const UChar*) i->str->strstart;
+    UINTVAL pos = i->bytepos / sizeof (UChar);
+    UINTVAL c;
+
     /* TODO either make sure that we don't go past end or use SAFE
      *      iter versions
      */
     U16_NEXT_UNSAFE(s, pos, c);
-    i->charpos++;
+    ++i->charpos;
     i->bytepos = pos * sizeof (UChar);
     return c;
 }
@@ -745,14 +503,13 @@
 */
 
 static void
-utf16_encode_and_advance(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL c)
+utf16_encode_and_advance(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL c)
 {
     ASSERT_ARGS(utf16_encode_and_advance)
-    UChar *s = (UChar*) i->str->strstart;
-    UINTVAL pos;
-    pos = i->bytepos / sizeof (UChar);
+    UChar * const s = (UChar*) i->str->strstart;
+    UINTVAL pos = i->bytepos / sizeof (UChar);
     U16_APPEND_UNSAFE(s, pos, c);
-    i->charpos++;
+    ++i->charpos;
     i->bytepos = pos * sizeof (UChar);
 }
 
@@ -768,7 +525,7 @@
 */
 
 static void
-utf16_set_position(PARROT_INTERP, ARGMOD(String_iter *i), UINTVAL n)
+utf16_set_position(SHIM_INTERP, ARGMOD(String_iter *i), UINTVAL n)
 {
     ASSERT_ARGS(utf16_set_position)
     UChar * const s = (UChar*) i->str->strstart;
@@ -799,6 +556,7 @@
     iter->str = src;
     iter->bytepos = iter->charpos = 0;
 #if PARROT_HAS_ICU
+    UNUSED(interp);
     iter->get_and_advance = utf16_decode_and_advance;
     iter->set_and_advance = utf16_encode_and_advance;
     iter->set_position =    utf16_set_position;
@@ -810,7 +568,7 @@
 
 /*
 
-=item C<ENCODING * Parrot_encoding_utf16_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_utf16_init(PARROT_INTERP)>
 
 Initializes the UTF-16 encoding.
 
@@ -818,8 +576,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_utf16_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_utf16_init)
@@ -830,24 +587,20 @@
         4, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        NULL
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf16", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/ops_pct/src/string/encoding/utf16.h
==============================================================================
--- branches/ops_pct/src/string/encoding/utf16.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/utf16.h	Wed May  5 08:45:29 2010	(r46302)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/utf16.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_utf16_init(PARROT_INTERP)
+void Parrot_encoding_utf16_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_utf16_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/src/string/encoding/utf8.c
==============================================================================
--- branches/ops_pct/src/string/encoding/utf8.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/utf8.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,28 +27,22 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void become_encoding(PARROT_INTERP, SHIM(STRING *src))
-        __attribute__nonnull__(1);
-
 PARROT_PURE_FUNCTION
-static UINTVAL bytes(SHIM_INTERP, ARGIN(STRING *src))
+static UINTVAL bytes(SHIM_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(2);
 
-static UINTVAL codepoints(PARROT_INTERP, ARGMOD(STRING *src))
+static UINTVAL codepoints(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src);
+        __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL find_cclass(PARROT_INTERP,
-    ARGIN(STRING *s),
-    ARGIN(const INTVAL *typetable),
-    INTVAL flags,
-    UINTVAL pos,
-    UINTVAL end)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
+    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),
@@ -57,20 +51,11 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_bytes(PARROT_INTERP,
-    ARGMOD(STRING *src),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src);
-
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *return_string))
-        __attribute__nonnull__(1);
+        __attribute__nonnull__(2);
 
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
@@ -80,24 +65,12 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING * get_codepoints(PARROT_INTERP,
-    ARGIN(STRING *src),
+    ARGIN(const STRING *src),
     UINTVAL offset,
     UINTVAL count)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*return_string);
-
 static void iter_init(SHIM_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -112,35 +85,10 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_codepoints))
-        __attribute__nonnull__(1);
-
 PARROT_CAN_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 static UINTVAL utf8_characters(PARROT_INTERP,
     ARGIN(const utf8_t *ptr),
@@ -185,47 +133,30 @@
 static const void * utf8_skip_forward(ARGIN(const void *ptr), UINTVAL n)
         __attribute__nonnull__(1);
 
-#define ASSERT_ARGS_become_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        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))
+       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_bytes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_get_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
 #define ASSERT_ARGS_get_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_get_codepoints_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src) \
-    , PARROT_ASSERT_ARG(return_string))
 #define ASSERT_ARGS_iter_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(src) \
     , PARROT_ASSERT_ARG(iter))
 #define ASSERT_ARGS_set_byte __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_set_codepoint __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(src))
-#define ASSERT_ARGS_set_codepoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_to_encoding __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))
@@ -275,10 +206,6 @@
     4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6      /* cjk etc. */
 };
 
-#if 0
-typedef unsigned char utf8_t;
-#endif
-
 /*
 
 =item C<static UINTVAL utf8_characters(PARROT_INTERP, const utf8_t *ptr, UINTVAL
@@ -286,6 +213,8 @@
 
 Returns the number of characters in the C<byte_len> bytes from C<*ptr>.
 
+XXX This function is unused.
+
 =cut
 
 */
@@ -300,7 +229,7 @@
 
     while (u8ptr < u8end) {
         u8ptr += UTF8SKIP(u8ptr);
-        characters++;
+        ++characters;
     }
 
     if (u8ptr > u8end)
@@ -332,8 +261,8 @@
         UINTVAL count;
 
         c &= UTF8_START_MASK(len);
-        for (count = 1; count < len; count++) {
-            u8ptr++;
+        for (count = 1; count < len; ++count) {
+            ++u8ptr;
 
             if (!UTF8_IS_CONTINUATION(*u8ptr))
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_UTF8,
@@ -421,6 +350,8 @@
 
 Moves C<ptr> C<n> characters back.
 
+XXX This function is unused.
+
 =cut
 
 */
@@ -434,9 +365,9 @@
     const utf8_t *u8ptr = (const utf8_t *)ptr;
 
     while (n-- > 0) {
-        u8ptr--;
+        --u8ptr;
         while (UTF8_IS_CONTINUATION(*u8ptr))
-            u8ptr--;
+            --u8ptr;
     }
 
     return u8ptr;
@@ -477,8 +408,8 @@
 
         c &= UTF8_START_MASK(len);
         i->bytepos += len;
-        for (len--; len; len--) {
-            u8ptr++;
+        for (--len; len; --len) {
+            ++u8ptr;
 
             if (!UTF8_IS_CONTINUATION(*u8ptr))
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_UTF8,
@@ -496,10 +427,10 @@
             "Malformed UTF-8 string\n");
     }
     else {
-        i->bytepos++;
+        ++i->bytepos;
     }
 
-    i->charpos++;
+    ++i->charpos;
     return c;
 }
 
@@ -526,7 +457,7 @@
     i->bytepos += (new_pos - pos);
     /* XXX possible buffer overrun exception? */
     PARROT_ASSERT(i->bytepos <= Buffer_buflen(s));
-    i->charpos++;
+    ++i->charpos;
 }
 
 /*
@@ -566,7 +497,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -578,24 +509,19 @@
 
 PARROT_CAN_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGMOD(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     STRING *result;
     String_iter src_iter;
     UINTVAL offs, dest_len, dest_pos, src_len;
-    const int in_place = (dest == NULL);
-    unsigned char *new_pos, *pos, *p;
+    unsigned char *p;
 
     if (src->encoding == Parrot_utf8_encoding_ptr)
-        return in_place ? src : Parrot_str_copy(interp, src);
+        return Parrot_str_clone(interp, src);
+
+    result = Parrot_gc_new_string_header(interp, 0);
     src_len = src->strlen;
-    if (in_place) {
-        result = src;
-    }
-    else {
-        result = dest;
-    }
 
     /* init iter before possilby changing encoding */
     ENCODING_ITER_INIT(interp, src, &src_iter);
@@ -604,16 +530,11 @@
     result->strlen   = src_len;
 
     if (!src->strlen)
-        return dest;
+        return result;
+
+    Parrot_gc_allocate_string_storage(interp, result, src_len);
+    p = (unsigned char *)result->strstart;
 
-    if (in_place) {
-        /* need intermediate memory */
-        p = mem_gc_allocate_n_typed(interp, src_len, unsigned char);
-    }
-    else {
-        Parrot_gc_reallocate_string_storage(interp, dest, src_len);
-        p = (unsigned char *)dest->strstart;
-    }
     if (src->charset == Parrot_ascii_charset_ptr) {
         for (dest_len = 0; dest_len < src_len; ++dest_len) {
             p[dest_len] = ((unsigned char*)src->strstart)[dest_len];
@@ -625,18 +546,17 @@
         dest_pos = 0;
         for (offs = 0; offs < src_len; ++offs) {
             const UINTVAL c = src_iter.get_and_advance(interp, &src_iter);
+            unsigned char *new_pos;
+            unsigned char *pos;
+
             if (dest_len - dest_pos < 6) {
                 UINTVAL need = (UINTVAL)((src->strlen - offs) * 1.5);
                 if (need < 16)
                     need = 16;
                 dest_len += need;
-                if (in_place)
-                    p = mem_gc_realloc_n_typed(interp, p, dest_len, unsigned char);
-                else {
-                    result->bufused = dest_pos;
-                    Parrot_gc_reallocate_string_storage(interp, dest, dest_len);
-                    p = (unsigned char *)dest->strstart;
-                }
+                result->bufused = dest_pos;
+                Parrot_gc_reallocate_string_storage(interp, result, dest_len);
+                p = (unsigned char *)result->strstart;
             }
 
             pos = p + dest_pos;
@@ -645,11 +565,7 @@
         }
         result->bufused = dest_pos;
     }
-    if (in_place) {
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        memcpy(src->strstart, p, src->bufused);
-        mem_gc_free(interp, p);
-    }
+
     return result;
 }
 
@@ -672,33 +588,10 @@
     return utf8_decode(interp, start);
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    const void *start;
-    void *p;
-    DECL_CONST_CAST;
-
-    start = utf8_skip_forward(src->strstart, offset);
-    p = PARROT_const_cast(void *, start);
-    utf8_encode(interp, p, codepoint);
-}
 
 /*
 
-=item C<static UINTVAL find_cclass(PARROT_INTERP, STRING *s, const INTVAL
+=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.
@@ -709,8 +602,8 @@
 
 PARROT_WARN_UNUSED_RESULT
 static UINTVAL
-find_cclass(PARROT_INTERP, ARGIN(STRING *s), ARGIN(const INTVAL *typetable),
-INTVAL flags, UINTVAL pos, UINTVAL end)
+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,
@@ -770,7 +663,7 @@
 
 /*
 
-=item C<static STRING * get_codepoints(PARROT_INTERP, STRING *src, UINTVAL
+=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
@@ -782,11 +675,11 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_codepoints(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL count)
+get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
 
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
     String_iter    iter;
     UINTVAL        start;
 
@@ -810,8 +703,8 @@
 
 /*
 
-=item C<static STRING * get_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count)>
+=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>.
 
@@ -821,13 +714,10 @@
 
 PARROT_CANNOT_RETURN_NULL
 static STRING *
-get_bytes(PARROT_INTERP, ARGMOD(STRING *src), UINTVAL offset, UINTVAL count)
+get_bytes(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_bytes)
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
-
-    return_string->encoding = src->encoding;    /* XXX */
-    return_string->charset = src->charset;
+    STRING * const return_string = Parrot_str_copy(interp, src);
 
     return_string->strstart = (char *)return_string->strstart + offset ;
     return_string->bufused = count;
@@ -838,125 +728,11 @@
     return return_string;
 }
 
-/*
-
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGMOD(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    String_iter iter;
-    UINTVAL start;
-
-    Parrot_str_reuse_COW(interp, src, return_string);
-    iter_init(interp, src, &iter);
-    iter.set_position(interp, &iter, offset);
-
-    start = iter.bytepos;
-
-    return_string->strstart = (char *)return_string->strstart + start;
-    iter.set_position(interp, &iter, offset + count);
-
-    return_string->bufused = iter.bytepos - start;
-    return_string->strlen  = count;
-    return_string->hashval = 0;
-
-    return return_string;
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
 
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNIMPL;
-}
 
 /*
 
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -965,7 +741,7 @@
 */
 
 static UINTVAL
-codepoints(PARROT_INTERP, ARGMOD(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
     String_iter iter;
@@ -981,7 +757,7 @@
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -991,7 +767,7 @@
 
 PARROT_PURE_FUNCTION
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -1022,7 +798,7 @@
 
 /*
 
-=item C<ENCODING * Parrot_encoding_utf8_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_utf8_init(PARROT_INTERP)>
 
 Initializes the UTF-8 encoding.
 
@@ -1030,8 +806,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_utf8_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_utf8_init)
@@ -1042,24 +817,20 @@
         4, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        NULL
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf8", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/ops_pct/src/string/encoding/utf8.h
==============================================================================
--- branches/ops_pct/src/string/encoding/utf8.h	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/encoding/utf8.h	Wed May  5 08:45:29 2010	(r46302)
@@ -16,8 +16,7 @@
 /* HEADERIZER BEGIN: src/string/encoding/utf8.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING * Parrot_encoding_utf8_init(PARROT_INTERP)
+void Parrot_encoding_utf8_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_Parrot_encoding_utf8_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/ops_pct/src/string/primitives.c
==============================================================================
--- branches/ops_pct/src/string/primitives.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/string/primitives.c	Wed May  5 08:45:29 2010	(r46302)
@@ -70,8 +70,8 @@
 
 /*
 
-=item C<Parrot_UInt4 string_unescape_one(PARROT_INTERP, UINTVAL *offset, STRING
-*string)>
+=item C<Parrot_UInt4 string_unescape_one(PARROT_INTERP, UINTVAL *offset, const
+STRING *string)>
 
 Unescape a single character. We assume that we're at the start of a
 sequence, right after the \.
@@ -83,7 +83,7 @@
 PARROT_EXPORT
 Parrot_UInt4
 string_unescape_one(PARROT_INTERP, ARGMOD(UINTVAL *offset),
-        ARGMOD(STRING *string))
+        ARGIN(const STRING *string))
 {
     ASSERT_ARGS(string_unescape_one)
     UINTVAL workchar  = 0;

Modified: branches/ops_pct/src/sub.c
==============================================================================
--- branches/ops_pct/src/sub.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/sub.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -49,60 +49,6 @@
 
 /*
 
-=item C<PMC * new_ret_continuation_pmc(PARROT_INTERP, opcode_t *address)>
-
-Returns a new C<RetContinuation> PMC, and sets address field to C<address>
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-PMC *
-new_ret_continuation_pmc(PARROT_INTERP, ARGIN_NULLOK(opcode_t *address))
-{
-    ASSERT_ARGS(new_ret_continuation_pmc)
-    PMC* const continuation = Parrot_pmc_new(interp, enum_class_RetContinuation);
-    VTABLE_set_pointer(interp, continuation, address);
-    return continuation;
-}
-
-/*
-
-=item C<void invalidate_retc_context(PARROT_INTERP, PMC *cont)>
-
-Make true Continuations from all RetContinuations up the call chain.
-
-=cut
-
-*/
-
-void
-invalidate_retc_context(PARROT_INTERP, ARGMOD(PMC *cont))
-{
-    ASSERT_ARGS(invalidate_retc_context)
-
-    PMC *ctx = PARROT_CONTINUATION(cont)->from_ctx;
-    cont = Parrot_pcc_get_continuation(interp, ctx);
-
-    while (1) {
-        /*
-         * We  stop if we encounter a true continuation, because
-         * if one were created, everything up the chain would have been
-         * invalidated earlier.
-         */
-        if (!cont || cont->vtable != interp->vtables[enum_class_RetContinuation])
-            break;
-        cont->vtable = interp->vtables[enum_class_Continuation];
-        ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
-        cont = Parrot_pcc_get_continuation(interp, ctx);
-    }
-}
-
-/*
-
 =item C<STRING* Parrot_full_sub_name(PARROT_INTERP, PMC* sub_pmc)>
 
 Return namespace, name, and location of subroutine.
@@ -235,7 +181,7 @@
 
         if (!debug)
             return 0;
-        for (i = n = 0; n < sub->seg->base.size; i++) {
+        for (i = n = 0; n < sub->seg->base.size; ++i) {
             op_info_t * const op_info = &interp->op_info_table[*pc];
             opcode_t var_args = 0;
 
@@ -287,7 +233,7 @@
     base_pc            = sub->seg->base.data;
     current_annotation = pc - base_pc;
 
-    for (i = op = 0; op < debug_size; i++) {
+    for (i = op = 0; op < debug_size; ++i) {
         op_info_t * const op_info  = &interp->op_info_table[*base_pc];
         opcode_t          var_args = 0;
 
@@ -395,7 +341,7 @@
         PMC * const lex_pad = Parrot_pcc_get_lex_pad(interp, ctx);
         PMC * outer         = Parrot_pcc_get_outer_ctx(interp, ctx);
 
-        if (!outer)
+        if (PMC_IS_NULL(outer))
             return lex_pad;
 
         if (!PMC_IS_NULL(lex_pad))
@@ -428,7 +374,7 @@
         PMC * const lex_pad = Parrot_pcc_get_lex_pad(interp, ctx);
         PMC * caller        = Parrot_pcc_get_caller_ctx(interp, ctx);
 
-        if (!caller)
+        if (PMC_IS_NULL(caller))
             return lex_pad;
 
         if (!PMC_IS_NULL(lex_pad))
@@ -489,18 +435,6 @@
     if (PMC_IS_NULL(sub->outer_sub))
         return;
 
-#if 0
-    /* verify that the current sub is sub_pmc's :outer */
-    PMC_get_sub(interp, sub->outer_sub, outer_sub);
-    if (Parrot_str_not_equal(interp, current_sub->subid,
-                         outer_sub->subid)) {
-        Parrot_ex_throw_from_c_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION, "'%Ss' isn't the :outer of '%Ss'",
-            current_sub->name, sub->name);
-        return;
-    }
-#endif
-
     /* set the sub's outer context to the current context */
     sub->outer_ctx = ctx;
 }
@@ -570,6 +504,7 @@
     ASSERT_ARGS(Parrot_continuation_rewind_environment)
 
     PMC * const to_ctx = PARROT_CONTINUATION(pmc)->to_ctx;
+    PMC * const sig    = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp));
 
     /* debug print before context is switched */
     if (Interp_trace_TEST(interp, PARROT_TRACE_SUB_CALL_FLAG)) {
@@ -582,6 +517,7 @@
 
     /* set context */
     CURRENT_CONTEXT(interp) = to_ctx;
+    Parrot_pcc_set_signature(interp, to_ctx, sig);
 }
 
 
@@ -601,10 +537,11 @@
 void *
 Parrot_get_sub_pmc_from_subclass(PARROT_INTERP, ARGIN(PMC *subclass)) {
     ASSERT_ARGS(Parrot_get_sub_pmc_from_subclass)
-    PMC *key, *sub_pmc;
 
     /* Ensure we really do have a subclass of sub. */
     if (VTABLE_isa(interp, subclass, CONST_STRING(interp, "Sub"))) {
+        PMC *key, *sub_pmc;
+
         /* If it's actually a PMC still, probably does the same structure
          * underneath. */
         if (!PObj_is_object_TEST(subclass)) {
@@ -631,10 +568,6 @@
 
 F<include/parrot/sub.h>.
 
-=head1 HISTORY
-
-Initial version by Melvin on 2002/06/6.
-
 =cut
 
 */

Modified: branches/ops_pct/src/thread.c
==============================================================================
--- branches/ops_pct/src/thread.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/thread.c	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -20,6 +20,7 @@
 
 #include "parrot/parrot.h"
 #include "parrot/atomic.h"
+#include "parrot/runcore_api.h"
 #include "pmc/pmc_sub.h"
 #include "pmc/pmc_parrotinterpreter.h"
 
@@ -30,8 +31,7 @@
 
 static Parrot_Interp detach(UINTVAL tid);
 PARROT_CAN_RETURN_NULL
-static Shared_gc_info * get_pool(PARROT_INTERP)
-        __attribute__nonnull__(1);
+static Shared_gc_info * get_pool(void);
 
 PARROT_WARN_UNUSED_RESULT
 static int is_suspended_for_gc(PARROT_INTERP)
@@ -59,17 +59,13 @@
 static Parrot_Interp pt_check_tid(UINTVAL tid, ARGIN(const char *from))
         __attribute__nonnull__(2);
 
-static int pt_gc_count_threads(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
+static int pt_gc_count_threads(void);
 static void pt_gc_wait_for_stage(PARROT_INTERP,
     thread_gc_stage_enum from_stage,
     thread_gc_stage_enum to_stage)
         __attribute__nonnull__(1);
 
-static void pt_gc_wakeup_check(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
+static void pt_gc_wakeup_check(void);
 static void pt_ns_clone(PARROT_INTERP,
     ARGOUT(Parrot_Interp d),
     ARGOUT(PMC *dest_ns),
@@ -89,7 +85,7 @@
 static void pt_suspend_one_for_gc(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-static void pt_thread_signal(NOTNULL(Parrot_Interp self), PARROT_INTERP)
+static void pt_thread_signal(ARGIN(Parrot_Interp self), PARROT_INTERP)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -100,8 +96,7 @@
 static void* thread_func(ARGIN_NULLOK(void *arg));
 
 #define ASSERT_ARGS_detach __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_get_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_get_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_is_suspended_for_gc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_make_local_args_copy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -115,12 +110,10 @@
        PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_pt_check_tid __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(from))
-#define ASSERT_ARGS_pt_gc_count_threads __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_gc_count_threads __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_gc_wait_for_stage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_pt_gc_wakeup_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_gc_wakeup_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_ns_clone __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(d) \
@@ -215,7 +208,7 @@
 
 /*
 
-=item C<static Shared_gc_info * get_pool(PARROT_INTERP)>
+=item C<static Shared_gc_info * get_pool(void)>
 
 Gets the shared gc information.  For now this is global data; ideally it will
 become something other than a static variable.  If everything uses this
@@ -227,7 +220,7 @@
 
 PARROT_CAN_RETURN_NULL
 static Shared_gc_info *
-get_pool(PARROT_INTERP)
+get_pool(void)
 {
     ASSERT_ARGS(get_pool)
     return shared_gc_info;
@@ -346,8 +339,6 @@
     if (is_ro)
         pmc->vtable = pmc->vtable->ro_variant_vtable;
 
-    Parrot_gc_add_pmc_sync(interp, pmc);
-
     PObj_is_PMC_shared_SET(pmc);
 
     /* make sure metadata doesn't go away unexpectedly */
@@ -368,7 +359,7 @@
 */
 
 static void
-pt_thread_signal(NOTNULL(Parrot_Interp self), PARROT_INTERP)
+pt_thread_signal(ARGIN(Parrot_Interp self), PARROT_INTERP)
 {
     ASSERT_ARGS(pt_thread_signal)
     COND_SIGNAL(interp->thread_data->interp_cond);
@@ -549,7 +540,7 @@
     }
 
     /* make sure we don't block a GC run */
-    pt_gc_wakeup_check(interp);
+    pt_gc_wakeup_check();
     PARROT_ASSERT(interp->thread_data->state & THREAD_STATE_FINISHED);
 
     UNLOCK(interpreter_array_mutex);
@@ -712,156 +703,91 @@
 
 /*
 
-=item C<int pt_thread_run(PARROT_INTERP, PMC *dest_interp, PMC *sub, PMC *arg)>
+=item C<PMC * pt_thread_create(PARROT_INTERP, INTVAL type, INTVAL clone_flags)>
 
-Runs the C<*sub> PMC in a separate thread using the interpreter in
-C<*dest_interp>.
-
-C<arg> should be an array of arguments for the subroutine.
+create a pt_thread
 
 =cut
 
 */
 
-int
-pt_thread_run(PARROT_INTERP, ARGOUT(PMC *dest_interp), ARGIN(PMC *sub), ARGIN_NULLOK(PMC *arg))
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PMC *
+pt_thread_create(PARROT_INTERP, INTVAL type, INTVAL clone_flags)
 {
-    ASSERT_ARGS(pt_thread_run)
-    PMC *old_dest_interp;
-    PMC *parent;
-    Interp * const interpreter = (Parrot_Interp)VTABLE_get_pointer(interp,
-            dest_interp);
-
-    Parrot_block_GC_sweep(interpreter);
-    Parrot_block_GC_mark(interpreter);
-    Parrot_block_GC_sweep(interp);
-    Parrot_block_GC_mark(interp);
-
-    /* make a copy of the ParrotThread PMC so we can use it
-     * to hold parameters to the new thread without it being
-     * garbage collected or otherwise changed by the parent thread.
-     * Also so the new thread's getinterp doesn't return an object
-     * owned by the wrong interpreter -- which would be very bad
-     * if the parent is destroyed before the child.
-     * XXX FIXME move this elsewhere? at least the set_pmc_keyed_int
-     */
-    old_dest_interp = dest_interp;
-    dest_interp     = Parrot_pmc_new_noinit(interpreter, enum_class_ParrotThread);
-
-    /* so it's not accidentally deleted */
-    VTABLE_set_pointer(interp, old_dest_interp, NULL);
-    VTABLE_set_pointer(interp, dest_interp, interpreter);
-
-    VTABLE_set_pmc_keyed_int(interpreter, interpreter->iglobals,
-        (INTVAL) IGLOBALS_INTERPRETER, dest_interp);
+    ASSERT_ARGS(pt_thread_create)
+    PMC    * const new_interp_pmc = pmc_new(interp, type);
+    Interp * const new_interp     = (Interp *)VTABLE_get_pointer(interp, new_interp_pmc);
 
-    parent = VTABLE_get_pmc_keyed_int(interp, interp->iglobals,
-                IGLOBALS_INTERPRETER);
-
-    /*
-     * TODO check if thread flags are consistent
-     */
-    if (interp->flags & PARROT_THR_COPY_INTERP)
-        clone_interpreter(interpreter,
-                (Parrot_Interp)VTABLE_get_pointer(interp, parent),
-                PARROT_CLONE_DEFAULT);
-    /*
-     * TODO thread pools
-     */
-
-    pt_thread_prepare_for_run(interpreter, interp);
-
-    SETATTR_ParrotInterpreter_sub(interp, dest_interp,
-            pt_transfer_sub(interpreter, interp, sub));
-    VTABLE_set_pmc(interp, dest_interp,
-            make_local_args_copy(interpreter, interp, arg));
-
-    /*
-     * set regs according to pdd03
-     */
-    interpreter->current_object = dest_interp;
-    /*
-     * create a joinable thread
-     */
-    interpreter->thread_data->state = THREAD_STATE_JOINABLE;
+    clone_interpreter(new_interp, interp, clone_flags);
+    pt_thread_prepare_for_run(new_interp, interp);
 
-    Parrot_unblock_GC_mark(interpreter);
-    Parrot_unblock_GC_sweep(interpreter);
-    Parrot_unblock_GC_mark(interp);
-    Parrot_unblock_GC_sweep(interp);
-
-    THREAD_CREATE_JOINABLE(interpreter->thread_data->thread,
-            thread_func, dest_interp);
-
-    /* check for pending GC */
-    LOCK(interpreter_array_mutex);
-    if (interp->thread_data->state & THREAD_STATE_SUSPEND_GC_REQUESTED)
-        pt_suspend_one_for_gc(interpreter);
-
-    UNLOCK(interpreter_array_mutex);
-    return 0;
+    return new_interp_pmc;
 }
 
 /*
 
-=item C<int pt_thread_run_1(PARROT_INTERP, PMC* dest_interp, PMC* sub, PMC
+=item C<int pt_thread_run(PARROT_INTERP, PMC *thread_interp_pmc, PMC *sub, PMC
 *arg)>
 
-Runs a thread that shares nothing and does not communicate with the other
-interpreter.
+run a pt_thread
 
 =cut
 
 */
 
 int
-pt_thread_run_1(PARROT_INTERP, ARGOUT(PMC* dest_interp), ARGIN(PMC* sub), ARGIN(PMC *arg))
+pt_thread_run(PARROT_INTERP, ARGMOD(PMC *thread_interp_pmc), ARGIN(PMC *sub),
+        ARGIN_NULLOK(PMC *arg))
 {
-    ASSERT_ARGS(pt_thread_run_1)
-    interp->flags |= PARROT_THR_TYPE_1;
-    return pt_thread_run(interp, dest_interp, sub, arg);
-}
+    ASSERT_ARGS(pt_thread_run)
+    Interp * const thread_interp = (Interp *)VTABLE_get_pointer(interp, thread_interp_pmc);
 
-/*
+    SETATTR_ParrotInterpreter_sub(interp,
+                                  thread_interp_pmc, pt_transfer_sub(thread_interp, interp, sub));
+    VTABLE_set_pmc(interp, thread_interp_pmc, make_local_args_copy(thread_interp, interp, arg));
+    thread_interp->thread_data->state = THREAD_STATE_JOINABLE;
 
-=item C<int pt_thread_run_2(PARROT_INTERP, PMC* dest_interp, PMC* sub, PMC
-*arg)>
+    THREAD_CREATE_JOINABLE(thread_interp->thread_data->thread, thread_func, thread_interp_pmc);
 
-Runs an interpreter in a thread with no shared variables, but which
-communicates by sending messages.
+    /* check for pending GC */
+    /*
+     * can't do multi-threaded GC yet
+     * XXX a quick hack to pass the few tests
 
-=cut
+    LOCK(interpreter_array_mutex);
+    if (interp->thread_data->state & THREAD_STATE_SUSPEND_GC_REQUESTED)
+        pt_suspend_one_for_gc(new_interp);
+    UNLOCK(interpreter_array_mutex);
 
-*/
+    */
 
-int
-pt_thread_run_2(PARROT_INTERP, ARGOUT(PMC* dest_interp), ARGIN(PMC* sub), ARGIN(PMC *arg))
-{
-    ASSERT_ARGS(pt_thread_run_2)
-    interp->flags |= PARROT_THR_TYPE_2;
-    return pt_thread_run(interp, dest_interp, sub, arg);
+    return thread_interp->thread_data->tid;
 }
 
 /*
 
-=item C<int pt_thread_run_3(PARROT_INTERP, PMC* dest_interp, PMC* sub, PMC
-*arg)>
+=item C<int pt_thread_create_run(PARROT_INTERP, INTVAL type, INTVAL clone_flags,
+PMC *sub, PMC *arg)>
 
-Runs an interpreter in a thread, allowing shared variables and using a thread
-pool.
+create a pt_thread run
 
 =cut
 
 */
 
 int
-pt_thread_run_3(PARROT_INTERP, ARGOUT(PMC* dest_interp), ARGIN(PMC* sub), ARGIN(PMC *arg))
+pt_thread_create_run(PARROT_INTERP,
+                     INTVAL type, INTVAL clone_flags, ARGIN(PMC *sub), ARGIN_NULLOK(PMC *arg))
 {
-    ASSERT_ARGS(pt_thread_run_3)
-    interp->flags |= PARROT_THR_TYPE_3;
-    return pt_thread_run(interp, dest_interp, sub, arg);
+  ASSERT_ARGS(pt_thread_create_run)
+  PMC *thread_interp_pmc = pt_thread_create(interp, type, clone_flags);
+  return pt_thread_run(interp, thread_interp_pmc, sub, arg);
 }
 
+
 /*
 
 =item C<void pt_thread_yield(void)>
@@ -957,7 +883,7 @@
 
 /*
 
-=item C<static int pt_gc_count_threads(PARROT_INTERP)>
+=item C<static int pt_gc_count_threads(void)>
 
 Returns the number of active threads in the system (running or suspended).  Be
 sure to hold C<interpreter_array_mutex>.
@@ -967,7 +893,7 @@
 */
 
 static int
-pt_gc_count_threads(PARROT_INTERP)
+pt_gc_count_threads(void)
 {
     ASSERT_ARGS(pt_gc_count_threads)
     UINTVAL i;
@@ -1014,7 +940,7 @@
     LOCK(interpreter_array_mutex);
 
     DEBUG_ONLY(fprintf(stderr, "%p: got lock\n", interp));
-    thread_count = pt_gc_count_threads(interp);
+    thread_count = pt_gc_count_threads();
 
     PARROT_ASSERT(info->gc_stage == from_stage);
     PARROT_ASSERT(!(interp->thread_data->state & THREAD_STATE_NOT_STARTED));
@@ -1045,7 +971,7 @@
 
 /*
 
-=item C<static void pt_gc_wakeup_check(PARROT_INTERP)>
+=item C<static void pt_gc_wakeup_check(void)>
 
 Checks if it's necessary to wake threads to perform garbage collection.  This
 is called after thread death.  Be sure to hold C<interpreter_array_mutex>.
@@ -1055,7 +981,7 @@
 */
 
 static void
-pt_gc_wakeup_check(PARROT_INTERP)
+pt_gc_wakeup_check(void)
 {
     ASSERT_ARGS(pt_gc_wakeup_check)
     Shared_gc_info * const info = shared_gc_info;
@@ -1064,7 +990,7 @@
     if (!info)
         return;
 
-    thread_count = pt_gc_count_threads(interp);
+    thread_count = pt_gc_count_threads();
 
     if (info->num_reached == thread_count) {
         PARROT_ASSERT(info->gc_stage == THREAD_GC_STAGE_NONE);
@@ -1136,32 +1062,6 @@
         return;
     }
 
-#if 0
-    for (i = 0; i < n_interpreters; ++i) {
-        Parrot_Interp other_interp;
-        other_interp = interpreter_array[i];
-        if (!other_interp)
-            continue;
-
-        if (is_suspended_for_gc(other_interp) &&
-            other_interp != interp &&
-            (other_interp->thread_data->state & THREAD_STATE_SUSPENDED_GC))
-        {
-            PMC *successp;
-            /* this means that someone else already got this far,
-             * so we have a suspend event in our queue to ignore
-             */
-            /* XXX still reachable? */
-            DEBUG_ONLY(fprintf(stderr, "apparently someone else is doing it [%p]\n", other_interp));
-            fprintf(stderr, "??? found later (%p)\n", other_interp);
-            successp = Parrot_cx_delete_suspend_for_gc(interp);
-            PARROT_ASSERT(successp);
-            UNLOCK(interpreter_array_mutex);
-            return;
-        }
-    }
-#endif
-
     /* now send all the non-suspended threads to suspend for GC */
     for (i = 0; i < n_interpreters; ++i) {
         Parrot_Interp other_interp = interpreter_array[i];
@@ -1240,7 +1140,7 @@
 
 PARROT_CAN_RETURN_NULL
 PMC*
-pt_thread_join(NOTNULL(Parrot_Interp parent), UINTVAL tid)
+pt_thread_join(ARGIN(Parrot_Interp parent), UINTVAL tid)
 {
     ASSERT_ARGS(pt_thread_join)
     int           state;
@@ -1310,7 +1210,7 @@
             retval = PMCNULL;
         }
         interpreter_array[tid] = NULL;
-        running_threads--;
+        --running_threads;
 
         DEBUG_ONLY(fprintf(stderr, "destroying an interpreter [join]\n"));
         if (Interp_debug_TEST(parent, PARROT_THREAD_DEBUG_FLAG))
@@ -1519,7 +1419,7 @@
 
     new_interp->thread_data = mem_internal_allocate_zeroed_typed(Thread_data);
     INTERPRETER_LOCK_INIT(new_interp);
-    running_threads++;
+    ++running_threads;
     if (Interp_debug_TEST(interp, PARROT_THREAD_DEBUG_FLAG))
         fprintf(stderr, "running threads %d\n", running_threads);
 
@@ -1581,7 +1481,7 @@
     if (!running_threads)
         return;
 
-    info = get_pool(interp);
+    info = get_pool();
     PARROT_ATOMIC_INT_GET(block_level, info->gc_block_level);
 
     DEBUG_ONLY(fprintf(stderr, "start threaded mark\n"));
@@ -1718,7 +1618,7 @@
 Parrot_shared_gc_block(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_shared_gc_block)
-    Shared_gc_info * const info = get_pool(interp);
+    Shared_gc_info * const info = get_pool();
 
     if (info) {
         int level;
@@ -1742,7 +1642,7 @@
 Parrot_shared_gc_unblock(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_shared_gc_unblock)
-    Shared_gc_info * const info = get_pool(interp);
+    Shared_gc_info * const info = get_pool();
     if (info) {
         int level;
         PARROT_ATOMIC_INT_DEC(level, info->gc_block_level);

Modified: branches/ops_pct/src/utils.c
==============================================================================
--- branches/ops_pct/src/utils.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/utils.c	Wed May  5 08:45:29 2010	(r46302)
@@ -120,6 +120,7 @@
 */
 
 PARROT_CONST_FUNCTION
+PARROT_WARN_UNUSED_RESULT
 INTVAL
 intval_mod(INTVAL i2, INTVAL i3)
 {
@@ -167,6 +168,7 @@
 */
 
 PARROT_CONST_FUNCTION
+PARROT_WARN_UNUSED_RESULT
 FLOATVAL
 floatval_mod(FLOATVAL n2, FLOATVAL n3)
 {
@@ -422,6 +424,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 FLOATVAL
 Parrot_float_rand(INTVAL how_random)
 {
@@ -444,6 +447,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_uint_rand(INTVAL how_random)
 {
@@ -466,6 +470,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_int_rand(INTVAL how_random)
 {
@@ -488,6 +493,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_range_rand(INTVAL from, INTVAL to, INTVAL how_random)
 {
@@ -582,6 +588,7 @@
 */
 
 PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_byte_index(SHIM_INTERP, ARGIN(const STRING *base),
         ARGIN(const STRING *search), UINTVAL start_offset)
@@ -637,7 +644,7 @@
 {
     ASSERT_ARGS(Parrot_byte_rindex)
     const INTVAL searchlen          = search->strlen;
-    const char * const search_start = (const char *)Buffer_bufstart(search);
+    const char * const search_start = (const char *)(search->strstart);
     UINTVAL max_possible_offset     = (base->strlen - search->strlen);
     INTVAL current_offset;
 
@@ -646,7 +653,7 @@
 
     for (current_offset = max_possible_offset; current_offset >= 0;
             current_offset--) {
-        const char * const base_start = (char *)Buffer_bufstart(base) + current_offset;
+        const char * const base_start = (char *)(base->strstart) + current_offset;
         if (memcmp(base_start, search_start, searchlen) == 0) {
             return current_offset;
         }
@@ -838,7 +845,7 @@
     c.temp_reg = temp_reg;
 
     /* compute max_reg, the max reg number + 1 */
-    for (i = 0; i < n_regs; i++) {
+    for (i = 0; i < n_regs; ++i) {
         if (src_regs[i] > max_reg)
             max_reg = src_regs[i];
         if (dest_regs[i] > max_reg)
@@ -854,26 +861,26 @@
     c.reg_to_index = reg_to_index = mem_gc_allocate_n_zeroed_typed(interp, max_reg, int);
 
     /* init backup array */
-    for (i = 0; i < n_regs; i++)
+    for (i = 0; i < n_regs; ++i)
         backup[i] = -1;
 
     /* fill in the conversion array between a register number and its index */
-    for (i = 0; i < max_reg; i++)
+    for (i = 0; i < max_reg; ++i)
         reg_to_index[i] = -1;
-    for (i = 0; i < n_regs; i++) {
+    for (i = 0; i < n_regs; ++i) {
         const int index = dest_regs[i];
         if (index != src_regs[i]) /* get rid of self-assignment */
             reg_to_index[index] = i;
     }
 
     /* count the nb of successors for each reg index */
-    for (i = 0; i < n_regs; i++) {
+    for (i = 0; i < n_regs; ++i) {
         const int index = reg_to_index[ src_regs[i] ];
         if (index >= 0) /* not interested in the wells that have no preds */
-            nb_succ[ index ]++;
+            ++nb_succ[index];
     }
     /* process each well if any */
-    for (i = 0; i < n_regs; i++) {
+    for (i = 0; i < n_regs; ++i) {
         if (0 == nb_succ[i]) { /* a well */
             rec_climb_back_and_mark(i, &c);
         }
@@ -881,7 +888,7 @@
 
     /* process remaining dest registers not processed */
     /* remaining nodes are members of cycles without exits */
-    for (i = 0; i < n_regs; i++) {
+    for (i = 0; i < n_regs; ++i) {
         if (0 < nb_succ[i] && 0 > backup[i]) { /* not a well nor visited*/
             process_cycle_without_exit(i, &c);
         }
@@ -990,12 +997,6 @@
 
 =back
 
-=head1 HISTORY
-
-Initial version by leo 2003.09.09.
-
-=cut
-
 */
 
 

Modified: branches/ops_pct/src/vtables.c
==============================================================================
--- branches/ops_pct/src/vtables.c	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/src/vtables.c	Wed May  5 08:45:29 2010	(r46302)
@@ -91,14 +91,14 @@
 
 PARROT_EXPORT
 void
-Parrot_destroy_vtable(PARROT_INTERP, ARGMOD(VTABLE *vtable))
+Parrot_destroy_vtable(PARROT_INTERP, ARGFREE_NOTNULL(VTABLE *vtable))
 {
     ASSERT_ARGS(Parrot_destroy_vtable)
     /* We sometimes get a type number allocated without any corresponding
      * vtable. E.g. if you load perl_group, perlscalar is this way.  */
 
     if (vtable->ro_variant_vtable) {
-        VTABLE *ro_vtable = vtable->ro_variant_vtable;
+        VTABLE * const ro_vtable = vtable->ro_variant_vtable;
 
         if (ro_vtable->isa_hash) {
             parrot_hash_destroy(interp, ro_vtable->isa_hash);
@@ -184,7 +184,7 @@
     ASSERT_ARGS(parrot_free_vtables)
     int i;
 
-    for (i = 0; i < interp->n_vtable_max; i++)
+    for (i = 0; i < interp->n_vtable_max; ++i)
         Parrot_destroy_vtable(interp, interp->vtables[i]);
 
     mem_internal_free(interp->vtables);
@@ -206,7 +206,7 @@
     ASSERT_ARGS(mark_vtables)
     INTVAL i;
 
-    for (i = 1; i < interp->n_vtable_max; i++) {
+    for (i = 1; i < interp->n_vtable_max; ++i) {
         const VTABLE * const vtable = interp->vtables[i];
 
         /* XXX dynpmc groups have empty slots for abstract objects */

Modified: branches/ops_pct/t/codingstd/c_function_docs.t
==============================================================================
--- branches/ops_pct/t/codingstd/c_function_docs.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/codingstd/c_function_docs.t	Wed May  5 08:45:29 2010	(r46302)
@@ -91,8 +91,6 @@
 }
 
 __DATA__
-compilers/imcc/instructions.c
-compilers/imcc/optimizer.c
 compilers/imcc/parser_util.c
 compilers/imcc/pbc.c
 compilers/imcc/pcc.c

Modified: branches/ops_pct/t/codingstd/c_parens.t
==============================================================================
--- branches/ops_pct/t/codingstd/c_parens.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/codingstd/c_parens.t	Wed May  5 08:45:29 2010	(r46302)
@@ -33,7 +33,7 @@
 
 =cut
 
-my $keywords = join '|' => sort { length $a cmp length $b } qw/
+my $keywords = join '|' => sort { length $a <=> length $b } qw/
     auto      double    int       struct    INTVAL
     break     else      long      switch    UINTVAL
     case      enum      register  typedef   FLOATVAL

Modified: branches/ops_pct/t/codingstd/pdd_format.t
==============================================================================
--- branches/ops_pct/t/codingstd/pdd_format.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/codingstd/pdd_format.t	Wed May  5 08:45:29 2010	(r46302)
@@ -7,22 +7,20 @@
 
 use Test::More tests =>  1;
 use Carp;
-use Cwd;
 use Tie::File;
 
-my $cwd = cwd();
-my @pdddirs = (
-    qq{$cwd/docs/pdds},
-    qq{$cwd/docs/pdds/draft},
+my @pdddirs = qw(
+    ./docs/pdds
+    ./docs/pdds/draft
 );
 
 my @pddfiles = ();
 foreach my $dir (@pdddirs) {
-    opendir my $DIRH, $dir
-        or croak "Unable to open directory handle: $!";
-    my @pdds = map { qq|$dir/$_| } grep { m/^pdd\d{2,}_.*\.pod$/ }
-        readdir $DIRH;
-    closedir $DIRH or croak "Unable to close directory handle: $!";
+    die "Directory '$dir' is not found, or not a directory" if not -d $dir;
+
+    my @pdds = glob "$dir/pdd*.pod"
+        or warn "No PDD files found in directory '$dir'";
+
     push @pddfiles, @pdds;
 }
 
@@ -34,20 +32,14 @@
     }
 }
 
-my $errmsg = q{};
-if ( @diagnostics ) {
-    $errmsg = join ("\n" => @diagnostics) . "\n";
+for my $msg (@diagnostics) {
+    diag($msg);
 }
-
-$errmsg ? fail( qq{\n$errmsg} )
-        : pass( q{All PDDs are formatted correctly} );
+cmp_ok( scalar(@diagnostics), '==', 0, 'PDDs are formatted correctly' );
 
 sub check_pdd_formatting {
     my $pdd = shift;
-    my $base = $pdd;
-    if ($pdd =~ m{((draft/)?[^/]+)$}) {
-        $base = $1;
-    }
+
     my $diag = q{};
     my @toolong = ();
     my @sections_needed = qw(
@@ -57,7 +49,7 @@
         Implementation
         References
     );
-    my %sections_seen = map { $_, 0 } @sections_needed;
+    my %sections_seen;
     my @lines;
     tie @lines, 'Tie::File', $pdd
         or croak "Unable to tie to $pdd: $!";
@@ -69,20 +61,20 @@
         ) {
             push @toolong, ($i + 1);
         }
-        foreach my $need ( @sections_needed ) {
-            $sections_seen{$need}++ if $lines[$i] =~ m{^=head2\s+$need};
+        if ( $lines[$i] =~ m{^=head2\s+(.+?)\s*$} ) {
+            $sections_seen{$1}++;
         }
     }
     untie @lines or croak "Unable to untie from $pdd: $!";
     if ( @toolong ) {
         $diag .=
-            qq{$base has } .
+            qq{$pdd has } .
             scalar(@toolong) .
             qq{ lines > 78 chars:  @toolong\n};
     }
-    foreach my $need ( keys %sections_seen ) {
+    foreach my $need (@sections_needed) {
         if ( ! $sections_seen{$need} ) {
-            $diag .= qq{$base lacks 'head2' $need section\n};
+            $diag .= qq{$pdd lacks 'head2' $need section\n};
         }
     }
     return $diag;

Copied: branches/ops_pct/t/compilers/data_json/from_parrot.t (from r46301, trunk/t/compilers/data_json/from_parrot.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/compilers/data_json/from_parrot.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/compilers/data_json/from_parrot.t)
@@ -0,0 +1,441 @@
+#!./parrot
+# Copyright (C) 2001-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/compilers/data_json/from_parrot.t - test parrot to JSON conversion.
+
+=head1 SYNOPSIS
+
+    % prove t/compilers/data_json/from_parrot.t
+
+=head1 DESCRIPTION
+
+Tests JSON->Parrot conversions.
+
+=cut
+
+.sub main :main
+    .include 'test_more.pir'
+    plan(39)
+
+    load_bytecode 'JSON.pbc'
+    test_create_json_of_an_empty_string()
+    test_create_json_of_a_non_empty_string()
+    test_create_json_of_a_string_with_simple_escapes()
+    test_create_json_of_some_integers()
+    test_create_json_of_some_numbers()
+    test_create_json_of_various_scalars_with_pretty_option()
+    test_create_json_of_an_array()
+    test_create_pretty_json_of_an_array()
+    test_create_json_of_array_keep_element_ordering()
+    test_create_json_of_a_mixed_array()
+    test_create_json_of_hash()
+    test_create_non_pretty_json_of_hash()
+    test_create_json_of_nested_structure_including_resizablepmcarray_and_empties()
+    test_create_non_pretty_json_of_nested_structure()
+    test_create_json_of_string_pmcs()
+    test_create_json_of_integer_pmcs()
+    test_create_json_of_boolean_pmcs()
+    test_create_json_of_null_and_undef()
+.end
+
+
+# no. 1
+.sub test_create_json_of_an_empty_string
+    .local string s
+    s = ''
+
+    $S0 = _json( s, 0 )
+    is($S0, '""', 'Create JSON of an empty string')
+.end
+
+
+# no. 2
+.sub test_create_json_of_a_non_empty_string
+    .local string s
+    s = 'abcdeABCDE01234$%^&*'
+
+    $S0 = _json( s, 0 )
+    is($S0, '"abcdeABCDE01234$%^&*"', 'Create JSON of a non-empty string')
+.end
+
+
+# no. 3
+.sub test_create_json_of_a_string_with_simple_escapes
+    .local string s
+    s = "abcde\\ABCDE\"01234\n$%^&*"
+    # XXX more escapes need to be tested; see http://www.json.org/
+    $S0 = _json( s, 0 )
+    is($S0, '"abcde\\ABCDE\"01234\n$%^&*"', 'Create JSON of a string with simple escapes')
+.end
+
+
+# no. 4..8
+.sub test_create_json_of_some_integers
+    .local int i
+    i = 0
+    $S0 = _json( i, 0 )
+    is($S0, 0, 'Create JSON of some integers (0)')
+    i = 35
+    $S0 = _json( i, 0 )
+    is($S0, 35, 'Create JSON of some integers (35)')
+    i = -42
+    $S0 = _json( i, 0 )
+    is($S0, -42, 'Create JSON of some integers (-42)')
+    i = 2147483647
+    $S0 = _json( i, 0 )
+    is($S0, 2147483647, 'Create JSON of some integers (2147483647)')
+    i = -2147483648
+    $S0 = _json( i, 0 )
+    is($S0, -2147483648, 'Create JSON of some integers (-2147483648)')
+.end
+
+
+# no. 9..12
+.sub test_create_json_of_some_numbers
+    .local num n
+    n = 0.0
+    $S0 = _json( n )
+    is($S0, 0, 'Create JSON of some numbers (0)')
+    n = 2.50
+    $S0 = _json( n )
+    is($S0, 2.5, 'Create JSON of some numbers (2.5)')
+    n = -42.0
+    $S0 = _json( n )
+    is($S0, -42, 'Create JSON of some numbers (-42)')
+    n = 4.5e1
+    $S0 = _json( n )
+    is($S0, 45, 'Create JSON of some numbers (45)')
+.end
+
+
+# no. 13..15
+.sub test_create_json_of_various_scalars_with_pretty_option
+    .local string s
+    s = "abcde\\ABCDE\"01234\n$%^&*"
+    $S0 = _json( s, 1 )
+    is($S0, "\"abcde\\\\ABCDE\\\"01234\\n\$\%\^\&\*\"\n", 'Create JSON of various scalars with pretty option (string)')
+
+    .local int i
+    i = -42
+    $S0 = _json( i, 1 )
+    is($S0, "-42\n", 'Create JSON of various scalars with pretty option (integer)')
+
+    .local num n
+    n = 2.50
+    $S0 = _json( n, 1 )
+    is($S0, "2.5\n", 'Create JSON of various scalars with pretty option (number)')
+.end
+
+
+# no. 16
+.sub test_create_json_of_an_array
+    .local pmc array
+
+    new array, 'ResizablePMCArray'
+    array = 10
+    array[0] = 0
+    array[1] = 1
+    array[2] = 2
+    array[3] = 3
+    array[4] = 4
+    array[5] = 5
+    array[6] = 6
+    array[7] = 7
+    array[8] = 8
+    array[9] = 9
+
+    $S0 = _json( array, 0 )
+    is($S0, '[0,1,2,3,4,5,6,7,8,9]', 'Create JSON of an array')
+.end
+
+
+# no. 17
+.sub test_create_pretty_json_of_an_array
+    .local pmc array
+
+    new array, 'ResizablePMCArray'
+    array = 10
+    array[0] = 0
+    array[1] = 1
+    array[2] = 2
+    array[3] = 3
+    array[4] = 4
+    array[5] = 5
+    array[6] = 6
+    array[7] = 7
+    array[8] = 8
+    array[9] = 9
+
+    $S0 = _json( array, 1 )
+    is($S0, <<'OUTPUT', 'Create pretty JSON of an array')
+[
+  0,
+  1,
+  2,
+  3,
+  4,
+  5,
+  6,
+  7,
+  8,
+  9
+]
+OUTPUT
+.end
+
+
+# no. 18
+.sub test_create_json_of_array_keep_element_ordering
+    .local pmc array
+
+    new array, 'ResizablePMCArray'
+    array = 6
+    array[0] = 35
+    array[1] = 1
+    array[2] = -5
+    array[3] = 0
+    array[4] = -2147483648
+    array[5] = 2147483647
+
+    $S0 = _json( array, 1 )
+    is($S0, <<'OUTPUT', 'Create JSON of an array, keep element ordering')
+[
+  35,
+  1,
+  -5,
+  0,
+  -2147483648,
+  2147483647
+]
+OUTPUT
+.end
+
+
+# no. 19
+.sub test_create_json_of_a_mixed_array
+    .local pmc array
+
+    new array, 'ResizablePMCArray'
+    array = 6
+    array[0] = 0
+    array[1] = 1500e-2
+    array[2] = "JSON"
+    array[3] = -7
+    array[4] = "json"
+    array[5] = 0.0
+
+    $S0 = _json( array, 1 )
+    is($S0, <<'OUTPUT', 'Create JSON of a mixed array')
+[
+  0,
+  15,
+  "JSON",
+  -7,
+  "json",
+  0
+]
+OUTPUT
+.end
+
+
+# no. 20
+.sub test_create_json_of_hash
+    .local pmc hash
+
+    new hash, 'Hash'
+    hash["alpha"] = 29
+    hash["beta"] = "B"
+    hash["gamma"] = 3.1
+    hash["delta"] = "DELTA"
+
+    $S0 = _json( hash, 1 )
+    is($S0, <<'OUTPUT', 'Create JSON of hash')
+{
+  "alpha" : 29,
+  "beta" : "B",
+  "delta" : "DELTA",
+  "gamma" : 3.1
+}
+OUTPUT
+.end
+
+
+# no. 21
+.sub test_create_non_pretty_json_of_hash
+    .local pmc hash
+
+    new hash, 'Hash'
+    hash["alpha"] = 29
+    hash["beta"] = "B"
+    hash["gamma"] = 3.1
+    hash["delta"] = "DELTA"
+
+    $S0 = _json( hash, 0 )
+    is($S0, '{"alpha":29,"beta":"B","delta":"DELTA","gamma":3.1}', 'Create non-pretty JSON of hash')
+.end
+
+
+# no. 22
+.sub test_create_json_of_nested_structure_including_resizablepmcarray_and_empties
+    .local pmc street1, street2, city1, city2, country, world
+
+    street1 = new 'Hash'
+    street1["Perl"] = "Highway"
+    street1["Python"] = "Grove"
+    street1["Ruby"] = "Lane"
+
+    street2 = new 'Hash'  # empty
+
+    city1 = new 'ResizablePMCArray'
+    push city1, street1
+    push city1, street2
+
+    city2 = new 'FixedPMCArray'  # empty
+
+    country = new 'FixedPMCArray'
+    country = 2
+    country[0] = city1
+    country[1] = city2
+
+    world = new 'Hash'
+    world["population"] = 1234567890
+    world["some_country"] = country
+
+    $S0 = _json( world, 1 )
+    is($S0, <<'OUTPUT', 'Create JSON of nested structure including ResizablePMCArray and empties')
+{
+  "population" : 1234567890,
+  "some_country" : [
+    [
+      {
+        "Perl" : "Highway",
+        "Python" : "Grove",
+        "Ruby" : "Lane"
+      },
+      {
+      }
+    ],
+    [
+    ]
+  ]
+}
+OUTPUT
+.end
+
+
+# no. 23
+.sub test_create_non_pretty_json_of_nested_structure
+    .local pmc street1, street2, city1, city2, country, world
+
+    street1 = new 'Hash'
+    street1["Perl"] = "Highway"
+    street1["Python"] = "Grove"
+    street1["Ruby"] = "Lane"
+
+    street2 = new 'Hash'  # empty
+
+    city1 = new 'ResizablePMCArray'
+    push city1, street1
+    push city1, street2
+
+    city2 = new 'FixedPMCArray'  # empty
+
+    country = new 'FixedPMCArray'
+    country = 2
+    country[0] = city1
+    country[1] = city2
+
+    world = new 'Hash'
+    world["population"] = 1234567890
+    world["some_country"] = country
+
+    $S0 = _json( world, 0 )
+    is($S0, '{"population":1234567890,"some_country":[[{"Perl":"Highway","Python":"Grove","Ruby":"Lane"},{}],[]]}', 'Create non-pretty JSON of nested structure')
+.end
+
+
+# no. 24..27
+.sub test_create_json_of_string_pmcs
+    .local pmc s
+
+    s = new 'String'
+    s = ''
+    $S0 = _json( s, 0 )
+    is($S0, '""', 'Create JSON of String PMCs')
+    $S0 = _json( s, 1 )
+    is($S0, "\"\"\n", 'Create JSON of String PMCs')
+
+    s = new 'String'
+    s = "12345\"67890"
+    $S0 = _json( s, 0 )
+    is($S0, '"12345\"67890"', 'Create JSON of String PMCs')
+    $S0 = _json( s, 1 )
+    is($S0, "\"12345\\\"67890\"\n", 'Create JSON of String PMCs')
+.end
+
+
+# no. 28..31
+.sub test_create_json_of_integer_pmcs
+    .local pmc i
+
+    i = new 'Integer'
+    i = 0
+    $S0 = _json( i, 0 )
+    is($S0, 0, 'Create JSON of String PMCs')
+    $S0 = _json( i, 1 )
+    is($S0, "0\n", 'Create JSON of String PMCs')
+
+    i = new 'Integer'
+    i = -42
+    $S0 = _json( i, 0 )
+    is($S0, -42, 'Create JSON of String PMCs')
+    $S0 = _json( i, 1 )
+    is($S0, "-42\n", 'Create JSON of String PMCs')
+.end
+
+
+# no. 32..35
+.sub test_create_json_of_boolean_pmcs
+    .local pmc b
+
+    b = new 'Boolean'
+    b = 0
+    $S0 = _json( b, 0 )
+    is($S0, 'false', 'Create JSON of Boolean PMCs')
+    $S0 = _json( b, 1 )
+    is($S0, "false\n", 'Create JSON of Boolean PMCs')
+
+    b = new 'Boolean'
+    b = 1
+    $S0 = _json( b, 0 )
+    is($S0, 'true', 'Create JSON of Boolean PMCs')
+    $S0 = _json( b, 1 )
+    is($S0, "true\n", 'Create JSON of Boolean PMCs')
+.end
+
+
+# no. 36..39
+.sub test_create_json_of_null_and_undef
+    .local pmc n
+    null n
+
+    $S0 = _json( n, 0 )
+    is($S0, 'null', 'Create JSON of null and .Undef')
+    $S0 = _json( n, 1 )
+    is($S0, "null\n", 'Create JSON of null and .Undef')
+
+    n = new 'Undef'
+    $S0 = _json( n, 0 )
+    is($S0, 'null', 'Create JSON of null and .Undef')
+    $S0 = _json( n, 1 )
+    is($S0, "null\n", 'Create JSON of null and .Undef')
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/t/compilers/data_json/to_parrot.t (from r46301, trunk/t/compilers/data_json/to_parrot.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/compilers/data_json/to_parrot.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/compilers/data_json/to_parrot.t)
@@ -0,0 +1,731 @@
+#!perl
+# Copyright (C) 2001-2008, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( t . lib ../lib ../../lib );
+
+use Test::More;
+use Parrot::Test tests => 60;
+
+=head1 NAME
+
+t/compilers/data_json/to_parrot.t - test JSON to parrot conversions
+
+=head1 SYNOPSIS
+
+    % prove t/compilers/data_json/to_parrot.t
+
+=head1 DESCRIPTION
+
+Tests JSON->Parrot conversions.
+
+=cut
+
+json_dump_is( <<'JSON', <<'OUT', 'empty string' );
+""
+JSON
+"JSON" => ""
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string' );
+"json"
+JSON
+"JSON" => "json"
+OUT
+
+json_isnt( 'a', 'strings need quotes' );
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash "' );
+"\"json\""
+JSON
+"JSON" => "\"json\""
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash \\' );
+"\\json\\"
+JSON
+"JSON" => "\\json\\"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with /' );
+"\/json\/"
+JSON
+"JSON" => "/json/"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash b' );
+"\bjson\b"
+JSON
+"JSON" => "\bjson\b"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash f' );
+"\fjson\f"
+JSON
+"JSON" => "\fjson\f"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash n' );
+"\njson\n"
+JSON
+"JSON" => "\njson\n"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash r' );
+"\rjson\r"
+JSON
+"JSON" => "\rjson\r"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'string with backslash t' );
+"\tjson\t"
+JSON
+"JSON" => "\tjson\t"
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int' );
+1
+JSON
+"JSON" => 1
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int minus' );
+-1
+JSON
+"JSON" => -1
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int frac' );
+3.14
+JSON
+"JSON" => 3.14
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int frac minus' );
+-3.14
+JSON
+"JSON" => -3.14
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int exp' );
+1e+11
+JSON
+"JSON" => 100000000000
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int exp' );
+2e-12
+JSON
+"JSON" => 2e-12
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int exp minus' );
+-1e+11
+JSON
+"JSON" => -100000000000
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int exp minus' );
+-2e-12
+JSON
+"JSON" => -2e-12
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int frac exp' );
+3.14e+10
+JSON
+"JSON" => 31400000000
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'number int frac exp minus' );
+-3.14e+10
+JSON
+"JSON" => -31400000000
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'null' );
+null
+JSON
+"JSON" => null
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'true' );
+true
+JSON
+"JSON" => 1
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'false' );
+false
+JSON
+"JSON" => 0
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'empty array' );
+[]
+JSON
+"JSON" => ResizablePMCArray (size:0) [
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'simple array' );
+[1,2,3]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    1,
+    2,
+    3
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'simple array (check white spaces)' );
+[    1 , 2    ,  3   ]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    1,
+    2,
+    3
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of empty arrays' );
+[[],[],[]]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    ResizablePMCArray (size:0) [
+    ],
+    ResizablePMCArray (size:0) [
+    ],
+    ResizablePMCArray (size:0) [
+    ]
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of empty arrays (check white spaces)' );
+[    []  ,  [] , []     ]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    ResizablePMCArray (size:0) [
+    ],
+    ResizablePMCArray (size:0) [
+    ],
+    ResizablePMCArray (size:0) [
+    ]
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of arrays of integers' );
+[[1,2,3],[1,2,3],[1,2,3]]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ],
+    ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ],
+    ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ]
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of empty strings' );
+["","",""]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    "",
+    "",
+    ""
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of strings' );
+["string a","string b","string c"]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    "string a",
+    "string b",
+    "string c"
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of empty objects' );
+[{},{},{}]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    Hash {
+    },
+    Hash {
+    },
+    Hash {
+    }
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of empty objects (check white spaces)' );
+[    {} , {}  , {}    ]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    Hash {
+    },
+    Hash {
+    },
+    Hash {
+    }
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of objects with one element' );
+[{"one":1},{"two":2},{"three":3}]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    Hash {
+        "one" => 1
+    },
+    Hash {
+        "two" => 2
+    },
+    Hash {
+        "three" => 3
+    }
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of objects with one element (white space check)' );
+[  { "one"  : 1 }  , {    "two"    :  2 } , {"three"  : 3} ]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    Hash {
+        "one" => 1
+    },
+    Hash {
+        "two" => 2
+    },
+    Hash {
+        "three" => 3
+    }
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'array of objects with multiple elements' );
+[{"one":1,"two":2,"three":3},{"one":1,"two":2,"three":3},{"one":1,"two":2,"three":3}]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    },
+    Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    },
+    Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    }
+]
+OUT
+
+json_dump_is(
+    <<'JSON', <<'OUT', 'array of boolean objects' );
+[false,true,null]
+JSON
+"JSON" => ResizablePMCArray (size:3) [
+    0,
+    1,
+    null
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'empty object' );
+{}
+JSON
+"JSON" => Hash {
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with one element' );
+{"one":1}
+JSON
+"JSON" => Hash {
+    "one" => 1
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with numbers' );
+{"one":1,"two":2,"three":3}
+JSON
+"JSON" => Hash {
+    "one" => 1,
+    "three" => 3,
+    "two" => 2
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with strings' );
+{"one":"string a","two":"string b","three":"string c"}
+JSON
+"JSON" => Hash {
+    "one" => "string a",
+    "three" => "string c",
+    "two" => "string b"
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with strings (white space check)' );
+{  "one" : "string a"    ,   "two"  :  "string b" , "three"   : "string c"    }
+JSON
+"JSON" => Hash {
+    "one" => "string a",
+    "three" => "string c",
+    "two" => "string b"
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with one empty object' );
+{"one":{}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with one object with one element' );
+{"one":{"one":1}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => 1
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with one object of various element with integers' );
+{"one":{"one":1,"two":2,"three":3}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with one object of various element with strings' );
+{"one":{"one":"string a","two":"string b","three":"string c"}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => "string a",
+        "three" => "string c",
+        "two" => "string b"
+    }
+}
+OUT
+
+json_dump_is(
+    <<'JSON', <<'OUT', 'object with one object of various element with strings (check white spaces)' );
+{   "one" :  { "one" :   "string a" , "two"  : "string b"  ,  "three" :  "string c"   }    }
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => "string a",
+        "three" => "string c",
+        "two" => "string b"
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with more than one empty object' );
+{"one":{},"two":{},"three":{}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+    },
+    "three" => Hash {
+    },
+    "two" => Hash {
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with more than one object with one integer element' );
+{"one":{"one":1},"two":{"two":2},"three":{"three":3}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => 1
+    },
+    "three" => Hash {
+        "three" => 3
+    },
+    "two" => Hash {
+        "two" => 2
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with more than one object with various integer elements' );
+{"one":{"one":1,"two":2,"three":3},"two":{"one":1,"two":2,"three":3},"three":{"one":1,"two":2,"three":3}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    },
+    "three" => Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    },
+    "two" => Hash {
+        "one" => 1,
+        "three" => 3,
+        "two" => 2
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with more than one object with one string element' );
+{"one":{"one":"string a"},"two":{"two":"string b"},"three":{"three":"string c"}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => "string a"
+    },
+    "three" => Hash {
+        "three" => "string c"
+    },
+    "two" => Hash {
+        "two" => "string b"
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with more than one object with various integer elements' );
+{"one":{"one":"string a","two":"string b","three":"string c"},"two":{"one":"string a","two":"string b","three":"string c"},"three":{"one":"string a","two":"string b","three":"string c"}}
+JSON
+"JSON" => Hash {
+    "one" => Hash {
+        "one" => "string a",
+        "three" => "string c",
+        "two" => "string b"
+    },
+    "three" => Hash {
+        "one" => "string a",
+        "three" => "string c",
+        "two" => "string b"
+    },
+    "two" => Hash {
+        "one" => "string a",
+        "three" => "string c",
+        "two" => "string b"
+    }
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with empty array' );
+{"one":[]}
+JSON
+"JSON" => Hash {
+    "one" => ResizablePMCArray (size:0) [
+    ]
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with array' );
+{"one":[1,2,3]}
+JSON
+"JSON" => Hash {
+    "one" => ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ]
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with various arrays' );
+{"one":[1,2,3],"two":[1,2,3],"three":[1,2,3]}
+JSON
+"JSON" => Hash {
+    "one" => ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ],
+    "three" => ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ],
+    "two" => ResizablePMCArray (size:3) [
+        1,
+        2,
+        3
+    ]
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'object with boolean values' );
+{"one":true,"two":false,"three":null}
+JSON
+"JSON" => Hash {
+    "one" => 1,
+    "three" => null,
+    "two" => 0
+}
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'example taken from the RFC' );
+{"Image":{"Width":800,"Height":600,"Title":"View from 15th Floor","Thumbnail":{"Url":"http://www.example.com/image/481989943","Height":125,"Width":"100"},"IDs":[116, 943, 234, 38793]}}
+JSON
+"JSON" => Hash {
+    "Image" => Hash {
+        "Height" => 600,
+        "IDs" => ResizablePMCArray (size:4) [
+            116,
+            943,
+            234,
+            38793
+        ],
+        "Thumbnail" => Hash {
+            "Height" => 125,
+            "Url" => "http://www.example.com/image/481989943",
+            "Width" => "100"
+        },
+        "Title" => "View from 15th Floor",
+        "Width" => 800
+    }
+}
+OUT
+
+json_dump_is(
+    <<'JSON', <<'OUT', 'another example taken from the RFC', todo => 'check number precision' );
+[{"precision":"zip","Latitude":37.7668,"Longitude":-122.3959,"Address":"","City":"SAN FRANCISCO","State":"CA","Zip":"94107","Country":"US"},{"precision":"zip","Latitude":37.371991,"Longitude":-122.026020,"Address":"","City":"SUNNYVALE", "State":"CA", "Zip":"94085", "Country":"US"}]
+JSON
+"JSON" => ResizablePMCArray (size:2) [
+    Hash {
+        "Address" => "",
+        "City" => "SAN FRANCISCO",
+        "Country" => "US",
+        "Latitude" => 37.7668,
+        "Longitude" => -122.3959,
+        "State" => "CA",
+        "Zip" => "94107",
+        "precision" => "zip"
+    },
+    Hash {
+        "Address" => "",
+        "City" => "SUNNYVALE",
+        "Country" => "US",
+        "Latitude" => 37.371991,
+        "Longitude" => -122.026020,
+        "State" => "CA",
+        "Zip" => "94085",
+        "precision" => "zip"
+    }
+]
+OUT
+
+json_dump_is( <<'JSON', <<'OUT', 'random object/array example' );
+[[],[{},{}],{"str":true},{"a":"1","b":{},"c":"2"},[true],false,{"e":[],"d":3}]
+JSON
+"JSON" => ResizablePMCArray (size:7) [
+    ResizablePMCArray (size:0) [
+    ],
+    ResizablePMCArray (size:2) [
+        Hash {
+        },
+        Hash {
+        }
+    ],
+    Hash {
+        "str" => 1
+    },
+    Hash {
+        "a" => "1",
+        "b" => Hash {
+        },
+        "c" => "2"
+    },
+    ResizablePMCArray (size:1) [
+        1
+    ],
+    0,
+    Hash {
+        "d" => 3,
+        "e" => ResizablePMCArray (size:0) [
+        ]
+    }
+]
+OUT
+
+# TT #1226 Need many more tests, exercising all aspects of http://www.json.org/
+
+sub json_dump_is {
+    my ( $code, $dumped, $reason, %args ) = @_;
+
+    chomp $code;
+    $code =~ s{("|\\)}{\\$1}g;
+    $code =~ s{\n}{\\n}g;
+
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+    return pir_output_is( <<"END_PIR", $dumped, $reason, %args );
+
+.sub test :main
+    load_language 'data_json'
+    load_bytecode 'dumper.pbc'
+
+    .local pmc JSON, eval, result
+    JSON = compreg 'data_json'
+    eval = JSON.'compile'("$code")
+    result = eval()
+    _dumper(result, "JSON")
+.end
+END_PIR
+
+}
+
+sub json_isnt {
+    my ( $code, $reason, %args ) = @_;
+
+    $code =~ s{("|\\)}{\\$1}g;
+    $code =~ s{\n}{\\n}g;
+
+    return pir_error_output_like( <<"END_PIR", qr/not a valid JSON value/, $reason, %args );
+
+.sub test :main
+    load_language 'data_json'
+
+    .local pmc JSON, eval, result
+
+    JSON = compreg 'data_json'
+    eval = JSON.'compile'("$code")
+    result = eval()
+.end
+END_PIR
+
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/compilers/imcc/imcpasm/optc.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/imcpasm/optc.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/imcpasm/optc.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2005, Parrot Foundation.
+# Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -242,8 +242,8 @@
 @pcc_sub_call_\d:
   set_args
   set_p_pc (P\d+), foo
-  get_results
   invokecc \2
+  get_results
   noop
   end
 foo:
@@ -424,4 +424,3 @@
 #   fill-column: 100
 # End:
 # vim: expandtab shiftwidth=4:
-

Modified: branches/ops_pct/t/compilers/imcc/reg/spill.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/reg/spill.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/reg/spill.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/imcc/syn/file.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/file.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/file.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -400,7 +400,7 @@
     $err_msg =~ s/\r//g if $^O =~ /^(MSWin32|msys)$/i;
     is( $err_msg, << "OUT", 'including a non-existent file' );
 error:imcc:$enoent_err_msg
-\tin file '$temp_pir' line 2
+\tin file '$temp_pir' line 1
 OUT
 }
 

Modified: branches/ops_pct/t/compilers/imcc/syn/labels.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/labels.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/labels.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/imcc/syn/objects.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/objects.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/objects.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/imcc/syn/op.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/op.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/op.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/imcc/syn/regressions.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/regressions.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/regressions.t	Wed May  5 08:45:29 2010	(r46302)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 20;
+use Parrot::Test tests => 21;
 
 pir_error_output_like( <<'CODE', <<'OUT', 'invalid get_results syntax');
 .sub main :main
@@ -228,6 +228,14 @@
 CODE
 OUT
 
+pir_error_output_like( <<'CODE', <<'OUT', 'over long keys should not segfault (TT #641)');
+.sub main
+ $P0 = new [0;0;0;0;0;0;0;0;0;0;0;0] # more than MAX_KEY_LEN.
+.end
+CODE
+/Key too long/
+OUT
+
 # This test probably belongs in subflags.t
 # The test inspired by TT #744, even though it presents differently.
 {

Modified: branches/ops_pct/t/compilers/imcc/syn/scope.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/scope.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/scope.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/imcc/syn/subflags.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/subflags.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/subflags.t	Wed May  5 08:45:29 2010	(r46302)
@@ -69,7 +69,7 @@
     isa_ok($P30, 'Sub', ":method sub found w/.const")
     $P0 = get_global 'method1'
     $I0 = isnull $P0
-    todo($I0, ":method sub not found in namespace")
+    ok($I0, ":method sub not found in namespace")
 
     ## :subid subs
     .const 'Sub' $P40 = 'subid1'

Modified: branches/ops_pct/t/compilers/imcc/syn/tail.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/tail.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/tail.t	Wed May  5 08:45:29 2010	(r46302)
@@ -23,8 +23,8 @@
     .const 'Sub' f = "_floor"
     .const 'Sub' c = "_funcall"
     set_args "0,0,0", f, $P1, $P2
-    get_results "0,0", $P3, $P4
     invokecc c
+    get_results "0,0", $P3, $P4
     print "_floor returned "
     print 2      # TODO argcP
     print " values, "
@@ -34,8 +34,8 @@
     print ".\n"
     .const 'Sub' s = "_fib_step"
     set_args "0,0,0", s, $P1, $P2
-    get_results "0,0,0", $P3, $P4, $P5
     invokecc c
+    get_results "0,0,0", $P3, $P4, $P5
     print "_fib_step returned "
     print 3    # TODO argcP
     print " values, "

Modified: branches/ops_pct/t/compilers/imcc/syn/veracity.t
==============================================================================
--- branches/ops_pct/t/compilers/imcc/syn/veracity.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/imcc/syn/veracity.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/pct/complete_workflow.t
==============================================================================
--- branches/ops_pct/t/compilers/pct/complete_workflow.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pct/complete_workflow.t	Wed May  5 08:45:29 2010	(r46302)
@@ -94,7 +94,7 @@
     # thingy() is executed before TOP.
     # So setting $?MY_OUR_VAR here won't affect the generated PAST
     our $?MY_OUR_VAR := 'was set in method TOP';
-    make $( $<thingy> );
+    make $<thingy>.ast;
 }
 
 method thingy($/) {
@@ -126,7 +126,7 @@
 
 method TOP($/) {
     our $?MY_OUR_VAR;
-    my $past := $( $<thingy> ); # $?MY_OUR_VAR has been set in thingy()
+    my $past := $<thingy>.ast; # $?MY_OUR_VAR has been set in thingy()
     $past[0][0].value( 'our var ' ~ $?MY_OUR_VAR );
 
     make $past;
@@ -181,18 +181,18 @@
 
 method TOP($/) {
     my $past := PAST::Stmts.new();
-    $past.push( $( $<scope_a> ) );
-    $past.push( $( $<scope_b> ) );
+    $past.push( $<scope_a>.ast );
+    $past.push( $<scope_b>.ast );
 
     make $past;
 }
 
 method scope_a($/) {
-   make $( $<thingy> );
+   make $<thingy>.ast;
 }
 
 method scope_b($/) {
-   make $( $<thingy> );
+   make $<thingy>.ast;
 }
 
 method INIT_SCOPE_A($/) {
@@ -244,7 +244,7 @@
 method TOP($/) {
     my $past := PAST::Stmts.new();
     for $<thingy_or_stuff> {
-        $past.push( $( $_ ) );
+        $past.push( $_.ast );
     }
 
     our $?MY_OUR_VAR;
@@ -254,7 +254,7 @@
 }
 
 method thingy_or_stuff($/,$key) {
-    make $( $/{$key} );
+    make $/{$key}.ast;
 }
 
 method THINGY($/) {
@@ -310,7 +310,7 @@
     my $PARROT        = "$BUILD_DIR/parrot$PConfig{exe}";
     my $PGE_LIBRARY   = "$BUILD_DIR/runtime/parrot/library/PGE";
     my $PERL6GRAMMAR  = "$PGE_LIBRARY/Perl6Grammar.pbc";
-    my $NQP           = "$BUILD_DIR/compilers/nqp/nqp.pbc";
+    my $NQP           = "$BUILD_DIR/parrot-nqp.pbc";
 
     my $tempfile_opts = {
          DIR      => $TEST_DIR,

Modified: branches/ops_pct/t/compilers/pge/02-match.t
==============================================================================
--- branches/ops_pct/t/compilers/pge/02-match.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pge/02-match.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/pge/03-optable.t
==============================================================================
--- branches/ops_pct/t/compilers/pge/03-optable.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pge/03-optable.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/pge/04-compile.t
==============================================================================
--- branches/ops_pct/t/compilers/pge/04-compile.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pge/04-compile.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2007-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/pge/p5regex/p5rx.t
==============================================================================
--- branches/ops_pct/t/compilers/pge/p5regex/p5rx.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pge/p5regex/p5rx.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #!./parrot
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 # vi: ft=pir
 
@@ -696,7 +696,7 @@
     # NOTE: there can be multiple tabs between entries, so skip until
     # we have something.
     # remove the trailing newline from record
-    chopn test_line, 1
+    test_line = chopn test_line, 1
 
     $P1 = split "\t", test_line
 
@@ -825,27 +825,27 @@
   target1:
     $I0 = index target, '\n'
     if $I0 == -1 goto target2
-    substr target, $I0, 2, "\n"
+    target = replace target, $I0, 2, "\n"
     goto target1
   target2:
     $I0 = index target, '\r'
     if $I0 == -1 goto target3
-    substr target, $I0, 2, "\r"
+    target = replace target, $I0, 2, "\r"
     goto target2
   target3:
     $I0 = index target, '\e'
     if $I0 == -1 goto target4
-    substr target, $I0, 2, "\e"
+    target = replace target, $I0, 2, "\e"
     goto target3
   target4:
     $I0 = index target, '\t'
     if $I0 == -1 goto target5
-    substr target, $I0, 2, "\t"
+    target = replace target, $I0, 2, "\t"
     goto target4
   target5:
     $I0 = index target, '\f'
     if $I0 == -1 goto target6
-    substr target, $I0, 2, "\f"
+    target = replace target, $I0, 2, "\f"
     goto target5
   target6:
     # handle \xHH, hex escape.
@@ -859,7 +859,7 @@
     if $I2 > $I1 goto target7
     $S0 = substr target, $I2, 2
     $S1 = hex_chr($S0)
-    substr target, $I0, 4, $S1
+    target = replace target, $I0, 4, $S1
 
     inc x_pos
     goto target6

Modified: branches/ops_pct/t/compilers/pge/perl6regex/01-regex.t
==============================================================================
--- branches/ops_pct/t/compilers/pge/perl6regex/01-regex.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pge/perl6regex/01-regex.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #!./parrot
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -237,8 +237,8 @@
     # remove /'s
     $S0 = substr result, 0, 1
     if $S0 != "/" goto bad_line
-    substr result, 0, 1, ''
-    substr result, -1, 1, ''
+    result = replace result, 0, 1, ''
+    result = replace result, -1, 1, ''
 
     $I0 = index $S1, result
     if $I0 == -1 goto is_nok
@@ -276,12 +276,13 @@
     .local string message
     get_results '0', exception
     message = exception
+    print '# '
     say message
     # remove /'s
     $S0 = substr result, 0, 1
     if $S0 != "/" goto bad_error
-    substr result, 0, 1, ''
-    substr result, -1, 1, ''
+    result = replace result, 0, 1, ''
+    result = replace result, -1, 1, ''
     $I0 = index message, result
     if $I0 == -1 goto bad_error
     ok = 1
@@ -313,7 +314,7 @@
     # NOTE: there can be multiple tabs between entries, so skip until
     # we have something.
     # remove the trailing newline from record
-    chopn test_line, 1
+    test_line = chopn test_line, 1
 
     $P1 = split "\t", test_line
     $I0 = elements $P1 # length of array
@@ -441,27 +442,27 @@
   target1:
     $I0 = index target, '\n'
     if $I0 == -1 goto target2
-    substr target, $I0, 2, "\n"
+    target = replace target, $I0, 2, "\n"
     goto target1
   target2:
     $I0 = index target, '\r'
     if $I0 == -1 goto target3
-    substr target, $I0, 2, "\r"
+    target = replace target, $I0, 2, "\r"
     goto target2
   target3:
     $I0 = index target, '\e'
     if $I0 == -1 goto target4
-    substr target, $I0, 2, "\e"
+    target = replace target, $I0, 2, "\e"
     goto target3
   target4:
     $I0 = index target, '\t'
     if $I0 == -1 goto target5
-    substr target, $I0, 2, "\t"
+    target = replace target, $I0, 2, "\t"
     goto target4
   target5:
     $I0 = index target, '\f'
     if $I0 == -1 goto target6
-    substr target, $I0, 2, "\f"
+    target = replace target, $I0, 2, "\f"
     goto target5
   target6:
     # handle \xHH, hex escape.
@@ -474,7 +475,7 @@
     ($S0, $I2) = $P0(target, 'x', $I1)
     $S3 = substr target, $I1, $I2
     $I2 += 2
-    substr target, $I0, $I2, $S0
+    target = replace target, $I0, $I2, $S0
     goto target6
   target7:
     .return (target)

Modified: branches/ops_pct/t/compilers/pge/pge-hs.t
==============================================================================
--- branches/ops_pct/t/compilers/pge/pge-hs.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/pge/pge-hs.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/tge/basic.t
==============================================================================
--- branches/ops_pct/t/compilers/tge/basic.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/tge/basic.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/compilers/tge/parser.t
==============================================================================
--- branches/ops_pct/t/compilers/tge/parser.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/compilers/tge/parser.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/configure/testlib/adefectivefoobar
==============================================================================
--- branches/ops_pct/t/configure/testlib/adefectivefoobar	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/configure/testlib/adefectivefoobar	Wed May  5 08:45:29 2010	(r46302)
@@ -40,7 +40,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/t/configure/testlib/bdefectivefoobar
==============================================================================
--- branches/ops_pct/t/configure/testlib/bdefectivefoobar	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/configure/testlib/bdefectivefoobar	Wed May  5 08:45:29 2010	(r46302)
@@ -50,7 +50,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/t/configure/testlib/cdefectivefoobar
==============================================================================
--- branches/ops_pct/t/configure/testlib/cdefectivefoobar	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/configure/testlib/cdefectivefoobar	Wed May  5 08:45:29 2010	(r46302)
@@ -51,7 +51,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/t/configure/testlib/ddefectivefoobar
==============================================================================
--- branches/ops_pct/t/configure/testlib/ddefectivefoobar	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/configure/testlib/ddefectivefoobar	Wed May  5 08:45:29 2010	(r46302)
@@ -42,7 +42,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/t/configure/testlib/verbosefoobar
==============================================================================
--- branches/ops_pct/t/configure/testlib/verbosefoobar	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/configure/testlib/verbosefoobar	Wed May  5 08:45:29 2010	(r46302)
@@ -44,7 +44,6 @@
 auto::jit
 auto::cpu
 auto::funcptr
-auto::cgoto
 auto::inline
 auto::gc
 auto::memalign

Modified: branches/ops_pct/t/distro/file_metadata.t
==============================================================================
--- branches/ops_pct/t/distro/file_metadata.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/distro/file_metadata.t	Wed May  5 08:45:29 2010	(r46302)
@@ -32,7 +32,15 @@
 
 =cut
 
-my $cmd = -d '.svn' ? 'svn' : 'svk';
+BEGIN {
+    unless ( -e 'DEVELOPING' ) {
+        plan skip_all => "Don't bother running these in a tarball.";
+        exit(0);
+    }
+}
+
+
+my $cmd = 'svn';
 my @git_svn_metadata;    # set in BEGIN block
 
 # how many files to check at a time. May have to lower this when we run
@@ -237,7 +245,7 @@
             plan skip_all => q{git svn file metadata not retained};
         }
     }
-    elsif ( !( (-d '.svn' && `svn info .`) or `svk info .` ) ) {
+    elsif ( ! (-d '.svn' && `svn info .`) ) {
         plan skip_all => 'not a working copy';
     }
     else { plan tests => 5 }
@@ -245,7 +253,7 @@
 
 #
 # Given a list, a count, and a sub, process that list count elements
-# at a time. (do this to speed up execution for the svn/svk commands)
+# at a time. (do this to speed up execution for the svn commands)
 #
 
 sub at_a_time {

Deleted: branches/ops_pct/t/distro/meta_yml.t
==============================================================================
--- branches/ops_pct/t/distro/meta_yml.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,39 +0,0 @@
-#! perl
-# Copyright (C) 2008-2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/distro/meta_yml.t - check sanity of the META.yml file
-
-=head1 SYNOPSIS
-
-    % prove t/distro/meta_yml.t
-
-=head1 DESCRIPTION
-
-Checks the sanitiy of the file META.yml, which gives information
-on a CPAN distribution.
-
-=cut
-
-use strict;
-use warnings;
-use 5.008;
-
-use Test::More;
-
-# Test::CPAN::Meta complains about 'artistic2' license.
-# So let's wait for version 0.08
-# See http://rt.cpan.org/Public/Bug/Display.html?id=34130
-eval "use Test::CPAN::Meta 0.08";
-plan skip_all => "Test::CPAN::Meta 0.08 required for testing META.yml" if $@;
-
-meta_yaml_ok();
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/dynoplibs/math.t
==============================================================================
--- branches/ops_pct/t/dynoplibs/math.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/dynoplibs/math.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/dynoplibs/obscure.t
==============================================================================
--- branches/ops_pct/t/dynoplibs/obscure.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/dynoplibs/obscure.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Copied: branches/ops_pct/t/dynpmc/file.t (from r46301, trunk/t/dynpmc/file.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/dynpmc/file.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/dynpmc/file.t)
@@ -0,0 +1,338 @@
+#! perl
+# Copyright (C) 2001-2006, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+
+use Test::More;
+use Parrot::Test tests => 9;
+
+use Parrot::Config;
+
+use Cwd;
+use File::Temp;
+use File::Spec::Functions;
+
+my $tempdir = File::Temp::tempdir( CLEANUP => 1 );
+
+our ( $MSWin32, $cygwin );
+$MSWin32 = 1 if $^O =~ m!MSWin32!;
+$cygwin  = 1 if $^O =~ m!cygwin!;
+
+=head1 NAME
+
+t/pmc/file.t - Files functions
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/file.t
+
+=head1 DESCRIPTION
+
+Tests the C<File> PMC.
+
+=cut
+
+my $xpto = catdir( $tempdir, 'xpto' );
+mkdir $xpto unless -d $xpto;
+
+my $otpx = catfile( $xpto, 'otpx' );
+
+open my $fh, '>', $otpx or die $!;
+print $fh 'xpto';
+close $fh;
+
+# test is_dir
+pir_output_is( <<"CODE", <<"OUT", "Test is_dir" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$xpto'
+        \$I1 = \$P1."is_dir"(\$S1)
+
+        if \$I1 goto ok1
+        print "not "
+
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$otpx'
+        \$I1 = \$P1."is_dir"(\$S1)
+        \$I1 = !\$I1
+
+        if \$I1 goto ok2
+        print "not "
+
+ok2:
+        print "ok 2\\n"
+
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+
+# test is_dir
+pir_error_output_like( <<"CODE", <<"OUT", "Test is_dir error" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        #make a filename that's long enough to cause lstat to fail
+        \$I0 = 1000
+loop:
+        \$S0 = concat \$S0, "1234567890"
+        \$I0 = \$I0 - 1
+        if \$I0 goto loop
+
+        \$I1 = \$P1."is_dir"(\$S0)
+
+        end
+.end
+CODE
+/^[\\w \t\r\n]+current instr\.:/
+OUT
+
+# test is_file
+pir_output_is( <<"CODE", <<"OUT", "Test is_file" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$xpto'
+        \$I1 = \$P1."is_file"(\$S1)
+        \$I1 = !\$I1
+
+        if \$I1 goto ok1
+        print "not "
+
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$otpx'
+        \$I1 = \$P1."is_file"(\$S1)
+
+        if \$I1 goto ok2
+        print "not "
+
+ok2:
+        print "ok 2\\n"
+
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+
+# test is_file
+pir_error_output_like( <<"CODE", <<"OUT", "Test is_file error" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        #make a filename that's long enough to cause lstat to fail
+        \$I0 = 1000
+loop:
+        \$S0 = concat \$S0, "1234567890"
+        \$I0 = \$I0 - 1
+        if \$I0 goto loop
+
+        \$I1 = \$P1."is_file"(\$S0)
+
+        end
+.end
+CODE
+/^[\\w \t\r\n]+current instr\.:/
+OUT
+
+SKIP: {
+    skip "Links not available under Windows", 1 if $MSWin32;
+
+    my $lotpx = catfile( $xpto, 'lotpx' );
+    symlink $otpx, $lotpx;
+
+    # test is_link
+    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to files" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$lotpx'
+        \$I1 = \$P1."is_link"(\$S1)
+
+        if \$I1 goto ok1
+        print "not "
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$otpx'
+        \$I1 = \$P1."is_link"(\$S1)
+        \$I1 = !\$I1
+        if \$I1 goto ok2
+        print "not "
+ok2:
+        print "ok 2\\n"
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+
+}
+
+SKIP: {
+    skip "Links not available under Windows", 1 if $MSWin32;
+
+    my $xptol = catdir( $xpto, 'xptol' );
+    symlink $xpto, $xptol;
+
+    # test is_link
+    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to directories" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$xptol'
+        \$I1 = \$P1."is_link"(\$S1)
+
+        if \$I1 goto ok1
+        print "not "
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$xpto'
+        \$I1 = \$P1."is_link"(\$S1)
+        \$I1 = !\$I1
+        if \$I1 goto ok2
+        print "not "
+ok2:
+        print "ok 2\\n"
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+}
+
+my $otpxcopy = catdir( $xpto, 'otpxcopy' );
+
+# test copy
+pir_output_is( <<"CODE", <<"OUT", "Test copy for files" );
+.sub main :main
+       \$S1 = '$otpx'
+       \$S2 = '$otpxcopy'
+
+       \$P0 = loadlib 'file'
+       \$P0 = loadlib 'os'
+       \$P1 = new ['File']
+       \$P2 = new ['OS']
+
+       \$P1."copy"(\$S1,\$S2)
+       print "ok\\n"
+
+       \$P3 = \$P2."stat"(\$S1)
+       \$P4 = \$P2."stat"(\$S2)
+
+       \$I1 = \$P3[7]
+       \$I2 = \$P4[7]
+
+       if \$I1 == \$I2 goto ok
+       print "not "
+ok:
+       print "ok\\n"
+
+       end
+.end
+CODE
+ok
+ok
+OUT
+
+# test rename
+SKIP: {
+    skip 'file exists', 1 if $MSWin32;
+
+    pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
+.sub main :main
+       \$S1 = '$otpx'
+       \$S2 = '$otpxcopy'
+
+       \$P0 = loadlib 'file'
+       \$P0 = loadlib 'os'
+       \$P1 = new ['File']
+       \$P2 = new ['OS']
+
+       \$P3 = \$P2."stat"(\$S1)
+       \$I1 = \$P3[7]
+
+       \$P1."rename"(\$S1,\$S2)
+       print "ok\\n"
+
+       \$P4 = \$P2."stat"(\$S2)
+       \$I2 = \$P4[7]
+
+       if \$I1 == \$I2 goto ok
+       print "not "
+ok:
+       print "ok\\n"
+
+       end
+.end
+CODE
+ok
+ok
+OUT
+}
+
+my $bad_file = catfile( $xpto, 'not a file' );
+
+# test exists
+pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
+.sub main :main
+       \$P0 = loadlib 'file'
+       \$P1 = new ['File']
+       \$I1 = \$P1.'exists'( '$otpxcopy' )
+
+       if \$I1 goto file_exists
+       print "not "
+
+  file_exists:
+       print "ok 1 - file exists\\n"
+
+       \$I1 = \$P1.'exists'( '$xpto' )
+
+       if \$I1 goto dir_exists
+       print "not "
+
+  dir_exists:
+       print "ok 2 - directory exists\\n"
+
+       \$I1 = \$P1.'exists'( '$bad_file' )
+
+       if \$I1 == 0 goto file_does_not_exist
+       print "not "
+
+  file_does_not_exist:
+       print "ok 3 - file does not exist\\n"
+
+       end
+.end
+CODE
+ok 1 - file exists
+ok 2 - directory exists
+ok 3 - file does not exist
+OUT
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/dynpmc/foo2.t
==============================================================================
--- branches/ops_pct/t/dynpmc/foo2.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/dynpmc/foo2.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

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

Copied: branches/ops_pct/t/dynpmc/gziphandle.t (from r46301, trunk/t/dynpmc/gziphandle.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/dynpmc/gziphandle.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/dynpmc/gziphandle.t)
@@ -0,0 +1,66 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynpmc/gziphandle.t - test the GzipHandle PMC
+
+=head1 SYNOPSIS
+
+        % parrot t/dynpmc/gziphandle.t
+
+=head1 DESCRIPTION
+
+Tests the C<GzipHandle> PMC, a zlib wrapper.
+
+=cut
+
+.sub 'main' :main
+    .include 'test_more.pir'
+    .include 'iglobals.pasm'
+    .local pmc config_hash, interp
+    .local int num_tests
+
+    num_tests = 3
+    plan(num_tests)
+    interp = getinterp
+    config_hash = interp[.IGLOBALS_CONFIG_HASH]
+    $S0 = config_hash['has_zlib']
+    unless $S0 goto no_zlib
+
+    $P0 = loadlib 'gziphandle'
+    test_handle()
+    test_version()
+    .return()
+
+  no_zlib:
+    skip(num_tests, 'No zlib library available')
+    .return()
+.end
+
+
+.sub 'test_handle'
+    $P0 = new 'GzipHandle'
+    $S0 = typeof $P0
+    is($S0, 'GzipHandle', 'GzipHandle typeof')
+    $I0 = does $P0, 'Handle'
+    ok($I0, 'does Handle')
+.end
+
+.sub 'test_version'
+    $P0 = new 'GzipHandle'
+    $S0 =$P0.'version'()
+    diag($S0)
+    $I0 = index $S0, '1.'
+    is($I0, 0, 'zlib version')
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+
+

Copied: branches/ops_pct/t/dynpmc/os.t (from r46301, trunk/t/dynpmc/os.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/dynpmc/os.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/dynpmc/os.t)
@@ -0,0 +1,463 @@
+#! perl
+# Copyright (C) 2001-2009, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test tests => 16;
+use Parrot::Config;
+use Cwd;
+use File::Spec;
+
+my $MSWin32 = $^O =~ m!MSWin32!;
+my $cygwin  = $^O =~ m!cygwin!;
+my $solaris = $^O =~ m!solaris!;
+my $MSVC = $PConfig{cc} =~ m/\bcl(?:\.exe)?/i;
+
+=head1 NAME
+
+t/pmc/os.t - Files and Dirs
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/os.t
+
+=head1 DESCRIPTION
+
+Tests the C<OS> PMC.
+
+=cut
+
+END {
+    # Clean up environment on exit
+    rmdir "xpto"  if -d "xpto";
+    unlink "xpto" if -f "xpto";
+}
+
+# test 'cwd'
+my $cwd = File::Spec->canonpath(getcwd);
+if (File::Spec->case_tolerant(substr($cwd,0,2))) {
+    $cwd = lc($cwd);
+    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        print $S2
+        print "\n"
+        end
+.end
+CODE
+$cwd
+OUT
+}
+else {
+    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = $P1."cwd"()
+        print $S1
+        print "\n"
+        end
+.end
+CODE
+$cwd
+OUT
+}
+
+#  TEST chdir
+chdir "src";
+my $upcwd = File::Spec->canonpath(getcwd);
+chdir '..';
+
+if (File::Spec->case_tolerant(substr($cwd,0,2))) {
+    $cwd = lc($cwd);
+    $upcwd = lc($upcwd);
+
+    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "src"
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        end
+.end
+CODE
+$upcwd
+$cwd
+OUT
+}
+else {
+    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "src"
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        end
+.end
+CODE
+$upcwd
+$cwd
+OUT
+}
+
+# Test mkdir
+
+my $xpto = $upcwd;
+$xpto =~ s/src([\/\\]?)$/xpto$1/;
+
+if (File::Spec->case_tolerant(substr($cwd,0,2))) {
+
+    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $I1 = 0o555
+        $P1."mkdir"($S1,$I1)
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        end
+.end
+CODE
+$xpto
+$cwd
+OUT
+}
+else {
+    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $I1 = 0o555
+        $P1."mkdir"($S1,$I1)
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        end
+.end
+CODE
+$xpto
+$cwd
+OUT
+}
+
+# Test remove on a directory
+mkdir "xpto" unless -d "xpto";
+
+pir_output_is( <<'CODE', <<'OUT', 'Test rm call in a directory' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $P1."rm"($S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+ok( !-d $xpto, "Test that rm removed the directory" );
+rmdir $xpto if -d $xpto;    # this way next test doesn't fail if this one does
+
+# test stat
+
+open my $X, '>', "xpto";
+print $X "xpto";
+close $X;
+
+my $stat;
+
+my $count = $MSWin32 ? 11 : 13;
+my @s = stat('xpto');
+if ( $cygwin ) {
+    # Mask inode number (fudge it)
+    $s[1] &= 0xffffffff;
+}
+
+if ( $MSWin32 ) {
+    $stat = sprintf("0x%08x\n" x 11, @s);
+    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = "xpto"
+        $P2 = $P1."stat"($S1)
+
+        $S1 = repeat "0x%08x\n", 11
+        $S2 = sprintf $S1, $P2
+        print $S2
+done:
+        end
+.end
+CODE
+}
+else {
+  SKIP: {
+    skip 'broken test TT #457', 1 if $solaris;
+
+    $stat = sprintf("0x%08x\n" x 13, @s);
+    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = "xpto"
+        $P2 = $P1."stat"($S1)
+
+        $S1 = repeat "0x%08x\n", 13
+        $S2 = sprintf $S1, $P2
+        print $S2
+done:
+        end
+.end
+CODE
+}
+}
+
+# test readdir
+SKIP: {
+    skip 'not implemented on windows yet', 1 if ( $MSWin32 && $MSVC );
+
+    opendir my $IN, 'docs';
+    my @entries = readdir $IN;
+    closedir $IN;
+    my $entries = join( ' ', @entries ) . "\n";
+    pir_output_is( <<'CODE', $entries, 'Test OS.readdir' );
+.sub main :main
+    $P0 = loadlib 'os'
+    $P1 = new ['OS']
+    $P2 = $P1.'readdir'('docs')
+
+    $S0 = join ' ', $P2
+    print $S0
+    print "\n"
+.end
+CODE
+}
+
+# test rename
+SKIP: {
+    open my $FILE, ">", "____some_test_file";
+    close $FILE;
+    pir_output_is( <<'CODE', <<"OUT", 'Test OS.rename' );
+.sub main :main
+    $P0 = loadlib 'os'
+    $P1 = new ['OS']
+    $P1.'rename'('____some_test_file', '___some_other_file')
+    $I0 = stat '___some_other_file', 0
+    print $I0
+    print "\n"
+    $P1.'rm'('___some_other_file')
+.end
+CODE
+1
+OUT
+}
+
+# test lstat
+
+my $lstat;
+
+SKIP: {
+    skip 'lstat not on Win32', 1 if $MSWin32;
+    skip 'broken test TT #457', 1 if $solaris;
+
+    my @s = lstat('xpto');
+    if ($cygwin) {
+        # Mask inode number (fudge it)
+        $s[1] &= 0xffffffff;
+    }
+    $lstat = sprintf( "0x%08x\n" x 13, @s );
+    pir_output_is( <<'CODE', $lstat, "Test OS.lstat" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = "xpto"
+        $P2 = $P1."lstat"($S1)
+
+        $S1 = repeat "0x%08x\n", 13
+        $S2 = sprintf $S1, $P2
+        print $S2
+
+        end
+.end
+CODE
+}
+
+# Test remove on a file
+pir_output_is( <<'CODE', <<"OUT", "Test rm call in a file" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $P1."rm"($S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+ok( !-f $xpto, "Test that rm removed file" );
+rmdir $xpto if -f $xpto;    # this way next test doesn't fail if this one does
+
+# Test symlink
+SKIP: {
+    skip "Symlinks not available under Windows", 2 if $MSWin32;
+
+    pir_output_is( <<'CODE', <<"OUT", "Test symlink" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $S2 = "MANIFEST"
+        $P1."symlink"($S2, $S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+    ok( -l "xpto", "symlink was really created" );
+    unlink "xpto" if -f "xpto";
+}
+
+# Test link to file. May require root permissions
+SKIP: {
+    skip "Hardlinks to files not possible on Windows", 2 if $MSWin32 or $cygwin;
+
+    pir_output_is( <<'CODE', <<"OUT", "Test link" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $S2 = "myconfig"
+        $P1."link"($S2, $S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+    my $nl = [ stat("myconfig") ]->[3];
+    ok( $nl > 1, "hard link to file was really created" );
+    unlink "xpto" if -f "xpto";
+}
+
+SKIP: {
+    skip "Hardlinks to files not possible on Windows", 1 if $MSWin32 or $cygwin;
+
+    my $prevnl = [ stat("tools") ]->[3];
+    pir_output_like( <<"CODE", <<"OUT", "Test dirlink" );
+.sub main :main
+    .local pmc os
+    .local string xpto, tools
+    \$P0 = loadlib 'os'
+    os    = new ['OS']
+    xpto  = "xpto"
+    tools = "tools"
+
+    push_eh no_root_perms
+    os."link"(tools, xpto)
+    pop_eh
+
+    .local pmc statvals
+    statvals = os.'stat'(tools)
+
+    # nlink
+    .local int nlink
+    nlink = statvals[3]
+
+    gt nlink, $prevnl, is_okay
+    end
+
+  no_root_perms:
+    .local pmc e
+    .local string message
+    .get_results( e )
+    pop_eh
+    message = e['message']
+    say message
+    end
+
+  is_okay:
+    say "ok"
+    end
+.end
+CODE
+/link.* failed for OS PMC:/
+OUT
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/dynpmc/rational.t
==============================================================================
--- branches/ops_pct/t/dynpmc/rational.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/dynpmc/rational.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,15 +1,7 @@
-#! perl
+#!./parrot
 # Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-
-use Test::More;
-use Parrot::Test;
-use Parrot::Config;
-
 =head1 NAME
 
 t/dynpmc/rational.t - Rational PMC
@@ -24,210 +16,153 @@
 
 =cut
 
-if ( $PConfig{gmp} ) { # If GMP is available, we check all functions.
-    plan tests => 32;
-}
-else {                 # If GMP is not available, we only test the constructor and the
-    plan tests => 2;   # version-method that is used to detect presence of GMP at runtime.
-}
-
-pir_output_is(<<'CODE', <<'OUTPUT', "Initialization");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
-    say "ok"
-  .end
-CODE
-ok
-OUTPUT
-
-if (! $PConfig{gmp}) { # If GMP is not available, this is the last test:
-pir_output_is(<<'CODE', <<'OUTPUT', "version-method");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
-    $S1 = $P1.'version'()
-    say $S1
-  .end
-CODE
-0.0.0
-OUTPUT
-exit;
-}
-
-# These tests are only run, if GMP is available.
-pir_output_is(<<'CODE', <<'OUTPUT', "version-method");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
-    $S1 = $P1.'version'()
-    say "ok"
-  .end
-CODE
-ok
-OUTPUT
-
-pir_output_is(<<'CODE', <<'OUTPUT', "Set and get native integer");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
-
-    $I1 = 42
-    $P1 = $I1
-    $I2 = $P1
-
-    say $I2
-  .end
-CODE
-42
-OUTPUT
-
-pir_output_is(<<'CODE', <<'OUTPUT', "Set and get native float");
-  .sub main :main
-    loadlib $P0, 'rational'
-    new $P0, 'Rational'
+.sub main :main
+    .include 'test_more.pir'
+    .include 'iglobals.pasm'
+    .local pmc config_hash, interp
+
+    interp = getinterp
+    config_hash = interp[.IGLOBALS_CONFIG_HASH]
+    $S0 = config_hash['gmp']
+
+    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()
+    test_set_get_native_int()
+    test_set_get_native_float()
+    test_set_get_native_string()
+
+    test_set_get_int()
+    test_set_get_float()
+    test_set_get_string()
+
+    test_inc_dec()
+    test_add_int_inplace()
+    test_add_float_inplace()
+
+    test_add_int_pmc_inplace()
+    test_add_float_pmc_inplace()
+    test_add_rats_inplace()
+
+    test_subtract_int()
+    test_subtract_float()
+    test_subtract_int_pmc()
+    test_subtract_rats()
+
+    test_multiply_int()
+    test_multiply_float()
+    test_multiply_int_pmc()
+    test_multiply_float_pmc()
+    test_multiply_rats()
+
+    test_divide_int()
+    test_divide_float()
+    test_divide_int_pmc()
+    test_divide_float_pmc()
+    test_divide_rats()
+
+    test_neg()
+    test_abs()
+    test_cmp()
+    test_equal_tt1517()
+.end
 
-    $N0 = 11.1
-    $P0 = $N0
-    $N1 = $P0
+.sub test_neg
+    new $P2, 'Rational'
+    new $P3, 'Rational'
 
-    say $N1
-  .end
-CODE
-11.1
-OUTPUT
+    $P2 = "-3/2"
+    $P3 = -$P2
+    $P2 = -$P2
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Set and get native string");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
+    is($P2,'3/2','neg')
+    is($P3,'3/2','neg')
+.end
 
-    $S1 = "7/4"
-    $P1 = $S1
-    $S2 = $P1
-
-    say $S2
-  .end
-CODE
-7/4
-OUTPUT
+.sub test_abs
+    new $P2, 'Rational'
+    new $P3, 'Rational'
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Set and get Integer");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
+    $P2 = "-3/2"
+    $P3 = abs $P2
+    abs $P2
+    is($P2,'3/2','abs')
+    is($P3,'3/2','abs')
+.end
 
-    new $P2, 'Integer'
+.sub test_equal_tt1517
+    new $P2, 'Rational'
     new $P3, 'Integer'
+    $P2 = "2/1"
+    $P3 = 2
+    if $P2 == $P3 goto pass
+    ok(0,'== on Rational and Integer PMC')
+    .return()
+  pass:
+    ok(1,'== on Rational and Integer PMC')
+.end
 
-    $P2 = 7
-    $P1 = $P2
-    $P3 = $P1
-
-    say $P3
-  .end
-CODE
-7
-OUTPUT
-
-pir_output_is(<<'CODE', <<'OUTPUT', "Set and get Float");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
-
-    new $P2, 'Float'
-    new $P3, 'Float'
-
-    $P2 = 7.110000
-    $P1 = $P2
-    $P3 = $P1
-
-    say $P3
-  .end
-CODE
-7.11
-OUTPUT
-
-pir_output_is(<<'CODE', <<'OUTPUT', "Set and get String");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
-
-    new $P2, 'String'
-    new $P3, 'String'
-
-    $P2 = "7/4"
-    $P1 = $P2
-    $P3 = $P1
-
-    say $P3
-  .end
-CODE
-7/4
-OUTPUT
+.sub test_cmp
+    new $P2, 'Rational'
+    new $P3, 'Rational'
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Increment and decrement");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
+    $P2 = "3/2"
+    $P3 = "6/4"
 
-    $P1 = "7/4"
-    inc $P1
-    print $P1
-    print "\n"
+    if $P2 == $P3 goto EQ
+    goto NE
+  EQ:
+    ok(1,'== on Rational PMC')
+    goto END_EQ
+  NE:
+    ok(0,'== on Rational PMC')
+  END_EQ:
 
-    dec $P1
-    dec $P1
-    say $P1
-  .end
-CODE
-11/4
-3/4
-OUTPUT
+    $P3 = "7/4"
+    cmp $I1, $P2, $P3
+    cmp $I2, $P3, $P2
+    is($I1,-1,'cmp on Rational PMC')
+    is($I2,1,'cmp on Rational PMC')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Adding integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_divide_int
     new $P1, 'Rational'
     new $P2, 'Rational'
     $I1 = 7
 
     $P1 = "3/2"
-    $P2 = $P1 + $I1
-    $P1 = $P1 + $I1
-    $P1 = $P1 + $I1
-
-    say $P1
-    say $P2
-  .end
-CODE
-31/2
-17/2
-OUTPUT
+    $P2 = $P1 / $I1
+    $P1 = $P1 / $I1
+    is($P1,'3/14','divide int')
+    is($P2,'3/14','divide int')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Adding floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_divide_float
     new $P1, 'Rational'
     new $P2, 'Rational'
     $N1 = 7.
 
     $P1 = "3/2"
-    $P2 = $P1 + $N1
-    $P1 = $P1 + $N1
-    $P1 = $P1 + $N1
+    $P2 = $P1 / $N1
+    $P1 = $P1 / $N1
+    is($P1,'3/14','divide float')
+    is($P2,'3/14','divide float')
 
-    say $P1
-    say $P2
-  .end
-CODE
-31/2
-17/2
-OUTPUT
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Adding Integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_divide_int_pmc
     new $P2, 'Rational'
     new $P3, 'Rational'
     new $P4, 'Integer'
@@ -235,20 +170,13 @@
     $P4 = 7
 
     $P2 = "3/2"
-    $P3 = $P2 + $P4
-    $P2 = $P2 + $P4
-
-    say $P2
-    say $P3
-  .end
-CODE
-17/2
-17/2
-OUTPUT
+    $P3 = $P2 / $P4
+    $P2 = $P2 / $P4
+    is($P2,'3/14','divide Integer PMC')
+    is($P3,'3/14','divide Integer PMC')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Adding Floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_divide_float_pmc
     new $P2, 'Rational'
     new $P3, 'Rational'
     new $P4, 'Float'
@@ -256,20 +184,13 @@
     $P4 = 7.
 
     $P2 = "3/2"
-    $P3 = $P2 + $P4
-    $P2 = $P2 + $P4
-
-    say $P2
-    say $P3
-  .end
-CODE
-17/2
-17/2
-OUTPUT
+    $P3 = $P2 / $P4
+    $P2 = $P2 / $P4
+    is($P2,'3/14','divide Float PMC')
+    is($P3,'3/14','divide Float PMC')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Adding Rationals (+inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_divide_rats
     new $P1, 'Rational'
     new $P2, 'Rational'
     new $P3, 'Rational'
@@ -277,60 +198,37 @@
     $P2 = "3/2"
     $P3 = "5/2"
 
-    $P1 = $P2 + $P3
-    $P2 = $P2 + $P3
-
-    say $P1
-    say $P2
-  .end
-CODE
-4
-4
-OUTPUT
+    $P1 = $P2 / $P3
+    $P2 = $P2 / $P3
+    is($P1,'3/5','divide Rational PMC')
+    is($P2,'3/5','divide Rational PMC')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Subtracting integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_multiply_int
     new $P1, 'Rational'
     new $P2, 'Rational'
     $I1 = 7
 
     $P1 = "3/2"
-    $P2 = $P1 - $I1
-    $P1 = $P1 - $I1
-    $P1 = $P1 - $I1
-
-    say $P1
-    say $P2
-  .end
-CODE
--25/2
--11/2
-OUTPUT
+    $P2 = $P1 * $I1
+    $P1 = $P1 * $I1
+    is($P1,'21/2','multiply int')
+    is($P2,'21/2','multiply int')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Subtracting floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_multiply_float
     new $P1, 'Rational'
     new $P2, 'Rational'
     $N1 = 7.
 
     $P1 = "3/2"
-    $P2 = $P1 - $N1
-    $P1 = $P1 - $N1
-    $P1 = $P1 - $N1
-
-    say $P1
-    say $P2
-  .end
-CODE
--25/2
--11/2
-OUTPUT
+    $P2 = $P1 * $N1
+    $P1 = $P1 * $N1
+    is($P1,'21/2','multiply float')
+    is($P2,'21/2','multiply float')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Subtracting Integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_multiply_int_pmc
     new $P2, 'Rational'
     new $P3, 'Rational'
     new $P4, 'Integer'
@@ -338,20 +236,13 @@
     $P4 = 7
 
     $P2 = "3/2"
-    $P3 = $P2 - $P4
-    $P2 = $P2 - $P4
-
-    say $P2
-    say $P3
-  .end
-CODE
--11/2
--11/2
-OUTPUT
+    $P3 = $P2 * $P4
+    $P2 = $P2 * $P4
+    is($P2,'21/2','multiply Integer PMC')
+    is($P3,'21/2','multiply Integer PMC')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Subtracting Floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_multiply_float_pmc
     new $P2, 'Rational'
     new $P3, 'Rational'
     new $P4, 'Float'
@@ -359,20 +250,28 @@
     $P4 = 7.
 
     $P2 = "3/2"
-    $P3 = $P2 - $P4
-    $P2 = $P2 - $P4
+    $P3 = $P2 * $P4
+    $P2 = $P2 * $P4
+    is($P2,'21/2','multiply Float PMC')
+    is($P3,'21/2','multiply Float PMC')
 
-    say $P2
-    say $P3
-  .end
-CODE
--11/2
--11/2
-OUTPUT
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Subtracting Rationals (+inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_multiply_rats
+    new $P1, 'Rational'
+    new $P2, 'Rational'
+    new $P3, 'Rational'
+
+    $P2 = "3/2"
+    $P3 = "5/2"
+
+    $P1 = $P2 * $P3
+    $P2 = $P2 * $P3
+    is($P1,'15/4','multiply Rational PMC')
+    is($P2,'15/4','multiply Rational PMC')
+.end
+
+.sub test_subtract_rats
     new $P1, 'Rational'
     new $P2, 'Rational'
     new $P3, 'Rational'
@@ -382,56 +281,38 @@
 
     $P1 = $P2 - $P3
     $P2 = $P2 - $P3
+    is($P1,-1,'subtract Rational inplace')
+    is($P2,-1,'subtract Rational inplace')
 
-    say $P1
-    say $P2
-  .end
-CODE
--1
--1
-OUTPUT
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Multiplying integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_subtract_int
     new $P1, 'Rational'
     new $P2, 'Rational'
     $I1 = 7
 
     $P1 = "3/2"
-    $P2 = $P1 * $I1
-    $P1 = $P1 * $I1
-
-    say $P1
-    say $P2
-  .end
-CODE
-21/2
-21/2
-OUTPUT
+    $P2 = $P1 - $I1
+    $P1 = $P1 - $I1
+    $P1 = $P1 - $I1
+    is($P1,'-25/2','subtract int inplace')
+    is($P2,'-11/2','subtract int inplace')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Multiplying floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_subtract_float
     new $P1, 'Rational'
     new $P2, 'Rational'
     $N1 = 7.
 
     $P1 = "3/2"
-    $P2 = $P1 * $N1
-    $P1 = $P1 * $N1
-
-    say $P1
-    say $P2
-  .end
-CODE
-21/2
-21/2
-OUTPUT
+    $P2 = $P1 - $N1
+    $P1 = $P1 - $N1
+    $P1 = $P1 - $N1
+    is($P1,'-25/2','subtract float inplace')
+    is($P2,'-11/2','subtract float inplace')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Multiplying Integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_subtract_int_pmc
     new $P2, 'Rational'
     new $P3, 'Rational'
     new $P4, 'Integer'
@@ -439,229 +320,166 @@
     $P4 = 7
 
     $P2 = "3/2"
-    $P3 = $P2 * $P4
-    $P2 = $P2 * $P4
-
-    say $P2
-    say $P3
-  .end
-CODE
-21/2
-21/2
-OUTPUT
+    $P3 = $P2 - $P4
+    $P2 = $P2 - $P4
+    is($P2,'-11/2','subtract Integer PMC inplace')
+    is($P3,'-11/2','subtract Integer PMC inplace')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Multiplying Floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_add_rats_inplace
+    new $P1, 'Rational'
     new $P2, 'Rational'
     new $P3, 'Rational'
-    new $P4, 'Float'
-
-    $P4 = 7.
 
     $P2 = "3/2"
-    $P3 = $P2 * $P4
-    $P2 = $P2 * $P4
+    $P3 = "5/2"
 
-    say $P2
-    say $P3
-  .end
-CODE
-21/2
-21/2
-OUTPUT
+    $P1 = $P2 + $P3
+    $P2 = $P2 + $P3
+    is($P1,4,'adding rationals inplace')
+    is($P2,4,'adding rationals inplace')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Multiplying Rationals (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P1, 'Rational'
+.sub test_add_int_pmc_inplace
     new $P2, 'Rational'
     new $P3, 'Rational'
+    new $P4, 'Integer'
+
+    $P4 = 7
 
     $P2 = "3/2"
-    $P3 = "5/2"
+    $P3 = $P2 + $P4
+    $P2 = $P2 + $P4
+    is($P2,'17/2','add Integer PMCs inplace')
+    is($P3,'17/2','add Integer PMCs inplace')
+.end
 
-    $P1 = $P2 * $P3
-    $P2 = $P2 * $P3
+.sub test_add_float_pmc_inplace
+    new $P2, 'Rational'
+    new $P3, 'Rational'
+    new $P4, 'Float'
 
-    say $P1
-    say $P2
-  .end
-CODE
-15/4
-15/4
-OUTPUT
+    $P4 = 7.
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Dividing integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+    $P2 = "3/2"
+    $P3 = $P2 + $P4
+    $P2 = $P2 + $P4
+    is($P2,'17/2','add Float PMCs inplace')
+    is($P3,'17/2','add Float PMCs inplace')
+.end
+
+.sub test_add_int_inplace
     new $P1, 'Rational'
     new $P2, 'Rational'
     $I1 = 7
 
     $P1 = "3/2"
-    $P2 = $P1 / $I1
-    $P1 = $P1 / $I1
-
-    say $P1
-    say $P2
-  .end
-CODE
-3/14
-3/14
-OUTPUT
+    $P2 = $P1 + $I1
+    $P1 = $P1 + $I1
+    $P1 = $P1 + $I1
+    is($P1,'31/2','add integers inplace')
+    is($P2,'17/2','add integers inplace')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Dividing floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_add_float_inplace
     new $P1, 'Rational'
     new $P2, 'Rational'
     $N1 = 7.
 
     $P1 = "3/2"
-    $P2 = $P1 / $N1
-    $P1 = $P1 / $N1
-
-    say $P1
-    say $P2
-  .end
-CODE
-3/14
-3/14
-OUTPUT
-
-pir_output_is(<<'CODE', <<'OUTPUT', "Dividing Integers (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P2, 'Rational'
-    new $P3, 'Rational'
-    new $P4, 'Integer'
-
-    $P4 = 7
-
-    $P2 = "3/2"
-    $P3 = $P2 / $P4
-    $P2 = $P2 / $P4
+    $P2 = $P1 + $N1
+    $P1 = $P1 + $N1
+    $P1 = $P1 + $N1
+    is($P1,'31/2','add floats inplace')
+    is($P2,'17/2','add floats inplace')
+.end
 
-    say $P2
-    say $P3
-  .end
-CODE
-3/14
-3/14
-OUTPUT
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Dividing Floats (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P2, 'Rational'
-    new $P3, 'Rational'
-    new $P4, 'Float'
+.sub test_init
+    new $P1, 'Rational'
+    ok($P1,'initialization')
+.end
 
-    $P4 = 7.
+.sub test_version
+    new $P1, 'Rational'
+    $S1 = $P1.'version'()
+    ok($S1,'can get version number')
+.end
 
-    $P2 = "3/2"
-    $P3 = $P2 / $P4
-    $P2 = $P2 / $P4
+.sub test_set_get_native_int
+    new $P1, 'Rational'
 
-    say $P2
-    say $P3
-  .end
-CODE
-3/14
-3/14
-OUTPUT
+    $I1 = 42
+    $P1 = $I1
+    $I2 = $P1
+    is($I2,42,'set and get native int')
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Dividing Rationals (+ inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
+.sub test_set_get_int
     new $P1, 'Rational'
-    new $P2, 'Rational'
-    new $P3, 'Rational'
-
-    $P2 = "3/2"
-    $P3 = "5/2"
+    new $P2, 'Integer'
+    new $P3, 'Integer'
 
-    $P1 = $P2 / $P3
-    $P2 = $P2 / $P3
+    $P2 = 7
+    $P1 = $P2
+    $P3 = $P1
+    is($P3,7,'set and get int')
+.end
 
-    say $P1
-    say $P2
-  .end
-CODE
-3/5
-3/5
-OUTPUT
-pir_output_is(<<'CODE', <<'OUTPUT', "Negating (+inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P2, 'Rational'
-    new $P3, 'Rational'
+.sub test_set_get_float
+    new $P1, 'Rational'
 
-    $P2 = "-3/2"
-    $P3 = -$P2
-    $P2 = -$P2
+    new $P2, 'Float'
+    new $P3, 'Float'
 
-    say $P2
-    say $P3
-  .end
-CODE
-3/2
-3/2
-OUTPUT
+    $P2 = 7.110000
+    $P1 = $P2
+    $P3 = $P1
+    is($P3,7.11,'set and set float',0.0001)
+.end
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Absolute value (+inplace operation)");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P2, 'Rational'
-    new $P3, 'Rational'
+.sub test_inc_dec
+    new $P1, 'Rational'
 
-    $P2 = "-3/2"
-    $P3 = abs $P2
-    abs $P2
+    $P1 = "7/4"
+    inc $P1
+    is($P1,'11/4','increment a rational')
+    dec $P1
+    dec $P1
+    is($P1,'3/4','decrement a rational')
+.end
 
-    say $P2
-    say $P3
-  .end
-CODE
-3/2
-3/2
-OUTPUT
+.sub test_set_get_string
+    new $P1, 'Rational'
+    new $P2, 'String'
+    new $P3, 'String'
 
-pir_output_is(<<'CODE', <<'OUTPUT', "Comparing rationals to rationals");
-  .sub main :main
-    loadlib $P1, 'rational'
-    new $P2, 'Rational'
-    new $P3, 'Rational'
+    $P2 = "7/4"
+    $P1 = $P2
+    $P3 = $P1
+    is($P3,"7/4",'set and get string')
+.end
 
-    $P2 = "3/2"
-    $P3 = "6/4"
+.sub test_set_get_native_float
+    new $P0, 'Rational'
 
-    if $P2 == $P3 goto EQ
-    goto NE
-  EQ:
-    say "1"
-    goto END_EQ
-  NE:
-    say "0"
-  END_EQ:
+    $N0 = 11.1
+    $P0 = $N0
+    $N1 = $P0
+    is($N1,11.1,'set and get a native float')
+.end
 
-    $P3 = "7/4"
-    cmp $I1, $P2, $P3
-    cmp $I2, $P3, $P2
+.sub test_set_get_native_string
+    new $P1, 'Rational'
 
-    say $I1
-    say $I2
-  .end
-CODE
-1
--1
-1
-OUTPUT
+    $S1 = "7/4"
+    $P1 = $S1
+    $S2 = $P1
+    is($S2,'7/4','set and get native string')
+.end
 
 # Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
+#   mode: pir
 #   fill-column: 100
 # End:
-# vim: expandtab shiftwidth=4:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/dynpmc/rotest.t
==============================================================================
--- branches/ops_pct/t/dynpmc/rotest.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/dynpmc/rotest.t	Wed May  5 08:45:29 2010	(r46302)
@@ -49,7 +49,7 @@
     my %tests = (
 
         # these first two tests would test overriding of the default
-        # read-onlyness notion of vtable methods
+        # read-onlyness notion of vtables
         q{value = 42}  => [ 1, 0 ],
         q{$I0 = value} => [ 0, 0 ],
 

Modified: branches/ops_pct/t/dynpmc/subproxy.t
==============================================================================
--- branches/ops_pct/t/dynpmc/subproxy.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/dynpmc/subproxy.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/examples/shootout.t
==============================================================================
--- branches/ops_pct/t/examples/shootout.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/examples/shootout.t	Wed May  5 08:45:29 2010	(r46302)
@@ -35,7 +35,7 @@
 To add a new test, you do not have to modify this script:
 
  1. add your script (toto.pir) to examples/shootout
- 2. put parrot options in the first line (e.g  "#!./parrot -Oc -R cgp-jit")
+ 2. put parrot options in the first line (e.g  "#!./parrot -Oc")
  3. make sure you have default argument values
  4. put the expected output as a file : toto.pir_output
  5. if you need an input file (to be read from stdin), call it toto.pir_input
@@ -74,15 +74,13 @@
         $args =~ s/-j/-C/;
         $args =~ s/-Cj/-C/;
     }
-    unless ( $PConfig{cg_flag} =~ /HAVE/ ) {
-        $args =~ s/-Cj/-j/;
+    $args =~ s/-Cj/-j/;
 
-        # Remove any plain -C option.
-        $args =~ s/(^|\s)-C(\s|$)/$1$2/;
+    # Remove any plain -C option.
+    $args =~ s/(^|\s)-C(\s|$)/$1$2/;
 
-        # Remove any extra Cs still floating around
-        $args =~ s/C//;
-    }
+    # Remove any extra Cs still floating around
+    $args =~ s/C//;
 
     # look for input files
     my $input = "$file$INPUT_EXT";

Modified: branches/ops_pct/t/examples/tutorial.t
==============================================================================
--- branches/ops_pct/t/examples/tutorial.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/examples/tutorial.t	Wed May  5 08:45:29 2010	(r46302)
@@ -97,8 +97,8 @@
 bc
 bc
 abcde
-bc
 aXYZde
+abcde
 END_EXPECTED
 
     '24_string_ops_clone.pir' => << 'END_EXPECTED',
@@ -220,7 +220,7 @@
 ok 1 - first test
 ok 2 - second test
 ok 3 #skip skipped test
-ok 4 # TODO 42
+ok 4 # TODO todo test
 END_EXPECTED
 
 );

Modified: branches/ops_pct/t/harness
==============================================================================
--- branches/ops_pct/t/harness	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/harness	Wed May  5 08:45:29 2010	(r46302)
@@ -81,7 +81,7 @@
             archive          => 'parrot_test_run.tar.gz',
             merge            => 1,
             extra_properties => \%env_data,
-            extra_files      => [ 'myconfig', 'config_lib.pasm' ],
+            extra_files      => [ 'myconfig', 'config_lib.pir' ],
         }
     );
     $harness->runtests(@tests);
@@ -134,10 +134,6 @@
 
 Turn warnings on.
 
-=item C<-g>
-
-Run the C<CGoto> core.
-
 =item C<-G>
 
 Run the C<GCDebug> core.
@@ -146,14 +142,6 @@
 
 Alias for running with the fast core.
 
-=item C<-C>
-
-Run the C<CGP> core.
-
-=item C<-S>
-
-Run Switched.
-
 =item C<-b>
 
 Run bounds checking enabled.

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

Modified: branches/ops_pct/t/include/fp_equality.t
==============================================================================
--- branches/ops_pct/t/include/fp_equality.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/include/fp_equality.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009, Parrot Foundation.
 # $Id$
 

Copied: branches/ops_pct/t/library/archive_tar.t (from r46301, trunk/t/library/archive_tar.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/library/archive_tar.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/library/archive_tar.t)
@@ -0,0 +1,77 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/library/archive_tar.t
+
+=head1 DESCRIPTION
+
+Test the Archive/Tar library
+
+=head1 SYNOPSIS
+
+    % prove t/library/archive_tar.t
+
+=cut
+
+.sub 'main' :main
+    .include 'test_more.pir'
+
+    load_bytecode 'Archive/Tar.pir'
+
+    plan(12)
+    test_new()
+    test_tar()
+.end
+
+.sub 'test_new'
+    $P0 = new ['Archive';'Tar']
+    $I0 = isa $P0, ['Archive';'Tar']
+    ok($I0, "new ['Archive';'Tar']")
+    $P0 = new ['Archive';'Tar';'File']
+    $I0 = isa $P0, ['Archive';'Tar';'File']
+    ok($I0, "new ['Archive';'Tar';'File']")
+.end
+
+.sub 'test_tar'
+    .local pmc archive, entry
+    archive = new ['Archive';'Tar']
+    $I0 = isa archive, ['Archive';'Tar']
+    ok($I0, "test_tar")
+    entry = archive.'add_data'('msg.txt', "some data")
+    $I0 = isa entry, ['Archive';'Tar';'File']
+    ok($I0, "entry is an ['Archive';'Tar';'File']")
+    $S0 = entry.'data'()
+    is($S0, "some data", "data")
+    $S0 = entry.'full_path'()
+    is($S0, 'msg.txt', "full_path")
+    .local string header
+    header = entry.'_format_tar_entry'()
+    $I0 = length header
+    is($I0, 512, "length header")
+    $I0 = index header, 'msg.txt'
+    is($I0, 0, "header starts by filename")
+    $I0 = index header, 'ustar'
+    is($I0, 257, "magic at 257")
+
+    .local pmc fh
+    fh = new 'StringHandle'
+    fh.'open'('in_memory', 'wb')
+    archive.'write'(fh)
+    $S0 = fh.'readall'()
+    fh.'close'()
+    $I0 = length $S0
+    is($I0, 2048, "size")
+    $I0 = index $S0, 'msg.txt'
+    is($I0, 0, 'filename')
+    $I0 = index $S0, 'some data'
+    is($I0, 512, 'data')
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/library/configure.t
==============================================================================
--- branches/ops_pct/t/library/configure.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/configure.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/getopt_obj.t
==============================================================================
--- branches/ops_pct/t/library/getopt_obj.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/getopt_obj.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,14 +1,7 @@
-#!perl
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
-use strict;
-use warnings;
-use lib qw( t . lib ../lib ../../lib );
-
-use Test::More;
-use Parrot::Test tests => 15;
-
 =head1 NAME
 
 t/library/getopt_obj.t - testing the PIR module Getopt::Obj
@@ -24,10 +17,30 @@
 
 =cut
 
-# 1
-pir_output_is( <<'CODE', <<'OUT', 'basic long options' );
-
 .sub main :main
+    .include 'test_more.pir'
+    load_bytecode "Getopt/Obj.pbc"
+    plan(48)
+
+    test_basic_long_options()
+    test_basic_short_options()
+    test_simple_array()
+    test_mixing_long_and_short_with_array()
+    test_hash()
+    test_bundling_short_options()
+    test_ignored_options()
+    test_double_dash_stop()
+    test_notOptStop()
+    test_optarg()
+    test_pass_through()
+    test_lone_dash()
+    test_push_interface()
+    test_missing_spec()
+    test_missing_argument()
+.end
+
+# 1
+.sub test_basic_long_options
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo=bar'
@@ -35,7 +48,6 @@
         push argv, '--bax=3'
         push argv, '--baz'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -57,36 +69,20 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 'bar', 'basic long options')
 
         $S0 = $P1["bar"]
-        print "bar is "
-        print $S0
-        print "\n"
+        is($S0, 3.14, 'basic long options')
 
         $S0 = $P1["bax"]
-        print "bax is "
-        print $S0
-        print "\n"
+        is($S0, 3, 'basic long options')
 
         $S0 = $P1["baz"]
-        print "baz is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'basic long options')
 .end
 
-CODE
-foo is bar
-bar is 3.14
-bax is 3
-baz is 1
-OUT
-
 # 2
-pir_output_is( <<'CODE', <<'OUT', "basic short options" );
-.sub main :main
+.sub test_basic_short_options
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '-f'
@@ -94,7 +90,6 @@
         push argv, '-Abc'
         push argv, '-c'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -112,35 +107,22 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["f"]
-        print "f is "
-        print $S0
-        print "\n"
+        is($S0, 'bar', 'basic short options')
 
         $S0 = $P1["A"]
-        print "A is "
-        print $S0
-        print "\n"
+        is($S0, 'bc', 'basic short options')
 
         $S0 = $P1["c"]
-        print "c is "
-        print $S0
-        print "\n"
+        is($S0, '1', 'basic short options')
 .end
-CODE
-f is bar
-A is bc
-c is 1
-OUT
 
 # 3
-pir_output_is( <<'CODE', <<'OUT', "simple array" );
-.sub main :main
+.sub test_simple_array
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '-Iinca'
         push argv, '-Iincb'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -151,30 +133,20 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["I";0]
-        print "0 is "
-        print $S0
-        print "\n"
+        is($S0, 'inca', 'simple array')
 
         $S0 = $P1["I";1]
-        print "1 is "
-        print $S0
-        print "\n"
+        is($S0, 'incb', 'simple array')
 
 .end
-CODE
-0 is inca
-1 is incb
-OUT
 
 # 4
-pir_output_is( <<'CODE', <<'OUT', "mixing long and short with array" );
-.sub main :main
+.sub test_mixing_long_and_short_with_array
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '-Iinca'
         push argv, '--include=incb'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -186,31 +158,21 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["include";0]
-        print "0 is "
-        print $S0
-        print "\n"
+        is($S0, 'inca', 'mixing long and short with array')
 
         $S0 = $P1["include";1]
-        print "1 is "
-        print $S0
-        print "\n"
+        is($S0, 'incb', 'mixing long and short with array')
 
 .end
-CODE
-0 is inca
-1 is incb
-OUT
 
 # 5
-pir_output_is( <<'CODE', <<'OUT', "hash" );
-.sub main :main
+.sub test_hash
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '-Dfoo=bar'
         push argv, '--define=bax=baz'
         push argv, '-Dfoobar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -222,35 +184,22 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["define";"foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 'bar', 'hash')
 
         $S0 = $P1["define";"bax"]
-        print "bax is "
-        print $S0
-        print "\n"
+        is($S0, 'baz', 'hash')
 
         $S0 = $P1["define";"foobar"]
-        print "foobar is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'hash')
 
 .end
-CODE
-foo is bar
-bax is baz
-foobar is 1
-OUT
 
 # 6
-pir_output_is( <<'CODE', <<'OUT', "bundling short options" );
-.sub main :main
+.sub test_bundling_short_options
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '-abc'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -264,36 +213,23 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["a"]
-        print "a is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'bundling short options')
 
         $S0 = $P1["b"]
-        print "b is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'bundling short options')
 
         $S0 = $P1["c"]
-        print "c is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'bundling short options')
 
 .end
-CODE
-a is 1
-b is 1
-c is 1
-OUT
 
 # 7
-pir_output_is( <<'CODE', <<'OUT', "ignored options" );
-.sub main :main
+.sub test_ignored_options
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--ignore'
         push argv, '--foo'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
         getopts."notOptStop"(1)
@@ -304,31 +240,21 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, '1', 'ignored options')
 
         $S0 = argv[0]
-        print "argv[0] is "
-        print $S0
-        print "\n"
+        is($S0, '--ignore', 'ignored options')
 
 .end
-CODE
-foo is 1
-argv[0] is --ignore
-OUT
 
 # 8
-pir_output_is( <<'CODE', <<'OUT', "double dash stop" );
-.sub main :main
+.sub test_double_dash_stop
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo'
         push argv, '--'
         push argv, '--bar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -340,38 +266,25 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'double dash stop')
 
         # Hash sets an nonexistant value to ''
         $S0 = $P1["bar"]
-        print "bar is "
-        print $S0
-        print "\n"
+        is($S0, '', 'double dash stop')
 
         $S0 = argv[0]
-        print "argv[0] is "
-        print $S0
-        print "\n"
+        is($S0, '--bar', 'double dash stop')
 
 .end
-CODE
-foo is 1
-bar is 
-argv[0] is --bar
-OUT
 
 # 9
-pir_output_is( <<'CODE', <<'OUT', "notOptStop" );
-.sub main :main
+.sub test_notOptStop
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo'
         push argv, 'foo'
         push argv, '--bar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
         getopts."notOptStop"(1)
@@ -384,43 +297,27 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'notOptStop')
 
         $S0 = $P1["bar"]
-        print "bar is "
-        print $S0
-        print "\n"
+        is($S0, '', 'notOptStop')
 
         $S0 = argv[0]
-        print "argv[0] is "
-        print $S0
-        print "\n"
+        is($S0, 'foo', 'notOptStop')
 
         $S0 = argv[1]
-        print "argv[1] is "
-        print $S0
-        print "\n"
+        is($S0, '--bar', 'notOptStop')
 
 .end
-CODE
-foo is 1
-bar is 
-argv[0] is foo
-argv[1] is --bar
-OUT
 
 # 10
-pir_output_is( <<'CODE', <<'OUT', "optarg" );
-.sub main :main
+.sub test_optarg
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo'
         push argv, '-f'
         push argv, '-bbar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
         getopts."notOptStop"(1)
@@ -443,30 +340,18 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, '', 'optarg')
 
         $S0 = $P1["f"]
-        print "f is "
-        print $S0
-        print "\n"
+        is($S0, '', 'optarg')
 
         $S0 = $P1["b"]
-        print "b is "
-        print $S0
-        print "\n"
+        is($S0, 'bar', 'optarg')
 
 .end
-CODE
-foo is 
-f is 
-b is bar
-OUT
 
 # 11
-pir_output_is( <<'CODE', <<'OUT', "pass through" );
-.sub main :main
+.sub test_pass_through
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo'
@@ -474,7 +359,6 @@
         push argv, '--bar'
         push argv, 'bar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -486,43 +370,27 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'pass through')
 
         $S0 = $P1["bar"]
-        print "bar is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'pass through')
 
         $S0 = argv[0]
-        print "argv[0] is "
-        print $S0
-        print "\n"
+        is($S0, 'foo', 'pass through')
 
         $S0 = argv[1]
-        print "argv[1] is "
-        print $S0
-        print "\n"
+        is($S0, 'bar', 'pass through')
 
 .end
-CODE
-foo is 1
-bar is 1
-argv[0] is foo
-argv[1] is bar
-OUT
 
 # 12
-pir_output_is( <<'CODE', <<'OUT', "lone dash" );
-.sub main :main
+.sub test_lone_dash
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo'
         push argv, '-'
         push argv, '--bar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -534,30 +402,18 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'lone dash')
 
         $S0 = $P1["bar"]
-        print "bar is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'lone dash')
 
         $S0 = argv[0]
-        print "argv[0] is "
-        print $S0
-        print "\n"
+        is($S0, '-', 'lone dash')
 
 .end
-CODE
-foo is 1
-bar is 1
-argv[0] is -
-OUT
 
 # 13
-pir_output_is( <<'CODE', <<'OUT', "push interface" );
-.sub main :main
+.sub test_push_interface
         .local pmc argv
         argv = new 'ResizablePMCArray'
         push argv, '--foo=file'
@@ -574,7 +430,6 @@
         push argv, '--define=bax=baz'
         push argv, '-Dfoobar'
 
-        load_bytecode "Getopt/Obj.pbc"
         .local pmc getopts
         getopts = new ['Getopt';'Obj']
 
@@ -588,71 +443,40 @@
         $P1 = getopts."get_options"(argv)
 
         $S0 = $P1["foo"]
-        print "foo is "
-        print $S0
-        print "\n"
+        is($S0, 'file', 'push interface')
 
         $S0 = $P1["bar"]
-        print "bar is "
-        print $S0
-        print "\n"
+        is($S0, 'file.txt', 'push interface')
 
         $S0 = $P1["bax"]
-        print "bax is "
-        print $S0
-        print "\n"
+        is($S0, 'file.t', 'push interface')
 
         $S0 = $P1["baz"]
-        print "baz is "
-        print $S0
-        print "\n"
+        is($S0, '', 'push interface')
 
         $S0 = $P1["I";0]
-        print "I[0] is "
-        print $S0
-        print "\n"
+        is($S0, 'texta', 'push interface')
 
         $S0 = $P1["I";1]
-        print "I[1] is "
-        print $S0
-        print "\n"
+        is($S0, 'textb', 'push interface')
 
         $S0 = $P1["define";"foo"]
-        print "define[foo] is "
-        print $S0
-        print "\n"
+        is($S0, 'bar', 'push interface')
 
         $S0 = $P1["define";"bax"]
-        print "define[bax] is "
-        print $S0
-        print "\n"
+        is($S0, 'baz', 'push interface')
 
         $S0 = $P1["define";"foobar"]
-        print "define[foobar] is "
-        print $S0
-        print "\n"
+        is($S0, 1, 'push interface')
 
         $S0 = argv[0]
-        print "argv[0] is "
-        print $S0
-        print "\n"
+        is($S0, 'text', 'push interface')
 
 .end
-CODE
-foo is file
-bar is file.txt
-bax is file.t
-baz is 
-I[0] is texta
-I[1] is textb
-define[foo] is bar
-define[bax] is baz
-define[foobar] is 1
-argv[0] is text
-OUT
 
 # 14
-pir_error_output_like( <<'CODE', <<'OUT', "missing spec" );
+.sub test_missing_spec
+    dies_ok(<<'CODE', 'missing_spec')
 .sub main :main
         .local pmc argv
         argv = new 'ResizablePMCArray'
@@ -671,11 +495,11 @@
         print "\n"
 .end
 CODE
-/Option 'foo' not in specs/
-OUT
+.end
 
 # 15
-pir_error_output_like( <<'CODE', <<'OUT', "missing argument" );
+.sub test_missing_argument
+  dies_ok(<<'CODE', "missing argument")
 .sub main :main
         .local pmc argv
         argv = new 'ResizablePMCArray'
@@ -697,8 +521,7 @@
         print "\n"
 .end
 CODE
-/Missing a required argument for option 'bar'/
-OUT
+.end
 
 =head1 AUTHOR
 
@@ -711,8 +534,7 @@
 =cut
 
 # Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
+#   mode: pir
 #   fill-column: 100
 # End:
-# vim: expandtab shiftwidth=4:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/library/hllmacros.t
==============================================================================
--- branches/ops_pct/t/library/hllmacros.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/hllmacros.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/md5.t
==============================================================================
--- branches/ops_pct/t/library/md5.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/md5.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/mime_base64.t
==============================================================================
--- branches/ops_pct/t/library/mime_base64.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/mime_base64.t	Wed May  5 08:45:29 2010	(r46302)
@@ -23,7 +23,7 @@
     load_bytecode 'MIME/Base64.pbc'
     load_bytecode 'PGE.pbc'
     load_bytecode 'PGE/Util.pbc'
-    load_bytecode 'compilers/json/JSON.pbc'
+    load_language 'data_json'
 
     .local pmc plan, is, ok
     plan = get_hll_global [ 'Test'; 'More' ], 'plan'
@@ -32,11 +32,11 @@
 
     plan(550)
 
-    .local pmc JSON
-    JSON = compreg "JSON"
+    .local pmc json
+    json = compreg 'data_json'
 
     .local pmc encode_decode_tests, decode_tests
-    encode_decode_tests = JSON( <<'END_JSON' )
+    encode_decode_tests = json.'compile'( <<'END_JSON' )
 [ ["Hello, World!\n","SGVsbG8sIFdvcmxkIQo="],
   ["\u0000","AA=="],
   ["\u0001","AQ=="],
@@ -310,7 +310,7 @@
 ]
 END_JSON
 
-    decode_tests = JSON( <<'END_JSON' )
+    decode_tests = json.'compile'( <<'END_JSON' )
 [ ["YWE=","aa"],
   [" YWE=","aa"],
   ["Y WE=","aa"],
@@ -333,6 +333,7 @@
     .local pmc test_iterator, test_case
     .local string plain, base64, comment, comment_cnt
 
+    encode_decode_tests = encode_decode_tests()
     test_iterator = iter encode_decode_tests
     enc_dec_loop:
         unless test_iterator goto enc_dec_loop_end
@@ -351,6 +352,7 @@
     goto enc_dec_loop
     enc_dec_loop_end:
 
+    decode_tests = decode_tests()
     test_iterator = iter decode_tests
     dec_loop:
         unless test_iterator goto dec_loop_end

Copied: branches/ops_pct/t/library/osutils.t (from r46301, trunk/t/library/osutils.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/library/osutils.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/library/osutils.t)
@@ -0,0 +1,69 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/library/osutils.t
+
+=head1 DESCRIPTION
+
+Test the osutils library
+
+=head1 SYNOPSIS
+
+    % prove t/library/osutils.t
+
+=cut
+
+.sub 'main' :main
+    .include 'test_more.pir'
+
+    load_bytecode 'osutils.pir'
+
+    plan(11)
+    test_basename()
+    test_dirname()
+    test_catfile()
+    test_splitpath()
+.end
+
+.sub 'test_basename'
+    $S0 = 'foo/bar/baz.txt'
+    $S0 = basename($S0)
+    is( $S0, 'baz.txt', "basename" )
+.end
+
+.sub 'test_dirname'
+    $S0 = 'foo/bar/baz.txt'
+    $S0 = dirname($S0)
+    is( $S0, 'foo/bar', "dirname" )
+    $S0 = dirname($S0)
+    is( $S0, 'foo', "dirname" )
+    $S0 = dirname($S0)
+    is( $S0, '.', "dirname" )
+.end
+
+.sub 'test_catfile'
+    $S0 = catfile('abc', 'def', 'ghi')
+    is($S0, 'abc/def/ghi', "catfile")
+.end
+
+.sub 'test_splitpath'
+    .local string volume, directories, file
+    (volume, directories, file) = splitpath('abc/def/ghi.txt')
+    is(volume, '', "splitpath vol")
+    is(directories, 'abc/def', "splitpath dirs")
+    is(file, 'ghi.txt', "splitpath file")
+
+    (volume, directories, file) = splitpath('c:/abc/def/ghi.txt')
+    is(volume, 'c:', "splitpath vol")
+    is(directories, '/abc/def', "splitpath dirs")
+    is(file, 'ghi.txt', "splitpath file")
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/library/p6object.t
==============================================================================
--- branches/ops_pct/t/library/p6object.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/p6object.t	Wed May  5 08:45:29 2010	(r46302)
@@ -437,7 +437,7 @@
 
 
 .namespace ['ABC']
-.sub 'foo' :method
+.sub 'foo' :method :nsentry('foo')
     .return ('ABC::foo')
 .end
 

Modified: branches/ops_pct/t/library/parrotlib.t
==============================================================================
--- branches/ops_pct/t/library/parrotlib.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/parrotlib.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/pcre.t
==============================================================================
--- branches/ops_pct/t/library/pcre.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/pcre.t	Wed May  5 08:45:29 2010	(r46302)
@@ -26,7 +26,7 @@
 
 # if we keep pcre, we need a config test
 my $cmd = ( $^O =~ /MSWin32/ ) ? "pcregrep --version" : "pcre-config --version";
-my $has_pcre = !Parrot::Test::run_command( $cmd, STDERR => File::Spec->devnull, );
+my $has_pcre = !Parrot::Test::run_command( $cmd, STDOUT => File::Spec->devnull ,STDERR => File::Spec->devnull, );
 my $pcre_libpath = '';
 
 # It's possible that libpcre is installed in some non-standard path...

Modified: branches/ops_pct/t/library/protoobject.t
==============================================================================
--- branches/ops_pct/t/library/protoobject.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/protoobject.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/rand.t
==============================================================================
--- branches/ops_pct/t/library/rand.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/rand.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/range.t
==============================================================================
--- branches/ops_pct/t/library/range.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/range.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2008, Parrot Foundation.
 # $Id$
 

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

Modified: branches/ops_pct/t/library/test_builder_tester.t
==============================================================================
--- branches/ops_pct/t/library/test_builder_tester.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/test_builder_tester.t	Wed May  5 08:45:29 2010	(r46302)
@@ -59,12 +59,12 @@
    test.'skip'( 3, 'three skips' )
    test_test( 'multiple skips' )
 
-   test_out( 'not ok 9 # TODO some todo test' )
+   test_out( "not ok 9 # TODO \n\tFailed (TODO) test 'some todo test'" )
    test.'todo'( 0, 'some todo test' )
    test_test( 'failing todo test' )
 
-   test_out( 'ok 10 # TODO another todo test' )
-   test.'todo'( 1, 'another todo test' )
+   test_out( "ok 10 # TODO another todo test" )
+   test.'todo'( 1, 'reason', 'another todo test' )
    test_test( 'passing todo test' )
 
    test_pass()

Modified: branches/ops_pct/t/library/test_class.t
==============================================================================
--- branches/ops_pct/t/library/test_class.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/test_class.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/library/test_more.t
==============================================================================
--- branches/ops_pct/t/library/test_more.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/test_more.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2005-2010, Parrot Foundation.
 # $Id$
 
@@ -797,23 +797,23 @@
     .local pmc test
     test = new [ 'Test'; 'Builder' ]
 
-    test_out( 'ok 8 # TODO passing test' )
+    test_out( 'ok 8 # TODO todo reason' )
     test.'todo'( 1, 'passing test', 'todo reason' )
     test_test( 'todo test should pass, marked as TODO' )
 
-    test_out( 'not ok 9 # TODO failing test' )
+    test_out( "not ok 9 # TODO todo reason\n\tFailed (TODO) test 'failing test'" )
     test.'todo'( 0, 'failing test', 'todo reason' )
     test_test( 'todo test should fail, marked as TODO' )
 
-    test_out( 'ok 10 # TODO passing test' )
+    test_out( 'ok 10 # TODO todo reason' )
     todo( 1, 'passing test', 'todo reason' )
     test_test( 'todo test should pass, marked as TODO' )
 
-    test_out( 'not ok 11 # TODO failing test' )
+    test_out( "not ok 11 # TODO todo reason\n\tFailed (TODO) test 'failing test'" )
     todo( 0, 'failing test', 'todo reason' )
     test_test( 'todo test should fail, marked as TODO' )
 
-    test_out( 'not ok 12 # TODO' )
+    test_out( "not ok 12 # TODO \n\tFailed (TODO) test ''" )
     todo( 0 )
     test_test( 'todo test with no description or reason' )
 

Modified: branches/ops_pct/t/library/uuid.t
==============================================================================
--- branches/ops_pct/t/library/uuid.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/library/uuid.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 

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

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

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

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

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

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

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

Modified: branches/ops_pct/t/oo/attributes.t
==============================================================================
--- branches/ops_pct/t/oo/attributes.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/attributes.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/composition.t
==============================================================================
--- branches/ops_pct/t/oo/composition.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/composition.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
@@ -34,16 +34,16 @@
     multi_composition()
 .end
 
-.sub badger :method
+.sub badger :method :nsentry('badger')
     .return('Badger!')
 .end
-.sub badger2 :method
+.sub badger2 :method :nsentry('badger2')
     .return('Second Badger!')
 .end
-.sub mushroom :method
+.sub mushroom :method :nsentry('mushroom')
     .return('Mushroom!')
 .end
-.sub snake :method
+.sub snake :method :nsentry('snake')
     .return('Snake!')
 .end
 .sub fire

Modified: branches/ops_pct/t/oo/inheritance.t
==============================================================================
--- branches/ops_pct/t/oo/inheritance.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/inheritance.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/isa.t
==============================================================================
--- branches/ops_pct/t/oo/isa.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/isa.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/metamodel.t
==============================================================================
--- branches/ops_pct/t/oo/metamodel.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/metamodel.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/methods.t
==============================================================================
--- branches/ops_pct/t/oo/methods.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/methods.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
@@ -21,12 +21,14 @@
 
     create_library()
 
-    plan(5)
+    plan(6)
 
     loading_methods_from_file()
     loading_methods_from_eval()
     overridden_find_method()
 
+    overridden_core_pmc()
+
     delete_library()
 
 .end
@@ -52,6 +54,7 @@
 
 .sub delete_library
     .local pmc os
+    $P0 = loadlib 'os'
     os = new 'OS'
     $S0 = "method_library.pir"
     os.'rm'($S0)
@@ -126,6 +129,20 @@
 
 .namespace []
 
+.sub 'overridden_core_pmc'
+    .local string msg
+    msg = "able to invoke overridden method on core PMC (TT #1596)"
+    $P0 = new 'ResizablePMCArray'
+    $I0 = $P0.'foo'()
+    is($I0, 1, msg)
+    .return()
+.end
+
+.namespace ['ResizablePMCArray']
+.sub 'foo' :method
+    .return(1)
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/ops_pct/t/oo/mro-c3.t
==============================================================================
--- branches/ops_pct/t/oo/mro-c3.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/mro-c3.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
@@ -28,19 +28,19 @@
     merge_two_pairs()
 .end
 
-.sub method_A :method
+.sub method_A :method :nsentry('method_A')
     .return('Method from A')
 .end
 
-.sub method_B :method
+.sub method_B :method :nsentry('method_B')
     .return('Method from B')
 .end
 
-.sub method_C :method
+.sub method_C :method :nsentry('method_C')
     .return('Method from C')
 .end
 
-.sub method_D :method
+.sub method_D :method :nsentry('method_D')
     .return('Method from D')
 .end
 

Modified: branches/ops_pct/t/oo/names.t
==============================================================================
--- branches/ops_pct/t/oo/names.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/names.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/new.t
==============================================================================
--- branches/ops_pct/t/oo/new.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/new.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/ops.t
==============================================================================
--- branches/ops_pct/t/oo/ops.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/ops.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
@@ -20,7 +20,7 @@
     .include 'except_types.pasm'
     .include 'test_more.pir'
 
-    plan(18)
+    plan(20)
 
     op_addrole_p_p()
     op_inspect_p_p()
@@ -89,6 +89,10 @@
     $P3 = $P2.'inspect'('name')
     is ($P3, 'Monkey', 'got name of found class')
 
+    null $S0
+    $P5 = get_class $S0
+    $I2 = isnull $P5
+    is ($I2, 1, 'null p gives null p')
 .end
 
 .sub op_get_class_p_p
@@ -113,6 +117,11 @@
     $I1 = isa $P2 , 'Class'
     ok ($I1, 'get_class with a namespace found a class')
     is ($P3, 'Monkey', 'got name of found class')
+
+    null $P5
+    $P6 = get_class $P5
+    $I2 = isnull $P6
+    is ($I2, 1, 'null s gives null p')
 .end
 
 .sub op_addattribute_p_s

Modified: branches/ops_pct/t/oo/proxy.t
==============================================================================
--- branches/ops_pct/t/oo/proxy.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/proxy.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007, Parrot Foundation.
 # $Id$
 
@@ -93,7 +93,7 @@
 .end
 
 .namespace ['Complex']
-.sub 'Complex' :method
+.sub 'Complex' :method :nsentry('Complex')
     .return (self)
 .end
 

Modified: branches/ops_pct/t/oo/root_new.t
==============================================================================
--- branches/ops_pct/t/oo/root_new.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/root_new.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/subclass.t
==============================================================================
--- branches/ops_pct/t/oo/subclass.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/subclass.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/oo/vtableoverride.t
==============================================================================
--- branches/ops_pct/t/oo/vtableoverride.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/oo/vtableoverride.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2009, Parrot Foundation.
 # $Id$
 
@@ -18,12 +18,23 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(13)
+    plan(14)
 
     newclass_tests()
     subclass_tests()
     vtable_implies_self_tests()
     anon_vtable_tests()
+    invalid_vtable()
+.end
+
+.sub invalid_vtable
+    throws_substring(<<'CODE',' but was used with ', 'invalid :vtable throws an exception')
+    .namespace [ "Test" ]
+    .sub monkey :method :vtable("not_in_the_vtable")
+        .param int key
+        .return("monkey")
+    .end
+CODE
 .end
 
 .sub 'newclass_tests'

Modified: branches/ops_pct/t/op/00ff-dos.t
==============================================================================
--- branches/ops_pct/t/op/00ff-dos.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/00ff-dos.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/00ff-unix.t
==============================================================================
--- branches/ops_pct/t/op/00ff-unix.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/00ff-unix.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -26,7 +26,7 @@
 .sub test_fileformat_unix
     lives_ok( <<'CODE', 'fileformat unix' )
 .sub main
-    print "testing\n"
+    print "# testing\n"
 .end
 CODE
 .end

Modified: branches/ops_pct/t/op/64bit.t
==============================================================================
--- branches/ops_pct/t/op/64bit.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/64bit.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/annotate-old.t
==============================================================================
--- branches/ops_pct/t/op/annotate-old.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/annotate-old.t	Wed May  5 08:45:29 2010	(r46302)
@@ -24,8 +24,8 @@
 =cut
 
 TODO: {
-    local $TODO = q|fails in fast and cgoto runcores - TT #1135|
-        if $ENV{TEST_PROG_ARGS} =~ /--runcore=(fast|cgoto)/;
+    local $TODO = q|fails in fast runcore - TT #1135|
+        if ($ENV{TEST_PROG_ARGS} || '') =~ /--runcore=fast/;
 
 pir_error_output_like( <<CODE, <<OUTPUT, 'unhandled exception from loaded function');
 .sub main :main

Modified: branches/ops_pct/t/op/annotate.t
==============================================================================
--- branches/ops_pct/t/op/annotate.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/annotate.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/arithmetics.t
==============================================================================
--- branches/ops_pct/t/op/arithmetics.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/arithmetics.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/arithmetics_pmc.t
==============================================================================
--- branches/ops_pct/t/op/arithmetics_pmc.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/arithmetics_pmc.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/box.t
==============================================================================
--- branches/ops_pct/t/op/box.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/box.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/calling.t
==============================================================================
--- branches/ops_pct/t/op/calling.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/calling.t	Wed May  5 08:45:29 2010	(r46302)
@@ -39,11 +39,12 @@
 .pcc_sub main:
     print "Ok 1\n"
     set_args "0, 0", P0, I0
-    get_results "0", I0
     find_name P1, "foo"
     print "Ok 2\n"
     invokecc P1
     print "Ok 5\n"
+    get_results "0", I0
+    print "Ok 6\n"
     end
 .pcc_sub foo:
     get_params "0, 0", P0, I0
@@ -57,6 +58,7 @@
 Ok 3
 Ok 4
 Ok 5
+Ok 6
 OUTPUT
 
 pasm_output_is( <<'CODE', <<'OUTPUT', "call - i, ic" );
@@ -84,9 +86,9 @@
 .pcc_sub main:
     set I16, 77
     set_args "0, 0", 42, I16
-    get_results "0, 0", I16, I17
     find_name P1, "foo"
     invokecc P1
+    get_results "0, 0", I16, I17
     print I16
     print "\n"
     print I17
@@ -113,9 +115,9 @@
 .pcc_sub main:
     set I16, 77
     set_args "0, 0", 42, I16
-    get_results "0, 0", I16, I17
     find_name P1, "foo"
     invokecc P1
+    get_results "0, 0", I16, I17
     print I16
     print "\n"
     print I17
@@ -146,9 +148,9 @@
     new P16, 'Integer'
     set P16, 101
     set_args "0, 0, 0, 0, 0, 0, 0", 42, I16, 4.5, N16, S16, "ok 2\n", P16
-    get_results "0, 0, 0, 0", I16, N16, S16, P16
     find_name P1, "foo"
     invokecc P1
+    get_results "0, 0, 0, 0", I16, N16, S16, P16
     print I16
     print "\n"
     print N16
@@ -578,9 +580,9 @@
 .pcc_sub main:
     set I16, 77
     set_args "0, 0", 42, I16
-    get_results "0, 0", I16, I17
     find_name P1, "foo"
     invokecc P1
+    get_results "0, 0", I16, I17
     print I16
     print "\n"
     print I17
@@ -608,8 +610,8 @@
 .sub main :main
     .const 'Sub' f = "foo"
     print "main\n"
-    get_results "0", $S0
     invokecc f
+    get_results "0", $S0
     print $S0
 .end
 .sub foo
@@ -633,8 +635,8 @@
 .sub main :main
     .const 'Sub' f = "foo"
     print "main\n"
-    get_results "0", $S0
     invokecc f
+    get_results "0", $S0
     print $S0
 .end
 .sub foo
@@ -662,8 +664,8 @@
 .sub main :main
     .const 'Sub' f = "foo"
     print "main\n"
-    get_results "0", $S0
     invokecc f
+    get_results "0", $S0
     print $S0
 .end
 .sub foo
@@ -991,13 +993,13 @@
     f(o, "ok 4\n")
 .end
 .namespace ["Foo"]
-.sub bar :method
+.sub bar :method :nsentry('bar')
     .param string s
     print self
     print " "
     print s
 .end
-.sub baz :method
+.sub baz :method :nsentry('baz')
     .param string s
     print self
     print " "
@@ -1456,7 +1458,13 @@
 pir_output_is( <<'CODE', <<'OUTPUT', "result_info op" );
 .sub main :main
     test()
+    $P0 = new 'FixedIntegerArray'
+    set_result_info $P0
+    $P0 = 1
     $I0 = test()
+    $P0 = new 'FixedIntegerArray'
+    $P0 = 3
+    set_result_info $P0
     ($I1, $I2, $I3) = test()
 .end
 
@@ -1485,8 +1493,18 @@
 TESTSUB
     $P0 = compreg "PIR"
     $P1 = $P0($S0)
+    $P0 = new 'FixedIntegerArray'
+    set_result_info $P0
     test()
+
+    $P0 = new 'FixedIntegerArray'
+    $P0 = 1
+    set_result_info $P0
     $I0 = test()
+
+    $P0 = new 'FixedIntegerArray'
+    $P0 = 3
+    set_result_info $P0
     ($I1, $I2, $I3) = test()
 .end
 CODE
@@ -1716,9 +1734,9 @@
 pasm_output_is( <<'CODE', <<'OUTPUT', "named - 1" );
 .pcc_sub main:
     set_args "0x200, 0, 0x200, 0", "b", 10, "a", 20
-    get_results ""
     find_name P1, "foo"
     invokecc P1
+    get_results ""
     print "ok\n"
     end
 .pcc_sub foo:
@@ -1739,9 +1757,9 @@
     set P0['a'], 20
     set P0['b'], 10
     set_args "0x220", P0            # :flatten :named
-    get_results ""
     find_name P1, "foo"
     invokecc P1
+    get_results ""
     print "ok\n"
     end
 .pcc_sub foo:
@@ -1789,9 +1807,9 @@
 pasm_output_is( <<'CODE', <<'OUTPUT', "named - 3 slurpy hash" );
 .pcc_sub main:
     set_args "0x200, 0, 0x200, 0,0x200, 0", "a", 10, "b", 20, 'c', 30
-    get_results ""
     find_name P1, "foo"
     invokecc P1
+    get_results ""
     print "ok\n"
     end
 .pcc_sub foo:
@@ -1820,9 +1838,9 @@
 pasm_output_is( <<'CODE', <<'OUTPUT', "named - 4 positional -> named" );
 .pcc_sub main:
     set_args  "0, 0, 0", 10, 20, 30
-    get_results ""
     find_name P1, "foo"
     invokecc P1
+    get_results ""
     print "ok\n"
     end
 .pcc_sub foo:

Modified: branches/ops_pct/t/op/cc_params.t
==============================================================================
--- branches/ops_pct/t/op/cc_params.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/cc_params.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/cmp-nonbranch.t
==============================================================================
--- branches/ops_pct/t/op/cmp-nonbranch.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/cmp-nonbranch.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/comp.t
==============================================================================
--- branches/ops_pct/t/op/comp.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/comp.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/copy.t
==============================================================================
--- branches/ops_pct/t/op/copy.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/copy.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/debuginfo.t
==============================================================================
--- branches/ops_pct/t/op/debuginfo.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/debuginfo.t	Wed May  5 08:45:29 2010	(r46302)
@@ -24,11 +24,11 @@
 =cut
 
 $ENV{TEST_PROG_ARGS} ||= '';
-my $nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=(fast|cgoto)/
+my $nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
     ? "\\(unknown file\\)\n-1" : "debuginfo_\\d+\\.pasm\n\\d";
 
 #SKIP: {
-#skip "disabled on fast-core",1 if $ENV{TEST_PROG_ARGS} =~ /--runcore=(fast|cgoto)/;
+#skip "disabled on fast-core",1 if $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/;
 
 pasm_output_like( <<'CODE', <<"OUTPUT", "getline, getfile" );
 .pcc_sub main:
@@ -158,7 +158,7 @@
 called from Sub 'main' pc (\d+|-1) \(.*?:(\d+|-1)\)$/
 OUTPUT
 
-$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=(fast|cgoto)/
+$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
     ? '\(\(unknown file\):-1\)' : '\(xyz.pir:126\)';
 
 pir_error_output_like( <<'CODE', <<"OUTPUT", "setfile and setline" );
@@ -173,7 +173,7 @@
 /$nolineno/
 OUTPUT
 
-$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=(fast|cgoto)/
+$nolineno = $ENV{TEST_PROG_ARGS} =~ /--runcore=fast/
     ? '\(\(unknown file\):-1\)' : '\(foo.p6:128\)';
 pir_error_output_like( <<'CODE', <<"OUTPUT", "setfile and setline" );
 .sub main :main

Modified: branches/ops_pct/t/op/errorson.t
==============================================================================
--- branches/ops_pct/t/op/errorson.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/errorson.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/exceptions.t
==============================================================================
--- branches/ops_pct/t/op/exceptions.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/exceptions.t	Wed May  5 08:45:29 2010	(r46302)
@@ -378,7 +378,7 @@
 done.
 OUTPUT
 
-# stringification is handled by a vtable method, which runs in a second
+# stringification is handled by a vtable, which runs in a second
 # runloop. when an error in the method tries to go to a Error_Handler defined
 # outside it, it winds up going to the inner runloop, giving strange results.
 pir_output_is( <<'CODE', <<'OUTPUT', 'pop_eh out of context (2)', todo => 'runloop shenanigans' );
@@ -427,6 +427,14 @@
 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 );
 .sub main :main
     .local pmc a
@@ -451,6 +459,8 @@
 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/ops_pct/t/op/fetch.t
==============================================================================
--- branches/ops_pct/t/op/fetch.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/fetch.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -28,7 +28,6 @@
 .end
 
 .sub 'test_fetch_keyed_int'
-    diag( 'test_fetch_keyed_int' )
     $P0    = new [ 'Hash' ]
     $P1    = box 111
     $P0[1] = $P1
@@ -48,7 +47,6 @@
 .end
 
 .sub 'test_fetch_keyed_str'
-    diag( 'test_fetch_keyed_str' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
     $P0['one']   = $P1
@@ -68,7 +66,6 @@
 .end
 
 .sub 'test_fetch_keyed_pmc'
-    diag( 'test_fetch_keyed_pmc' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
 

Modified: branches/ops_pct/t/op/gc-leaky.t
==============================================================================
--- branches/ops_pct/t/op/gc-leaky.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/gc-leaky.t	Wed May  5 08:45:29 2010	(r46302)
@@ -48,7 +48,7 @@
         if counter > 1e6 goto done
         goto loop
     done:
-        say ""
+        diag("")
         $I1 = interpinfo.INTERPINFO_GC_COLLECT_RUNS
         $I2 = interpinfo.INTERPINFO_GC_MARK_RUNS
 

Modified: branches/ops_pct/t/op/gc.t
==============================================================================
--- branches/ops_pct/t/op/gc.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/gc.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -508,7 +508,6 @@
 
 # coro context and invalid return continuations
 # this is a stripped down version of imcc/t/syn/pcc_16
-# s. also src/pmc/retcontinuation.pmc
 
 .sub coro_context_ret_continuation
     .const 'Sub' $P0 = "co1"

Modified: branches/ops_pct/t/op/globals.t
==============================================================================
--- branches/ops_pct/t/op/globals.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/globals.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/ifunless.t
==============================================================================
--- branches/ops_pct/t/op/ifunless.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/ifunless.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2005, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/inf_nan.t
==============================================================================
--- branches/ops_pct/t/op/inf_nan.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/inf_nan.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/integer.t
==============================================================================
--- branches/ops_pct/t/op/integer.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/integer.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/interp.t
==============================================================================
--- branches/ops_pct/t/op/interp.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/interp.t	Wed May  5 08:45:29 2010	(r46302)
@@ -81,8 +81,8 @@
     end
 CODE
 /^ok\s1\n
-(?:\s+8.*)?\n
-(?:\s+10.*)?\n
+(?:0+8.*)?\n
+(?:0+a.*)?\n
 ok\s2\n$/x
 OUTPUT
 
@@ -154,9 +154,6 @@
     $I0 = interpinfo .INTERPINFO_CURRENT_RUNCORE
     if $I0 == .PARROT_FUNCTION_CORE   goto ok1
     if $I0 == .PARROT_FAST_CORE       goto ok1
-    if $I0 == .PARROT_SWITCH_CORE     goto ok1
-    if $I0 == .PARROT_CGOTO_CORE      goto ok1
-    if $I0 == .PARROT_CGP_CORE        goto ok1
     if $I0 == .PARROT_EXEC_CORE       goto ok1
     if $I0 == .PARROT_GC_DEBUG_CORE   goto ok1
     print 'not '

Modified: branches/ops_pct/t/op/io.t
==============================================================================
--- branches/ops_pct/t/op/io.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/io.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2008, Parrot Foundation.
 # $Id$
 
@@ -16,19 +16,41 @@
 
 =cut
 
-.const int TESTS = 4
+.const int TESTS = 5
 
 .sub 'main' :main
     .include 'test_more.pir'
 
     plan(TESTS)
 
+    open_delegates_to_filehandle_pmc()
     open_null_filename()
     open_null_mode()
     open_pipe_for_reading()
     open_pipe_for_writing()
 .end
 
+.sub open_delegates_to_filehandle_pmc
+    load_bytecode 'P6object.pbc'
+
+    .local pmc p6meta, interp, classes, classid
+    p6meta = get_root_global ["parrot"], "P6metaclass"
+    p6meta.'new_class'('Testing')
+
+    interp = getinterp
+    classes = interp[0]
+    classid = classes['Testing']
+    $I0 = classes['FileHandle']
+    set classes['FileHandle'], classid
+
+    $P1 = open '/foo'
+    is($P1,42,'open opcode delegates to the open method on the FileHandle PMC')
+
+    # replace the original, so we don't break other tests
+    set classes['FileHandle'], $I0
+
+.end
+
 .sub 'open_null_filename'
     push_eh open_null_filename_failed
     null $S0
@@ -127,7 +149,8 @@
     .local pmc pipe
     pipe = open command, 'wp'
     unless pipe goto open_pipe_for_writing_failed
-    pipe.'puts'("ok - open pipe for writing\n")
+
+    pipe.'puts'("ok 5 - open pipe for writing\n")
     close pipe
     .return ()
 
@@ -140,6 +163,14 @@
 
 .end
 
+.namespace ["Testing"]
+
+.sub open :method
+    .param pmc args :slurpy
+    .return(42)
+.end
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/ops_pct/t/op/literal.t
==============================================================================
--- branches/ops_pct/t/op/literal.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/literal.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/number.t
==============================================================================
--- branches/ops_pct/t/op/number.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/number.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Deleted: branches/ops_pct/t/op/pushaction.t
==============================================================================
--- branches/ops_pct/t/op/pushaction.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,176 +0,0 @@
-#! perl
-# Copyright (C) 2001-2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-
-use lib qw( . lib ../lib ../../lib );
-
-use Test::More;
-use Parrot::Test tests => 7;
-
-=head1 NAME
-
-t/op/pushaction.t - Test the C<pushaction> Instruction
-
-=head1 SYNOPSIS
-
-        % prove t/pmc/pushaction.t
-
-=head1 DESCRIPTION
-
-Tests the C<pushaction> instruction.
-
-=cut
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark nested" );
-    pushmark 10
-    pushmark 11
-    print "ok 1\n"
-    popmark 11
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_error_output_like( <<'CODE', <<'OUTPUT', "pushmark - pop wrong one" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 500
-    print "never\n"
-    end
-CODE
-/Mark 500 not found/
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushaction" );
-    pushmark 10
-    print "ok 1\n"
-    .const 'Sub' P10 = "action"
-    pushaction P10
-    print "ok 2\n"
-    popmark 10
-    print "ok 3\n"
-    end
-.pcc_sub action:
-    get_params "0", I5
-    print "in action I5 = "
-    print I5
-    print "\n"
-    returncc
-CODE
-ok 1
-ok 2
-in action I5 = 0
-ok 3
-OUTPUT
-
-pir_output_is( <<'CODE', <<'OUTPUT', "pushaction - end in main" );
-.sub main :main
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    # IMCC inserts end here, because it is :main
-.end
-
-.sub exit_handler
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-.end
-CODE
-main
-OUTPUT
-
-$ENV{TEST_PROG_ARGS} ||= '';
-my @todo = $ENV{TEST_PROG_ARGS} =~ /--run-pbc/
-    ? ( todo => 'lexicals not thawed properly from PBC, TT #1171' )
-    : ();
-pir_output_is( <<'CODE', <<'OUTPUT', "pushaction as closure", @todo );
-.sub main :main
-    .local pmc a
-    .lex 'a', a
-    pushmark 10
-    a = new 'Integer'
-    a = 42
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-
-    popmark 10
-    .return()
-.end
-
-.sub exit_handler :outer(main)
-    .param int flag
-    print "at popmark, flag = "
-    say flag
-    .local pmc a
-    a = find_lex 'a'
-    print 'a = '
-    say a
-.end
-CODE
-main
-at popmark, flag = 0
-a = 42
-OUTPUT
-
-# This test is entirely irrelevant under the new implementation of
-# continuations free from the stack. Leave it for now, to see whether there
-# is some other aspect of the stack, runloops, and exceptions that can be
-# tested.
-# exception handlers are still run in an inferior runloop, which messes up
-# nonlocal exit from within handlers.
-pir_output_like(
-    <<'CODE', <<'OUTPUT', "pushaction: error while handling error", todo => 'runloop shenanigans' );
-.sub main :main
-    push_eh h
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    $P1 = new 'Exception'
-    throw $P1
-    print "never 1\n"
-h:
-    ## this is never actually reached, because exit_handler throws an unhandled
-    ## exception before the handler is entered.
-    print "in outer handler\n"
-.end
-
-.sub exit_handler :outer(main)
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-    $P2 = new 'Exception'
-    throw $P2
-    print "never 2\n"
-.end
-CODE
-/^main
-at_exit, flag = 1
-No exception handler/
-OUTPUT
-
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/op/sprintf.t
==============================================================================
--- branches/ops_pct/t/op/sprintf.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/sprintf.t	Wed May  5 08:45:29 2010	(r46302)
@@ -202,8 +202,8 @@
     # remove /'s
     $S0 = substr expected, 0, 1
     if $S0 != "/" goto eh_bad_line
-    substr expected, 0, 1, ''
-    substr expected, -1, 1, ''
+    expected = replace expected, 0, 1, ''
+    expected = replace expected, -1, 1, ''
 
     $I0 = index $S1, expected
     if $I0 == -1 goto is_nok
@@ -411,7 +411,7 @@
     # NOTE: there can be multiple tabs between entries, so skip until
     # we have something.
     # remove the trailing newline from record
-    chopn record, 1
+    record = chopn record, 1
     $P1 = split "\t", record
     $I0 = elements $P1 # length of array
     .local int tab_number

Modified: branches/ops_pct/t/op/sprintf2.t
==============================================================================
--- branches/ops_pct/t/op/sprintf2.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/sprintf2.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/string.t
==============================================================================
--- branches/ops_pct/t/op/string.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/string.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -19,7 +19,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(412)
+    plan(369)
 
     set_s_s_sc()
     test_clone()
@@ -27,7 +27,6 @@
     test_length_i_s()
     zero_length_substr()
     chopn_with_clone()
-    chopn_with_set()
     chopn_oob_values()
     three_argument_chopn()
     three_argument_chopn__oob_values()
@@ -37,18 +36,19 @@
     exception_substr_oob()
     len_greater_than_strlen()
     len_greater_than_strlen_neg_offset()
-    five_arg_substr_w_rep_eq_length()
-    five_arg_substr_w_replacement_gt_length()
-    five_arg_substr_w_replacement_lt_length()
-    five_arg_substr__offset_at_end_of_string()
-    exception_five_arg_substr__offset_past_end_of_string()
-    five_arg_substr_neg_offset_repl_eq_length()
-    five_arg_substr_neg_offset_repl_gt_length()
-    five_arg_substr_neg_offset_repl_lt_length()
-    exception_five_arg_substr_neg_offset_out_of_string()
-    five_arg_substr_length_gt_strlen()
-    five_arg_substr_length_gt_strlen_neg_offset()
-    four_arg_replacement_only_substr()
+    replace_w_rep_eq_length()
+    replace_w_replacement_gt_length()
+    replace_w_replacement_lt_length()
+    replace_vs_hash()
+    replace__offset_at_end_of_string()
+    exception_replace__offset_past_end_of_string()
+    replace_neg_offset_repl_eq_length()
+    replace_neg_offset_repl_gt_length()
+    replace_neg_offset_repl_lt_length()
+    exception_replace_neg_offset_out_of_string()
+    replace_length_gt_strlen()
+    replace_length_gt_strlen_neg_offset()
+    replace_only_substr()
     three_arg_substr()
     exception_substr__pos_offset_zero_length_string()
     substr_offset_zero_zero_length_string()
@@ -57,7 +57,7 @@
     zero_length_substr_zero_length_string()
     zero_length_substr_zero_length_string()
     three_arg_substr_zero_length_string()
-    five_arg_substr_zero_length_string()
+    replace_zero_length_string()
     four_arg_substr_replace_zero_length_string()
     concat_s_s_sc_null_onto_null()
     concat_s_sc_repeated_two_arg_concats()
@@ -122,10 +122,8 @@
     correct_precision_for_sprintf_x()
     test_exchange()
     test_find_encoding()
-    test_string_encoding()
     test_assign()
     assign_and_globber()
-    assign_and_globber_2()
     bands_null_string()
     bands_2()
     bands_3()
@@ -141,8 +139,6 @@
     bnots_null_string()
     bnots_2()
     bnots_cow()
-    transcode_to_utf8()
-    string_chartype()
     split_on_empty_string()
     split_on_non_empty_string()
     test_join()
@@ -197,9 +193,6 @@
 
     clone $S1, "Bar1"
     is( $S1, "Bar1", '' )
-
-    chopn $S1, 1
-    is( $S1, "Bar", 'the contents of $S1 are no longer constant' )
 .end
 
 .sub clone_null
@@ -228,42 +221,28 @@
     set $S5, "japhXYZW"
     clone $S3, $S4
     set $I1, 4
-    chopn $S4, 3
-    chopn $S4, 1
-    chopn $S5, $I1
+    $S4 = chopn $S4, 3
+    $S4 = chopn $S4, 1
+    $S5 = chopn $S5, $I1
 
     is( $S4, "JAPH", '' )
     is( $S5, "japh", '' )
     is( $S3, "JAPHxyzw", '' )
 .end
 
-.sub chopn_with_set
-    set $S4, "JAPHxyzw"
-    set $S5, "japhXYZW"
-    set     $S3, $S4
-    set $I1, 4
-    chopn   $S4, 3
-    chopn   $S4, 1
-    chopn   $S5, $I1
-
-    is( $S4, "JAPH", '' )
-    is( $S5, "japh", '' )
-    is( $S3, "JAPH", '' )
-.end
-
 .sub chopn_oob_values
     set $S1, "A string of length 21"
-    chopn   $S1, 0
+    $S1 = chopn $S1, 0
     is( $S1, "A string of length 21", '' )
 
-    chopn   $S1, 4
+    $S1 = chopn $S1, 4
     is( $S1, "A string of lengt", '' )
 
     # -length cuts now
-    chopn   $S1, -4
+    $S1 = chopn $S1, -4
     is( $S1, "A st", '' )
 
-    chopn   $S1, 1000
+    $S1 = chopn $S1, 1000
     is( $S1, "", '' )
 .end
 
@@ -292,10 +271,6 @@
     set     $S3, $S1
     chopn   $S2, $S1, 3
     is( $S3, "Parrot", '' )
-
-    set     $S3, $S1
-    chopn   $S1, 3
-    is( $S3, "Par", '' )
 .end
 #
 .sub three_argument_chopn__oob_values
@@ -391,113 +366,106 @@
     is( $S1, "length 21", '' )
 .end
 
-.sub five_arg_substr_w_rep_eq_length
+.sub replace_w_rep_eq_length
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S2, $S0, 4, 3, $S1
-    is( $S0, "abcdxyzhijk", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "efg", '' )
+    replace $S2, $S0, 4, 3, $S1
+    is( $S2, "abcdxyzhijk", '' )
 .end
 
-.sub five_arg_substr_w_replacement_gt_length
+.sub replace_w_replacement_gt_length
     set $S0, "abcdefghijk"
     set $S1, "xyz0123"
-    substr $S2, $S0, 4, 3, $S1
-    is( $S0, "abcdxyz0123hijk", '' )
-    is( $S1, "xyz0123", '' )
-    is( $S2, "efg", '' )
+    $S2 = replace $S0, 4, 3, $S1
+    is( $S2, "abcdxyz0123hijk", '' )
 .end
 
-.sub five_arg_substr_w_replacement_lt_length
+.sub replace_w_replacement_lt_length
     set $S0, "abcdefghijk"
     set $S1, "x"
-    substr $S2, $S0, 4, 3, $S1
-    is( $S0, "abcdxhijk", '' )
-    is( $S1, "x", '' )
-    is( $S2, "efg", '' )
+    $S2 = replace $S0, 4, 3, $S1
+    is( $S2, "abcdxhijk", '' )
 .end
 
-.sub five_arg_substr__offset_at_end_of_string
-  set $S0, "abcdefghijk"
-  set $S1, "xyz"
-  substr $S2, $S0, 11, 3, $S1
-    is( $S0, "abcdefghijkxyz", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "", '' )
+.sub replace__offset_at_end_of_string
+    set $S0, "abcdefghijk"
+    set $S1, "xyz"
+    $S2 = replace $S0, 11, 3, $S1
+    is( $S2, "abcdefghijkxyz", '' )
+.end
+
+.sub replace_vs_hash
+    # Check that string hashval properly updated.
+    .local pmc hash
+    hash = new ['Hash']
+    $S0 = "fooo"
+    hash[$S0]   = 1
+    hash["foo"] = 42
+    $S0 = replace $S0, 1, 1, ''
+    $S1 = hash[$S0]
+    is( $S1, '42', 'replace behave it self')
 .end
 
-.sub exception_five_arg_substr__offset_past_end_of_string
+.sub exception_replace__offset_past_end_of_string
     set $S0, "abcdefghijk"
     set $S1, "xyz"
     push_eh handler
-    substr $S2, $S0, 12, 3, $S1
+    $S2 = replace $S0, 12, 3, $S1
     ok(0,"no exception")
 handler:
     .exception_is( "Can only replace inside string or index after end of string" )
 .end
 
-.sub five_arg_substr_neg_offset_repl_eq_length
+.sub replace_neg_offset_repl_eq_length
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S2, $S0, -3, 3, $S1
-    is( $S0, "abcdefghxyz", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "ijk", '' )
+    $S2 = replace $S0, -3, 3, $S1
+    is( $S2, "abcdefghxyz", '' )
 .end
 
-.sub five_arg_substr_neg_offset_repl_gt_length
+.sub replace_neg_offset_repl_gt_length
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S2, $S0, -6, 2, $S1
-    is( $S0, "abcdexyzhijk", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "fg", '' )
+    $S2 = replace $S0, -6, 2, $S1
+    is( $S2, "abcdexyzhijk", '' )
 .end
 
-.sub five_arg_substr_neg_offset_repl_lt_length
+.sub replace_neg_offset_repl_lt_length
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S2, $S0, -6, 4, $S1
-    is( $S0, "abcdexyzjk", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "fghi", '' )
+    $S2 = replace $S0, -6, 4, $S1
+    is( $S2, "abcdexyzjk", '' )
 .end
 
-.sub exception_five_arg_substr_neg_offset_out_of_string
+.sub exception_replace_neg_offset_out_of_string
     set $S0, "abcdefghijk"
     set $S1, "xyz"
     push_eh handler
-    substr $S2, $S0, -12, 4, $S1
+    $S2 = replace $S0, -12, 4, $S1
     ok(0,"no exception")
 handler:
     .exception_is( "Can only replace inside string or index after end of string" )
 .end
 
-.sub five_arg_substr_length_gt_strlen
+.sub replace_length_gt_strlen
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S2, $S0, 3, 11, $S1
-    is( $S0, "abcxyz", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "defghijk", '' )
+    $S2 = replace $S0, 3, 11, $S1
+    is( $S2, "abcxyz", '' )
 .end
 
-.sub five_arg_substr_length_gt_strlen_neg_offset
+.sub replace_length_gt_strlen_neg_offset
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S2, $S0, -3, 11, $S1
-    is( $S0, "abcdefghxyz", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "ijk", '' )
+    $S2 = replace $S0, -3, 11, $S1
+    is( $S2, "abcdefghxyz", '' )
 .end
 
-.sub four_arg_replacement_only_substr
+.sub replace_only_substr
     set $S0, "abcdefghijk"
     set $S1, "xyz"
-    substr $S0, 3, 3, $S1
-    is( $S0, "abcxyzghijk", '' )
-    is( $S1, "xyz", '' )
+    $S2 = replace $S0, 3, 3, $S1
+    is( $S2, "abcxyzghijk", '' )
 .end
 
 .sub three_arg_substr
@@ -556,34 +524,28 @@
     is( $S1, "", '' )
 .end
 
-.sub five_arg_substr_zero_length_string
+.sub replace_zero_length_string
     set $S0, ""
     set $S1, "xyz"
-    substr $S2, $S0, 0, 3, $S1
-    is( $S0, "xyz", '' )
-    is( $S1, "xyz", '' )
-    is( $S2, "", '' )
+    $S2 = replace $S0, 0, 3, $S1
+    is( $S2, "xyz", '' )
 
     set $S3, ""
     set $S4, "abcde"
-    substr $S5, $S3, 0, 0, $S4
-    is( $S3, "abcde", '' )
-    is( $S4, "abcde", '' )
-    is( $S5, "", '' )
+    $S5 = replace $S3, 0, 0, $S4
+    is( $S5, "abcde", '' )
 .end
 
 .sub four_arg_substr_replace_zero_length_string
     set $S0, ""
     set $S1, "xyz"
-    substr $S0, 0, 3, $S1
+    $S0 = replace $S0, 0, 3, $S1
     is( $S0, "xyz", '' )
-    is( $S1, "xyz", '' )
 
     set $S2, ""
     set $S3, "abcde"
-    substr $S2, 0, 0, $S3
+    $S2 = replace $S2, 0, 0, $S3
     is( $S2, "abcde", '' )
-    is( $S3, "abcde", '' )
 .end
 
 .sub concat_s_s_sc_null_onto_null
@@ -638,8 +600,8 @@
     set $S2, "JAPH"
     concat $S0, $S2, ""
     concat $S1, "", $S2
-    chopn $S0, 1
-    chopn $S1, 1
+    $S0 = chopn $S0, 1
+    $S1 = chopn $S1, 1
     is( $S2, "JAPH", '' )
 .end
 
@@ -733,7 +695,7 @@
    ord $I0,$S0
    ok( 0, 'no exception: 2-param ord, empty string register' )
  handler:
-   .exception_is( 'Cannot get character of empty string' )
+   .exception_is( 'Cannot get character of NULL string' )
 .end
 
 .sub exception_three_param_ord_empty_string
@@ -749,7 +711,7 @@
    ord $I0,$S0,0
    ok( 0, 'no exception: 3-param ord, empty string register' )
  handler:
-   .exception_is( 'Cannot get character of empty string' )
+   .exception_is( 'Cannot get character of NULL string' )
 .end
 
 .sub two_param_ord_one_character_string
@@ -1195,7 +1157,7 @@
 .sub cow_with_chopn_leaving_original_untouched
     set $S0, "ABCD"
     clone $S1, $S0
-    chopn $S0, 1
+    $S0 = chopn $S0, 1
     is( $S0, "ABC", 'COW with chopn leaving original untouched' )
     is( $S1, "ABCD", 'COW with chopn leaving original untouched' )
 .end
@@ -1477,34 +1439,6 @@
     # is( $I0, "3", 'find_encoding' )
 .end
 
-.sub test_string_encoding
-    skip(4, "no more visible encoding" )
-    # set $I0, 0
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK1
-    # print "not "
-    # OK1:  print "ok 1\n"
-    # set $I0, 1
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK2
-    # print "not "
-    # OK2:  print "ok 2\n"
-    # set $I0, 2
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK3
-    # print "not "
-    # OK3:  print "ok 3\n"
-    # set $I0, 3
-    # new $S0, 0, $I0
-    # string_encoding $I1, $S0
-    # eq $I0, $I1, OK4
-    # print "not "
-    # OK4:  print "ok 4\n"
-.end
-
 .sub test_assign
     set $S4, "JAPH"
     assign  $S5, $S4
@@ -1520,40 +1454,32 @@
     is( $S5, "JAPH", 'assign & globber' )
 .end
 
-.sub assign_and_globber_2
-    set $S4, "JAPH"
-    set     $S5, $S4
-    assign  $S4, "Parrot"
-    is( $S4, "Parrot", 'assign & globber 2' )
-    is( $S5, "Parrot", 'assign & globber 2' )
-.end
-
 .sub bands_null_string
     null $S1
     set $S2, "abc"
-    bands $S1, $S2
+    $S1 = bands $S1, $S2
     null $S3
     is( $S1, $S3, 'ok1' )
 
     set $S1, ""
-    bands $S1, $S2
+    $S1 = bands $S1, $S2
     nok( $S1, 'ok2' )
 
     null $S2
     set $S1, "abc"
-    bands $S1, $S2
+    $S1 = bands $S1, $S2
     null $S3
     is( $S1, $S3, 'ok3' )
 
     set $S2, ""
-    bands $S1, $S2
+    $S1 = bands $S1, $S2
     nok( $S1, 'ok4' )
 .end
 
 .sub bands_2
     set $S1, "abc"
     set $S2, "EE"
-    bands $S1, $S2
+    $S1 = bands $S1, $S2
     is( $S1, "A@", 'bands 2' )
     is( $S2, "EE", 'bands 2' )
 .end
@@ -1570,33 +1496,33 @@
 .sub bands_cow
     set $S1, "foo"
     substr $S2, $S1, 0, 3
-    bands $S1, "bar"
+    $S1 = bands $S1, "bar"
     is( $S2, "foo", 'bands COW' )
 .end
 
 .sub bors_null_string
     null $S1
     null $S2
-    bors $S1, $S2
+    $S1 = bors $S1, $S2
     null $S3
     is( $S1, $S3, 'bors NULL string' )
 
     null $S1
     set $S2, ""
-    bors $S1, $S2
+    $S1 = bors $S1, $S2
     null $S3
     is( $S1, $S3, 'bors NULL string' )
 
-    bors $S2, $S1
+    $S2 = bors $S2, $S1
     is( $S2, $S3, 'bors NULL string' )
 
     null $S1
     set $S2, "def"
-    bors $S1, $S2
+    $S1 = bors $S1, $S2
     is( $S1, "def", 'bors NULL string' )
 
     null $S2
-    bors $S1, $S2
+    $S1 = bors $S1, $S2
     is( $S1, "def", 'bors NULL string' )
 
     null $S1
@@ -1623,7 +1549,7 @@
 .sub bors_2
     set $S1, "abc"
     set $S2, "EE"
-    bors $S1, $S2
+    $S1 = bors $S1, $S2
     is( $S1, "egc", 'bors 2' )
     is( $S2, "EE", 'bors 2' )
 .end
@@ -1640,33 +1566,33 @@
 .sub bors_cow
     set $S1, "foo"
     substr $S2, $S1, 0, 3
-    bors $S1, "bar"
+    $S1 = bors $S1, "bar"
     is( $S2, "foo", 'bors COW' )
 .end
 
 .sub bxors_null_string
     null $S1
     null $S2
-    bxors $S1, $S2
+    $S1 = bxors $S1, $S2
     null $S3
     is( $S1, $S3, 'bxors NULL string' )
 
     null $S1
     set $S2, ""
-    bxors $S1, $S2
+    $S1 = bxors $S1, $S2
     null $S3
     is( $S1, $S3, 'bxors NULL string' )
 
-    bxors $S2, $S1
+    $S2 = bxors $S2, $S1
     is( $S2, $S3, 'bxors NULL string' )
 
     null $S1
     set $S2, "abc"
-    bxors $S1, $S2
+    $S1 = bxors $S1, $S2
     is( $S1, "abc", 'bxors NULL string' )
 
     null $S2
-    bxors $S1, $S2
+    $S1 = bxors $S1, $S2
     is( $S1, "abc", 'bxors NULL string' )
 
     null $S1
@@ -1693,13 +1619,13 @@
 .sub bxors_2
     set $S1, "a2c"
     set $S2, "Dw"
-    bxors $S1, $S2
+    $S1 = bxors $S1, $S2
     is( $S1, "%Ec", 'bxors 2' )
     is( $S2, "Dw", 'bxors 2' )
 
     set $S1, "abc"
     set $S2, "   X"
-    bxors $S1, $S2
+    $S1 = bxors $S1, $S2
     is( $S1, "ABCX", 'bxors 2' )
     is( $S2, "   X", 'bxors 2' )
 .end
@@ -1723,7 +1649,7 @@
 .sub bxors_cow
     set $S1, "foo"
     substr $S2, $S1, 0, 3
-    bxors $S1, "bar"
+    $S1 = bxors $S1, "bar"
     is( $S2, "foo", 'bxors COW' )
 .end
 
@@ -1768,25 +1694,6 @@
     is( $S2, "foo", 'bnots COW' )
 .end
 
-.sub transcode_to_utf8
-    skip( 2, "no more transcode" )
-    # set $S1, "ASCII is the same as UTF8\n"
-    # find_encoding $I1, "utf8"
-    # transcode $S2, $S1, $I1
-    # is( $S1, "ASCII is the same as UTF8", 'transcode to utf8' )
-    # is( $S2, "ASCII is the same as UTF8", 'transcode to utf8' )
-.end
-
-.sub string_chartype
-    skip( 1, "no more chartype" )
-
-    # set $S0, "Test String"
-    # find_chartype $I0, "usascii"
-    # set_chartype $S0, $I0
-    # string_chartype $I1, $S0
-    # is( $I0, $I1, 'string_chartype' )
-.end
-
 .sub split_on_empty_string
     split $P1, "", ""
     set $I1, $P1
@@ -1865,19 +1772,6 @@
   OK1:
     ok($I99, 'eq_addr/ne_addr')
 
-    set $S1, "Test"
-    set $I99, 0
-    eq_addr $S1, $S0, BAD2
-      set $I99, 1
-  BAD2:
-    ok($I99, 'eq_addr/ne_addr')
-
-    set $I99, 1
-    ne_addr $S1, $S0, OK3
-      set $I99, 0
-  OK3:
-    ok($I99, 'eq_addr/ne_addr')
-
     set $S0, $S1
     set $I99, 0
     ne_addr $S1, $S0, BAD4
@@ -1907,9 +1801,6 @@
     upcase $S1, $S0
     is( $S1, "ABCD012YZ", 'upcase' )
 
-    upcase $S0
-    is( $S0, "ABCD012YZ", 'upcase inplace' )
-
     push_eh catch1
     null $S9
     null $S0
@@ -1926,7 +1817,7 @@
     push_eh catch2
     null $S9
     null $S0
-    upcase $S0
+    $S0 = upcase $S0
     pop_eh
     goto null2
 catch2:
@@ -1942,9 +1833,6 @@
     downcase $S1, $S0
     is( $S1, "abcd012yz", 'downcase' )
 
-    downcase $S0
-    is( $S0, "abcd012yz", 'downcase inplace' )
-
     push_eh catch1
     null $S9
     null $S0
@@ -1961,7 +1849,7 @@
     push_eh catch2
     null $S9
     null $S0
-    downcase $S0
+    $S0 = downcase $S0
     pop_eh
     goto null2
 catch2:
@@ -1977,9 +1865,6 @@
     titlecase $S1, $S0
     is( $S1, "Abcd012yz", 'titlecase' )
 
-    titlecase $S0
-    is( $S0, "Abcd012yz", 'titlecase inplace' )
-
     push_eh catch1
     null $S9
     null $S0
@@ -1996,7 +1881,7 @@
     push_eh catch2
     null $S9
     null $S0
-    titlecase $S0
+    $S0 = titlecase $S0
     pop_eh
     goto null2
 catch2:
@@ -2114,7 +1999,7 @@
     .param string s
     $I0 = index s, '::'
     is( s, "Foo::Bar", 'bug 60030' )
-    substr s, $I0, 2, "/"
+    s = replace s, $I0, 2, "/"
     is( s, "Foo/Bar", 'bug 60030' )
     collect
     is( s, "Foo/Bar", 'bug 60030' )

Modified: branches/ops_pct/t/op/string_cmp.t
==============================================================================
--- branches/ops_pct/t/op/string_cmp.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/string_cmp.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/string_cs.t
==============================================================================
--- branches/ops_pct/t/op/string_cs.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/string_cs.t	Wed May  5 08:45:29 2010	(r46302)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 52;
+use Parrot::Test tests => 47;
 use Parrot::Config;
 
 =head1 NAME
@@ -263,48 +263,16 @@
 iso-8859-1
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_i" );
-    set S1, "abc"
-    find_charset I0, "iso-8859-1"
-    trans_charset S1, I0
-    print S1
-    print "\n"
-    charset I0, S1
-    charsetname S2, I0
-    print S2
-    print "\n"
-    end
-CODE
-abc
-iso-8859-1
-OUTPUT
-
-pasm_error_output_like( <<'CODE', <<OUTPUT, "trans_charset_s_i - lossy" );
+pasm_error_output_like( <<'CODE', <<OUTPUT, "trans_charset_s_s_i - lossy" );
     set S1, iso-8859-1:"abcä"
     find_charset I0, "ascii"
-    trans_charset S1, I0
+    trans_charset S2, S1, I0
     print "never\n"
     end
 CODE
 /lossy conversion to ascii/
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_i - same" );
-    set S1, ascii:"abc"
-    find_charset I0, "ascii"
-    trans_charset S1, I0
-    print S1
-    print "\n"
-    charset I0, S1
-    charsetname S2, I0
-    print S2
-    print "\n"
-    end
-CODE
-abc
-ascii
-OUTPUT
-
 pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i iso-8859-1 to binary" );
     set S0, iso-8859-1:"abc"
     find_charset I0, "binary"
@@ -321,22 +289,6 @@
 binary
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_i iso-8859-1 to binary" );
-    set S1, iso-8859-1:"abc"
-    find_charset I0, "binary"
-    trans_charset S1, I0
-    print S1
-    print "\n"
-    charset I0, S1
-    charsetname S2, I0
-    print S2
-    print "\n"
-    end
-CODE
-abc
-binary
-OUTPUT
-
 pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i ascii to binary" );
     set S0, ascii:"abc"
     find_charset I0, "binary"
@@ -353,22 +305,6 @@
 binary
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_i ascii to binary" );
-    set S1, ascii:"abc"
-    find_charset I0, "binary"
-    trans_charset S1, I0
-    print S1
-    print "\n"
-    charset I0, S1
-    charsetname S2, I0
-    print S2
-    print "\n"
-    end
-CODE
-abc
-binary
-OUTPUT
-
 pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i ascii to iso-8859-1" );
     set S0, ascii:"abc"
     find_charset I0, "iso-8859-1"
@@ -385,22 +321,6 @@
 iso-8859-1
 OUTPUT
 
-pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_i ascii to iso-8859-1" );
-    set S1, ascii:"abc"
-    find_charset I0, "iso-8859-1"
-    trans_charset S1, I0
-    print S1
-    print "\n"
-    charset I0, S1
-    charsetname S2, I0
-    print S2
-    print "\n"
-    end
-CODE
-abc
-iso-8859-1
-OUTPUT
-
 pasm_output_is( <<'CODE', <<OUTPUT, "trans_charset_s_s_i iso-8859-1 to unicode" );
     set S0, iso-8859-1:"abc_ä_"
     find_charset I0, "unicode"
@@ -495,7 +415,7 @@
     set $S0, iso-8859-1:"TÖTSCH"
     find_charset $I0, "unicode"
     trans_charset $S1, $S0, $I0
-    downcase $S1
+    $S1 = downcase $S1
     getstdout $P0           # need to convert back to utf8
     $P0.'encoding'("utf8")  # set utf8 output
     print $S1
@@ -506,13 +426,13 @@
 t\xc3\xb6tsch
 OUTPUT
 
-    pasm_output_is( <<'CODE', <<"OUTPUT", "unicode downcase, trans_charset_s_i" );
+    pasm_output_is( <<'CODE', <<"OUTPUT", "unicode downcase, trans_charset_s_s_i" );
     set S0, iso-8859-1:"TÖTSCH"
     find_charset I0, "unicode"
     trans_charset S1, S0, I0
-    downcase S1
+    downcase S1, S1
     find_charset I0, "iso-8859-1"
-    trans_charset S1, I0
+    trans_charset S1, S1, I0
     print S1
     print "\n"
     end
@@ -531,7 +451,7 @@
     set S0, iso-8859-1:"TÖTSCH"
     find_charset I0, "unicode"
     trans_charset S1, S0, I0
-    downcase S1
+    downcase S1, S1
     find_encoding I0, "utf8"
     trans_encoding S2, S1, I0
     print S2
@@ -568,7 +488,7 @@
     set S0, iso-8859-1:"TTÖÖ"
     find_charset I0, "unicode"
     trans_charset S1, S0, I0
-    chopn S1, 2
+    chopn S1, S1, 2
     print S1
     print ' '
     length I0, S1
@@ -653,7 +573,8 @@
     trans_charset S1, S0, I0
     find_encoding I0, "utf16"
     trans_encoding S1, S1, I0
-    substr S2, S1, 1, 1, "oe"
+    substr  S2, S1, 1, 1
+    replace S1, S1, 1, 1, "oe"
     find_encoding I0, "utf8"
     trans_encoding S2, S2, I0
     trans_encoding S1, S1, I0
@@ -671,7 +592,7 @@
     set S0, iso-8859-1:"TÖTSCH"
     find_charset I0, "unicode"
     trans_charset S1, S0, I0
-    downcase S1
+    downcase S1, S1
     set S2, iso-8859-1:"öt"
     index I0, S1, S2
     print I0
@@ -685,7 +606,7 @@
     set S0, iso-8859-1:"TÖTSCH"
     find_charset I0, "unicode"
     trans_charset S1, S0, I0
-    downcase S1
+    downcase S1, S1
     set S2, iso-8859-1:"öt"
     index I0, S1, S2
     print I0
@@ -705,7 +626,7 @@
     set $S0, iso-8859-1:"tötsch"
     find_charset $I0, "unicode"
     trans_charset $S1, $S0, $I0
-    upcase $S1
+    upcase $S1, $S1
     getstdout $P0         # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
     print $S1
@@ -719,7 +640,7 @@
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode upcase to combined char" );
 .sub main :main
     set $S1, unicode:"hacek j \u01f0"
-    upcase $S1
+    upcase $S1, $S1
     getstdout $P0          # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
     print $S1
@@ -749,7 +670,7 @@
     pir_output_is( <<'CODE', <<"OUTPUT", "unicode upcase to combined char 3.2 bug?" );
 .sub main :main
     set $S1, unicode:"___\u01f0123"
-    upcase $S1
+    upcase $S1, $S1
     getstdout $P0          # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
     print $S1
@@ -765,7 +686,7 @@
     set $S0, iso-8859-1:"tötsch leo"
     find_charset $I0, "unicode"
     trans_charset $S1, $S0, $I0
-    titlecase $S1
+    titlecase $S1, $S1
     getstdout $P0          # need to convert back to utf8
     $P0.'encoding'("utf8") # set utf8 output
     print $S1
@@ -780,9 +701,9 @@
 .sub main :main
     set $S1, unicode:"___\u01f0___"
     length $I0, $S1
-    upcase $S1         # decompose J+hacek
+    upcase $S1, $S1    # decompose J+hacek
     length $I1, $S1    # 1 longer
-    downcase $S1       # j+hacek
+    downcase $S1, $S1  # j+hacek
     length $I2, $S1
     compose $S1, $S1
     length $I3, $S1        # back at original string

Modified: branches/ops_pct/t/op/stringu.t
==============================================================================
--- branches/ops_pct/t/op/stringu.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/stringu.t	Wed May  5 08:45:29 2010	(r46302)
@@ -256,7 +256,7 @@
     set S0, "AAAAAAAAAA\\u666"
     set I0, 0x666
     chr S1, I0
-    substr S0, 10, 5, S1
+    replace S0, S0, 10, 5, S1
     print S0
     print "\n"
     end

Modified: branches/ops_pct/t/op/time.t
==============================================================================
--- branches/ops_pct/t/op/time.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/time.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/trans.t
==============================================================================
--- branches/ops_pct/t/op/trans.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/trans.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/op/vivify.t
==============================================================================
--- branches/ops_pct/t/op/vivify.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/op/vivify.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -28,7 +28,6 @@
 .end
 
 .sub 'test_vivify_keyed_int'
-    diag( 'test_vivify_keyed_int' )
     $P0    = new [ 'Hash' ]
     $P1    = box 111
     $P0[1] = $P1
@@ -56,7 +55,6 @@
 .end
 
 .sub 'test_vivify_keyed_str'
-    diag( 'test_vivify_keyed_str' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
     $P0['one']   = $P1
@@ -84,7 +82,6 @@
 .end
 
 .sub 'test_vivify_keyed_pmc'
-    diag( 'test_vivify_keyed_pmc' )
     $P0          = new [ 'Hash' ]
     $P1          = box 111
 

Modified: branches/ops_pct/t/pharness/02-get_test_prog_args.t
==============================================================================
--- branches/ops_pct/t/pharness/02-get_test_prog_args.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pharness/02-get_test_prog_args.t	Wed May  5 08:45:29 2010	(r46302)
@@ -13,7 +13,7 @@
 };
 plan( skip_all => 't/harness only runs once configuration has completed' )
     if $@;
-plan( tests => 16 );
+plan( tests => 12 );
 use Carp;
 use Parrot::Harness::Options qw( get_test_prog_args );
 
@@ -28,7 +28,6 @@
 ($gc_debug, $run_exec) = (0,0);
 $args = get_test_prog_args($optsref, $gc_debug, $run_exec);
 like($args, qr/-d/, "Got expected option");
-like($args, qr/--runcore=cgoto/, "Got expected option");
 like($args, qr/-D40/, "Got expected option");
 
 $optsref = {
@@ -40,7 +39,6 @@
 ($gc_debug, $run_exec) = (0,0);
 $args = get_test_prog_args($optsref, $gc_debug, $run_exec);
 like($args, qr/-d/, "Got expected option");
-like($args, qr/--runcore=cgoto/, "Got expected option");
 like($args, qr/-D40/, "Got expected option");
 like($args, qr/-O2/, "Got expected option");
 
@@ -52,7 +50,6 @@
 ($gc_debug, $run_exec) = (1,0);
 $args = get_test_prog_args($optsref, $gc_debug, $run_exec);
 like($args, qr/-d/, "Got expected option");
-like($args, qr/--runcore=cgoto/, "Got expected option");
 like($args, qr/-D40/, "Got expected option");
 like($args, qr/\s--gc-debug/, "Got expected option");
 
@@ -64,7 +61,6 @@
 ($gc_debug, $run_exec) = (0,1);
 $args = get_test_prog_args($optsref, $gc_debug, $run_exec);
 like($args, qr/-d/, "Got expected option");
-like($args, qr/--runcore=cgoto/, "Got expected option");
 like($args, qr/-D40/, "Got expected option");
 like($args, qr/\s--run-exec/, "Got expected option");
 

Modified: branches/ops_pct/t/pir/macro.t
==============================================================================
--- branches/ops_pct/t/pir/macro.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pir/macro.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pir/registernames.t
==============================================================================
--- branches/ops_pct/t/pir/registernames.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pir/registernames.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/addrregistry.t
==============================================================================
--- branches/ops_pct/t/pmc/addrregistry.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/addrregistry.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/arrayiterator.t
==============================================================================
--- branches/ops_pct/t/pmc/arrayiterator.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/arrayiterator.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/bigint.t
==============================================================================
--- branches/ops_pct/t/pmc/bigint.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/bigint.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -51,7 +51,7 @@
     $P2 = $P1['gmp']
     $I1 = isnull $P2
     if $I1, NoLibGMP
-    say 'This Parrot uses GMP'
+    say '# This Parrot uses GMP'
 
     # check version is >= 4.1.4
     $P0 = new ['BigInt']
@@ -70,20 +70,16 @@
     lt $I2, 4, OldLibGMP
 
 Config2:
-    print 'Suitable GMP version ['
-    print $S3
-    say '] available'
+    diag( 'Suitable GMP version [', $S3, '] available' )
     goto ret
 
 NoLibGMP:
-    say 'No BigInt Lib configured'
+    diag( 'No BigInt Lib configured' )
     skip(34)
     exit 0
 
 OldLibGMP:
-    print 'Buggy GMP version ['
-    print $S3
-    say '] with huge digit multiply - please upgrade'
+    diag( 'Buggy GMP version [', $S3, '] with huge digit multiply - please upgrade' )
     skip(34)
     exit 0
 
@@ -567,7 +563,7 @@
     goto esz
 
 esz:
-    print 'Using '
+    print '# Using '
     $I0 = mul $I0, 8
     print $I0
     print '-bit Integers ['

Modified: branches/ops_pct/t/pmc/boolean.t
==============================================================================
--- branches/ops_pct/t/pmc/boolean.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/boolean.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2007, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/callcontext.t
==============================================================================
--- branches/ops_pct/t/pmc/callcontext.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/callcontext.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
-#! parrot
-# Copyright (C) 2006-2009, Parrot Foundation.
+#!./parrot
+# Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -19,15 +19,14 @@
 .sub 'main' :main
     .include 'test_more.pir'
 
-    plan(66)
+    plan(42)
 
     test_instantiate()
     test_get_set_attrs()
-    test_push_pop_indexed_access()
-    test_shift_unshift_indexed_access()
     test_indexed_access()
     test_indexed_boxing()
     test_keyed_access()
+    test_shift_access()
     test_exists()
     test_clone()
 .end
@@ -54,85 +53,6 @@
     is($P5,'cheese', 'got arg_flags attribute')
 .end
 
-.sub 'test_push_pop_indexed_access'
-    $P0 = new [ 'CallContext' ]
-    $P1 = new [ 'Integer' ]
-    $P1 = 100
-
-    push $P0, $P1
-    $I0 = elements $P0
-    is( $I0, 1, 'elements after push' )
-
-    $P2 = $P0[0]
-    is( $P2, 100, 'push_pmc/get_pmc_keyed_int pair' )
-    $P2 = pop $P0
-    is( $P2, 100, 'push_pmc/pop_pmc pair' )
-
-    $I0 = elements $P0
-    is( $I0, 0, 'elements after pop' )
-
-    push $P0, 200
-    $I0 = $P0[0]
-    is( $I0, 200, 'push_integer/get_integer_keyed_int pair' )
-    $I0 = pop $P0
-    is( $I0, 200, 'push_integer/pop_integer pair' )
-
-    push $P0, 3.03
-    $N0 = $P0[0]
-    is( $N0, 3.03, 'push_number/get_number_keyed_int pair' )
-    $N0 = pop $P0
-    is( $N0, 3.03, 'push_number/pop_number pair' )
-
-    push $P0, 'hello'
-    $S0 = $P0[0]
-    is( $S0, 'hello', 'push_string/get_string_keyed_int pair' )
-    $S0 = pop $P0
-    is( $S0, 'hello', 'push_string/pop_string pair' )
-
-    $I0 = elements $P0
-    is( $I0, 0, 'elements after push/pop' )
-.end
-
-.sub 'test_shift_unshift_indexed_access'
-    $P0 = new [ 'CallContext' ]
-    $P1 = new [ 'Integer' ]
-    $P1 = 100
-
-    unshift $P0, $P1
-
-    $I0 = elements $P0
-    is( $I0, 1, 'elements after unshift' )
-
-    $P2 = $P0[0]
-    is( $P2, 100, 'unshift_pmc/get_pmc_keyed_int pair' )
-    $P2 = shift $P0
-    is( $P2, 100, 'unshift_pmc/shift_pmc pair' )
-
-    $I0 = elements $P0
-    is( $I0, 0, 'elements after unshift/shift' )
-
-    unshift $P0, 200
-    $I0 = $P0[0]
-    is( $I0, 200, 'unshift_integer/get_integer_keyed_int pair' )
-    $I0 = shift $P0
-    is( $I0, 200, 'unshift_integer/shift_integer pair' )
-
-    unshift $P0, 3.03
-    $N0 = $P0[0]
-    is( $N0, 3.03, 'unshift_number/get_number_keyed_int pair' )
-    $N0 = shift $P0
-    is( $N0, 3.03, 'unshift_number/shift_number pair' )
-
-    unshift $P0, 'hello'
-    $S0 = $P0[0]
-    is( $S0, 'hello', 'unshift_string/get_string_keyed_int pair' )
-    $S0 = shift $P0
-    is( $S0, 'hello', 'unshift_string/shift_string pair' )
-
-    $I0 = elements $P0
-    is( $I0, 0, 'elements after unshift/shift' )
-.end
-
 .sub 'test_indexed_access'
     $P0    = new [ 'CallContext' ]
     $P0[0] = 100
@@ -170,26 +90,6 @@
     $P1    = $P0[3]
     is( $P1, 3.33, 'set_pmc_keyed_int/get_pmc_keyed_int pair' )
 
-    $I1 = shift $P0
-    is( $I1, 100, 'set_integer_keyed_int/shift_integer pair' )
-
-    $N1 = $P0[0]
-    is( $N1, 1.11, 'shift_* should remove elements from array' )
-
-    $N1 = shift $P0
-    is( $N1, 1.11, 'set_number_keyed_int/shift_number pair' )
-
-    $S1 = $P0[0]
-    is( $S1, '2.22', 'shift_* should remove elements from array' )
-
-    $S1 = shift $P0
-    is( $S1, '2.22', 'set_string_keyed_int/shift_string pair' )
-
-    $P1 = $P0[0]
-    is( $P1, 3.33, 'shift_* should remove elements from array' )
-
-    $P1 = shift $P0
-    is( $P1, 3.33, 'set_pmc_keyed_int/shift_pmc pair' )
 .end
 
 .sub 'test_indexed_boxing'
@@ -296,6 +196,35 @@
     is($N2, 3.14159, 'clone - named number cloned')
 .end
 
+.sub 'test_shift_access'
+    $P0 = new ['CallContext']
+    $P1 = new [ 'String' ]
+    $P1 = 'derF'
+
+    unshift $P0, $P1
+
+    $S1 = shift $P0
+    is($S1, 'derF', 'shift should convert to proper type (PMC -> STRING)')
+
+    unshift $P0, $P1
+    $P2 = shift $P0
+
+    is($P2, 'derF', '... but not convert when unneccesary')
+    $I0 = issame $P1, $P2
+    ok($I0, '... returning the same item' )
+
+    # no unshift_string for now
+    $P0[0] = 'Fred'
+
+    $P2 = shift $P0
+    is($P2, 'Fred', 'shift should convert to proper type (STRING -> PMC)')
+
+    $P0[0] = 'Fred'
+    $S2 = shift $P0
+
+    is($S2, 'Fred', '... but not convert when unnecessary')
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/ops_pct/t/pmc/capture.t
==============================================================================
--- branches/ops_pct/t/pmc/capture.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/capture.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/class.t
==============================================================================
--- branches/ops_pct/t/pmc/class.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/class.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
@@ -17,7 +17,7 @@
 =cut
 
 
-.const int TESTS = 63
+.const int TESTS = 73
 
 
 .sub 'main' :main
@@ -46,6 +46,7 @@
      'does'()
      'more does'()
      'anon_inherit'()
+     'method_cache_tt1497'()
 .end
 
 
@@ -458,7 +459,7 @@
     is(result, 42, 'new() added method returns expected value')
 .end
 
-.sub add :method
+.sub add :method :nsentry('add')
     $P0 = getattribute self, "x"
     $P1 = getattribute self, "y"
     $P2 = new ['Integer']
@@ -602,6 +603,88 @@
     ok(1, 'inheritance of two different anonymous classes works')
 .end
 
+.sub 'method_cache_tt1497'
+    $P0 = new ["tt1497_Object"]
+
+    $P1 = find_method $P0, "foo"
+    $I0 = isnull $P1
+    is($I0, 0, "can find foo. Sanity")
+    $I0 = $P0.$P1()
+    is($I0, 1, "found the correct foo")
+
+    $P9 = box 2
+    setattribute $P0, "state", $P9
+
+    $P1 = find_method $P0, "foo"
+    $I0 = isnull $P1
+    is($I0, 0, "can find foo. Sanity")
+    $I0 = $P0.$P1()
+    is($I0, 1, "we've cached the old foo")
+
+    $P2 = get_class "tt1497_Object"
+    $P2.'clear_method_cache'()
+
+    $P1 = find_method $P0, "foo"
+    $I0 = isnull $P1
+    is($I0, 0, "can find foo. Sanity")
+    $I0 = $P0.$P1()
+    is($I0, 2, "cleared cache, can find the next foo")
+
+    $P3 = $P2.'get_method_cache'()
+    $P1 = $P3["foo"]
+    $I0 = isnull $P1
+    is($I0, 0, "can find foo in method cache")
+    $I0 = $P0.$P1()
+    is($I0, 2, "cleared cache, can find the next foo")
+
+    $P9 = box 1
+    setattribute $P0, "state", $P9
+
+    $P3 = $P2.'get_method_cache'()
+    $P1 = $P3["foo"]
+    $I0 = isnull $P1
+    is($I0, 0, "can find foo in method cache")
+    $I0 = $P0.$P1()
+    is($I0, 2, "cleared cache, can find the next foo")
+.end
+
+.namespace ["tt1497_Object"]
+
+.sub '__tt1497_init' :anon :load :init
+    $P0 = newclass "tt1497_Object"
+    addattribute $P0, "state"
+.end
+
+.sub 'foo1'
+    .return(1)
+.end
+
+.sub 'foo2'
+    .return(2)
+.end
+
+.sub 'find_method' :vtable
+    .param string name
+    $P0 = getattribute self, "state"
+    unless null $P0 goto have_state
+    $P0 = box 1
+    setattribute self, "state", $P0
+  have_state:
+    if $P0 == 1 goto getfoo1
+    if $P0 == 2 goto getfoo2
+    $P0 = null
+    goto return_meth
+  getfoo1:
+    .const 'Sub' foo1 = "foo1"
+    $P0 = foo1
+    goto return_meth
+  getfoo2:
+    .const 'Sub' foo2 = "foo2"
+    $P0 = foo2
+  return_meth:
+    .return($P0)
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/ops_pct/t/pmc/codestring.t
==============================================================================
--- branches/ops_pct/t/pmc/codestring.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/codestring.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/complex.t
==============================================================================
--- branches/ops_pct/t/pmc/complex.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/complex.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/config.t
==============================================================================
--- branches/ops_pct/t/pmc/config.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/config.t	Wed May  5 08:45:29 2010	(r46302)
@@ -49,7 +49,7 @@
     cfg = _config()
     $S1 = cfg['osname']
     if $S1 != 'MSWin32' goto sayit
-    downcase $S0
+    $S0 = downcase $S0
   sayit:
     print $S0
 .end

Modified: branches/ops_pct/t/pmc/context.t
==============================================================================
--- branches/ops_pct/t/pmc/context.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/context.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009, Parrot Foundation.
 # $Id$
 
@@ -48,7 +48,7 @@
     $P0 = newclass 'Foo'
 .end
 
-.sub 'test_inspect' :method :outer('load')
+.sub 'test_inspect' :method :nsentry('test_inspect') :outer('load')
     .include 'test_more.pir'
 
     .local pmc ctx

Modified: branches/ops_pct/t/pmc/continuation.t
==============================================================================
--- branches/ops_pct/t/pmc/continuation.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/continuation.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
@@ -18,10 +18,12 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(2)
+    plan(4)
 
     test_new()
     invoke_with_init()
+    returns_tt1511()
+    returns_tt1528()
 .end
 
 .sub test_new
@@ -41,6 +43,104 @@
 end:
 .end
 
+.sub 'choose'
+    .param int do_tailcall
+    .param pmc options :slurpy
+    .local pmc cc
+    .local pmc chosen
+    .local pmc paths
+
+    if options goto got_options
+    'fail'()
+  got_options:
+    chosen = shift options
+
+    cc = new 'Continuation'
+    set_addr cc, recurse
+    paths = get_global '!paths'
+    push paths, cc
+
+    $P0  = get_global '!results'
+    push $P0, chosen
+    .return (chosen)
+
+  recurse:
+    if do_tailcall goto tail
+    $P0 = 'choose'(do_tailcall, options :flat)
+    .return($P0)
+  tail:
+    .tailcall 'choose'(do_tailcall, options :flat)
+.end
+
+.sub 'fail'
+    .local pmc cc
+    .local pmc paths
+
+    paths = get_global '!paths'
+
+    if paths goto got_paths
+    cc = get_global '!topcc'
+    goto call_cc
+  got_paths:
+    cc = shift paths
+
+  call_cc:
+    cc()
+.end
+
+.sub 'blob'
+    .param int do_tailcall
+
+    .local pmc city
+    .local pmc store
+    .local pmc bx
+    .local pmc paths
+
+    paths = new 'ResizablePMCArray'
+    set_global '!paths', paths
+
+    city = 'choose'(do_tailcall, "la", "ny", "bos")
+    $P0  = get_global '!results'
+    push $P0, city
+    push $P0, ' '
+
+    'fail'()
+.end
+
+.sub 'returns_tt1511'
+    .local pmc cc
+
+    # Install top-level cc in global.
+    cc = new 'Continuation'
+    set_addr cc, final_failure
+    set_global '!topcc', cc
+
+    $P0 = new 'ResizableStringArray'
+    set_global '!results', $P0
+
+    'blob'(1)
+  final_failure:
+    $S0 = join '', $P0
+    is('lala nyny bosbos ', $S0, 'Results processed correctly')
+.end
+
+.sub 'returns_tt1528'
+    .local pmc cc
+
+    # Install top-level cc in global.
+    cc = new 'Continuation'
+    set_addr cc, final_failure
+    set_global '!topcc', cc
+
+    $P0 = new 'ResizableStringArray'
+    set_global '!results', $P0
+
+    'blob'(0)
+  final_failure:
+    $S0 = join '', $P0
+    is('lala nyny bosbos ', $S0, 'Results processed correctly - without .tailcall')
+.end
+
 # end of tests.
 
 # Local Variables:

Deleted: branches/ops_pct/t/pmc/cpointer.t
==============================================================================
--- branches/ops_pct/t/pmc/cpointer.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,37 +0,0 @@
-#! parrot
-# Copyright (C) 2006-2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/pmc/cpointer.t - test CPointer PMC
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/cpointer.t
-
-=head1 DESCRIPTION
-
-Tests the CPointer PMC.
-
-=cut
-
-.sub main :main
-    .include 'test_more.pir'
-
-    plan(1)
-
-    instantiate()
-.end
-
-
-.sub instantiate
-    $P0 = new ['CPointer']
-    ok(1, 'Instantiated CPointer')
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/pmc/default.t
==============================================================================
--- branches/ops_pct/t/pmc/default.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/default.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/env.t
==============================================================================
--- branches/ops_pct/t/pmc/env.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/env.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/eval.t
==============================================================================
--- branches/ops_pct/t/pmc/eval.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/eval.t	Wed May  5 08:45:29 2010	(r46302)
@@ -28,8 +28,8 @@
 pasm_output_is( <<'CODE', <<'OUTPUT', "eval_sc" );
     compreg P1, "PASM"	# get compiler
     set_args "0", "print \"in eval\\n\"\nset_returns \"()\"\nreturncc\n"
-    get_results "0", P0
     invokecc P1			# compile
+    get_results "0", P0
     invokecc P0			# eval code P0
     print "back again\n"
     end
@@ -329,6 +329,7 @@
   print io, \$S0
   close io
   load_bytecode "$temp_pbc"
+  \$P0 = loadlib 'os'
   os = new ['OS']
   os.'rm'("$temp_pbc")
   f2 = compi("foo_2", "hello from foo_2")

Modified: branches/ops_pct/t/pmc/eventhandler.t
==============================================================================
--- branches/ops_pct/t/pmc/eventhandler.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/eventhandler.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/exception-old.t
==============================================================================
--- branches/ops_pct/t/pmc/exception-old.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/exception-old.t	Wed May  5 08:45:29 2010	(r46302)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 27;
+use Parrot::Test tests => 22;
 
 =head1 NAME
 
@@ -325,41 +325,7 @@
 OUTPUT
 1;
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark nested" );
-    pushmark 10
-    pushmark 11
-    print "ok 1\n"
-    popmark 11
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_error_output_like( <<'CODE', <<'OUTPUT', "pushmark - pop wrong one" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 500
-    print "never\n"
-    end
-CODE
-/Mark 500 not found/
-OUTPUT
-
-# stringification is handled by a vtable method, which runs in a second
+# stringification is handled by a vtable, which runs in a second
 # runloop. when an error in the method tries to go to a Error_Handler defined
 # outside it, it winds up going to the inner runloop, giving strange results.
 pir_output_is( <<'CODE', <<'OUTPUT', 'pop_eh out of context (2)', todo => 'runloop shenanigans' );
@@ -392,62 +358,18 @@
 caught
 OUTPUT
 
-pir_error_output_like( <<'CODE', <<'OUTPUT', "pushaction - throw in main" );
-.sub main :main
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    $P0 = new ['Exception']
-    throw $P0
-    .return()
-.end
-
-.sub exit_handler
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-.end
-CODE
-/^main
-No exception handler/
-OUTPUT
-
-# exception handlers are still run in an inferior runloop, which messes up
-# nonlocal exit from within handlers.
-pir_output_like(
-    <<'CODE', <<'OUTPUT', "pushaction: error while handling error", todo => 'runloop shenanigans' );
-.sub main :main
-    push_eh h
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    $P1 = new ['Exception']
-    throw $P1
-    print "never 1\n"
-h:
-    ## this is never actually reached, because exit_handler throws an unhandled
-    ## exception before the handler is entered.
-    print "in outer handler\n"
-.end
-
-.sub exit_handler :outer(main)
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-    $P2 = new ['Exception']
-    throw $P2
-    print "never 2\n"
-.end
-CODE
-/^main
-at_exit, flag = 1
-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 );
 .sub main :main
     .local pmc a
@@ -472,6 +394,8 @@
 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/ops_pct/t/pmc/exception.t
==============================================================================
--- branches/ops_pct/t/pmc/exception.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/exception.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/exceptionhandler.t
==============================================================================
--- branches/ops_pct/t/pmc/exceptionhandler.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/exceptionhandler.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Deleted: branches/ops_pct/t/pmc/file.t
==============================================================================
--- branches/ops_pct/t/pmc/file.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,327 +0,0 @@
-#! perl
-# Copyright (C) 2001-2006, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-
-use Test::More;
-use Parrot::Test tests => 9;
-
-use Parrot::Config;
-
-use Cwd;
-use File::Temp;
-use File::Spec::Functions;
-
-my $tempdir = File::Temp::tempdir( CLEANUP => 1 );
-
-our ( $MSWin32, $cygwin );
-$MSWin32 = 1 if $^O =~ m!MSWin32!;
-$cygwin  = 1 if $^O =~ m!cygwin!;
-
-=head1 NAME
-
-t/pmc/file.t - Files functions
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/file.t
-
-=head1 DESCRIPTION
-
-Tests the C<File> PMC.
-
-=cut
-
-my $xpto = catdir( $tempdir, 'xpto' );
-mkdir $xpto unless -d $xpto;
-
-my $otpx = catfile( $xpto, 'otpx' );
-
-open my $fh, '>', $otpx or die $!;
-print $fh 'xpto';
-close $fh;
-
-# test is_dir
-pir_output_is( <<"CODE", <<"OUT", "Test is_dir" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$xpto'
-        \$I1 = \$P1."is_dir"(\$S1)
-
-        if \$I1 goto ok1
-        print "not "
-
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$otpx'
-        \$I1 = \$P1."is_dir"(\$S1)
-        \$I1 = !\$I1
-
-        if \$I1 goto ok2
-        print "not "
-
-ok2:
-        print "ok 2\\n"
-
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-
-# test is_dir
-pir_error_output_like( <<"CODE", <<"OUT", "Test is_dir error" );
-.sub main :main
-        \$P1 = new ['File']
-
-        #make a filename that's long enough to cause lstat to fail
-        \$I0 = 1000
-loop:
-        \$S0 = concat \$S0, "1234567890"
-        \$I0 = \$I0 - 1
-        if \$I0 goto loop
-
-        \$I1 = \$P1."is_dir"(\$S0)
-
-        end
-.end
-CODE
-/^[\\w \t\r\n]+current instr\.:/
-OUT
-
-# test is_file
-pir_output_is( <<"CODE", <<"OUT", "Test is_file" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$xpto'
-        \$I1 = \$P1."is_file"(\$S1)
-        \$I1 = !\$I1
-
-        if \$I1 goto ok1
-        print "not "
-
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$otpx'
-        \$I1 = \$P1."is_file"(\$S1)
-
-        if \$I1 goto ok2
-        print "not "
-
-ok2:
-        print "ok 2\\n"
-
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-
-# test is_file
-pir_error_output_like( <<"CODE", <<"OUT", "Test is_file error" );
-.sub main :main
-        \$P1 = new ['File']
-
-        #make a filename that's long enough to cause lstat to fail
-        \$I0 = 1000
-loop:
-        \$S0 = concat \$S0, "1234567890"
-        \$I0 = \$I0 - 1
-        if \$I0 goto loop
-
-        \$I1 = \$P1."is_file"(\$S0)
-
-        end
-.end
-CODE
-/^[\\w \t\r\n]+current instr\.:/
-OUT
-
-SKIP: {
-    skip "Links not available under Windows", 1 if $MSWin32;
-
-    my $lotpx = catfile( $xpto, 'lotpx' );
-    symlink $otpx, $lotpx;
-
-    # test is_link
-    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to files" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$lotpx'
-        \$I1 = \$P1."is_link"(\$S1)
-
-        if \$I1 goto ok1
-        print "not "
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$otpx'
-        \$I1 = \$P1."is_link"(\$S1)
-        \$I1 = !\$I1
-        if \$I1 goto ok2
-        print "not "
-ok2:
-        print "ok 2\\n"
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-
-}
-
-SKIP: {
-    skip "Links not available under Windows", 1 if $MSWin32;
-
-    my $xptol = catdir( $xpto, 'xptol' );
-    symlink $xpto, $xptol;
-
-    # test is_link
-    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to directories" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$xptol'
-        \$I1 = \$P1."is_link"(\$S1)
-
-        if \$I1 goto ok1
-        print "not "
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$xpto'
-        \$I1 = \$P1."is_link"(\$S1)
-        \$I1 = !\$I1
-        if \$I1 goto ok2
-        print "not "
-ok2:
-        print "ok 2\\n"
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-}
-
-my $otpxcopy = catdir( $xpto, 'otpxcopy' );
-
-# test copy
-pir_output_is( <<"CODE", <<"OUT", "Test copy for files" );
-.sub main :main
-       \$S1 = '$otpx'
-       \$S2 = '$otpxcopy'
-
-       \$P1 = new ['File']
-       \$P2 = new ['OS']
-
-       \$P1."copy"(\$S1,\$S2)
-       print "ok\\n"
-
-       \$P3 = \$P2."stat"(\$S1)
-       \$P4 = \$P2."stat"(\$S2)
-
-       \$I1 = \$P3[7]
-       \$I2 = \$P4[7]
-
-       if \$I1 == \$I2 goto ok
-       print "not "
-ok:
-       print "ok\\n"
-
-       end
-.end
-CODE
-ok
-ok
-OUT
-
-# test rename
-SKIP: {
-    skip 'file exists', 1 if $MSWin32;
-
-    pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
-.sub main :main
-       \$S1 = '$otpx'
-       \$S2 = '$otpxcopy'
-
-       \$P1 = new ['File']
-       \$P2 = new ['OS']
-
-       \$P3 = \$P2."stat"(\$S1)
-       \$I1 = \$P3[7]
-
-       \$P1."rename"(\$S1,\$S2)
-       print "ok\\n"
-
-       \$P4 = \$P2."stat"(\$S2)
-       \$I2 = \$P4[7]
-
-       if \$I1 == \$I2 goto ok
-       print "not "
-ok:
-       print "ok\\n"
-
-       end
-.end
-CODE
-ok
-ok
-OUT
-}
-
-my $bad_file = catfile( $xpto, 'not a file' );
-
-# test exists
-pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
-.sub main :main
-       \$P1 = new ['File']
-       \$I1 = \$P1.'exists'( '$otpxcopy' )
-
-       if \$I1 goto file_exists
-       print "not "
-
-  file_exists:
-       print "ok 1 - file exists\\n"
-
-       \$I1 = \$P1.'exists'( '$xpto' )
-
-       if \$I1 goto dir_exists
-       print "not "
-
-  dir_exists:
-       print "ok 2 - directory exists\\n"
-
-       \$I1 = \$P1.'exists'( '$bad_file' )
-
-       if \$I1 == 0 goto file_does_not_exist
-       print "not "
-
-  file_does_not_exist:
-       print "ok 3 - file does not exist\\n"
-
-       end
-.end
-CODE
-ok 1 - file exists
-ok 2 - directory exists
-ok 3 - file does not exist
-OUT
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/pmc/fixedbooleanarray.t
==============================================================================
--- branches/ops_pct/t/pmc/fixedbooleanarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/fixedbooleanarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/fixedfloatarray.t
==============================================================================
--- branches/ops_pct/t/pmc/fixedfloatarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/fixedfloatarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/fixedintegerarray.t
==============================================================================
--- branches/ops_pct/t/pmc/fixedintegerarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/fixedintegerarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/fixedpmcarray.t
==============================================================================
--- branches/ops_pct/t/pmc/fixedpmcarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/fixedpmcarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -19,7 +19,7 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(82)
+    plan(83)
     test_setting_array_size()
     test_assign_from_another()
     test_assign_self()
@@ -678,6 +678,11 @@
 
     $I0 = $P0
     is($I0, 10, "New style init creates the correct # of elements for a key constant")
+
+    $P1 = new 'Integer'
+    $P0[9] = $P1
+    $P2 = $P0[9]
+    is($P2, $P1, 'New style init creates the array')
 .end
 
 .sub test_invalid_init_tt1509

Modified: branches/ops_pct/t/pmc/fixedstringarray.t
==============================================================================
--- branches/ops_pct/t/pmc/fixedstringarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/fixedstringarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/float.t
==============================================================================
--- branches/ops_pct/t/pmc/float.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/float.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/freeze.t
==============================================================================
--- branches/ops_pct/t/pmc/freeze.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/freeze.t	Wed May  5 08:45:29 2010	(r46302)
@@ -52,9 +52,19 @@
     print " "
     print P10
     print "\n"
+
+    null S1
+    new P1, ['String']
+    set P1, S1
+    freeze S0, P1
+    thaw P10, S0
+    set S10, P10
+    isnull I0, S10
+    say I0
     end
 CODE
 String foo
+1
 OUTPUT
 
 pasm_output_is( <<'CODE', <<'OUTPUT', "freeze/thaw a Float" );

Modified: branches/ops_pct/t/pmc/handle.t
==============================================================================
--- branches/ops_pct/t/pmc/handle.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/handle.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -20,14 +20,36 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(1)
+    plan(2)
+    'test_create'()
+    'test_does_tt_1473'()
+.end
+
+.sub 'test_create'
     push_eh cant_instantiate
     $P0 = new 'Handle'
-    print "not "
+    ok(0, "Can instantiate an abstract type")
+    pop_eh
+    goto create_end
   cant_instantiate:
-    say "ok 1"
+    ok(1, "Cannot instantiate an abstract type")
+    pop_eh
+  create_end:
 .end
 
+.sub 'test_does_tt_1473'
+    push_eh cant_do_does
+    $P0 = get_class 'Handle'
+    $I0 = does $P0, 'Handle'
+    ok($I0, "Handle does Handle")
+    goto does_end
+  cant_do_does:
+    ok(0, "Does throws an exception")
+  does_end:
+    pop_eh
+.end
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/ops_pct/t/pmc/hash.t
==============================================================================
--- branches/ops_pct/t/pmc/hash.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/hash.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/hashiterator.t
==============================================================================
--- branches/ops_pct/t/pmc/hashiterator.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/hashiterator.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/imageio.t
==============================================================================
--- branches/ops_pct/t/pmc/imageio.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/imageio.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/imageiosize.t
==============================================================================
--- branches/ops_pct/t/pmc/imageiosize.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/imageiosize.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2010, Parrot Foundation.
 # $Id$
 

Copied: branches/ops_pct/t/pmc/imageiostrings.t (from r46301, trunk/t/pmc/imageiostrings.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/pmc/imageiostrings.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/pmc/imageiostrings.t)
@@ -0,0 +1,47 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/pmc/imageiostrings.t - test ImageIOStrings PMC
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/imageiostrings.t
+
+=head1 DESCRIPTION
+
+Tests the ImageIOStringsPMC.
+
+=cut
+
+.sub main :main
+    .include 'test_more.pir'
+
+    plan(3)
+
+    .local pmc iios
+    iios = new ['ImageIOStrings']
+    ok(1, 'instantiated ImageIOStrings')
+
+    .local pmc test_pmc
+    test_pmc = null
+    iios = new ['ImageIOStrings']
+    setref iios, test_pmc
+    $P0 = deref iios
+    $I0 = $P0
+    nok( $I0, 'no strings in null pmc' )
+
+    test_pmc = split ' ', 'spam sausage spam spam bacon spam tomato and spam'
+    iios = new ['ImageIOStrings']
+    setref iios, test_pmc
+    $P0 = deref iios
+    is_deeply( $P0, test_pmc, 'correctly manages RSA' )
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/pmc/integer.t
==============================================================================
--- branches/ops_pct/t/pmc/integer.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/integer.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/io.t
==============================================================================
--- branches/ops_pct/t/pmc/io.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/io.t	Wed May  5 08:45:29 2010	(r46302)
@@ -407,7 +407,7 @@
   LINE:
     \$S1 = readline \$P1
     unless \$S1 goto SUCCESS
-    chopn \$S1, 1
+    \$S1 = chopn \$S1, 1
 
   NEXT_NR:
     \$I1 = length \$S1
@@ -415,7 +415,7 @@
     \$S2 = ""
   SPLIT:
     \$S3 = substr \$S1, 0, 1
-    \$S1 = substr 0, 1, ""
+    \$S1 = replace \$S1, 0, 1, ""
     if \$S3 == " " goto GOT_NR
     \$S2 = concat \$S2, \$S3
     goto SPLIT
@@ -615,7 +615,7 @@
 
     # Extract part of the read in file
     .local string head_from_file
-    substr head_from_file, from_file, 0, 5, ''
+    head_from_file = substr from_file, 0, 5
     say head_from_file
 
     end
@@ -646,23 +646,20 @@
     .local string sub_3
     sub_3 = ''
     substr sub_1, line, 0, 3
-    substr sub_2, line, 0, 3, ''
-    substr sub_3, line, 0, 3, ''
+    substr sub_2, line, 3, 3
+    line = replace line, 0, 6, ''
     print "line: "
     print line
     print "sub_1: "
     say sub_1
     print "sub_2: "
     say sub_2
-    print "sub_3: "
-    say sub_3
   end
 .end
 CODE
 line: 6789ABCDEFGHIJKLMNOPQRSTUVWXYZ
 sub_1: 012
-sub_2: 012
-sub_3: 345
+sub_2: 345
 OUTPUT
 
 pir_error_output_like( <<'CODE', <<'OUT', 'read on null PMC throws exception');

Modified: branches/ops_pct/t/pmc/key.t
==============================================================================
--- branches/ops_pct/t/pmc/key.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/key.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 
@@ -129,7 +129,7 @@
 loop:
   unless iterator goto end
   elem = shift iterator
-  $S0 = substr elem, 0, 1, ''
+  $S0 = replace elem, 0, 1, ''
   goto loop
 end:
   .return('')

Modified: branches/ops_pct/t/pmc/lexinfo.t
==============================================================================
--- branches/ops_pct/t/pmc/lexinfo.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/lexinfo.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/lexpad.t
==============================================================================
--- branches/ops_pct/t/pmc/lexpad.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/lexpad.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/managedstruct.t
==============================================================================
--- branches/ops_pct/t/pmc/managedstruct.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/managedstruct.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/multidispatch.t
==============================================================================
--- branches/ops_pct/t/pmc/multidispatch.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/multidispatch.t	Wed May  5 08:45:29 2010	(r46302)
@@ -9,7 +9,7 @@
 use Test::More;
 use Parrot::Test::Util 'create_tempfile';
 
-use Parrot::Test tests => 46;
+use Parrot::Test tests => 47;
 
 =head1 NAME
 
@@ -1516,6 +1516,30 @@
 1
 OUTPUT
 
+pir_output_is( <<'CODE', <<'OUTPUT', 'int autoboxes to scalar - TT #1133' );
+    .sub 'foo' :multi(['scalar'])
+        .param pmc x
+        say "Scalar!"
+    .end
+
+    .sub 'foo' :multi()
+        .param pmc x
+        $I0 = isa x, 'scalar'
+        print "Scalar? "
+        say $I0
+    .end
+
+    .sub 'main' :main
+        'foo'(1)
+        $P0 = box 1
+        'foo'($P0)
+    .end
+CODE
+Scalar!
+Scalar!
+OUTPUT
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/ops_pct/t/pmc/namespace-old.t
==============================================================================
--- branches/ops_pct/t/pmc/namespace-old.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/namespace-old.t	Wed May  5 08:45:29 2010	(r46302)
@@ -284,7 +284,7 @@
 CODE
 /^a_foo
 b_foo
-Could not find non-existent sub b_foo/
+Could not find sub b_foo/
 OUTPUT
 
 
@@ -1248,7 +1248,7 @@
 CODE
 /
 ok 1
-Could not find non-existent sub nok/
+Could not find sub nok/
 OUT
 
 

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

Modified: branches/ops_pct/t/pmc/namespace.t
==============================================================================
--- branches/ops_pct/t/pmc/namespace.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/namespace.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
@@ -282,7 +282,6 @@
     $I0 = isnull $P0
     is($I0, 0, "Find Sub in an ISO-8859-1 NameSpace looked up by a Unicode name")
     $S0 = $P0()
-    say $S0
     is($S0, iso-8859-1:"Fran\x{E7}ois", "ISO-8859 NameSpace with Unicode name")
     goto end_test8
   eh8:

Modified: branches/ops_pct/t/pmc/nci.t
==============================================================================
--- branches/ops_pct/t/pmc/nci.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/nci.t	Wed May  5 08:45:29 2010	(r46302)
@@ -453,8 +453,8 @@
   dlfunc P0, P1, "nci_dd", "dd"
   print "dlfunced\n"
   set_args "0", 4.0
-  get_results "0", N5
   invokecc P0
+  get_results "0", N5
   ne N5, 8.0, nok_1
   print "ok 1\n"
   end
@@ -524,8 +524,8 @@
   set N5, 12.0
   set N6, 3.0
   set_args "0,0", N5, N6
-  get_results "0", N5
   invokecc P0
+  get_results "0", N5
   ne N5, 4.0, nok_1
   print "ok 1\n"
   end
@@ -547,8 +547,8 @@
   set I5, 2
   set I6, 3
   set_args "0,0", I5, I6
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   ne I5, 6, nok_1
   print "ok 1\n"
   end
@@ -570,8 +570,8 @@
   set I5, -2
   set I6, 3
   set_args "0,0", I5, I6
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   ne I5, -6, nok_1
   print "ok 1\n"
   end
@@ -593,8 +593,8 @@
   set I5, 6
   set I6, 7
   set_args "0,0", I5, I6
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   ne I5, 42, nok_1
   print "ok 1\n"
   end
@@ -615,8 +615,8 @@
   printerr "dlfunced\n"
   set S5, "ko\n"
   set_args "0", S5
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   ne I5, 2, nok_1
   printerr "ok 2\n"
   end
@@ -670,8 +670,8 @@
   print "dlfunced\n"
   set S5, "ko\n"
   set_args "0", S5
-  get_results "0", S5
   invokecc P0
+  get_results "0", S5
   print S5
   end
 nok_1: print "nok 1\n"
@@ -695,8 +695,8 @@
   dlfunc P0, P1, "nci_dd", "dd"
   set N5, 77.0
   set_args "0", 4.0
-  get_results "0", N5
   invokecc P0
+  get_results "0", N5
   ne N5, 8.0, nok_1
   dec I10
   gt I10, 0, loop
@@ -722,13 +722,13 @@
   clone P2, P0
   print "ok 1\n"
   set_args "0", 4.0
-  get_results "0", N5
   invokecc P0
+  get_results "0", N5
   ne N5, 8.0, nok_1
   print "ok 2\n"
   set_args "0", 4.0
-  get_results "0", N5
   invokecc P2
+  get_results "0", N5
   ne N5, 8.0, nok_1
   end
 nok_1: print "nok 1\n"
@@ -749,8 +749,8 @@
   set I6, 20
   set I7, 30
   set_args "0,0,0", I5,I6,I7
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   print I5
   print "\n"
   end
@@ -766,8 +766,8 @@
   set P5, -6
   set I5, -7
   set_args "0,0", P5,I5
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   print I5
   print "\n"
   end
@@ -785,8 +785,8 @@
   set P5, -7
 
   set_args "0,0", I5,P5
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
 
   print I5
   print "\n"
@@ -803,8 +803,8 @@
   dlfunc P0, P1, "nci_tb", "tb"
   set S5, "ko\n"
   set_args "0", S5
-  get_results "0", S5
   invokecc P0
+  get_results "0", S5
   print S5
   end
 CODE
@@ -816,8 +816,8 @@
   dlfunc P0, P1, "nci_tB", "tB"
   set S5, "ko\n"
   set_args "0", S5
-  get_results "0", S5
   invokecc P0
+  get_results "0", S5
   print S5
   end
 CODE
@@ -830,8 +830,8 @@
   # this test function returns a struct { int[2]; char }
   set I5, 0
   set_args "0", I5
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
   new P2, ['ResizablePMCArray']
 .include "datatypes.pasm"
   push P2, .DATATYPE_INT
@@ -862,8 +862,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { float[2]; double }
   set_args "0", 1
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
   new P2, ['ResizablePMCArray']
 .include "datatypes.pasm"
   push P2, .DATATYPE_FLOAT
@@ -894,8 +894,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { char; int }
   set_args "0", 2
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
   new P2, ['ResizablePMCArray']
 .include "datatypes.pasm"
   push P2, .DATATYPE_CHAR
@@ -928,8 +928,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { char*; int }
   set_args "0", 3
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
   new P2, ['ResizablePMCArray']
 .include "datatypes.pasm"
   push P2, .DATATYPE_CSTR
@@ -956,8 +956,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { char; x->{int, double} }
   set_args "0", 4
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
 .include "datatypes.pasm"
   # the contained structure
   new P3, ['ResizablePMCArray']
@@ -1010,8 +1010,8 @@
   loadlib P1, "libnci_test"
   dlfunc P0, P1, "nci_pi", "pi"
   set_args "0", 8
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
 .include "datatypes.pasm"
   # the contained structure pointer
   new  P6, 'OrderedHash'
@@ -1081,8 +1081,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { int (*f)(char *) }
   set_args "0", 5
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
   new P2, ['ResizablePMCArray']
 .include "datatypes.pasm"
   push P2, .DATATYPE_FUNC_PTR
@@ -1097,8 +1097,8 @@
   # now we get a callable NCI PMC
   set P0, P5[0]
   set_args "0", "hello call_back"
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   print I5
   print "\n"
   end
@@ -1112,8 +1112,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { int; {int; int} int }
   set_args "0", 6
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
 .include "datatypes.pasm"
   # the nested structure
   new P3, ['ResizablePMCArray']
@@ -1167,8 +1167,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { char; {char; int} char }
   set_args "0", 7
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
 .include "datatypes.pasm"
   # the nested structure
   new P3, ['ResizablePMCArray']
@@ -1222,8 +1222,8 @@
   dlfunc P0, P1, "nci_pi", "pi"
   # this test function returns a struct { char; {char; int} char }
   set_args "0", 7
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
 .include "datatypes.pasm"
   # the nested structure
   new P3, ['OrderedHash']
@@ -1346,8 +1346,8 @@
   set P5[3], "hello from Parrot\x0"
   set I5, 1
   set_args "0", P5
-  get_results "0", I5
   invokecc P0
+  get_results "0", I5
   print I5
   print "\n"
   end
@@ -2141,9 +2141,9 @@
 
   loadlib P1, "libnci_test"
   set_args "0,0", P2, P3
-  get_results "0", I5
   dlfunc P0, P1, "nci_i33", "i33"
   invokecc P0
+  get_results "0", I5
 
   print "Double: "
   print P2
@@ -2223,8 +2223,8 @@
   loadlib P1, "libnci_test"
   dlfunc P0, P1, "nci_piiii", "piiii"
   set_args "0,0,0,0", 100,200,400,800
-  get_results "0", P5
   invokecc P0
+  get_results "0", P5
 
   new  P6, 'OrderedHash'
   set  P6[ 'count' ], .DATATYPE_INT

Modified: branches/ops_pct/t/pmc/null.t
==============================================================================
--- branches/ops_pct/t/pmc/null.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/null.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/object.t
==============================================================================
--- branches/ops_pct/t/pmc/object.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/object.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/objects.t
==============================================================================
--- branches/ops_pct/t/pmc/objects.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/objects.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -1377,11 +1377,11 @@
 
     $P1 = new 'Foo41'
     $S1 = $P1
-    is( $S1, 'Hello world', 'get_string method' )
+    is( $S1, 'Hello world', 'get_string :vtable :method' )
 
     $P1 = new 'Bar41'
     $S1 = $P1
-    is( $S1, 'Hello world', 'vtable method get_string' )
+    is( $S1, 'Hello world', 'get_string :method :vtable' )
 .end
 
 .namespace [ 'Foo41' ]
@@ -1713,57 +1713,52 @@
     new $P5, ['String']        # set attribute values
     set $P5, "i"       # attribute slots have reference semantics
     set_args "0,0,0", $P5, "Foo56", "i"
-    get_results ""
     callmethodcc $P2, "set"
 
     new $P5, ['String']
     set $P5, "j"
     set_args "0,0,0", $P5, "Foo56", "j"
-    get_results ""
     callmethodcc $P2, "set"
 
     new $P5, ['String']
     set $P5, "k"
     set_args "0,0,0", $P5, "Bar56", "k"
-    get_results ""
     callmethodcc $P2, "set"
 
     new $P5, ['String']
     set $P5, "l"
     set_args "0,0,0", $P5, "Bar56", "l"
-    get_results ""
     callmethodcc $P2, "set"
 
     new $P5, ['String']
     set $P5, "m"
     set_args "0,0,0", $P5, "Bar56", "m"
-    get_results ""
     callmethodcc $P2, "set"
 
     # now retrieve attributes
     set_args "0,0", "Foo56", "i"
-    get_results "0", $P5
     callmethodcc $P2, "get"
+    get_results "0", $P5
     is( $P5, 'i', 'got attrib i from subclass through parent method' )
 
     set_args "0,0", "Foo56", "j"
-    get_results "0", $P5
     callmethodcc $P2, "get"
+    get_results "0", $P5
     is( $P5, "j", 'got attrib i from subclass through parent method' )
 
     set_args "0,0", "Bar56", "k"
-    get_results "0", $P5
     callmethodcc $P2, "get"
+    get_results "0", $P5
     is( $P5, "k", 'got attrib i from subclass through parent method' )
 
     set_args "0,0", "Bar56", "l"
-    get_results "0", $P5
     callmethodcc $P2, "get"
+    get_results "0", $P5
     is( $P5, "l", 'got attrib i from subclass through parent method' )
 
     set_args "0,0", "Bar56", "m"
-    get_results "0", $P5
     callmethodcc $P2, "get"
+    get_results "0", $P5
     is( $P5, "m", 'got attrib i from subclass through parent method' )
 .end
 

Modified: branches/ops_pct/t/pmc/opcode.t
==============================================================================
--- branches/ops_pct/t/pmc/opcode.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/opcode.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/oplib.t
==============================================================================
--- branches/ops_pct/t/pmc/oplib.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/oplib.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Deleted: branches/ops_pct/t/pmc/os.t
==============================================================================
--- branches/ops_pct/t/pmc/os.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,447 +0,0 @@
-#! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 16;
-use Parrot::Config;
-use Cwd;
-use File::Spec;
-
-my $MSWin32 = $^O =~ m!MSWin32!;
-my $cygwin  = $^O =~ m!cygwin!;
-my $solaris = $^O =~ m!solaris!;
-my $MSVC = $PConfig{cc} =~ m/\bcl(?:\.exe)?/i;
-
-=head1 NAME
-
-t/pmc/os.t - Files and Dirs
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/os.t
-
-=head1 DESCRIPTION
-
-Tests the C<OS> PMC.
-
-=cut
-
-END {
-    # Clean up environment on exit
-    rmdir "xpto"  if -d "xpto";
-    unlink "xpto" if -f "xpto";
-}
-
-# test 'cwd'
-my $cwd = File::Spec->canonpath(getcwd);
-if (File::Spec->case_tolerant(substr($cwd,0,2))) {
-    $cwd = lc($cwd);
-    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        print $S2
-        print "\n"
-        end
-.end
-CODE
-$cwd
-OUT
-}
-else {
-    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = $P1."cwd"()
-        print $S1
-        print "\n"
-        end
-.end
-CODE
-$cwd
-OUT
-}
-
-#  TEST chdir
-chdir "src";
-my $upcwd = File::Spec->canonpath(getcwd);
-chdir '..';
-
-if (File::Spec->case_tolerant(substr($cwd,0,2))) {
-    $cwd = lc($cwd);
-    $upcwd = lc($upcwd);
-
-    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "src"
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        end
-.end
-CODE
-$upcwd
-$cwd
-OUT
-}
-else {
-    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "src"
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        end
-.end
-CODE
-$upcwd
-$cwd
-OUT
-}
-
-# Test mkdir
-
-my $xpto = $upcwd;
-$xpto =~ s/src([\/\\]?)$/xpto$1/;
-
-if (File::Spec->case_tolerant(substr($cwd,0,2))) {
-
-    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $I1 = 0o555
-        $P1."mkdir"($S1,$I1)
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        end
-.end
-CODE
-$xpto
-$cwd
-OUT
-}
-else {
-    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $I1 = 0o555
-        $P1."mkdir"($S1,$I1)
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        end
-.end
-CODE
-$xpto
-$cwd
-OUT
-}
-
-# Test remove on a directory
-mkdir "xpto" unless -d "xpto";
-
-pir_output_is( <<'CODE', <<'OUT', 'Test rm call in a directory' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $P1."rm"($S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-ok( !-d $xpto, "Test that rm removed the directory" );
-rmdir $xpto if -d $xpto;    # this way next test doesn't fail if this one does
-
-# test stat
-
-open my $X, '>', "xpto";
-print $X "xpto";
-close $X;
-
-my $stat;
-
-my $count = $MSWin32 ? 11 : 13;
-my @s = stat('xpto');
-if ( $cygwin ) {
-    # Mask inode number (fudge it)
-    $s[1] &= 0xffffffff;
-}
-
-if ( $MSWin32 ) {
-    $stat = sprintf("0x%08x\n" x 11, @s);
-    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = "xpto"
-        $P2 = $P1."stat"($S1)
-
-        $S1 = repeat "0x%08x\n", 11
-        $S2 = sprintf $S1, $P2
-        print $S2
-done:
-        end
-.end
-CODE
-}
-else {
-  SKIP: {
-    skip 'broken test TT #457', 1 if $solaris;
-
-    $stat = sprintf("0x%08x\n" x 13, @s);
-    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = "xpto"
-        $P2 = $P1."stat"($S1)
-
-        $S1 = repeat "0x%08x\n", 13
-        $S2 = sprintf $S1, $P2
-        print $S2
-done:
-        end
-.end
-CODE
-}
-}
-
-# test readdir
-SKIP: {
-    skip 'not implemented on windows yet', 1 if ( $MSWin32 && $MSVC );
-
-    opendir my $IN, 'docs';
-    my @entries = readdir $IN;
-    closedir $IN;
-    my $entries = join( ' ', @entries ) . "\n";
-    pir_output_is( <<'CODE', $entries, 'Test OS.readdir' );
-.sub main :main
-    $P1 = new ['OS']
-    $P2 = $P1.'readdir'('docs')
-
-    $S0 = join ' ', $P2
-    print $S0
-    print "\n"
-.end
-CODE
-}
-
-# test rename
-SKIP: {
-    open my $FILE, ">", "____some_test_file";
-    close $FILE;
-    pir_output_is( <<'CODE', <<"OUT", 'Test OS.rename' );
-.sub main :main
-    $P1 = new ['OS']
-    $P1.'rename'('____some_test_file', '___some_other_file')
-    $I0 = stat '___some_other_file', 0
-    print $I0
-    print "\n"
-    $P1.'rm'('___some_other_file')
-.end
-CODE
-1
-OUT
-}
-
-# test lstat
-
-my $lstat;
-
-SKIP: {
-    skip 'lstat not on Win32', 1 if $MSWin32;
-    skip 'broken test TT #457', 1 if $solaris;
-
-    my @s = lstat('xpto');
-    if ($cygwin) {
-        # Mask inode number (fudge it)
-        $s[1] &= 0xffffffff;
-    }
-    $lstat = sprintf( "0x%08x\n" x 13, @s );
-    pir_output_is( <<'CODE', $lstat, "Test OS.lstat" );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = "xpto"
-        $P2 = $P1."lstat"($S1)
-
-        $S1 = repeat "0x%08x\n", 13
-        $S2 = sprintf $S1, $P2
-        print $S2
-
-        end
-.end
-CODE
-}
-
-# Test remove on a file
-pir_output_is( <<'CODE', <<"OUT", "Test rm call in a file" );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $P1."rm"($S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-ok( !-f $xpto, "Test that rm removed file" );
-rmdir $xpto if -f $xpto;    # this way next test doesn't fail if this one does
-
-# Test symlink
-SKIP: {
-    skip "Symlinks not available under Windows", 2 if $MSWin32;
-
-    pir_output_is( <<'CODE', <<"OUT", "Test symlink" );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $S2 = "MANIFEST"
-        $P1."symlink"($S2, $S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-    ok( -l "xpto", "symlink was really created" );
-    unlink "xpto" if -f "xpto";
-}
-
-# Test link to file. May require root permissions
-SKIP: {
-    skip "Hardlinks to files not possible on Windows", 2 if $MSWin32 or $cygwin;
-
-    pir_output_is( <<'CODE', <<"OUT", "Test link" );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $S2 = "myconfig"
-        $P1."link"($S2, $S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-    my $nl = [ stat("myconfig") ]->[3];
-    ok( $nl > 1, "hard link to file was really created" );
-    unlink "xpto" if -f "xpto";
-}
-
-SKIP: {
-    skip "Hardlinks to files not possible on Windows", 1 if $MSWin32 or $cygwin;
-
-    my $prevnl = [ stat("tools") ]->[3];
-    pir_output_like( <<"CODE", <<"OUT", "Test dirlink" );
-.sub main :main
-    .local pmc os
-    .local string xpto, tools
-    os    = new ['OS']
-    xpto  = "xpto"
-    tools = "tools"
-
-    push_eh no_root_perms
-    os."link"(tools, xpto)
-    pop_eh
-
-    .local pmc statvals
-    statvals = os.'stat'(tools)
-
-    # nlink
-    .local int nlink
-    nlink = statvals[3]
-
-    gt nlink, $prevnl, is_okay
-    end
-
-  no_root_perms:
-    .local pmc e
-    .local string message
-    .get_results( e )
-    pop_eh
-    message = e['message']
-    say message
-    end
-
-  is_okay:
-    say "ok"
-    end
-.end
-CODE
-/link.* failed for OS PMC:/
-OUT
-}
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/t/pmc/packfile.t
==============================================================================
--- branches/ops_pct/t/pmc/packfile.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfile.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
@@ -22,7 +22,7 @@
 .sub main :main
 .include 'test_more.pir'
 
-    plan(34)
+    plan(36)
     'test_new'()
     'test_get_string'()
     'test_set_string'()
@@ -32,8 +32,10 @@
     'test_load'()
     'test_pack_fresh_packfile'()
     'test_pack'()
-    # This test will crash on many platforms. See TT #545.
-    #'test_synonyms'()
+
+    skip(2, "test_synonyms crash on many platforms. See TT #545")
+    # 'test_synonyms'()
+
 .end
 
 
@@ -43,11 +45,10 @@
     pf = new ['Packfile']
     $I0 = defined pf
     ok($I0, 'new')
-    _check_header(pf)
+    .tailcall _check_header(pf)
 .end
 
 
-# Packfile.get_integer_keyed_str
 .sub 'test_get_string'
     .local pmc pf
     pf = new ['Packfile']
@@ -66,7 +67,6 @@
     .return ()
 .end
 
-# Packfile.get_integer_keyed_str
 .sub 'test_set_string'
     .local pmc pf
     pf = new ['Packfile']
@@ -95,12 +95,11 @@
 .end
 
 
-
-
-# Packfile.set_string_native, Packfile.get_integer_keyed_str
 .sub 'test_get_integer'
     .local pmc pf
+    push_eh load_error
     pf  = _pbc()
+    pop_eh
     $I0 = pf["version_major"]
     ok(1, "get_integer_keyed_str(version_major)")
 
@@ -120,14 +119,23 @@
     pop_eh
     ok(1, "get_integer_keyed_str handle unknown key properly")
     .return ()
-
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "get_integer_keyed_str(version_major)")
+    report_load_error($P0, "get_integer_keyed_str(version_minor)")
+    report_load_error($P0, "get_integer_keyed_str(version_patch)")
+    report_load_error($P0, "get_integer_keyed_str unknown key")
+    .return()
 .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
@@ -137,6 +145,12 @@
     $I3 = cmp $I0, $I2
     $I3 = cmp $I3, 0
     ok($I3, 'set_integer_keyed_str version bumped')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'set_integer_keyed_str version bumped')
+    .return()
 .end
 
 # Packfile.get_directory
@@ -151,12 +165,20 @@
 # PackfileSegment.pack (via subclass PackfileDirectory)
 .sub 'test_get_directory'
     .local pmc pf, pfdir
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     $S0   = pfdir.'pack'()
     $I0   = length $S0
     $I1 = cmp $I0, 0
     ok($I1, 'get_directory')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'get_directory')
+    .return()
 .end
 
 
@@ -164,9 +186,18 @@
 # Check that packfile was loaded properly and set various attributes
 .sub 'test_load'
     .local pmc pf
+    push_eh load_error
     pf = _pbc()
+    pop_eh
 
-    _check_header(pf)
+    .tailcall _check_header(pf)
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "Wordsize set")
+    report_load_error($P0, "version_major set")
+    report_load_error($P0, "bytecode_major set")
+    .return()
 .end
 
 # Helper sub to check fields in Packfile header
@@ -265,6 +296,7 @@
 # Check that unpack-pack produce correct result.
 .sub 'test_pack'
     .local string filename, first
+    push_eh load_error
     $S0 = '_filename'()
     $P0 = open $S0, 'r'
 
@@ -273,6 +305,7 @@
     .local pmc packfile
     packfile = new 'Packfile'
     packfile = first
+    pop_eh
 
     # Packed file should be exactly the same as loaded
     .local string second
@@ -282,12 +315,20 @@
     $I0 = cmp first, second
     $I0 = not $I0
     todo($I0, 'pack produced same result twice')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'pack produced same result twice')
+    .return()
 .end
 
 # Test pack/set_string unpack/get_string equivalency
 .sub 'test_synonyms'
     .local pmc pf
+    push_eh load_error
     pf = '_pbc'()
+    pop_eh
 
     $S0 = pf
     $S1 = pf.'pack'()
@@ -304,6 +345,13 @@
     $S1 = $P1
     $I0 = cmp $S0, $S1
     is($I0, 0, "unpack and set_string are synonyms")
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "pack and get_string are synonyms")
+    report_load_error($P0, "unpack and set_string are synonyms")
+    .return()
 .end
 
 

Modified: branches/ops_pct/t/pmc/packfileannotation.t
==============================================================================
--- branches/ops_pct/t/pmc/packfileannotation.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfileannotation.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/packfileannotations.t
==============================================================================
--- branches/ops_pct/t/pmc/packfileannotations.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfileannotations.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 
@@ -40,11 +40,20 @@
 .sub 'test_unpack'
     .local pmc pf
 
+    push_eh load_error
     $P0 = open 't/native_pbc/annotations.pbc'
+    $P0.'encoding'('binary')
     $S0 = $P0.'readall'()
     pf = new 'Packfile'
     pf = $S0
+    pop_eh
     .tailcall '!test_unpack'(pf)
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "PackfileAnnotations unpack failed to load test file")
+    skip(7, "PackfileAnnotations unpack tests failed")
+    .return()
 .end
 
 # Programatically create PBC same as t/native_pbc/annotations.pbc and check unpack of it.
@@ -146,7 +155,7 @@
   fail:
     nok(1, "PackfileAnnotations wasn't found in Directory")
     # BAIL_OUT
-    skip(9, "PackfileAnnotations tests failed")
+    skip(7, "PackfileAnnotations tests failed")
 .end
 
 # Local Variables:

Modified: branches/ops_pct/t/pmc/packfileconstanttable.t
==============================================================================
--- branches/ops_pct/t/pmc/packfileconstanttable.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfileconstanttable.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -36,14 +36,21 @@
 .end
 
 
-
 # sanity check we have a PackfileConstantTable
 .sub 'test_sanity'
     .local pmc pbc, pftable
     .local string name
+    push_eh load_error
     pbc     = _pbc()
+    pop_eh
     pftable = _get_consttable(pbc)
     isa_ok(pftable, "PackfileConstantTable")
+    .return ()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "PackfileConstantTable")
+    .return()
 .end
 
 
@@ -51,10 +58,18 @@
 .sub 'test_elements'
     .local pmc pf, pftable
     .local int size
+    push_eh load_error
     pf      = _pbc()
+    pop_eh
     pftable = _get_consttable(pf)
     size    = elements pftable
     ok(size, "PackfileConstantTable.elements returns non-zero")
+    .return ()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "PackfileConstantTable.elements returns non-zero")
+    .return()
 .end
 
 
@@ -62,7 +77,9 @@
 .sub 'test_get'
     .local pmc pf, pftable
     .local int size, this, type
+    push_eh load_error
     pf      = _pbc()
+    pop_eh
     pftable = _get_consttable(pf)
     size    = elements pftable
     this    = 0
@@ -103,6 +120,11 @@
   bad:
     ok(0, 'Unknown constant type')
     .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'PackfileConstantTable.get_*_int works')
+    .return()
 .end
 
 # Test setting constants into PackfileConstantTable

Modified: branches/ops_pct/t/pmc/packfiledirectory.t
==============================================================================
--- branches/ops_pct/t/pmc/packfiledirectory.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfiledirectory.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -30,6 +30,7 @@
     'test_set_pmc_keyed_str'()
 .end
 
+
 # Test creation of fresh directory
 .sub 'test_create'
     .local pmc dir, seg
@@ -62,10 +63,18 @@
 # PackfileDirectory.elements
 .sub 'test_elements'
     .local pmc pf, pfdir
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     $I0   = elements pfdir
     is($I0, 4, 'PackfileDirectory.elements')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'PackfileDirectory.elements')
+    .return()
 .end
 
 
@@ -80,7 +89,9 @@
     expected["FIXUP"]    = 1
     expected["CONSTANT"] = 1
 
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     $I0   = elements pfdir
     it    = iter pfdir
@@ -105,12 +116,20 @@
     goto loop
   done:
     .return ()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "can't run get_iter tests")
+    skip(11, "can't run get_iter tests")
+    .return()
 .end
 
 ## PackfileDirectory.set_pmc_keyed_str
 .sub 'test_set_pmc_keyed_str'
     .local pmc pf, pfdir, seg
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     seg   = new [ 'PackfileRawSegment' ]
 
@@ -140,6 +159,13 @@
 
   done:
     .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "Segment with old name was added")
+    report_load_error($P0, "New segment added")
+    report_load_error($P0, "segment deleted")
+    .return()
 .end
 
 # Local Variables:

Modified: branches/ops_pct/t/pmc/packfilefixupentry.t
==============================================================================
--- branches/ops_pct/t/pmc/packfilefixupentry.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfilefixupentry.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -35,9 +35,17 @@
 .sub 'test_sanity'
     .local pmc pf, pftable
     .local string name
+    push_eh load_error
     pf      = _pbc()
+    pop_eh
     pftable = _get_fixup_table(pf)
     isa_ok(pftable, 'PackfileFixupTable')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'PackfileFixupTable')
+    .return()
 .end
 
 
@@ -45,10 +53,18 @@
 .sub 'test_sanity_entry'
     .local pmc pf, pftable, pfentry
     .local string name
+    push_eh load_error
     pf      = _pbc()
+    pop_eh
     pftable = _get_fixup_table(pf)
     pfentry = pftable[0]
     isa_ok(pfentry, 'PackfileFixupEntry')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'PackfileFixupEntry')
+    .return()
 .end
 
 
@@ -57,7 +73,9 @@
     .local pmc pf, pftable, pfentry
     .local int size, this, data
     .local string name, label
+    push_eh load_error
     pf      = _pbc()
+    pop_eh
     pftable = _get_fixup_table(pf)
     size    = elements pftable
     this    = 0
@@ -79,6 +97,12 @@
     gt size, 0, done
   done:
     ok(1, "Got entries")
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "Got entries")
+    .return()
 .end
 
 # Local Variables:

Modified: branches/ops_pct/t/pmc/packfilefixuptable.t
==============================================================================
--- branches/ops_pct/t/pmc/packfilefixuptable.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfilefixuptable.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -28,12 +28,27 @@
     test_unpack()
 .end
 
+
+# Report no ok for loading packfile failures
+.sub report_load_error
+    .param pmc except
+    .param string desc
+    .local string msg, aux
+    msg = concat desc, ' - error loading packfile: '
+    aux = except['message']
+    msg = concat msg, aux
+    ok(0, msg)
+.end
+
+
 # Check unpackging FixupTable
 .sub 'test_unpack'
     .local pmc pf, pfdir, pftable, pfentry
     .local int size, this, data
     .local string name
+    push_eh load_error
     pf      = _pbc()
+    pop_eh
     pftable = _get_fixup_table(pf)
     isa_ok(pftable, 'PackfileFixupTable')
 
@@ -59,6 +74,13 @@
     gt size, 0, done
   done:
     ok(1, "All elements of Table are Entries")
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "All elements of Table are Entries")
+    skip(2, "All elements of Table are Entries")
+    .return()
 .end
 
 # Local Variables:

Modified: branches/ops_pct/t/pmc/packfilerawsegment.t
==============================================================================
--- branches/ops_pct/t/pmc/packfilerawsegment.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfilerawsegment.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
@@ -35,17 +35,27 @@
 # PackfileRawSegment.elements
 .sub 'test_elements'
     .local pmc pf, pfdir, pfseg
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     pfseg = '_find_segment_by_prefix'(pf, 'BYTECODE')
     $I0   = elements pfseg
     ok($I0, 'PackfileRawSegment contains some data')
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, 'PackfileRawSegment contains some data')
+    .return()
 .end
 
 # PackfileRawSegment.get_integer_keyed_int
 .sub 'test_get_integer'
     .local pmc pf, pfdir, pfseg
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     pfseg = '_find_segment_by_prefix'(pf, 'BYTECODE')
 
@@ -61,6 +71,12 @@
     $I1   = pfseg[4]
     $I0   = $I0 + $I1
     ok($I0, "PackfileRawSegment.get_integer_keyed_int returns some data")
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "PackfileRawSegment.get_integer_keyed_int returns some data")
+    .return()
 .end
 
 # PackfileRawSegment.push_integer
@@ -79,7 +95,9 @@
 # PackfileRawSegment.type
 .sub 'test_type'
     .local pmc pf, pfdir, pfseg, hash, it
+    push_eh load_error
     pf    = _pbc()
+    pop_eh
     pfdir = pf.'get_directory'()
     hash  = new ['Hash']
     # annotations.pbc contains all available segments. -1 for directory and unknown.
@@ -105,7 +123,13 @@
     $P0.'type'(.PF_DEBUG_SEG)
     $I0 = $P0.'type'()
     is($I0, .PF_DEBUG_SEG, "Type successfully changed")
-
+    .return()
+load_error:
+    .get_results($P0)
+    pop_eh
+    report_load_error($P0, "can't run test_type tests")
+    skip(2, "can't run test_type tests")
+    .return()
 .end
 
 

Modified: branches/ops_pct/t/pmc/packfilesegment.t
==============================================================================
--- branches/ops_pct/t/pmc/packfilesegment.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/packfilesegment.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/parrotclass.t
==============================================================================
--- branches/ops_pct/t/pmc/parrotclass.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/parrotclass.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/parrotinterpreter.t
==============================================================================
--- branches/ops_pct/t/pmc/parrotinterpreter.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/parrotinterpreter.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#!parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/parrotlibrary.t
==============================================================================
--- branches/ops_pct/t/pmc/parrotlibrary.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/parrotlibrary.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/parrotobject.t
==============================================================================
--- branches/ops_pct/t/pmc/parrotobject.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/parrotobject.t	Wed May  5 08:45:29 2010	(r46302)
@@ -84,7 +84,7 @@
     .return("monkey")
 .end
 CODE
-/'not_in_the_vtable' is not a v-table method, but was used with :vtable/
+/'not_in_the_vtable' is not a vtable, but was used with :vtable/
 OUT
 
 # '

Deleted: branches/ops_pct/t/pmc/parrotrunningthread.t
==============================================================================
--- branches/ops_pct/t/pmc/parrotrunningthread.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,56 +0,0 @@
-#! parrot
-# Copyright (C) 2007-2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/pmc/parrotrunningthread.t - test the ParrotRunningThread PMC
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/parrotrunningthread.t
-
-=head1 DESCRIPTION
-
-Tests the ParrotRunningThread PMC.
-
-=cut
-
-.sub 'main' :main
-    .include 'test_more.pir'
-
-    plan(2)
-
-    new $P0, ['ParrotRunningThread']
-    ok(1, 'Instantiated .ParrotRunningThread')
-
-    test_set_integer_native($P0)
-.end
-
-.sub 'test_set_integer_native'
-    .param pmc thread
-
-    .local string desc
-    desc   = 'setting invalid thread id should throw exception'
-
-    push_eh invalid_thread_id_handler
-    thread = -1
-    pop_eh
-
-    ok(0, desc)
-
-  invalid_thread_id_handler:
-    .local pmc e, c
-    .get_results( e )
-
-    .local string message
-    message   = e
-
-    is( message, 'Attempt to set invalid thread id -1', desc )
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/ops_pct/t/pmc/parrotthread.t
==============================================================================
--- branches/ops_pct/t/pmc/parrotthread.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/parrotthread.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 
@@ -16,13 +16,14 @@
 
 =cut
 
-.sub main :main
+.sub 'main' :main
     .include 'test_more.pir'
 
     plan(1)
 
     new $P0, ['ParrotThread']
     ok(1, 'Instantiated a ParrotThread PMC')
+
 .end
 
 # Local Variables:

Modified: branches/ops_pct/t/pmc/pmcproxy.t
==============================================================================
--- branches/ops_pct/t/pmc/pmcproxy.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/pmcproxy.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2008, Parrot Foundation.
 # $Id$
 
@@ -144,10 +144,10 @@
     addparent $P0, $P1
     ok(1, "added Class's PMCProxy as a parent of the PDD15 class")
 
-    #We will override the add_role vtable method.
+    #We will override the add_role vtable
     $P2 = get_global 'no_add_role'
     $P0.'add_vtable_override'('add_role', $P2)
-    ok(1, 'overrode a vtable method')
+    ok(1, 'overrode a vtable')
 
     $P2 = $P0.'new'()
     ok(1, 'instantiated the class')
@@ -178,7 +178,7 @@
     addparent $P0, $P1
     ok(1, "added Class's PMCProxy as a parent of the PDD15 class")
 
-    #We will override the inspect_str vtable method.
+    #We will override the inspect_str vtable
     $P2 = get_global 'always42'
     $P0.'add_vtable_override'('inspect_str', $P2)
     ok(1, 'overrode inspect_str method')
@@ -188,9 +188,9 @@
 
     $P3 = $P2.'inspect'('methods')
     is($P3, 42, "the magic overriding sub was called")
-    ok(1, 'Called non-overridden method, which called overridden vtable method')
+    ok(1, 'Called non-overridden method, which called overridden vtable')
 .end
-.sub always42 :method
+.sub always42 :method :nsentry('always42')
     .param string what
     $P0 = new ['Integer']
     $P0 = 42

Modified: branches/ops_pct/t/pmc/pointer.t
==============================================================================
--- branches/ops_pct/t/pmc/pointer.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/pointer.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/prop.t
==============================================================================
--- branches/ops_pct/t/pmc/prop.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/prop.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/resizablebooleanarray.t
==============================================================================
--- branches/ops_pct/t/pmc/resizablebooleanarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/resizablebooleanarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2007, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/resizablefloatarray.t
==============================================================================
--- branches/ops_pct/t/pmc/resizablefloatarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/resizablefloatarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/resizableintegerarray.t
==============================================================================
--- branches/ops_pct/t/pmc/resizableintegerarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/resizableintegerarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/resizablepmcarray.t
==============================================================================
--- branches/ops_pct/t/pmc/resizablepmcarray.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/resizablepmcarray.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 

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

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

Modified: branches/ops_pct/t/pmc/role.t
==============================================================================
--- branches/ops_pct/t/pmc/role.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/role.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/scalar.t
==============================================================================
--- branches/ops_pct/t/pmc/scalar.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/scalar.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/scheduler.t
==============================================================================
--- branches/ops_pct/t/pmc/scheduler.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/scheduler.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/schedulermessage.t
==============================================================================
--- branches/ops_pct/t/pmc/schedulermessage.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/schedulermessage.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/sockaddr.t
==============================================================================
--- branches/ops_pct/t/pmc/sockaddr.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/sockaddr.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/socket.t
==============================================================================
--- branches/ops_pct/t/pmc/socket.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/socket.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/string.t
==============================================================================
--- branches/ops_pct/t/pmc/string.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/string.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
@@ -20,15 +20,13 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(171)
+    plan(166)
 
     set_or_get_strings()
     setting_integers()
     setting_numbers()
     ensure_that_concat_ppp_copies_strings()
     ensure_that_concat_pps_copies_strings()
-    setting_string_references()
-    assigning_string_copies()
     test_repeat()
     test_repeat_without_creating_dest_pmc()
     test_repeat_int()
@@ -51,7 +49,6 @@
     bnots_null_string()
     test_eq_str()
     test_ne_str()
-    set_const_and_chop()
     check_whether_interface_is_done()
     test_clone()
     test_set_px_i()
@@ -59,7 +56,6 @@
     test_string_replace()
     set_i0__p0__string_to_int()
     test_string_trans()
-    reverse_p0__reverse_string()
     is_integer__check_integer()
     instantiate_str()
     get_string_returns_cow_string()
@@ -102,6 +98,12 @@
         set $P0, "0xFFFFFF"
         set $S0, $P0
         is( $S0, "0xFFFFFF", 'String obj set with literal hex string' )
+
+        null $S0
+        set $P0, $S0
+        set $S1, $P0
+        isnull $I0, $S1
+        ok( $I0, 'String obj is null-in null-out' )
 .end
 
 .sub setting_integers
@@ -197,26 +199,6 @@
     is( $P0, 'fnarghGrunties', 'concat success' )
 .end
 
-.sub setting_string_references
-    new $P0, ['String']
-    set $S0, "C2H5OH + 10H20"
-    set $P0, $S0
-    chopn $S0, 8
-
-    is( $S0, 'C2H5OH', 'removed last 8 from string' )
-    is( $P0, 'C2H5OH', '...and the PMC still reference $S0' )
-.end
-
-.sub assigning_string_copies
-    new $P0, ['String']
-    set $S0, "C2H5OH + 10H20"
-    assign $P0, $S0
-    chopn $S0, 8
-
-    is( $S0, 'C2H5OH', 'removed the last 8 from string' )
-    is( $P0, 'C2H5OH + 10H20', '...and the assigned PMC is a copy' )
-.end
-
 .sub test_repeat
     new $P0, ['String']
     set $P0, "x"
@@ -763,15 +745,6 @@
 OK4:    ok( $I0, 'ne_str "0(Integer), "ABC" -> true' )
 .end
 
-.sub set_const_and_chop
-   new $P0, ['String']
-   set $P0, "str"
-   set $S0, $P0
-   chopn $S0, 2
-   is( $P0, 'str', 'original not touched' )
-   is( $S0, 's', 'string chopn' )
-.end
-
 .sub check_whether_interface_is_done
     .local pmc pmc1
     pmc1 = new ['String']
@@ -866,13 +839,6 @@
     .return(tr_array)
 .end
 
-.sub reverse_p0__reverse_string
-    $S0 = 'torrap'
-    $P0 = new ['String']
-    $P0.'reverse'($S0)
-    is( $S0, "parrot", 'reverse string' )
-.end
-
 .sub is_integer__check_integer
   $P0 = new ['String']
 
@@ -905,7 +871,7 @@
   $P0 = "Foo44"
 
   $S0 = $P0
-  substr $S0, 0, 1, "B"
+  $S0 = replace $S0, 0, 1, "B"
   is( $S0, "Boo44", 'substr replace' )
   is( $P0, "Foo44", '... no change to original' )
 .end
@@ -1036,6 +1002,7 @@
 
     # Set
     s = new ['String']
+    s = ''
 
     $S0 = 'f'
     s[0] = $S0
@@ -1049,6 +1016,16 @@
     $P0 = 'o'
     s[2] = $P0
     is(s, 'foo', 'Set PMC keyed')
+
+    push_eh null_replace
+    s = new ['String']
+    s[0] = 'f'
+    nok('Replace on null string throws')
+    goto done_null_replace
+
+  null_replace:
+    ok(1, 'Replace on null string throws')
+  done_null_replace:
 .end
 
 # Local Variables:

Modified: branches/ops_pct/t/pmc/stringiterator.t
==============================================================================
--- branches/ops_pct/t/pmc/stringiterator.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/stringiterator.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/testlib/packfile_common.pir
==============================================================================
--- branches/ops_pct/t/pmc/testlib/packfile_common.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/testlib/packfile_common.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -70,6 +70,17 @@
 .end
 
 
+# Report no ok for loading packfile failures
+.sub report_load_error
+    .param pmc except
+    .param string desc
+    .local string msg, aux
+    msg = concat desc, ' - error loading packfile: '
+    aux = except['message']
+    msg = concat msg, aux
+    ok(0, msg)
+.end
+
 
 # Local Variables:
 #   mode: pir

Modified: branches/ops_pct/t/pmc/threads.t
==============================================================================
--- branches/ops_pct/t/pmc/threads.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/threads.t	Wed May  5 08:45:29 2010	(r46302)
@@ -47,7 +47,7 @@
 ok1:
     print "ok 1\n"
     new P4, ['ParrotThread']
-    ne P4, P2, ok2
+    ne P2, P4, ok2
     print "not"
 ok2:
     print "ok 2\n"
@@ -57,8 +57,6 @@
 ok 2
 OUTPUT
 
-# TT #1249:  rework tests since we don't really have thread types?
-
 SKIP: {
     skip 'busted on win32' => 2 if $^O eq 'MSWin32';
 
@@ -184,7 +182,7 @@
 CODE
 ok 1
 hello from thread
-ParrotThread tid 1
+ThreadInterpreter tid 1
 from 10 interp
 OUTPUT
 
@@ -217,7 +215,7 @@
     branch lp
 .end
 CODE
-start 1
+start -1
 in thread
 done
 OUTPUT

Modified: branches/ops_pct/t/pmc/undef.t
==============================================================================
--- branches/ops_pct/t/pmc/undef.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/undef.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 

Modified: branches/ops_pct/t/pmc/unmanagedstruct.t
==============================================================================
--- branches/ops_pct/t/pmc/unmanagedstruct.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/pmc/unmanagedstruct.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,4 +1,4 @@
-#! parrot
+#!./parrot
 # Copyright (C) 2006-2008, Parrot Foundation.
 # $Id$
 

Copied: branches/ops_pct/t/profiling/profiling.t (from r46301, trunk/t/profiling/profiling.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/t/profiling/profiling.t	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/t/profiling/profiling.t)
@@ -0,0 +1,194 @@
+#!./parrot-nqp
+
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+INIT {
+    pir::load_bytecode('ProfTest.pbc');
+}
+
+
+plan(12);
+
+my $pir_code :=
+'.sub main
+  say "what"
+.end';
+
+my $prof := ProfTest::PIRProfile.new($pir_code);
+
+
+ok(1, "profile creation didn't explode");
+
+#Does the profile have a version string?
+my $matcher := ProfTest::Matcher.new(
+    version()
+);
+
+ok( $matcher.matches($prof), "profile has a version number");
+
+#Does the profile have a CLI invocation?
+$matcher := ProfTest::Matcher.new(
+    cli()
+);
+
+ok( $matcher.matches($prof), "profile contains a CLI string");
+
+#Does the profile have a 'say' op somewhere?
+$matcher := ProfTest::Matcher.new(
+    op('say')
+);
+
+ok( $matcher.matches($prof), "profile has a say op");
+
+#Does the profile have expected timing values?
+$matcher := ProfTest::Matcher.new(
+    op('say', :time(1))
+);
+
+ok( $matcher.matches($prof), "profile has canonical timing information");
+
+#Does the matcher fail to find the non-existent 'lollercoaster' opcode?
+$matcher := ProfTest::Matcher.new(
+    op('lollercoaster')
+);
+
+ok( !$matcher.matches($prof), "matcher didn't find non-existent opcode");
+
+#Does the profile show a 'say' op inside the 'main' sub?
+$matcher := ProfTest::Matcher.new(
+    cs(:ns('main')),
+    any(:except('cs')),
+    op('say'),
+);
+
+ok( $matcher.matches($prof), "profile shows 'say' inside main sub");
+
+
+$pir_code :=
+".sub first :main
+  .local int i
+  i = 0
+  'second'()
+  inc i
+.end
+
+.sub second
+  .local pmc p
+  p = new ['Interger']
+  p = 1
+.end";
+
+$prof := ProfTest::PIRProfile.new($pir_code);
+
+$matcher := ProfTest::Matcher.new(
+    cs(:ns('parrot;first'),  :slurp_until('cs')),
+    cs(:ns('parrot;second'), :slurp_until('cs')),
+    cs(:ns('parrot;first')),
+);
+
+ok( $matcher.matches($prof), "profile properly reflects normal control flow (simple)");
+
+
+$pir_code :=
+".sub first :main
+  .local int i
+  i = 0
+  'second'()
+  inc i
+.end
+
+.sub second
+  .local pmc p
+  p = new ['Interger']
+  'third'()
+  p = 1
+.end
+
+.sub third
+  say 'in third'
+.end";
+
+$prof := ProfTest::PIRProfile.new($pir_code);
+
+$matcher := ProfTest::Matcher.new(
+    cs(:ns('parrot;first'),  :slurp_until('cs')),
+    cs(:ns('parrot;second'), :slurp_until('cs')),
+    cs(:ns('parrot;third'),  :slurp_until('cs')),
+    cs(:ns('parrot;second'), :slurp_until('cs')),
+    cs(:ns('parrot;first')),
+);
+
+ok( $matcher.matches($prof), "profile properly reflects normal control flow (slightly less simple)");
+
+
+#test: main calls foo, foo tailcalls bar, bar returns to main
+$pir_code :=
+".sub first :main
+  .local int i
+  i = 'foo'(9)
+  say i
+.end
+
+.sub foo
+  .param int i
+  i = i * i
+  .tailcall bar(i)
+.end
+
+.sub bar
+  .param int i
+  i = i + 2
+  .return (i)
+.end";
+
+$prof := ProfTest::PIRProfile.new($pir_code);
+
+$matcher := ProfTest::Matcher.new(
+    cs(:ns('parrot;first'), :slurp_until('cs')),
+    cs(:ns('parrot;foo'),   :slurp_until('cs')),
+    cs(:ns('parrot;bar'),   :slurp_until('cs')),
+    cs(:ns('parrot;first')),
+);
+
+ok( $matcher.matches($prof), "profile properly reflects tailcall control flow");
+
+
+#Does the profile show a 'say' op on line 2?
+$matcher := ProfTest::Matcher.new(
+    op('say', :line('3')),
+);
+
+ok( $matcher.matches($prof), "profile shows say on the correct line");
+
+
+my $nqp_code :=
+'main();
+sub main() {
+    pir::say("nqp");
+}';
+
+$prof := ProfTest::NQPProfile.new($nqp_code);
+
+$matcher := ProfTest::Matcher.new(
+    cs(:ns('parrot;main') ),
+    any(:except('cs')),
+    op('say'),
+);
+
+ok( $matcher.matches($prof), "profile shows 'say' inside nqp sub");
+
+#convenience subs to avoid repetitive typing and visual noise
+
+sub version(*@p, *%n) { ProfTest::Want::Version.new(|@p, |%n) }
+sub cli(*@p, *%n)     { ProfTest::Want::CLI.new(|@p, |%n) }
+sub eor(*@p, *%n)     { ProfTest::Want::EndOfRunloop.new(|@p, |%n) }
+sub op(*@p, *%n)      { ProfTest::Want::Op.new(|@p, |%n) }
+sub cs(*@p, *%n)      { ProfTest::Want::CS.new(|@p, |%n) }
+sub any(*@p, *%n)     { ProfTest::Want::Any.new(|@p, |%n) }
+
+# Local Variables:
+#   mode: perl6
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=perl6

Modified: branches/ops_pct/t/run/exit.t
==============================================================================
--- branches/ops_pct/t/run/exit.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/run/exit.t	Wed May  5 08:45:29 2010	(r46302)
@@ -74,7 +74,7 @@
 my $pirfile = IO::File->new(">$pirfn");
 $pirfile->print("Parse error.\n");
 $pirfile->close();
-my $rv = system("$PARROT -o $pbcfn $pirfn") >> 8;
+my $rv = system(qq|$PARROT -o $pbcfn $pirfn $redir > $redir 2> $redir|) >> 8;
 isnt($rv, 0, "parrot returns error on parse failure\n");
 ok(! -e $pbcfn, "parrot doesn't create outfile on parse failure\n");
 

Modified: branches/ops_pct/t/src/basic.t
==============================================================================
--- branches/ops_pct/t/src/basic.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/src/basic.t	Wed May  5 08:45:29 2010	(r46302)
@@ -27,7 +27,7 @@
     #include <stdlib.h>
 
     int
-    main(int argc, char* argv[])
+    main(int argc, const char* argv[])
     {
         printf("Hello, World!\n");
         exit(0);
@@ -41,7 +41,7 @@
     #include <parrot/exceptions.h>
 
     int
-    main(int argc, char* argv[])
+    main(int argc, const char* argv[])
     {
          exit_fatal(0, "Blow'd Up(tm)"); /* ' */
     }
@@ -59,7 +59,7 @@
 static opcode_t *the_test(Parrot_Interp, opcode_t *, opcode_t *);
 
 int
-main(int argc, char* argv[])
+main(int argc, const char* argv[])
 {
     Interp *interp;
 

Modified: branches/ops_pct/t/src/embed.t
==============================================================================
--- branches/ops_pct/t/src/embed.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/src/embed.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -8,7 +8,7 @@
 use Test::More;
 use Parrot::Test;
 
-plan tests => 6;
+plan tests => 7;
 
 =head1 NAME
 
@@ -24,7 +24,15 @@
 
 =cut
 
-c_output_is( <<'CODE', <<'OUTPUT', "Minimal embed, using just the embed.h header" );
+sub linedirective
+{
+    # Provide a #line directive for the C code in the heredoc
+    # starting immediately after where this sub is called.
+    my $linenum = shift() + 1;
+    return "#line " . $linenum . ' "' . __FILE__ . '"' . "\n";
+}
+
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Minimal embed, using just the embed.h header" );
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -39,7 +47,7 @@
     exit(EXIT_FAILURE);
 }
 
-int main(int argc, char **argv)
+int main(int argc, const char **argv)
 {
     Parrot_Interp interp;
     interp = Parrot_new(NULL);
@@ -54,7 +62,44 @@
 Done
 OUTPUT
 
-c_output_is( <<'CODE', <<'OUTPUT', "Hello world from main" );
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when an opcode is given improper arguments');
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "parrot/embed.h"
+#include "parrot/extend.h"
+
+void fail(const char *msg);
+
+void fail(const char *msg)
+{
+    fprintf(stderr, "failed: %s\n", msg);
+    exit(EXIT_FAILURE);
+}
+
+
+int main(int argc, const char **argv)
+{
+    Parrot_Interp interp;
+    Parrot_String err, lang;
+    Parrot_PMC func_pmc;
+    char *str;
+
+    interp = Parrot_new(NULL);
+    if (! interp)
+        fail("Cannot create parrot interpreter");
+    lang = Parrot_new_string(interp, "PIR", 3, (const char*)NULL, 0);
+
+    func_pmc = Parrot_compile_string(interp, lang, ".sub foo\n copy\n.end", &err);
+    Parrot_printf(interp, "%Ss\n", err);
+    Parrot_destroy(interp);
+    return 0;
+}
+CODE
+The opcode 'copy' (copy<0>) was not found. Check the type and number of the arguments
+OUTPUT
+
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from main" );
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -103,7 +148,7 @@
 Hello, pir
 OUTPUT
 
-c_output_is( <<'CODE', <<'OUTPUT', "Hello world from a sub" );
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from a sub" );
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -169,7 +214,7 @@
 Hello, sub
 OUTPUT
 
-c_output_is( <<'CODE', <<'OUTPUT', "External sub" );
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "External sub" );
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -225,7 +270,7 @@
 Hello from C
 OUTPUT
 
-c_output_is( <<'CODE', <<'OUTPUT', "Insert external sub in namespace" );
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Insert external sub in namespace" );
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -308,20 +353,20 @@
 #include "parrot/embed.h"
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, cosnt char *argv[])
 {
     const char *c_src = ".sub main :main\n" "    print \"ok\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
     PMC *prog, *entry;
     opcode_t *dest;
-    STRING *error;
+    Parrot_String *error;
 
     /* get PIR compiler  - TODO API */
     PMC   *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir    = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir    = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp   = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -357,7 +402,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
@@ -388,12 +433,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -421,20 +466,20 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print \"ok\\n\"\n" ".end\n";
 
     const char *c2_src =
         ".sub main :main\n" "    print \"hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
 
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -447,7 +492,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
@@ -479,12 +524,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -512,20 +557,20 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print ok\\n\"\n" ".end\n";
 
     const char *c2_src =
         ".sub main :main\n" "    print \"hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
 
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -538,12 +583,12 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
     int argc = 1;
-    char *argv[] = { "test", NULL };
+    const char *argv[] = { "test", NULL };
 
     PackFile_Segment *seg;
 
@@ -570,12 +615,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -603,19 +648,19 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print ok\\n\"\n" ".end\n";
 
     const char *c2_src =
         ".sub main :main\n" "    print \"hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -628,7 +673,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;
@@ -660,12 +705,12 @@
 #include "parrot/embed.h"
 
 static void
-compile_run(PARROT_INTERP, const char *src, STRING *type, int argc,
-            char *argv[])
+compile_run(PARROT_INTERP, const char *src, Parrot_String *type, int argc,
+            const char *argv[])
 {
-    STRING   *smain;
+    Parrot_String   *smain;
     PMC      *entry;
-    STRING   *error;
+    Parrot_String   *error;
     opcode_t *dest;
     PMC      *prog = Parrot_compile_string(interp, type, src, &error);
 
@@ -693,18 +738,18 @@
 }
 
 static opcode_t *
-run(PARROT_INTERP, int argc, char *argv[])
+run(PARROT_INTERP, int argc, const char *argv[])
 {
     const char *c_src  = ".sub main :main\n" "    print ok\\n\"\n" ".end\n";
 
     const char *c2_src = ".sub main :main\n" "    print hola\\n\"\n" ".end\n";
 
-    STRING *src, *smain;
+    Parrot_String *src, *smain;
     /* get PIR compiler  - TODO API */
     PMC    *compreg = Parrot_PMC_get_pmc_keyed_int(interp,
                                        interp->iglobals,
                                        IGLOBALS_COMPREG_HASH);
-    STRING *pir     = Parrot_str_new_constant(interp, "PIR");
+    Parrot_String *pir     = Parrot_str_new_constant(interp, "PIR");
     PMC    *comp    = Parrot_PMC_get_pmc_keyed_str(interp, compreg, pir);
 
     if (PMC_IS_NULL(comp) || !Parrot_PMC_defined(interp, comp)) {
@@ -717,7 +762,7 @@
 }
 
 int
-main(int margc, char *margv[])
+main(int margc, const char *margv[])
 {
     Parrot_Interp interp;
     PackFile *pf;

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

Modified: branches/ops_pct/t/src/warnings.t
==============================================================================
--- branches/ops_pct/t/src/warnings.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/src/warnings.t	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #! perl
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -34,7 +34,7 @@
 #include <parrot/embed.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char* argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;
@@ -57,7 +57,7 @@
 #include <parrot/embed.h>
 
 int
-main(int argc, char* argv[])
+main(int argc, const char* argv[])
 {
     Parrot_Interp interp = Parrot_new(NULL);
     int error_val;

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

Deleted: branches/ops_pct/t/steps/auto/cgoto-01.t
==============================================================================
--- branches/ops_pct/t/steps/auto/cgoto-01.t	Wed May  5 08:45:29 2010	(r46301)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,139 +0,0 @@
-#! perl
-# Copyright (C) 2007, Parrot Foundation.
-# $Id$
-# auto/cgoto-01.t
-
-use strict;
-use warnings;
-use Test::More tests =>  25;
-use Carp;
-use lib qw( lib t/configure/testlib );
-use_ok('config::auto::cgoto');
-use Parrot::Configure::Options qw( process_options );
-use Parrot::Configure::Step::Test;
-use Parrot::Configure::Test qw(
-    test_step_constructor_and_description
-);
-use IO::CaptureOutput qw( capture );
-
-
-########### regular ###########
-
-my ($args, $step_list_ref) = process_options( {
-    argv => [ ],
-    mode => q{configure},
-} );
-
-my $conf = Parrot::Configure::Step::Test->new;
-$conf->include_config_results( $args );
-
-my $serialized = $conf->pcfreeze();
-
-my $pkg = q{auto::cgoto};
-
-$conf->add_steps($pkg);
-$conf->options->set( %{$args} );
-my $step = test_step_constructor_and_description($conf);
-my $ret = $step->runstep($conf);
-ok( $ret, "runstep() returned true value" );
-ok(defined($step->result()), "A result was defined");
-ok(defined($conf->data->get('cg_flag')), "An attribute has been defined");
-
-$conf->replenish($serialized);
-
-########### _probe_for_cgoto() ###########
-
-($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);
-$conf->options->set(cgoto => 1);
-is(auto::cgoto::_probe_for_cgoto($conf), 1,
-    "Got expected return value");
-$conf->options->set(cgoto => 0);
-is(auto::cgoto::_probe_for_cgoto($conf), 0,
-    "Got expected return value");
-$conf->options->set(cgoto => undef);
-ok(defined(auto::cgoto::_probe_for_cgoto($conf)),
-    "Probe returned a defined value");
-
-########### _evaluate_cgoto() ###########
-
-$step->_evaluate_cgoto($conf, 1);
-ok($conf->data->get('cg_flag'), "An attribute was set to true value");
-is($step->result(), q{yes}, "Expected result was set");
-
-$step->_evaluate_cgoto($conf, 0);
-is($conf->data->get('cg_flag'), q{}, "An attribute was set to empty string");
-is($step->result(), q{no}, "Expected result was set");
-
-$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);
-{
-    my $stdout;
-    capture(
-        sub { $step->_evaluate_cgoto($conf, 1) },
-        \$stdout
-    );
-    ok($conf->data->get('cg_flag'), "An attribute was set to true value");
-    is($step->result(), q{yes}, "Expected result was set");
-}
-
-{
-    my $stdout;
-    capture(
-        sub { $step->_evaluate_cgoto($conf, 0) },
-        \$stdout
-    );
-    is($conf->data->get('cg_flag'), q{},
-        "An attribute was set to empty string");
-    is($step->result(), q{no}, "Expected result was set");
-}
-
-
-pass("Completed all tests in $0");
-
-################### DOCUMENTATION ###################
-
-=head1 NAME
-
-auto/cgoto-01.t - test auto::cgoto
-
-=head1 SYNOPSIS
-
-    % prove t/steps/auto/cgoto-01.t
-
-=head1 DESCRIPTION
-
-The files in this directory test functionality used by F<Configure.pl>.
-
-The tests in this file test auto::cgoto.
-
-=head1 AUTHOR
-
-James E Keenan
-
-=head1 SEE ALSO
-
-config::auto::cgoto, F<Configure.pl>.
-
-=cut
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

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

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

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

Modified: branches/ops_pct/t/steps/gen/platform-01.t
==============================================================================
--- branches/ops_pct/t/steps/gen/platform-01.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/steps/gen/platform-01.t	Wed May  5 08:45:29 2010	(r46302)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests => 13;
+use Test::More tests => 12;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -39,9 +39,6 @@
 $conf->options->set( %{$args} );
 my $step = test_step_constructor_and_description($conf);
 
-ok(-f $step->{platform_interface},
-    "Located required platform interface header");
-
 my $platform_orig = $conf->data->get('osname');
 my $archname_orig = $conf->data->get('archname');
 $conf->data->set( archname => 'foo-bar' );

Modified: branches/ops_pct/t/steps/init/defaults-01.t
==============================================================================
--- branches/ops_pct/t/steps/init/defaults-01.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/steps/init/defaults-01.t	Wed May  5 08:45:29 2010	(r46302)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests => 39;
+use Test::More tests => 37;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -85,7 +85,6 @@
 
 $conf->data->set( archname => 'x86_64' );
 $conf->data->set( cc => 'cc' );
-$conf->data->set( cxx => 'c++' );
 $conf->data->set( link => 'cc' );
 $conf->data->set( ld => 'env cc' );
 $conf->data->set( ld_load_flags => '-bundle -L/usr/local/lib64' );
@@ -96,7 +95,6 @@
     "_64_bit_adjustments() returned true");
 is($conf->data->get( 'archname' ), 'i386', "Got expected value for 'archname'");
 is($conf->data->get( 'cc' ), 'cc -m32', "Got expected value for 'cc'");
-is($conf->data->get( 'cxx' ), 'c++ -m32', "Got expected value for 'cxx'");
 is($conf->data->get( 'link' ), 'cc -m32', "Got expected value for 'link'");
 is($conf->data->get( 'ld' ), 'env cc -m32', "Got expected value for 'ld'");
 is($conf->data->get( 'ld_load_flags' ), '-bundle -L/usr/local/lib',
@@ -124,7 +122,6 @@
 
 $conf->data->set( archname => 'x86_64' );
 $conf->data->set( cc => 'cc' );
-$conf->data->set( cxx => 'c++' );
 $conf->data->set( link => 'cc' );
 $conf->data->set( ld => 'env cc' );
 $conf->data->set( ld_load_flags => '-bundle -L/usr/local/lib64' );
@@ -135,7 +132,6 @@
     "_64_bit_adjustments() returned true");
 is($conf->data->get( 'archname' ), 'x86_64', "Got expected value for 'archname'");
 is($conf->data->get( 'cc' ), 'cc', "Got expected value for 'cc'");
-is($conf->data->get( 'cxx' ), 'c++', "Got expected value for 'cxx'");
 is($conf->data->get( 'link' ), 'cc', "Got expected value for 'link'");
 is($conf->data->get( 'ld' ), 'env cc', "Got expected value for 'ld'");
 is($conf->data->get( 'ld_load_flags' ), '-bundle -L/usr/local/lib64',

Modified: branches/ops_pct/t/steps/inter/progs-04.t
==============================================================================
--- branches/ops_pct/t/steps/inter/progs-04.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/steps/inter/progs-04.t	Wed May  5 08:45:29 2010	(r46302)
@@ -56,7 +56,6 @@
         linkflags
         ldflags
         libs
-        cxx
     |
     )
 {

Modified: branches/ops_pct/t/tools/install/testlib/README
==============================================================================
--- branches/ops_pct/t/tools/install/testlib/README	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/install/testlib/README	Wed May  5 08:45:29 2010	(r46302)
@@ -104,14 +104,6 @@
 
     perldoc -F docs/intro.pod
 
-NOTES
------
-
-On some older computers with little RAM, the computed-goto dispatch core
-(ops/core_ops_cg.c) may take a while to compile or may fail to compile at all.
-You can pass a flag to Configure.pl (--cgoto=0) to disable the computed-goto
-core, at a slight cost in runtime speed.
-
 CHANGES
 -------
 

Modified: branches/ops_pct/t/tools/ops2cutils/01-new.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/01-new.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/01-new.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 19;
+use Test::More tests => 15;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -87,19 +87,15 @@
             "Constructor correctly returned undef due to bad class name command-line argument" );
         like(
             $stderr,
-            qr/Parrot::Ops2c::Utils::new\(\) requires C, CGoto, CGP, CSwitch and\/or  CPrederef/,
+            qr/Parrot::Ops2c::Utils::new\(\) requires C/,
             "Got correct error message"
         );
     }
 
     test_single_trans(q{C});
-    test_single_trans(q{CGoto});
-    test_single_trans(q{CGP});
-    test_single_trans(q{CSwitch});
-    test_single_trans(q{CPrederef});
 
     {
-        local @ARGV = qw( C CGoto CGP CSwitch CPrederef );
+        local @ARGV = qw( C );
         my $self = Parrot::Ops2c::Utils->new(
             { argv => [@ARGV], flag => { core => 1 } }
         );
@@ -107,7 +103,7 @@
     }
 
     {
-        local @ARGV = qw( C CGoto CGP CSwitch CPrederef );
+        local @ARGV = qw( C );
         my $self = Parrot::Ops2c::Utils->new(
             {
                 argv   => [@ARGV],
@@ -146,7 +142,7 @@
 
 sub test_single_trans {
     my $trans = shift;
-    my %available = map { $_, 1 } qw( C CGoto CGP CSwitch CPrederef );
+    my %available = map { $_, 1 } qw( C );
     croak "Bad argument $trans to test_single_trans()"
         unless $available{$trans};
 

Modified: branches/ops_pct/t/tools/ops2cutils/03-print_c_header_file.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/03-print_c_header_file.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/03-print_c_header_file.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 24;
+use Test::More tests => 12;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -47,13 +47,9 @@
     require Parrot::Ops2c::Utils;
 
     test_single_trans_and_header(q{C});
-    test_single_trans_and_header(q{CGoto});
-    test_single_trans_and_header(q{CGP});
-    test_single_trans_and_header(q{CSwitch});
-    test_single_trans_and_header(q{CPrederef});
 
     {
-        local @ARGV = qw( C CGoto CGP CSwitch CPrederef );
+        local @ARGV = qw( C );
         my $self = Parrot::Ops2c::Utils->new(
             {
                 argv => [@ARGV],
@@ -73,7 +69,7 @@
 
 sub test_single_trans_and_header {
     my $trans = shift;
-    my %available = map { $_, 1 } qw( C CGoto CGP CSwitch CPrederef );
+    my %available = map { $_, 1 } qw( C );
     croak "Bad argument $trans to test_single_trans()"
         unless $available{$trans};
 

Modified: branches/ops_pct/t/tools/ops2cutils/04-print_c_source_top.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/04-print_c_source_top.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/04-print_c_source_top.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 26;
+use Test::More tests => 10;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -47,10 +47,6 @@
     require Parrot::Ops2c::Utils;
 
     test_print_c_source_top( [qw( C )] );
-    test_print_c_source_top( [qw( CGoto )] );
-    test_print_c_source_top( [qw( CGP )] );
-    test_print_c_source_top( [qw( CSwitch )] );
-    test_print_c_source_top( [qw( C CGoto CGP CSwitch CPrederef )] );
 
     ok( chdir($cwd), "returned to starting directory" );
 }

Modified: branches/ops_pct/t/tools/ops2cutils/05-print_c_source_bottom.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/05-print_c_source_bottom.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/05-print_c_source_bottom.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 26;
+use Test::More tests => 10;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -48,10 +48,6 @@
     require Parrot::Ops2c::Utils;
 
     test_print_c_source_bottom( [qw( C )] );
-    test_print_c_source_bottom( [qw( CGoto )] );
-    test_print_c_source_bottom( [qw( CGP )] );
-    test_print_c_source_bottom( [qw( CSwitch )] );
-    test_print_c_source_bottom( [qw( C CGoto CGP CSwitch CPrederef )] );
 
     ok( chdir($cwd), "returned to starting directory" );
 }

Modified: branches/ops_pct/t/tools/ops2cutils/06-dynamic.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/06-dynamic.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/06-dynamic.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 27;
+use Test::More tests => 15;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -55,16 +55,13 @@
     }
     chdir "src/dynoplibs" or croak "Unable to change to src/dynoplibs: $!";
 
-    test_dynops( [qw( CGoto    obscure.ops )] );
-    test_dynops( [qw( CGP      obscure.ops )] );
-    test_dynops( [qw( C        obscure.ops )] );
-    test_dynops( [qw( CSwitch  obscure.ops )] );
+    test_dynops( [qw( C obscure.ops )] );
 
     {
         my ($self, $stdout, $stderr);
         capture(
             sub { $self = Parrot::Ops2c::Utils->new( {
-                        argv => [qw( CSwitch  obscure.ops obscure.ops )],
+                        argv => [qw( C obscure.ops obscure.ops )],
                         flag => { dynamic => 1 },
                 } ); },
             \$stdout,

Modified: branches/ops_pct/t/tools/ops2cutils/07-make_incdir.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/07-make_incdir.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/07-make_incdir.t	Wed May  5 08:45:29 2010	(r46302)
@@ -81,7 +81,7 @@
     require Parrot::Ops2c::Utils;
 
     {
-        local @ARGV = qw( C CGoto CGP CSwitch CPrederef );
+        local @ARGV = qw( C );
         my $self = Parrot::Ops2c::Utils->new(
             {
                 argv => [@ARGV],
@@ -98,7 +98,7 @@
 
 sub test_single_trans {
     my $trans = shift;
-    my %available = map { $_, 1 } qw( C CGoto CGP CSwitch CPrederef );
+    my %available = map { $_, 1 } qw( C );
     croak "Bad argument $trans to test_single_trans()"
         unless $available{$trans};
 

Modified: branches/ops_pct/t/tools/ops2cutils/08-nolines.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/08-nolines.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/08-nolines.t	Wed May  5 08:45:29 2010	(r46302)
@@ -47,7 +47,7 @@
     require Parrot::Ops2c::Utils;
 
     {
-        local @ARGV = qw( C CGoto CGP CSwitch CPrederef );
+        local @ARGV = qw( C );
         my $self = Parrot::Ops2c::Utils->new(
             {
                 argv => [@ARGV],

Modified: branches/ops_pct/t/tools/ops2cutils/09-dynamic_nolines.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/09-dynamic_nolines.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/09-dynamic_nolines.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 22;
+use Test::More tests => 10;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -52,10 +52,7 @@
     }
     chdir "src/dynoplibs" or croak "Unable to change to src/dynoplibs: $!";
 
-    test_dynops_nolines( [qw( CGoto    obscure.ops )] );
-    test_dynops_nolines( [qw( CGP      obscure.ops )] );
     test_dynops_nolines( [qw( C        obscure.ops )] );
-    test_dynops_nolines( [qw( CSwitch  obscure.ops )] );
 
     ok( chdir($cwd), "returned to starting directory" );
 }

Modified: branches/ops_pct/t/tools/ops2cutils/10-print_c_source_file.t
==============================================================================
--- branches/ops_pct/t/tools/ops2cutils/10-print_c_source_file.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2cutils/10-print_c_source_file.t	Wed May  5 08:45:29 2010	(r46302)
@@ -19,7 +19,7 @@
     }
     unshift @INC, qq{$topdir/lib};
 }
-use Test::More tests => 21;
+use Test::More tests => 12;
 use Carp;
 use Cwd;
 use File::Copy;
@@ -47,12 +47,9 @@
     require Parrot::Ops2c::Utils;
 
     test_single_trans_and_source(q{C});
-    test_single_trans_and_source(q{CGoto});
-    test_single_trans_and_source(q{CGP});
-    test_single_trans_and_source(q{CSwitch});
 
     {
-        local @ARGV = qw( C CGoto CGP CSwitch );
+        local @ARGV = qw( C );
         my $self = Parrot::Ops2c::Utils->new(
             {
                 argv => [@ARGV],
@@ -72,7 +69,7 @@
 
 sub test_single_trans_and_source {
     my $trans = shift;
-    my %available = map { $_, 1 } qw( C CGoto CGP CSwitch CPrederef );
+    my %available = map { $_, 1 } qw( C );
     croak "Bad argument $trans to test_single_trans()"
         unless $available{$trans};
 

Modified: branches/ops_pct/t/tools/ops2pm/05-renum_op_map_file.t
==============================================================================
--- branches/ops_pct/t/tools/ops2pm/05-renum_op_map_file.t	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/t/tools/ops2pm/05-renum_op_map_file.t	Wed May  5 08:45:29 2010	(r46302)
@@ -33,6 +33,8 @@
     chdir $tdir or croak "Unable to change to testing directory: $!";
     my $opsdir = File::Spec->catdir ( $tdir, 'src', 'ops' );
     mkpath( [ $opsdir ], 0, 0755 ) or croak "Unable to make testing directory";
+    my $incpardir = File::Spec->catdir ( $tdir, 'include', 'parrot' );
+    mkpath( [ $incpardir ], 0, 0755 ) or croak "Unable to make testing directory";
 
     ##### Stage 1:  Generate ops.num de novo #####
 

Modified: branches/ops_pct/tools/build/headerizer.pl
==============================================================================
--- branches/ops_pct/tools/build/headerizer.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/build/headerizer.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -1,12 +1,7 @@
 #! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
-use strict;
-use warnings;
-use Carp qw( confess );
-
-
 =head1 NAME
 
 tools/build/headerizer.pl - Generates the function header parts of .h
@@ -59,6 +54,9 @@
 
 =cut
 
+use strict;
+use warnings;
+
 use Getopt::Long;
 use lib qw( lib );
 use Parrot::Config;
@@ -66,93 +64,10 @@
 
 my $headerizer = Parrot::Headerizer->new;
 
-my %warnings;
-my %opt;
-
-my %valid_macros = map { ( $_, 1 ) } qw(
-    PARROT_EXPORT
-    PARROT_INLINE
-    PARROT_CAN_RETURN_NULL
-    PARROT_CANNOT_RETURN_NULL
-    PARROT_IGNORABLE_RESULT
-    PARROT_WARN_UNUSED_RESULT
-    PARROT_PURE_FUNCTION
-    PARROT_CONST_FUNCTION
-    PARROT_DOES_NOT_RETURN
-    PARROT_DOES_NOT_RETURN_WHEN_FALSE
-    PARROT_MALLOC
-    PARROT_OBSERVER
-);
-
 main();
 
 =head1 FUNCTIONS
 
-=head2 extract_function_declarations( $source_file_text )
-
-Rips apart a C file to get the function declarations.
-
-=cut
-
-sub extract_function_declarations {
-    my $text = shift;
-
-    # Only check the YACC C code if we find what looks like YACC file
-    $text =~ s[%\{(.*)%\}.*][$1]sm;
-
-    # Drop all text after HEADERIZER STOP
-    $text =~ s[/\*\s*HEADERIZER STOP.+][]s;
-
-    # Strip blocks of comments
-    $text =~ s[^/\*.*?\*/][]mxsg;
-
-    # Strip # compiler directives (Thanks, Audrey!)
-    $text =~ s[^#(\\\n|.)*][]mg;
-
-    # Strip code blocks
-    $text =~ s[^{.+?^}][]msg;
-
-    # Split on paragraphs
-    my @funcs = split /\n{2,}/, $text;
-
-    # If it doesn't start in the left column, it's not a func
-    @funcs = grep /^\S/, @funcs;
-
-    # Typedefs, enums and externs are no good
-    @funcs = grep { !/^(typedef|enum|extern)\b/ } @funcs;
-
-    # Structs are OK if they're not alone on the line
-    @funcs = grep { !/^struct.+;\n/ } @funcs;
-
-    # Structs are OK if they're not being defined
-    @funcs = grep { !/^(static\s+)?struct.+{\n/ } @funcs;
-
-    # Ignore magic function name YY_DECL
-    @funcs = grep { !/YY_DECL/ } @funcs;
-
-    # Ignore anything with magic words HEADERIZER SKIP
-    @funcs = grep !m{/\*\s*HEADERIZER SKIP\s*\*/}, @funcs;
-
-    # Variables are of no use to us
-    @funcs = grep !/=/, @funcs;
-
-    # Get rid of any blocks at the end
-    s/\s*{.*//s for @funcs;
-
-    # Toast anything non-whitespace
-    @funcs = grep /\S/, @funcs;
-
-    # If it's got a semicolon, it's not a function header
-    @funcs = grep !/;/, @funcs;
-
-    # remove any remaining }'s
-    @funcs = grep {! /^}/} @funcs;
-
-    chomp @funcs;
-
-    return @funcs;
-}
-
 =head2 extract_function_declaration_and_update_source( $cfile_name )
 
 Extract all the function declarations from the C file specified by
@@ -167,9 +82,9 @@
     my $text = join( '', <$fhin> );
     close $fhin;
 
-    my @func_declarations = extract_function_declarations( $text );
+    my @func_declarations = $headerizer->extract_function_declarations( $text );
     for my $decl ( @func_declarations ) {
-        my $specs = function_components_from_declaration( $cfile_name, $decl );
+        my $specs = $headerizer->function_components_from_declaration( $cfile_name, $decl );
         my $name = $specs->{name};
 
         my $heading = $headerizer->generate_documentation_signature($decl);
@@ -184,95 +99,6 @@
     return @func_declarations;
 }
 
-=head2 function_components_from_declaration( $file, $proto )
-
-Takes a declaration of a function and returns an ad-hoc hashref of
-properties for use elsewhere.
-
-=cut
-
-sub function_components_from_declaration {
-    my $file  = shift;
-    my $proto = shift;
-
-    my @lines = split( /\n/, $proto );
-    chomp @lines;
-
-    my @macros;
-    my $parrot_api;
-    my $parrot_inline;
-
-    while ( @lines && ( $lines[0] =~ /^PARROT_/ ) ) {
-        my $macro = shift @lines;
-        if ( $macro eq 'PARROT_EXPORT' ) {
-            $parrot_api = 1;
-        }
-        elsif ( $macro eq 'PARROT_INLINE' ) {
-            $parrot_inline = 1;
-        }
-        push( @macros, $macro );
-    }
-
-    my $return_type = shift @lines;
-    my $args = join( ' ', @lines );
-
-    $args =~ s/\s+/ /g;
-    $args =~ s{([^(]+)\s*\((.+)\);?}{$2}
-        or die qq{Couldn't handle "$proto"};
-
-    my $name = $1;
-    $args = $2;
-
-    die "Can't have both PARROT_EXPORT and PARROT_INLINE on $name\n" if $parrot_inline && $parrot_api;
-
-    my @args = split( /\s*,\s*/, $args );
-    for (@args) {
-        /\S+\s+\S+/
-            || ( $_ eq '...' )
-            || ( $_ eq 'void' )
-            || ( $_ =~ /(PARROT|NULLOK|SHIM)_INTERP/ )
-            or die "Bad args in $proto";
-    }
-
-    my $is_ignorable = 0;
-    my $is_static = 0;
-    $is_static = $2 if $return_type =~ s/^((static)\s+)?//i;
-
-    die "$file $name: Impossible to have both static and PARROT_EXPORT" if $parrot_api && $is_static;
-
-    my %macros;
-    for my $macro (@macros) {
-        $macros{$macro} = 1;
-        if ( not $valid_macros{$macro} ) {
-            squawk( $file, $name, "Invalid macro $macro" );
-        }
-        if ( $macro eq 'PARROT_IGNORABLE_RESULT' ) {
-            $is_ignorable = 1;
-        }
-    }
-    if ( $return_type =~ /\*/ ) {
-        if ( !$macros{PARROT_CAN_RETURN_NULL} && !$macros{PARROT_CANNOT_RETURN_NULL} ) {
-            squawk( $file, $name,
-                "Returns a pointer, but no PARROT_CAN(NOT)_RETURN_NULL macro found." );
-        }
-        elsif ( $macros{PARROT_CAN_RETURN_NULL} && $macros{PARROT_CANNOT_RETURN_NULL} ) {
-            squawk( $file, $name,
-                "Can't have both PARROT_CAN_RETURN_NULL and PARROT_CANNOT_RETURN_NULL together." );
-        }
-    }
-
-    return {
-        file         => $file,
-        name         => $name,
-        args         => \@args,
-        macros       => \@macros,
-        is_static    => $is_static,
-        is_inline    => $parrot_inline,
-        is_api       => $parrot_api,
-        is_ignorable => $is_ignorable,
-        return_type  => $return_type,
-    };
-}
 
 sub attrs_from_args {
     my $func = shift;
@@ -296,14 +122,14 @@
             }
             push( @mods, "FUNC_MODIFIES($modified)" );
         }
-        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|NOTNULL)\(} || $arg eq 'PARROT_INTERP' ) {
+        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|ARGFREE_NOTNULL|NOTNULL)\(} || $arg eq 'PARROT_INTERP' ) {
             push( @attrs, "__attribute__nonnull__($n)" );
         }
-        if ( ( $arg =~ m{\*} ) && ( $arg !~ /\b(SHIM|((ARGIN|ARGOUT|ARGMOD)(_NULLOK)?)|ARGFREE)\b/ ) ) {
-            squawk( $file, $name, qq{"$arg" isn't protected with an ARGIN, ARGOUT or ARGMOD (or a _NULLOK variant), or ARGFREE} );
+        if ( ( $arg =~ m{\*} ) && ( $arg !~ /\b(SHIM|((ARGIN|ARGOUT|ARGMOD)(_NULLOK)?)|ARGFREE(_NOTNULL)?)\b/ ) ) {
+            $headerizer->squawk( $file, $name, qq{"$arg" isn't protected with an ARGIN, ARGOUT or ARGMOD (or a _NULLOK variant), or ARGFREE} );
         }
         if ( ($arg =~ /\bconst\b/) && ($arg =~ /\*/) && ($arg !~ /\*\*/) && ($arg =~ /\b(ARG(MOD|OUT))\b/) ) {
-            squawk( $file, $name, qq{"$arg" is const, but that $1 conflicts with const} );
+            $headerizer->squawk( $file, $name, qq{"$arg" is const, but that $1 conflicts with const} );
         }
     }
 
@@ -315,7 +141,7 @@
     my @asserts;
 
     for my $arg (@args) {
-        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|NOTNULL)\((.+)\)} ) {
+        if ( $arg =~ m{(ARGIN|ARGOUT|ARGMOD|ARGFREE_NOTNULL|NOTNULL)\((.+)\)} ) {
             my $var = $2;
             if($var =~ /\(*\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\)\s*\(/) {
                 # argument is a function pointer
@@ -347,7 +173,11 @@
 
         my $return = $func->{return_type};
         my $alt_void = ' ';
-        if ( $func->{is_ignorable} && ($return ne 'void') && ($return !~ /\*/) ) {
+
+        # Splint can't handle /*@alt void@*/ on pointers, although this page
+        # http://www.mail-archive.com/lclint-interest@virginia.edu/msg00139.html
+        # seems to say that we can.
+        if ( $func->{is_ignorable} && ($return !~ /\*/) ) {
             $alt_void = " /*\@alt void@*/\n";
         }
 
@@ -420,14 +250,6 @@
     return @decls;
 }
 
-sub squawk {
-    my $file  = shift;
-    my $func  = shift;
-    my $error = shift;
-
-    push( @{ $warnings{$file}->{$func} }, $error );
-}
-
 sub read_file {
     my $filename = shift;
 
@@ -449,12 +271,12 @@
 
 sub replace_headerized_declarations {
     my $source_code = shift;
-    my $cfile       = shift;
+    my $sourcefile = shift;
     my $hfile       = shift;
     my @funcs       = @_;
 
     # Allow a way to not headerize statics
-    if ( $source_code =~ m{/\*\s*HEADERIZER NONE:\s*$cfile\s*\*/} ) {
+    if ( $source_code =~ m{/\*\s*HEADERIZER NONE:\s*$sourcefile\s*\*/} ) {
         return $source_code;
     }
 
@@ -463,14 +285,14 @@
     my @function_decls = make_function_decls(@funcs);
 
     my $function_decls = join( "\n", @function_decls );
-    my $STARTMARKER    = qr#/\* HEADERIZER BEGIN: $cfile \*/\n#;
-    my $ENDMARKER      = qr#/\* HEADERIZER END: $cfile \*/\n?#;
+    my $STARTMARKER    = qr{/\* HEADERIZER BEGIN: $sourcefile \*/\n};
+    my $ENDMARKER      = qr{/\* HEADERIZER END: $sourcefile \*/\n?};
     my $DO_NOT_TOUCH   = q{/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */};
 
     $source_code =~
         s{($STARTMARKER)(?:.*?)($ENDMARKER)}
          {$1$DO_NOT_TOUCH\n\n$function_decls\n$DO_NOT_TOUCH\n$2}s
-        or die "Need begin/end HEADERIZER markers for $cfile in $hfile\n";
+        or die "Need begin/end HEADERIZER markers for $sourcefile in $hfile\n";
 
     return $source_code;
 }
@@ -486,15 +308,15 @@
         'macro=s' => \$macro_match,
     ) or exit(1);
 
-    die "No files specified.\n" unless @ARGV;
+    die 'No files specified.' unless @ARGV;
     my %ofiles;
     ++$ofiles{$_} for @ARGV;
     my @ofiles = sort keys %ofiles;
     for (@ofiles) {
         print "$_ is specified more than once.\n" if $ofiles{$_} > 1;
     }
-    my %cfiles;
-    my %cfiles_with_statics;
+    my %sourcefiles;
+    my %sourcefiles_with_statics;
     my %api;
 
     # Walk the object files and find corresponding source (either .c or .pmc)
@@ -517,31 +339,35 @@
         my $pmcfile = $ofile;
         $pmcfile =~ s/\Q$PConfig{o}\E$/.pmc/;
 
-        my $csource = read_file($cfile);
-        die "can't find HEADERIZER HFILE directive in '$cfile'"
-            unless $csource =~
+        my $from_pmc = -f $pmcfile && !$is_yacc;
+
+        my $sourcefile = $from_pmc ? $pmcfile : $cfile;
+
+        my $source_code = read_file( $sourcefile );
+        die qq{can't find HEADERIZER HFILE directive in "$sourcefile"}
+            unless $source_code =~
                 m{ /\* \s+ HEADERIZER\ HFILE: \s+ ([^*]+?) \s+ \*/ }sx;
 
         my $hfile = $1;
         if ( ( $hfile ne 'none' ) && ( not -f $hfile ) ) {
-            die "'$hfile' not found (referenced from '$cfile')";
+            die qq{"$hfile" not found (referenced from "$sourcefile")};
         }
 
         my @decls;
-        if ( $macro_match || (-f $pmcfile && !$is_yacc) ) {
-            @decls = extract_function_declarations( $csource );
+        if ( $macro_match ) {
+            @decls = $headerizer->extract_function_declarations( $source_code );
         }
         else {
-            @decls = extract_function_declarations_and_update_source( $cfile );
+            @decls = extract_function_declarations_and_update_source( $sourcefile );
         }
 
         for my $decl (@decls) {
-            my $components = function_components_from_declaration( $cfile, $decl );
-            push( @{ $cfiles{$hfile}->{$cfile} }, $components ) unless $hfile eq 'none';
-            push( @{ $cfiles_with_statics{$cfile} }, $components ) if $components->{is_static};
+            my $components = $headerizer->function_components_from_declaration( $sourcefile, $decl );
+            push( @{ $sourcefiles{$hfile}->{$sourcefile} }, $components ) unless $hfile eq 'none';
+            push( @{ $sourcefiles_with_statics{$sourcefile} }, $components ) if $components->{is_static};
             if ( $macro_match ) {
                 if ( grep { $_ eq $macro_match } @{$components->{macros}} ) {
-                    push( @{ $api{$cfile} }, $components );
+                    push( @{ $api{$sourcefile} }, $components );
                 }
             }
         }
@@ -562,13 +388,13 @@
     }
     else { # Normal headerization and updating
         # Update all the .h files
-        for my $hfile ( sort keys %cfiles ) {
-            my $cfiles = $cfiles{$hfile};
+        for my $hfile ( sort keys %sourcefiles ) {
+            my $sourcefiles = $sourcefiles{$hfile};
 
             my $header = read_file($hfile);
 
-            for my $cfile ( sort keys %{$cfiles} ) {
-                my @funcs = @{ $cfiles->{$cfile} };
+            for my $cfile ( sort keys %{$sourcefiles} ) {
+                my @funcs = @{ $sourcefiles->{$cfile} };
                 @funcs = grep { not $_->{is_static} } @funcs;    # skip statics
 
                 $header = replace_headerized_declarations( $header, $cfile, $hfile, @funcs );
@@ -578,8 +404,8 @@
         }
 
         # Update all the .c files in place
-        for my $cfile ( sort keys %cfiles_with_statics ) {
-            my @funcs = @{ $cfiles_with_statics{$cfile} };
+        for my $cfile ( sort keys %sourcefiles_with_statics ) {
+            my @funcs = @{ $sourcefiles_with_statics{$cfile} };
             @funcs = grep { $_->{is_static} } @funcs;
 
             my $source = read_file($cfile);
@@ -590,6 +416,7 @@
         print "Headerization complete.\n";
     }
 
+    my %warnings = %{$headerizer->{warnings}};
     if ( keys %warnings ) {
         my $nwarnings     = 0;
         my $nwarningfuncs = 0;

Modified: branches/ops_pct/tools/build/ops2c.pl
==============================================================================
--- branches/ops_pct/tools/build/ops2c.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/build/ops2c.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -47,7 +47,7 @@
 
     % perl tools/build/ops2c.pl trans [--help] [--no-lines] [--dynamic]
                                       [--core | input.ops [input2.ops ...]]
-       trans := C | CGoto | CGP | CSwitch | CPrederef
+       trans := C
 
 For example:
 
@@ -75,22 +75,6 @@
 
 Create the function-based (slow or fast core) run loop.
 
-=item C<CGoto>
-
-Create the C<goto> run loop.
-
-=item C<CGP>
-
-Create the C<goto> and predereferenced run loop.
-
-=item C<CSwitch>
-
-Create the C<switch>ed and predereferenced run loop.
-
-=item C<CPrederef>
-
-Create the predereferenced run loop.
-
 =back
 
 =head2 Options
@@ -153,14 +137,6 @@
 
 =item C<Parrot::OpTrans::C>
 
-=item C<Parrot::OpTrans::CGoto>
-
-=item C<Parrot::OpTrans::CGP>
-
-=item C<Parrot::OpTrans::CSwitch>
-
-=item C<Parrot::OpTrans::CPrederef>
-
 =item C<Parrot::Ops2c::Utils>
 
 =item C<Parrot::Ops2c::Auxiliary>

Modified: branches/ops_pct/tools/dev/branch_status.pl
==============================================================================
--- branches/ops_pct/tools/dev/branch_status.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/branch_status.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -10,9 +10,10 @@
 
 Generate a report to help developers determine status of repository branches.
 
-This program uses modules that are not intended to be parrot requirements.
+Defaults to generating wiki-friendly output. Override to human readable
+output with C<-H>.
 
-Prerequisites:  Perl 5.10; XML::Twig; Perl6::Form.
+This program uses modules that are not intended to be parrot requirements.
 
 Assumes that you have a command line svn in your path, but doesn't have
 to be run in a working copy.
@@ -23,13 +24,28 @@
 use strict;
 use warnings;
 
-use XML::Twig;
 use Perl6::Form;
+use Time::Format qw(%time);
+use XML::Twig;
+
+my $human;
+$human = 1 if @ARGV && $ARGV[0] eq '-H';
+
+my $time_format = 'dd Mon yyyy - hh:mm:ss';
 
 my $repo = 'https://svn.parrot.org/parrot/';
 
 my @branches = map {chomp; chop; $_} `svn ls $repo/branches`;
 
+if (!$human) {
+    print '||';
+    say join ('||', map { "'''$_'''" } qw (
+        Branch Revisions Creator Authors Created
+        Updated Components Commits LastMergeRev
+    ));
+}
+
+
 foreach my $branch (@branches) {
     my $t = XML::Twig->new();
     my $xml = `svn log --stop-on-copy --xml -v $repo/branches/$branch`;
@@ -39,39 +55,50 @@
     my $oldest = $t->root->last_child('logentry');
     my $creator = $oldest->first_child('author')->xml_text;
 
-    my (%authors,%components);
-    my $merge_log;
+    my (%authors, %components, $merge_log, $merge_rev, $author_txt);
+
     foreach my $entry ($t->root->children('logentry')) {
-            $authors{$entry->first_child('author')->xml_text}++;
-            my $msg = $entry->first_child('msg')->xml_text;
-            $msg =~ s/\s+$//;
-            $msg =~ s/^\s+//;
-            if (!defined($merge_log) && $msg =~ /merge/i) {
-                    $merge_log = $msg;
-            }
-            while ($msg =~ m/\[(.+?)\]/g) {
-                    my $component = $1;
-                    $component =~ s/\s+$//;
-                    $component =~ s/^\s+//;
-                    if ($component ne '') {
-                            $components{$1} = undef;
-                    }
-            }
+        $authors{$entry->first_child('author')->xml_text}++;
+        my $msg = $entry->first_child('msg')->xml_text;
+        $msg =~ s/\s+$//;
+        $msg =~ s/^\s+//;
+        if (!defined($merge_log) && $msg =~ /merge/i) {
+            $merge_log = $msg;
+            $merge_rev = 'r' . $entry->atts->{revision};
+        }
+        while ($msg =~ m/\[(.+?)\]/g) {
+            my $component = $1;
+            $component =~ s/\s+$//;
+            $component =~ s/^\s+//;
+            if ($component ne '') {
+                $components{$1} = undef;
+                }
+        }
     }
     $merge_log //= 'N/A';
+    $merge_rev //= 'N/A';
+
+    my $first = $oldest->atts->{revision};
+    my $last  = $newest->atts->{revision};
+
+    my $revisions_human = "r$first:$last";
+    my $revisions_wiki  = "r$first-r$last";
 
-    my $revisions =  'r' .$oldest->atts->{revision} . ':' .
-        $newest->atts->{revision};
     my $created_date = $oldest->first_child('date')->xml_text;
+    $created_date =~ s/Z//; # workaround Time::Format bug
+    $created_date = $time{$time_format, $created_date};
     my $updated_date = $newest->first_child('date')->xml_text;
-    my $author_txt = '';
+    $updated_date =~ s/Z//; # workaround Time::Format bug
+    $updated_date = $time{$time_format, $updated_date};
+
     if (scalar keys %authors != 1) {
         my @counts;
         foreach my $author (sort {$authors{$b} <=> $authors{$a}} keys %authors) {
-            push @counts, "$author [$authors{$author}]";
+            push @counts, $author . "($authors{$author})";
         }
-        $author_txt = join (', ', @counts);
+        $author_txt = join ($human ? ', ' : '[[BR]]', @counts);
     }
+    $author_txt //='';
     my $components = join (', ', sort {lc $a cmp lc $b} keys %components);
     my $number_commits = scalar $t->root->children('logentry');
     my $initial_log = $oldest->first_child('msg')->xml_text;
@@ -80,13 +107,13 @@
     $merge_log =~ s/\n/ /g;
     $initial_log =~ s/\n/ /g;
 
-
-    print form
+    if ($human) {
+        print form
 '+====================================================================+',
 '|        branch: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} |',
                   $branch,
 '|     revisions: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} |',
-                  $revisions,
+                  $revisions_human,
 '|       creator: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} |',
                   $creator,
 ($author_txt ne '') ?
@@ -108,9 +135,17 @@
 {bullet => 'last merge log:'},
 '|last merge log: {[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[} |',
                   $merge_log;
+    }
+    else {
+        say join('||','',
+            "[source:/branches/$branch $branch]", $revisions_wiki, $creator,
+            $author_txt, $created_date, $updated_date, $components,
+            "[log:/branches/$branch $number_commits]", $merge_rev
+        );
+    }
 }
 
-say '+', '=' x 68, '+';
+say '+', '=' x 68, '+' if $human;
 
 # Local Variables:
 #   mode: cperl

Modified: branches/ops_pct/tools/dev/checkdepend.pl
==============================================================================
--- branches/ops_pct/tools/dev/checkdepend.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/checkdepend.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -49,7 +49,7 @@
 
 foreach my $file (sort grep /\.[hc]$/, @incfiles) {
     # For now, skip any files that have generated dependencies
-    next if $file =~ m{src/(ops|dynoplibs|dynpmc|pmc)/};
+    next if $file =~ m{src/(ops|dynoplibs|pmc)/};
     next if $file =~ m{src/string/(charset|encoding)/};
 
     open my $fh, '<', $file;
@@ -85,6 +85,11 @@
 
         diag "couldn't find $include, included from $file";
     }
+    # always require an explicit .o -> .c dep. This is lazy and not always
+    # needed. However, missing it when it is needed causes pain.
+    if ($file =~ /\.c$/) {
+        push @{$deps{$file}}, $file;
+    }
 }
 
 foreach my $file (sort grep /\.pir$/, @incfiles) {
@@ -267,7 +272,7 @@
         $rule_deps        = join "\n", sort split /\s+/, $rule_deps;
         my $expected_deps = join "\n", sort (get_deps($file));
 
-        eq_or_diff_text($rule_deps, $expected_deps, "$file has correct dependencies $extra_info.", {context => 0});
+        eq_or_diff_text($rule_deps, $expected_deps, "$file $extra_info.", {context => 0});
     }
 }
 

Copied: branches/ops_pct/tools/dev/faces.pl (from r46301, trunk/tools/dev/faces.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/tools/dev/faces.pl	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/tools/dev/faces.pl)
@@ -0,0 +1,47 @@
+#! perl
+# $Id$
+# Copyright (C) 2010, Parrot Foundation.
+
+use strict;
+use warnings;
+
+use Gravatar::URL;
+
+=for usage
+
+use to generate source for http://trac.parrot.org/parrot/wiki/ParrotFaces
+
+=cut
+
+open my $fh, '<', 'CREDITS';
+
+my %urls;
+while(<$fh>) {
+    next unless /^E: (.*)/;
+    my $email = lc $1;
+    next if $email eq 'svn at perl.org' or
+            $email eq 'cvs at perl.org';
+    if (!exists $urls{$email}) {
+        $urls{$email} = gravatar_url(
+            email   => $email,
+            rating  => 'r',
+            size    => 80,
+            default => 'wavatar',
+        );
+    }
+    else {
+        warn "duplicated email address in CREDITS: $email\n";
+    }
+}
+
+foreach my $email (sort keys %urls) {
+    print "[[Image($urls{$email},title=$email)]]\n";
+}
+print "[[BR]]''Generated by $0''\n";
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/tools/dev/gen_charset_tables.pl
==============================================================================
--- branches/ops_pct/tools/dev/gen_charset_tables.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/gen_charset_tables.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -38,15 +38,13 @@
 # charset tables to create
 #
 my %table = (
-    "en_US.iso88591" => "Parrot_iso_8859_1_typetable",
-
-    #    "en_US.iso885915" => "Parrot_iso_8859_15_typetable",
-    "POSIX" => "Parrot_ascii_typetable",
+    'en_US.iso88591' => 'Parrot_iso_8859_1_typetable',
+    'POSIX'          => 'Parrot_ascii_typetable',
 );
 
 my $header = <<"HEADER";
 /* $fileid
- * Copyright (C) 2005-2007, Parrot Foundation.
+ * Copyright (C) 2005-2010, Parrot Foundation.
  *
  * DO NOT EDIT THIS FILE DIRECTLY!
  * please update the $0 script instead.
@@ -54,10 +52,6 @@
  * Created by $svnid
  *  Overview:
  *     This file contains various charset tables.
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
  */
 
 /* HEADERIZER HFILE: none */

Modified: branches/ops_pct/tools/dev/install_files.pl
==============================================================================
--- branches/ops_pct/tools/dev/install_files.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/install_files.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -159,9 +159,11 @@
             my($filehash) = @_;
             # For the time being this is hardcoded as being installed under
             # libdir as it is typically done with automake installed packages.
-            # If there is a use case to make this configurable we'll add a
-            # seperate --pkgconfigdir option.
+            # If the --pkgconfigdir option is used, then the default value will
+            # be overwritten with the specified subdirectory under libdir.
             $filehash->{DestDirs} = ['pkgconfig', $parrotdir];
+            $filehash->{DestDirs} = [$options{pkgconfigdir}]
+                if $options{pkgconfigdir};
             return($filehash);
         },
     },

Modified: branches/ops_pct/tools/dev/mk_inno.pl
==============================================================================
--- branches/ops_pct/tools/dev/mk_inno.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/mk_inno.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -34,7 +34,6 @@
 } if ($PConfig{has_icu});
 
 my %dll = (
-    has_gdbm     => [ 'gdbm3.dll' ],
     HAS_GETTEXT  => [ 'libintl3.dll', 'libiconv2.dll' ],
     HAS_PCRE     => [ 'pcre3.dll' ],
     HAS_READLINE => [ 'readline5.dll' ],

Modified: branches/ops_pct/tools/dev/mk_manifest_and_skip.pl
==============================================================================
--- branches/ops_pct/tools/dev/mk_manifest_and_skip.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/mk_manifest_and_skip.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -1,6 +1,6 @@
-##! perl
+#! perl
 # $Id$
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 
 use strict;
 use warnings;
@@ -38,10 +38,12 @@
 
 =head1 DESCRIPTION
 
-Recreates MANIFEST and MANIFEST.SKIP from the subversion properties
-and the output of C<svn status>. .
-So far tested with svn 1.2.0 and svn 1.4.2.  This also worked with svk 1.08,
-but to keep our tasks manageable, we only guarantee support for Subversion.
+Recreates MANIFEST and MANIFEST.SKIP from the output of C<svn status> and the subversion properties. Run this script after SVN has been told about new or deleted files and before you commit to the repository. So far tested with svn 1.2.0, 1.4.2 and 1.6.6.
+
+    svn add PATH...
+    svn delete PATH...
+    perl tools/dev/mk_manifest_and_skip.pl
+    svn commit -m ... [PATH...]
 
 This won't work for git-svn.
 

Modified: branches/ops_pct/tools/dev/mk_native_pbc
==============================================================================
--- branches/ops_pct/tools/dev/mk_native_pbc	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/mk_native_pbc	Wed May  5 08:45:29 2010	(r46302)
@@ -177,4 +177,4 @@
 
 echo ""
 echo "cd t/native_pbc"
-echo svn commit -m'native_pbc platform updates'
+echo "svn commit -m 'native_pbc platform updates'"

Modified: branches/ops_pct/tools/dev/nci_thunk_gen.pir
==============================================================================
--- branches/ops_pct/tools/dev/nci_thunk_gen.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/nci_thunk_gen.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -381,8 +381,7 @@
 
     $S0 = 'get_loader_decl'(sigs)
     $S1 = 'get_loader_body'(sigs)
-    $S2 = 'sprintf'(<<'LOADER', $S0, $S0, $S1)
-%s;
+    $S2 = 'sprintf'(<<'LOADER', $S0, $S1)
 %s {
 %s
 }
@@ -406,8 +405,7 @@
 
     $S0 = 'get_dynext_loader_decl'(sigs)
     $S1 = 'get_loader_body'(sigs)
-    $S2 = 'sprintf'(<<'LOADER', $S0, $S0, $S1)
-%s;
+    $S2 = 'sprintf'(<<'LOADER', $S0, $S1)
 %s {
 %s
 }
@@ -431,15 +429,13 @@
     .param pmc sigs
     .local string code
     code = 'sprintf'(<<'HEADER', $S0, $S1)
-    PMC *iglobals;
+    PMC * const iglobals = interp->iglobals;
     PMC *nci_funcs;
     PMC *temp_pmc;
 
-    iglobals = interp->iglobals;
     PARROT_ASSERT(!(PMC_IS_NULL(iglobals)));
 
-    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals,
-            IGLOBALS_NCI_FUNCS);
+    nci_funcs = VTABLE_get_pmc_keyed_int(interp, iglobals, IGLOBALS_NCI_FUNCS);
     PARROT_ASSERT(!(PMC_IS_NULL(nci_funcs)));
 
 HEADER
@@ -561,7 +557,7 @@
 
     .local string call
     call = 'sprintf'(<<'TEMPLATE', return_assign, ret_cast, call_params)
-    GETATTR_NCI_orig_func(interp, self, orig_func);
+    GETATTR_NCI_orig_func(interp, nci, orig_func);
     fn_pointer = (func_t)D2FPTR(orig_func);
     %s %s(*fn_pointer)(%s);
 TEMPLATE
@@ -640,10 +636,12 @@
     typedef %s(* func_t)(%s);
     func_t fn_pointer;
     void *orig_func;
-    PMC *ctx         = CURRENT_CONTEXT(interp);
-    PMC *call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ctx         = CURRENT_CONTEXT(interp);
+    PMC * const call_object = Parrot_pcc_get_signature(interp, ctx);
+    PMC *       ret_object  = PMCNULL;
     %s
     %s;
+    UNUSED(return_data); /* Potentially unused, at least */
 TEMPLATE
 
     .return (var_decls)
@@ -656,7 +654,7 @@
     fn_name = 'sig_to_fn_name'(sig :flat)
     fn_decl = 'sprintf'(<<'TEMPLATE', storage_class, fn_name)
 %s void
-%s(PARROT_INTERP, PMC *self)
+%s(PARROT_INTERP, PMC *nci, SHIM(PMC *self))
 TEMPLATE
     .return (fn_decl)
 .end
@@ -778,7 +776,7 @@
         inner_whitespace_loop:
             $I0 = index line, $S0
             if $I0 < 0 goto end_inner_whitespace_loop
-            substr line, $I0, 1, ' '
+            line = replace line, $I0, 1, ' '
             goto inner_whitespace_loop
         end_inner_whitespace_loop:
 
@@ -789,14 +787,16 @@
     multispace_loop:
         $I0 = index line, '  '
         if $I0 < 0 goto end_multispace_loop
-        $S0 = substr line, $I0, 2, ' '
+        $S0  = substr line, $I0, 2
+        line = replace line, $I0, 2, ' '
         goto multispace_loop
     end_multispace_loop:
 
     # remove leading whitespace
     $S0 = substr line, 0, 1
     unless $S0 == ' ' goto end_leading
-        $S0 = substr line, 0, 1, ''
+        $S0  = substr line, 0, 1
+        line = replace line, 0, 1, ' '
     end_leading:
 
     # handle empty (or whitespace only) lines
@@ -806,7 +806,8 @@
     # remove trailing whitespace
     $S0 = substr line, -1, 1
     unless $S0 == ' ' goto end_trailing
-        $S0 = substr line, -1, 1, ''
+        $S0  = substr line, -1, 1
+        line = replace line, -1, 1, ''
     end_trailing:
 
     # read the signature
@@ -835,7 +836,7 @@
                              final_destination = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
                              VTABLE_set_pointer(interp, final_destination, return_data);
                           }
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, \"P\", final_destination);" },
+                          ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"P\", final_destination);" },
     "i": { "as_proto": "int", "sig_char": "I",
            "return_type": "INTVAL" },
     "l": { "as_proto": "long",   "sig_char": "I", "return_type": "INTVAL" },
@@ -846,7 +847,7 @@
     "t": { "as_proto": "char *",
            "final_dest": "STRING *final_destination;",
            "ret_assign": "final_destination = Parrot_str_new(interp, return_data, 0);
-                          Parrot_pcc_fill_returns_from_c_args(interp, call_object, \"S\", final_destination);",
+           ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"S\", final_destination);",
            "sig_char": "S",
            "temp_tmpl": "char *t_%i; STRING *ts_%i",
            "fill_params_tmpl": ", &ts_%i",
@@ -884,7 +885,7 @@
     "2": { "as_proto": "short *",
            "sig_char": "P",
            "return_type": "short",
-           "ret_assign": "Parrot_pcc_fill_returns_from_c_args(interp, call_object, \"I\", return_data);",
+           "ret_assign": "ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
            "temp_tmpl": "PMC *t_%i; short i_%i",
            "preamble_tmpl": "i_%i = VTABLE_get_integer(interp, t_%i);",
            "call_param_tmpl": "&i_%i",
@@ -892,7 +893,7 @@
     "3": { "as_proto": "int *",
            "sig_char": "P",
            "return_type": "int",
-           "ret_assign": "Parrot_pcc_fill_returns_from_c_args(interp, call_object, \"I\", return_data);",
+           "ret_assign": "ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
            "temp_tmpl": "PMC *t_%i; int i_%i",
            "preamble_tmpl": "i_%i = VTABLE_get_integer(interp, t_%i);",
            "call_param_tmpl": "&i_%i",
@@ -900,7 +901,7 @@
     "4": { "as_proto": "long *",
            "sig_char": "P",
            "return_type": "long",
-           "ret_assign": "Parrot_pcc_fill_returns_from_c_args(interp, call_object, \"I\", return_data);",
+           "ret_assign": "ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, \"I\", return_data);",
            "temp_tmpl": "PMC *t_%i; long i_%i",
            "preamble_tmpl": "i_%i = VTABLE_get_integer(interp, t_%i);",
            "call_param_tmpl": "&i_%i",
@@ -920,7 +921,7 @@
 
     # decode table
     .local pmc compiler
-    load_bytecode 'data_json.pbc'
+    load_language 'data_json'
     compiler = compreg 'data_json'
 
     .local pmc table
@@ -960,7 +961,7 @@
     $I1 = !$I1
     $I0 = $I0 || $I1 # not (not exists v[ret_assign] and exists v[sig_char])
     if $I0 goto has_ret_assign
-        $S0 = 'Parrot_pcc_fill_returns_from_c_args(interp, call_object, "'
+        $S0 = 'ret_object = Parrot_pcc_build_call_from_c_args(interp, call_object, "'
         $S1 = v['sig_char']
         $S0 = concat $S0, $S1
         $S0 = concat $S0, '", return_data);'
@@ -1113,7 +1114,7 @@
         $S1 = substr file, $I1, $I0
         unless $S1 == $S0 goto extn_loop
         extn = $S1
-        substr file, $I1, $I0, ''
+        file = replace file, $I1, $I0, ''
     end_extn_loop:
 
     .return (dir, file, extn)

Modified: branches/ops_pct/tools/dev/parrot-fuzzer
==============================================================================
--- branches/ops_pct/tools/dev/parrot-fuzzer	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/parrot-fuzzer	Wed May  5 08:45:29 2010	(r46302)
@@ -62,7 +62,7 @@
 
 Specify which runcore to use when running Parrot.  The default is the C<slow>
 core.  This option corresponds directly to Parrot's C<--runcore> option.  Other
-runcores include C<fast>, C<jit>, C<cgoto>, C<cgp>, C<cgp-jit>, and C<switch>.
+runcores include C<fast>.
 See Parrot's help for more details.
 
 =item C<--ignore_blacklist>

Modified: branches/ops_pct/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/ops_pct/tools/dev/pbc_to_exe.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/dev/pbc_to_exe.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -1,5 +1,5 @@
 #! parrot
-# Copyright (C) 2009, Parrot Foundation.
+# Copyright (C) 2009-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -32,7 +32,7 @@
     .local string objfile
     .local string exefile
 
-    (infile, cfile, objfile, exefile) = 'handle_args'(argv)
+    (infile :optional, cfile :optional, objfile :optional, exefile :optional) = 'handle_args'(argv)
     unless infile > '' goto err_infile
 
     .local string code_type
@@ -66,7 +66,7 @@
     print outfh, codestring
 
     print outfh, <<'MAIN'
-        int main(int argc, char *argv[])
+        int main(int argc, const char *argv[])
         {
             PackFile     *pf;
             Parrot_Interp interp;
@@ -155,8 +155,8 @@
   check_install:
     .local string infile, install
 
-    $P0    = shift args
-    infile = shift args
+    $P0     = shift args
+    infile  = shift args
     install = shift args
     if install == '--install' goto proper_install
     .return ()
@@ -217,9 +217,12 @@
     .local pmc ifh
     ifh = open infile, 'r'
     unless ifh goto err_infile
-    .local string codestring
+
+    .local pmc codestring
     .local int size
-    codestring = "const Parrot_UInt1 program_code[] = {"
+
+    codestring = new [ 'ResizableStringArray' ]
+    push codestring, "const Parrot_UInt1 program_code[] = {"
     size = 0
 
   read_loop:
@@ -236,33 +239,37 @@
     unless pos < pbclength goto code_done
     $I0 = ord pbcstring, pos
     $S0 = $I0
-    codestring .= $S0
-    codestring .= ','
+    push codestring, $S0
+    push codestring, ','
     inc pos
     inc size
     $I0 = size % 32
     unless $I0 == 0 goto code_loop
-    codestring .= "\n"
+    push codestring, "\n"
     goto code_loop
   code_done:
+    # Join current strings to avoid storing too much
+    $S0 = join '', codestring
+    codestring = 0
+    push codestring, $S0
     goto read_loop
 
   read_done:
     close ifh
 
-    codestring .= "\n};\n\n"
-    codestring .= "const int bytecode_size = "
+    push codestring, "\n};\n\nconst int bytecode_size = "
     $S0 = size
-    codestring .= $S0
-    codestring .= ";\n"
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, $S0
+    push codestring, ";\n"
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             return program_code;
         }
 END_OF_FUNCTION
 
-    .return (codestring)
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_infile:
     die "cannot open infile"
@@ -307,10 +314,13 @@
     .local pmc encoding_table
     encoding_table = 'generate_encoding_table'()
 
-    .local string codestring
+    .local pmc codestring
     .local int size
-    codestring = "const char * program_code =\n"
-    codestring .= '"'
+
+    codestring = new ['ResizableStringArray']
+
+    push codestring, "const char * program_code =\n"
+    push codestring, '"'
     size = 0
 
   read_loop:
@@ -327,36 +337,41 @@
     unless pos < pbclength goto code_done
     $I0 = ord pbcstring, pos
     $S0 = encoding_table[$I0]
-    codestring .= $S0
+    push codestring, $S0
     inc pos
     inc size
     $I0 = size % 32
     unless $I0 == 0 goto code_loop
-    codestring .= '"'
-    codestring .= "\n"
-    codestring .= '"'
+    push codestring, '"'
+    push codestring, "\n"
+    push codestring, '"'
     goto code_loop
   code_done:
+    # Join current strings to avoid storing too much
+    $S0 = join '', codestring
+    codestring = 0
+    push codestring, $S0
     goto read_loop
 
   read_done:
     close ifh
 
-    codestring .= '"'
-    codestring .= "\n;\n\n"
-    codestring .= "const int bytecode_size = "
+    push codestring, '"'
+    push codestring, "\n;\n\n"
+    push codestring, "const int bytecode_size = "
     $S0 = size
-    codestring .= $S0
-    codestring .= ";\n"
+    push codestring, $S0
+    push codestring, ";\n"
 
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             return program_code;
         }
 END_OF_FUNCTION
 
-    .return (codestring)
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_infile:
     die "cannot open infile"
@@ -371,11 +386,10 @@
     .param string new_extension
 
     $S0 = substr pbc_path, -4
-    downcase $S0
+    $S0 = downcase $S0
     if $S0 != '.pbc' goto err_pbc_path_not_pbc
     .local string base_path
-     base_path = substr pbc_path, 0
-     substr base_path, -4, 4, ''
+     base_path = replace pbc_path, -4, 4, ''
 
     .local string new_path
     new_path = substr base_path, 0
@@ -432,22 +446,22 @@
 
 
     .local int pbc_size
+    $P0 = loadlib 'os'
     $P1 = new ['OS']
     $P2 = $P1.'stat'(pbc_path)
     pbc_size = $P2[7]
 
 
-    .local string codestring
-    codestring  = ''
-    codestring .= '#include <windows.h>'
-    codestring .= "\n"
-    codestring .= rc_constant_defines
-    codestring .= "const unsigned int bytecode_size = "
+    .local pmc codestring
+    codestring  = new [ 'ResizableStringArray' ]
+    push codestring, "#include <windows.h>\n"
+    push codestring, rc_constant_defines
+    push codestring, "const unsigned int bytecode_size = "
     $S0 = pbc_size
-    codestring .= $S0
-    codestring .= ";\n"
+    push codestring, $S0
+    push codestring, ";\n"
 
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             HRSRC   hResource;
@@ -489,9 +503,10 @@
     unless status goto rc_ok
 
     die "RC command failed"
-  rc_ok:
 
-    .return (codestring)
+  rc_ok:
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_h_open:
     die "cannot open .h file"
@@ -654,6 +669,7 @@
   check_manifest:
     # Check if there is a MSVC app manifest
     .local pmc file
+    $P0 = loadlib 'file'
     file = new 'File'
     .local string manifest_file_name
     manifest_file_name  = clone exefile
@@ -687,19 +703,14 @@
 .sub 'prepend_installable'
     .param string file
 
-    $P0   = '_config'()
-
-    .local string slash
-    slash = $P0['slash']
-
     .local pmc path
-    path = split slash, file
+    path     = split '/', file
 
     file     = path[-1]
     file     = concat 'installable_', file
     path[-1] = file
 
-    file     = join slash, path
+    file     = join '/', path
 
     .return( file )
 .end

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

Copied: branches/ops_pct/tools/docs/filename_and_chapter.pl (from r46301, trunk/tools/docs/filename_and_chapter.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/tools/docs/filename_and_chapter.pl	Wed May  5 08:45:29 2010	(r46302, copy of r46301, trunk/tools/docs/filename_and_chapter.pl)
@@ -0,0 +1,90 @@
+#! perl
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+#
+# perl script that writes modified POD files to the directory
+# 'build/modified_pod'. Then this script generates a latex file from
+# this POD.
+#
+
+use strict;
+use warnings;
+
+use Getopt::Long ();
+use Pod::PseudoPod::LaTeX;
+
+my $item_list_ref = [ ['intro.pod', 'Introduction to Parrot'],
+                      ['overview.pod', 'Overview'],
+                      ['submissions.pod', 'Submitting bug reports and patches'],
+                    ];
+
+my $lang = @$item_list_ref - 1;
+my $MOD_BUILD_PATH='build/modified_pod/';
+
+my ( $result, $give_out );
+
+$result = Getopt::Long::GetOptions (
+    "print" => \$give_out,
+);
+
+if ($give_out)  {
+    for my $i ( 0.. $lang )
+        { print $item_list_ref->[$i][0], "\n" }
+    exit;
+};
+
+
+for my $i ( 0..$lang ) {
+    write_mod( $i );
+}
+
+
+open my $TEX_FH, '>', 'build/parrot-book.tex';
+
+print $TEX_FH <<'HEADER';
+\documentclass[11pt,a4paper,oneside]{report}
+\usepackage{graphics,graphicx}
+\usepackage{colortbl}
+
+\begin{document}
+\tableofcontents
+HEADER
+
+for my $i ( 0..$lang ) {
+    my $parser = Pod::PseudoPod::LaTeX->new();
+    $parser->output_fh( $TEX_FH );
+    $parser->parse_file( "${MOD_BUILD_PATH}$item_list_ref->[$i][0]" );
+}
+
+print $TEX_FH <<'FOOTER';
+\end{document}
+FOOTER
+
+close( $TEX_FH );
+
+
+sub write_mod {
+    my $icnt;
+
+    open( my $IN_FH, '<', $item_list_ref->[$_[0]][0] ) or
+        die "$0: can't open $item_list_ref->[$_[0]][0] for reading ($!)\n";
+    open( my $OUT_FH, '>', "${MOD_BUILD_PATH}$item_list_ref->[$_[0]][0]" ) or
+        die "$0: can't open ${MOD_BUILD_PATH}$item_list_ref->[$_[0]][0]: $!\n";
+
+    # do the same as: sed -e '4,6c\=head0 $item_list_ref->[$i][1]'
+    while( <$IN_FH> ) {
+        if ( $icnt = (4..6) ) {
+            if ( $icnt =~ /E0$/ ) {
+                print $OUT_FH "=head0 $item_list_ref->[$_[0]][1]\n";
+            }
+        }
+        else { print $OUT_FH $_ }
+    }
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/tools/install/smoke.pl
==============================================================================
--- branches/ops_pct/tools/install/smoke.pl	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/install/smoke.pl	Wed May  5 08:45:29 2010	(r46302)
@@ -9,7 +9,7 @@
 use Getopt::Long;
 use File::Spec::Functions;
 
-use Test::More tests => 8;
+use Test::More tests => 7;
 
 =head1 NAME
 
@@ -146,16 +146,6 @@
 ok($out =~ /^\n\.sub '_ROOT_past'/, "check TGE");
 unlink($filename);
 
-# compilers/nqp is typically not installed
-$filename = 'test.nqp';
-open $FH, '>', $filename
-        or die "Can't open $filename ($!).\n";
-print $FH "say('hello world!');\n";
-close $FH;
-$out = `$parrot $compdir/nqp/nqp.pbc $filename`;
-ok($out eq "hello world!\n", "check nqp");
-unlink($filename);
-
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/ops_pct/tools/util/parrot-config.pir
==============================================================================
--- branches/ops_pct/tools/util/parrot-config.pir	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/util/parrot-config.pir	Wed May  5 08:45:29 2010	(r46302)
@@ -46,18 +46,32 @@
     if key == '--help' goto usage
     if key == '--dump' goto dump
     $I0 = defined conf_hash[key]
-    if $I0 goto ok2
-    print " no such key: '"
-    print key
-    print "'\n"
-    end
-ok2:
+    unless $I0 goto failkey
+    dec argc
+    if i < argc goto dumpsome
     $S0 = conf_hash[key]
     print $S0
     inc i
     if i < argc goto loop
     print "\n"
     end
+dumpsome:
+    key = argv[i]
+    $I0 = defined conf_hash[key]
+    unless $I0 goto failkey
+    print key
+    print " => '"
+    $S1 = conf_hash[key]
+    print $S1
+    say "'"
+    inc i
+    if i <= argc goto dumpsome
+    end
+failkey:
+    print " no such key: '"
+    print key
+    print "'\n"
+    end
 dump:
    .local pmc iterator
     iterator = iter conf_hash

Modified: branches/ops_pct/tools/util/pgegrep
==============================================================================
--- branches/ops_pct/tools/util/pgegrep	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/util/pgegrep	Wed May  5 08:45:29 2010	(r46302)
@@ -130,7 +130,9 @@
 	filecount = files
 	# define with-filename if there's more than one file
 	.If(filecount >= 2, { opts['with-filename'] = 1 })
+        $P0 = loadlib 'file'
 	File = new 'File'
+        $P0 = loadlib 'os'
 	OS = new 'OS'
 	# This must be here, or else it'll get filled with junk data we use stdin...
 	i = 0

Modified: branches/ops_pct/tools/util/release.json
==============================================================================
--- branches/ops_pct/tools/util/release.json	Wed May  5 08:26:03 2010	(r46301)
+++ branches/ops_pct/tools/util/release.json	Wed May  5 08:45:29 2010	(r46302)
@@ -1,9 +1,9 @@
 {
-    "release.version"  : "2.0.0",
-    "release.name"     : "Inevitable",
+    "release.version"  : "2.3.0",
+    "release.name"     : "Samoan Lory",
     "release.day"      : "Tuesday",
-    "release.date"     : "16 Februuary 2010",
-    "release.nextdate" : "16 March 2010",
+    "release.date"     : "20 April 2010",
+    "release.nextdate" : "18 May 2010",
 
     "web.root"         : "http://parrot.org/",
     "web.source"       : "download",
@@ -11,13 +11,13 @@
     "web.repository"   : "https://svn.parrot.org/parrot/trunk/",
 
     "bugday.day"       : "Saturday",
-    "bugday.date"      : "13 March 2010",
+    "bugday.date"      : "17 April 2010",
 
     "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
-    "wiki.bugday"      : "bug_day_2010_03_13",
+    "wiki.bugday"      : "bug_day_2010_04_17",
 
     "cpan.search"      : "http://search.cpan.org/dist/parrot",
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/devel/stable/2.1.0/",
-    "subversion.root"  : "http://subversion.tigris.org/",
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/stable/2.3.0/",
+    "subversion.root"  : "http://subversion.apache.org/",
     "svk.root"         : "http://svk.bestpractical.com/"
 }


More information about the parrot-commits mailing list