[svn:parrot] r45876 - in branches/include_dynpmc_makefile: . compilers/data_json compilers/data_json/data_json compilers/imcc compilers/json compilers/json/JSON compilers/ncigen compilers/ncigen/src compilers/nqp compilers/nqp/bootstrap compilers/nqp/src 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/pirc/t compilers/tge compilers/tge/TGE config/auto config/auto/attributes config/auto/crypto config/auto/gdbm config/auto/sizes config/gen 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 docs/book/draft docs/book/pct docs/dev docs/ops docs/pdds docs/pdds/draft docs/pmc docs/project editor examples/embed examples/languages/abc examples/languages/abc/src examples/languages/abc/t examples/languages/ squaak examples/languages/squaak/src examples/mops examples/nci examples/pasm examples/pge examples/pir/befunge examples/tutorial ext ext/Parrot-Embed ext/Parrot-Embed/lib/Parrot ext/Parrot-Embed/t ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib include/pmc lib lib/Parrot lib/Parrot/Config lib/Parrot/Configure/Options lib/Parrot/Configure/Options/Test lib/Parrot/Configure/Step lib/Parrot/Harness lib/Parrot/OpTrans lib/Parrot/Ops2c lib/Parrot/Pmc2c lib/Parrot/Pmc2c/PMC ports/cpan ports/cygwin ports/debian ports/fedora ports/fedora/2.3.0 ports/mandriva ports/suse ports/suse/2.2.0 ports/ubuntu runtime/parrot/dynext runtime/parrot/include runtime/parrot/languages runtime/parrot/library runtime/parrot/library/CGI runtime/parrot/library/Config runtime/parrot/library/Configure runtime/parrot/library/Data runtime/parrot/library/Data/Dumper runtime/parrot/library/Digest runtime/parrot/library/Getopt runtime/parrot/library/HTTP runtime/parrot/library/MIME runtime/ parrot/library/Math runtime/parrot/library/NCI runtime/parrot/library/OpenGL runtime/parrot/library/PCT runtime/parrot/library/PGE runtime/parrot/library/Parrot runtime/parrot/library/ProfTest runtime/parrot/library/Stream runtime/parrot/library/String runtime/parrot/library/TAP runtime/parrot/library/Tcl runtime/parrot/library/Test runtime/parrot/library/Test/Builder runtime/parrot/library/YAML runtime/parrot/library/YAML/Dumper runtime/parrot/library/YAML/Parser src src/atomic 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/benchmark t/codingstd t/compilers/imcc 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/distro t/dynoplibs t/dynpmc t/examples t/library t/native_pbc t/oo t/op t/perl t/pmc t/profiling t/src t/steps/auto t/s teps/gen t/steps/init t/steps/init/hints t/steps/inter t/stress t/tools tools/build tools/dev tools/docs tools/util

darbelo at svn.parrot.org darbelo at svn.parrot.org
Wed Apr 21 23:41:11 UTC 2010


Author: darbelo
Date: Wed Apr 21 23:40:50 2010
New Revision: 45876
URL: https://trac.parrot.org/parrot/changeset/45876

Log:
Sync branch with trunk.

Added:
   branches/include_dynpmc_makefile/.gitignore
      - copied unchanged from r45870, trunk/.gitignore
   branches/include_dynpmc_makefile/compilers/data_json/.gitignore
      - copied unchanged from r45870, trunk/compilers/data_json/.gitignore
   branches/include_dynpmc_makefile/compilers/data_json/data_json/.gitignore
      - copied unchanged from r45870, trunk/compilers/data_json/data_json/.gitignore
   branches/include_dynpmc_makefile/compilers/imcc/.gitignore
      - copied unchanged from r45870, trunk/compilers/imcc/.gitignore
   branches/include_dynpmc_makefile/compilers/json/.gitignore
      - copied unchanged from r45870, trunk/compilers/json/.gitignore
   branches/include_dynpmc_makefile/compilers/json/JSON/.gitignore
      - copied unchanged from r45870, trunk/compilers/json/JSON/.gitignore
   branches/include_dynpmc_makefile/compilers/ncigen/.gitignore
      - copied unchanged from r45870, trunk/compilers/ncigen/.gitignore
   branches/include_dynpmc_makefile/compilers/ncigen/src/.gitignore
      - copied unchanged from r45870, trunk/compilers/ncigen/src/.gitignore
   branches/include_dynpmc_makefile/compilers/nqp/.gitignore
      - copied unchanged from r45870, trunk/compilers/nqp/.gitignore
   branches/include_dynpmc_makefile/compilers/nqp/bootstrap/.gitignore
      - copied unchanged from r45870, trunk/compilers/nqp/bootstrap/.gitignore
   branches/include_dynpmc_makefile/compilers/nqp/src/.gitignore
      - copied unchanged from r45870, trunk/compilers/nqp/src/.gitignore
   branches/include_dynpmc_makefile/compilers/pct/src/PAST/.gitignore
      - copied unchanged from r45870, trunk/compilers/pct/src/PAST/.gitignore
   branches/include_dynpmc_makefile/compilers/pct/src/PCT/.gitignore
      - copied unchanged from r45870, trunk/compilers/pct/src/PCT/.gitignore
   branches/include_dynpmc_makefile/compilers/pct/src/POST/.gitignore
      - copied unchanged from r45870, trunk/compilers/pct/src/POST/.gitignore
   branches/include_dynpmc_makefile/compilers/pge/.gitignore
      - copied unchanged from r45870, trunk/compilers/pge/.gitignore
   branches/include_dynpmc_makefile/compilers/pge/PGE/.gitignore
      - copied unchanged from r45870, trunk/compilers/pge/PGE/.gitignore
   branches/include_dynpmc_makefile/compilers/pirc/.gitignore
      - copied unchanged from r45870, trunk/compilers/pirc/.gitignore
   branches/include_dynpmc_makefile/compilers/pirc/t/.gitignore
      - copied unchanged from r45870, trunk/compilers/pirc/t/.gitignore
   branches/include_dynpmc_makefile/compilers/tge/.gitignore
      - copied unchanged from r45870, trunk/compilers/tge/.gitignore
   branches/include_dynpmc_makefile/compilers/tge/TGE/.gitignore
      - copied unchanged from r45870, trunk/compilers/tge/TGE/.gitignore
   branches/include_dynpmc_makefile/config/gen/config_pm/config_lib_pir.in
      - copied unchanged from r45870, trunk/config/gen/config_pm/config_lib_pir.in
   branches/include_dynpmc_makefile/docs/.gitignore
      - copied unchanged from r45870, trunk/docs/.gitignore
   branches/include_dynpmc_makefile/docs/book/.gitignore
      - copied unchanged from r45870, trunk/docs/book/.gitignore
   branches/include_dynpmc_makefile/docs/ops/.gitignore
      - copied unchanged from r45870, trunk/docs/ops/.gitignore
   branches/include_dynpmc_makefile/editor/.gitignore
      - copied unchanged from r45870, trunk/editor/.gitignore
   branches/include_dynpmc_makefile/examples/languages/abc/.gitignore
      - copied unchanged from r45870, trunk/examples/languages/abc/.gitignore
   branches/include_dynpmc_makefile/examples/languages/abc/src/.gitignore
      - copied unchanged from r45870, trunk/examples/languages/abc/src/.gitignore
   branches/include_dynpmc_makefile/examples/languages/abc/t/.gitignore
      - copied unchanged from r45870, trunk/examples/languages/abc/t/.gitignore
   branches/include_dynpmc_makefile/examples/languages/squaak/.gitignore
      - copied unchanged from r45870, trunk/examples/languages/squaak/.gitignore
   branches/include_dynpmc_makefile/examples/languages/squaak/src/.gitignore
      - copied unchanged from r45870, trunk/examples/languages/squaak/src/.gitignore
   branches/include_dynpmc_makefile/examples/mops/.gitignore
      - copied unchanged from r45870, trunk/examples/mops/.gitignore
   branches/include_dynpmc_makefile/examples/nci/.gitignore
      - copied unchanged from r45870, trunk/examples/nci/.gitignore
   branches/include_dynpmc_makefile/examples/pasm/.gitignore
      - copied unchanged from r45870, trunk/examples/pasm/.gitignore
   branches/include_dynpmc_makefile/examples/pir/befunge/.gitignore
      - copied unchanged from r45870, trunk/examples/pir/befunge/.gitignore
   branches/include_dynpmc_makefile/ext/.gitignore
      - copied unchanged from r45870, trunk/ext/.gitignore
   branches/include_dynpmc_makefile/ext/Parrot-Embed/.gitignore
      - copied unchanged from r45870, trunk/ext/Parrot-Embed/.gitignore
   branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/.gitignore
      - copied unchanged from r45870, trunk/ext/Parrot-Embed/lib/Parrot/.gitignore
   branches/include_dynpmc_makefile/ext/Parrot-Embed/t/.gitignore
      - copied unchanged from r45870, trunk/ext/Parrot-Embed/t/.gitignore
   branches/include_dynpmc_makefile/include/parrot/.gitignore
      - copied unchanged from r45870, trunk/include/parrot/.gitignore
   branches/include_dynpmc_makefile/include/parrot/oplib/.gitignore
      - copied unchanged from r45870, trunk/include/parrot/oplib/.gitignore
   branches/include_dynpmc_makefile/include/parrot/platform_interface.h
      - copied unchanged from r45870, trunk/include/parrot/platform_interface.h
   branches/include_dynpmc_makefile/include/pmc/.gitignore
      - copied unchanged from r45870, trunk/include/pmc/.gitignore
   branches/include_dynpmc_makefile/lib/.gitignore
      - copied unchanged from r45870, trunk/lib/.gitignore
   branches/include_dynpmc_makefile/lib/Parrot/.gitignore
      - copied unchanged from r45870, trunk/lib/Parrot/.gitignore
   branches/include_dynpmc_makefile/lib/Parrot/Config/.gitignore
      - copied unchanged from r45870, trunk/lib/Parrot/Config/.gitignore
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/.gitignore
      - copied unchanged from r45870, trunk/lib/Parrot/Pmc2c/.gitignore
   branches/include_dynpmc_makefile/ports/debian/.gitignore
      - copied unchanged from r45870, trunk/ports/debian/.gitignore
   branches/include_dynpmc_makefile/ports/fedora/2.3.0/
      - copied from r45870, trunk/ports/fedora/2.3.0/
   branches/include_dynpmc_makefile/ports/suse/2.2.0/
      - copied from r45870, trunk/ports/suse/2.2.0/
   branches/include_dynpmc_makefile/runtime/parrot/dynext/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/dynext/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/include/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/include/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/CGI/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/CGI/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Config/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Config/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Configure/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Configure/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Data/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Data/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Data/Dumper/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Data/Dumper/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Digest/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Digest/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Getopt/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/MIME/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/MIME/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Math/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Math/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/NCI/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/NCI/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/OpenGL/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/OpenGL/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/PCT/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/PCT/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/PGE/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/PGE/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Parrot/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Parrot/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/   (props changed)
      - copied from r45870, trunk/runtime/parrot/library/ProfTest/
   branches/include_dynpmc_makefile/runtime/parrot/library/Stream/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Stream/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/String/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/String/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/TAP/   (props changed)
      - copied from r45870, trunk/runtime/parrot/library/TAP/
   branches/include_dynpmc_makefile/runtime/parrot/library/Tcl/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Tcl/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Test/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Test/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/Test/Builder/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/YAML/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/YAML/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/YAML/Dumper/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/YAML/Dumper/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/YAML/Parser/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/YAML/Parser/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/osutils.pir
      - copied unchanged from r45870, trunk/runtime/parrot/library/osutils.pir
   branches/include_dynpmc_makefile/src/.gitignore
      - copied unchanged from r45870, trunk/src/.gitignore
   branches/include_dynpmc_makefile/src/atomic/.gitignore
      - copied unchanged from r45870, trunk/src/atomic/.gitignore
   branches/include_dynpmc_makefile/src/call/.gitignore
      - copied unchanged from r45870, trunk/src/call/.gitignore
   branches/include_dynpmc_makefile/src/dynoplibs/.gitignore
      - copied unchanged from r45870, trunk/src/dynoplibs/.gitignore
   branches/include_dynpmc_makefile/src/dynpmc/.gitignore
      - copied unchanged from r45870, trunk/src/dynpmc/.gitignore
   branches/include_dynpmc_makefile/src/gc/.gitignore
      - copied unchanged from r45870, trunk/src/gc/.gitignore
   branches/include_dynpmc_makefile/src/interp/.gitignore
      - copied unchanged from r45870, trunk/src/interp/.gitignore
   branches/include_dynpmc_makefile/src/io/.gitignore
      - copied unchanged from r45870, trunk/src/io/.gitignore
   branches/include_dynpmc_makefile/src/nci/.gitignore
      - copied unchanged from r45870, trunk/src/nci/.gitignore
   branches/include_dynpmc_makefile/src/ops/.gitignore
      - copied unchanged from r45870, trunk/src/ops/.gitignore
   branches/include_dynpmc_makefile/src/packfile/.gitignore
      - copied unchanged from r45870, trunk/src/packfile/.gitignore
   branches/include_dynpmc_makefile/src/pmc/.gitignore
      - copied unchanged from r45870, trunk/src/pmc/.gitignore
   branches/include_dynpmc_makefile/src/runcore/.gitignore
      - copied unchanged from r45870, trunk/src/runcore/.gitignore
   branches/include_dynpmc_makefile/src/string/.gitignore
      - copied unchanged from r45870, trunk/src/string/.gitignore
   branches/include_dynpmc_makefile/src/string/charset/.gitignore
      - copied unchanged from r45870, trunk/src/string/charset/.gitignore
   branches/include_dynpmc_makefile/src/string/encoding/.gitignore
      - copied unchanged from r45870, trunk/src/string/encoding/.gitignore
   branches/include_dynpmc_makefile/t/benchmark/.gitignore
      - copied unchanged from r45870, trunk/t/benchmark/.gitignore
   branches/include_dynpmc_makefile/t/compilers/imcc/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/imcc/.gitignore
   branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/imcc/imcpasm/.gitignore
   branches/include_dynpmc_makefile/t/compilers/imcc/reg/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/imcc/reg/.gitignore
   branches/include_dynpmc_makefile/t/compilers/imcc/syn/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/imcc/syn/.gitignore
   branches/include_dynpmc_makefile/t/compilers/json/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/json/.gitignore
   branches/include_dynpmc_makefile/t/compilers/pct/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/pct/.gitignore
   branches/include_dynpmc_makefile/t/compilers/pge/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/pge/.gitignore
   branches/include_dynpmc_makefile/t/compilers/pge/p5regex/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/pge/p5regex/.gitignore
   branches/include_dynpmc_makefile/t/compilers/pge/perl6regex/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/pge/perl6regex/.gitignore
   branches/include_dynpmc_makefile/t/compilers/tge/.gitignore
      - copied unchanged from r45870, trunk/t/compilers/tge/.gitignore
   branches/include_dynpmc_makefile/t/dynoplibs/.gitignore
      - copied unchanged from r45870, trunk/t/dynoplibs/.gitignore
   branches/include_dynpmc_makefile/t/dynpmc/.gitignore
      - copied unchanged from r45870, trunk/t/dynpmc/.gitignore
   branches/include_dynpmc_makefile/t/examples/.gitignore
      - copied unchanged from r45870, trunk/t/examples/.gitignore
   branches/include_dynpmc_makefile/t/harness.pir
      - copied unchanged from r45870, trunk/t/harness.pir
   branches/include_dynpmc_makefile/t/library/.gitignore
      - copied unchanged from r45870, trunk/t/library/.gitignore
   branches/include_dynpmc_makefile/t/library/osutils.t
      - copied unchanged from r45870, trunk/t/library/osutils.t
   branches/include_dynpmc_makefile/t/library/tap_parser.t
      - copied unchanged from r45870, trunk/t/library/tap_parser.t
   branches/include_dynpmc_makefile/t/native_pbc/.gitignore
      - copied unchanged from r45870, trunk/t/native_pbc/.gitignore
   branches/include_dynpmc_makefile/t/oo/.gitignore
      - copied unchanged from r45870, trunk/t/oo/.gitignore
   branches/include_dynpmc_makefile/t/op/.gitignore
      - copied unchanged from r45870, trunk/t/op/.gitignore
   branches/include_dynpmc_makefile/t/perl/.gitignore
      - copied unchanged from r45870, trunk/t/perl/.gitignore
   branches/include_dynpmc_makefile/t/pmc/.gitignore
      - copied unchanged from r45870, trunk/t/pmc/.gitignore
   branches/include_dynpmc_makefile/t/pmc/namespace-subs.t
      - copied unchanged from r45870, trunk/t/pmc/namespace-subs.t
   branches/include_dynpmc_makefile/t/profiling/
      - copied from r45870, trunk/t/profiling/
   branches/include_dynpmc_makefile/t/src/.gitignore
      - copied unchanged from r45870, trunk/t/src/.gitignore
   branches/include_dynpmc_makefile/t/stress/.gitignore
      - copied unchanged from r45870, trunk/t/stress/.gitignore
   branches/include_dynpmc_makefile/t/tools/.gitignore
      - copied unchanged from r45870, trunk/t/tools/.gitignore
   branches/include_dynpmc_makefile/tools/dev/tapir.pir
      - copied unchanged from r45870, trunk/tools/dev/tapir.pir
   branches/include_dynpmc_makefile/tools/docs/book-to-latex.pl
      - copied unchanged from r45870, trunk/tools/docs/book-to-latex.pl
   branches/include_dynpmc_makefile/tools/docs/filename_and_chapter.pl
      - copied unchanged from r45870, trunk/tools/docs/filename_and_chapter.pl
Replaced:
   branches/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.desk.in.tar.gz
      - copied unchanged from r45870, trunk/ports/fedora/2.3.0/parrot.desk.in.tar.gz
   branches/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.patch
      - copied unchanged from r45870, trunk/ports/fedora/2.3.0/parrot.patch
   branches/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.spec
      - copied unchanged from r45870, trunk/ports/fedora/2.3.0/parrot.spec
   branches/include_dynpmc_makefile/ports/suse/2.2.0/parrot.diff
      - copied unchanged from r45870, trunk/ports/suse/2.2.0/parrot.diff
   branches/include_dynpmc_makefile/ports/suse/2.2.0/parrot.spec
      - copied unchanged from r45870, trunk/ports/suse/2.2.0/parrot.spec
   branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/ProfTest/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/Matcher.nqp
      - copied unchanged from r45870, trunk/runtime/parrot/library/ProfTest/Matcher.nqp
   branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/NQPProfile.nqp
      - copied unchanged from r45870, trunk/runtime/parrot/library/ProfTest/NQPProfile.nqp
   branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/PIRProfile.nqp
      - copied unchanged from r45870, trunk/runtime/parrot/library/ProfTest/PIRProfile.nqp
   branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/Want.nqp
      - copied unchanged from r45870, trunk/runtime/parrot/library/ProfTest/Want.nqp
   branches/include_dynpmc_makefile/runtime/parrot/library/TAP/.gitignore
      - copied unchanged from r45870, trunk/runtime/parrot/library/TAP/.gitignore
   branches/include_dynpmc_makefile/runtime/parrot/library/TAP/Formatter.pir
      - copied unchanged from r45870, trunk/runtime/parrot/library/TAP/Formatter.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/TAP/Harness.pir
      - copied unchanged from r45870, trunk/runtime/parrot/library/TAP/Harness.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/TAP/Parser.pir
      - copied unchanged from r45870, trunk/runtime/parrot/library/TAP/Parser.pir
   branches/include_dynpmc_makefile/t/profiling/profiling.t
      - copied unchanged from r45870, trunk/t/profiling/profiling.t
Deleted:
   branches/include_dynpmc_makefile/config/auto/crypto/
   branches/include_dynpmc_makefile/config/auto/crypto.pm
   branches/include_dynpmc_makefile/config/auto/gdbm/
   branches/include_dynpmc_makefile/config/auto/gdbm.pm
   branches/include_dynpmc_makefile/config/gen/config_pm/config_lib_pasm.in
   branches/include_dynpmc_makefile/config/gen/crypto/
   branches/include_dynpmc_makefile/config/gen/crypto.pm
   branches/include_dynpmc_makefile/config/gen/platform/platform_interface.h
   branches/include_dynpmc_makefile/ports/fedora/parrot.patch
   branches/include_dynpmc_makefile/ports/fedora/parrot.spec.fedora
   branches/include_dynpmc_makefile/ports/suse/parrot.spec.suse
   branches/include_dynpmc_makefile/src/dynpmc/gdbmhash.pmc
   branches/include_dynpmc_makefile/src/pmc/retcontinuation.pmc
   branches/include_dynpmc_makefile/t/dynpmc/gdbmhash.t
   branches/include_dynpmc_makefile/t/pmc/retcontinuation.t
   branches/include_dynpmc_makefile/t/steps/auto/crypto-01.t
   branches/include_dynpmc_makefile/t/steps/auto/gdbm-01.t
Modified:
   branches/include_dynpmc_makefile/   (props changed)
   branches/include_dynpmc_makefile/CREDITS
   branches/include_dynpmc_makefile/ChangeLog
   branches/include_dynpmc_makefile/Configure.pl
   branches/include_dynpmc_makefile/DEPRECATED.pod
   branches/include_dynpmc_makefile/MANIFEST
   branches/include_dynpmc_makefile/MANIFEST.SKIP
   branches/include_dynpmc_makefile/MANIFEST.generated
   branches/include_dynpmc_makefile/META.yml
   branches/include_dynpmc_makefile/NEWS
   branches/include_dynpmc_makefile/PBC_COMPAT
   branches/include_dynpmc_makefile/README
   branches/include_dynpmc_makefile/README_cygwin.pod
   branches/include_dynpmc_makefile/README_win32.pod
   branches/include_dynpmc_makefile/RESPONSIBLE_PARTIES
   branches/include_dynpmc_makefile/VERSION
   branches/include_dynpmc_makefile/compilers/data_json/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/compilers/imcc/Rules.in   (props changed)
   branches/include_dynpmc_makefile/compilers/imcc/imcc.l
   branches/include_dynpmc_makefile/compilers/imcc/imcc.y
   branches/include_dynpmc_makefile/compilers/imcc/imclexer.c
   branches/include_dynpmc_makefile/compilers/imcc/imcparser.c
   branches/include_dynpmc_makefile/compilers/imcc/imcparser.h
   branches/include_dynpmc_makefile/compilers/imcc/instructions.c
   branches/include_dynpmc_makefile/compilers/imcc/main.c
   branches/include_dynpmc_makefile/compilers/imcc/optimizer.c
   branches/include_dynpmc_makefile/compilers/imcc/parser_util.c
   branches/include_dynpmc_makefile/compilers/imcc/pbc.c
   branches/include_dynpmc_makefile/compilers/imcc/pcc.c
   branches/include_dynpmc_makefile/compilers/imcc/symreg.h
   branches/include_dynpmc_makefile/compilers/imcc/unit.h
   branches/include_dynpmc_makefile/compilers/json/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/compilers/nqp/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/compilers/pct/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/compilers/pct/src/PCT/HLLCompiler.pir
   branches/include_dynpmc_makefile/compilers/pct/src/POST/Node.pir
   branches/include_dynpmc_makefile/compilers/pge/PGE/Exp.pir
   branches/include_dynpmc_makefile/compilers/pge/PGE/Regex.pir
   branches/include_dynpmc_makefile/compilers/pge/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.c
   branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.h
   branches/include_dynpmc_makefile/compilers/pirc/src/pircompunit.c
   branches/include_dynpmc_makefile/compilers/pirc/src/pircompunit.h
   branches/include_dynpmc_makefile/compilers/pirc/src/pirlexer.h
   branches/include_dynpmc_makefile/compilers/pirc/src/pirparser.c
   branches/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.c
   branches/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.h
   branches/include_dynpmc_makefile/compilers/tge/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/config/auto/arch.pm
   branches/include_dynpmc_makefile/config/auto/attributes.pm
   branches/include_dynpmc_makefile/config/auto/attributes/test_c.in
   branches/include_dynpmc_makefile/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/include_dynpmc_makefile/config/auto/warnings.pm
   branches/include_dynpmc_makefile/config/gen/config_pm.pm
   branches/include_dynpmc_makefile/config/gen/config_pm/config_pir.in
   branches/include_dynpmc_makefile/config/gen/core_pmcs.pm
   branches/include_dynpmc_makefile/config/gen/makefiles/docs.in
   branches/include_dynpmc_makefile/config/gen/makefiles/root.in
   branches/include_dynpmc_makefile/config/gen/opengl.pm
   branches/include_dynpmc_makefile/config/gen/platform.pm
   branches/include_dynpmc_makefile/config/gen/platform/ansi/dl.c
   branches/include_dynpmc_makefile/config/gen/platform/generic/dl.c
   branches/include_dynpmc_makefile/config/gen/platform/generic/env.c
   branches/include_dynpmc_makefile/config/gen/platform/win32/dl.c
   branches/include_dynpmc_makefile/config/init/defaults.pm
   branches/include_dynpmc_makefile/config/init/hints/cygwin.pm
   branches/include_dynpmc_makefile/config/init/hints/irix.pm
   branches/include_dynpmc_makefile/config/inter/progs.pm
   branches/include_dynpmc_makefile/docs/book/draft/README   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/appa_glossary.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/appb_patch_submission.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/appc_command_line_options.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/appd_build_options.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/appe_source_code.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch01_introduction.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch02_getting_started.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch07_dynpmcs.pod   (contents, props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch08_dynops.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch10_opcode_reference.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch11_directive_reference.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/ch12_operator_reference.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/chXX_hlls.pod   (contents, props changed)
   branches/include_dynpmc_makefile/docs/book/draft/chXX_library.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/pct/ch01_introduction.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/pct/ch02_getting_started.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/pct/ch03_compiler_tools.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/pct/ch04_pge.pod   (props changed)
   branches/include_dynpmc_makefile/docs/book/pct/ch05_nqp.pod   (props changed)
   branches/include_dynpmc_makefile/docs/dev/c_functions.pod   (props changed)
   branches/include_dynpmc_makefile/docs/dev/infant.pod
   branches/include_dynpmc_makefile/docs/dev/pccmethods.pod
   branches/include_dynpmc_makefile/docs/dev/pmc_freeze.pod
   branches/include_dynpmc_makefile/docs/dev/pmc_obj_design_meeting_notes.pod
   branches/include_dynpmc_makefile/docs/embed.pod
   branches/include_dynpmc_makefile/docs/intro.pod
   branches/include_dynpmc_makefile/docs/parrothist.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd01_overview.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd05_opfunc.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd06_pasm.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd08_keys.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd10_embedding.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd11_extending.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd14_numbers.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd16_native_call.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd29_compiler_tools.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll.pod
   branches/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll_interop.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd00_pdd.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd03_calling_conventions.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd07_codingstd.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd09_gc.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd15_objects.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd17_pmc.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd18_security.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd19_pir.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd20_lexical_vars.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd21_namespaces.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd22_io.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd23_exceptions.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd24_events.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd25_concurrency.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd26_ast.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd27_multiple_dispatch.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd28_strings.pod
   branches/include_dynpmc_makefile/docs/pdds/pdd30_install.pod   (contents, props changed)
   branches/include_dynpmc_makefile/docs/pdds/pdd_template.pod
   branches/include_dynpmc_makefile/docs/pmc.pod
   branches/include_dynpmc_makefile/docs/pmc/documentation.pod
   branches/include_dynpmc_makefile/docs/pmc2c.pod
   branches/include_dynpmc_makefile/docs/project/release_manager_guide.pod
   branches/include_dynpmc_makefile/docs/running.pod
   branches/include_dynpmc_makefile/examples/embed/cotorra.c   (props changed)
   branches/include_dynpmc_makefile/examples/languages/abc/   (props changed)
   branches/include_dynpmc_makefile/examples/languages/abc/setup.pir
   branches/include_dynpmc_makefile/examples/languages/squaak/   (props changed)
   branches/include_dynpmc_makefile/examples/pge/demo.pir   (props changed)
   branches/include_dynpmc_makefile/examples/pir/befunge/setup.pir
   branches/include_dynpmc_makefile/examples/tutorial/56_defined.pir
   branches/include_dynpmc_makefile/ext/Parrot-Embed/Build.PL
   branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/Embed.xs
   branches/include_dynpmc_makefile/ext/Parrot-Embed/t/interp.t
   branches/include_dynpmc_makefile/ext/nqp-rx/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/include_dynpmc_makefile/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/include_dynpmc_makefile/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/include_dynpmc_makefile/include/parrot/   (props changed)
   branches/include_dynpmc_makefile/include/parrot/call.h   (contents, props changed)
   branches/include_dynpmc_makefile/include/parrot/charset.h
   branches/include_dynpmc_makefile/include/parrot/compiler.h
   branches/include_dynpmc_makefile/include/parrot/context.h
   branches/include_dynpmc_makefile/include/parrot/dynext.h
   branches/include_dynpmc_makefile/include/parrot/embed.h
   branches/include_dynpmc_makefile/include/parrot/encoding.h
   branches/include_dynpmc_makefile/include/parrot/exceptions.h
   branches/include_dynpmc_makefile/include/parrot/exit.h
   branches/include_dynpmc_makefile/include/parrot/extend.h
   branches/include_dynpmc_makefile/include/parrot/gc_api.h   (contents, props changed)
   branches/include_dynpmc_makefile/include/parrot/global_setup.h
   branches/include_dynpmc_makefile/include/parrot/hash.h
   branches/include_dynpmc_makefile/include/parrot/imcc.h
   branches/include_dynpmc_makefile/include/parrot/interpreter.h
   branches/include_dynpmc_makefile/include/parrot/io.h
   branches/include_dynpmc_makefile/include/parrot/io_unix.h
   branches/include_dynpmc_makefile/include/parrot/key.h
   branches/include_dynpmc_makefile/include/parrot/misc.h
   branches/include_dynpmc_makefile/include/parrot/nci.h
   branches/include_dynpmc_makefile/include/parrot/oo.h
   branches/include_dynpmc_makefile/include/parrot/packfile.h
   branches/include_dynpmc_makefile/include/parrot/pmc.h
   branches/include_dynpmc_makefile/include/parrot/runcore_api.h   (contents, props changed)
   branches/include_dynpmc_makefile/include/parrot/runcore_profiling.h   (props changed)
   branches/include_dynpmc_makefile/include/parrot/runcore_trace.h   (props changed)
   branches/include_dynpmc_makefile/include/parrot/string_funcs.h
   branches/include_dynpmc_makefile/include/parrot/string_primitives.h
   branches/include_dynpmc_makefile/include/parrot/sub.h
   branches/include_dynpmc_makefile/include/parrot/thread.h
   branches/include_dynpmc_makefile/include/parrot/vtables.h
   branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Conf.pm
   branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Test/Prepare.pm
   branches/include_dynpmc_makefile/lib/Parrot/Configure/Step/List.pm
   branches/include_dynpmc_makefile/lib/Parrot/Configure/Step/Test.pm   (props changed)
   branches/include_dynpmc_makefile/lib/Parrot/Distribution.pm
   branches/include_dynpmc_makefile/lib/Parrot/H2inc.pm   (contents, props changed)
   branches/include_dynpmc_makefile/lib/Parrot/Harness/DefaultTests.pm
   branches/include_dynpmc_makefile/lib/Parrot/Harness/Smoke.pm
   branches/include_dynpmc_makefile/lib/Parrot/Headerizer.pm
   branches/include_dynpmc_makefile/lib/Parrot/Manifest.pm
   branches/include_dynpmc_makefile/lib/Parrot/OpTrans/C.pm
   branches/include_dynpmc_makefile/lib/Parrot/Ops2c/Utils.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Attribute.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Dumper.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Emitter.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Library.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/MethodEmitter.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Object.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PCCMETHOD.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Null.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Object.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/ParrotClass.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/default.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Parser.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Pmc2cMain.pm
   branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/UtilFunctions.pm
   branches/include_dynpmc_makefile/lib/Parrot/Vtable.pm
   branches/include_dynpmc_makefile/ports/cpan/pause_guide.pod   (props changed)
   branches/include_dynpmc_makefile/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/include_dynpmc_makefile/ports/debian/control.in
   branches/include_dynpmc_makefile/ports/debian/libparrot-dev.install.in   (props changed)
   branches/include_dynpmc_makefile/ports/debian/libparrot.install.in   (props changed)
   branches/include_dynpmc_makefile/ports/debian/parrot-doc.install.in   (props changed)
   branches/include_dynpmc_makefile/ports/debian/parrot.install.in   (props changed)
   branches/include_dynpmc_makefile/ports/mandriva/parrot.spec.mandriva   (props changed)
   branches/include_dynpmc_makefile/ports/ubuntu/control.in
   branches/include_dynpmc_makefile/runtime/parrot/languages/   (props changed)
   branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/Obj.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/HTTP/Daemon.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/Math/Rand.pir   (props changed)
   branches/include_dynpmc_makefile/runtime/parrot/library/P6object.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/Rules.mak   (props changed)
   branches/include_dynpmc_makefile/runtime/parrot/library/Stream/Base.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/Test.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/distutils.pir
   branches/include_dynpmc_makefile/runtime/parrot/library/pcore.pir
   branches/include_dynpmc_makefile/src/byteorder.c
   branches/include_dynpmc_makefile/src/call/args.c
   branches/include_dynpmc_makefile/src/call/context.c
   branches/include_dynpmc_makefile/src/call/context_accessors.c
   branches/include_dynpmc_makefile/src/call/ops.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/call/pcc.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/debug.c
   branches/include_dynpmc_makefile/src/dynext.c
   branches/include_dynpmc_makefile/src/dynpmc/rational.pmc
   branches/include_dynpmc_makefile/src/embed.c
   branches/include_dynpmc_makefile/src/exceptions.c
   branches/include_dynpmc_makefile/src/exit.c
   branches/include_dynpmc_makefile/src/extend.c
   branches/include_dynpmc_makefile/src/gc/alloc_memory.c   (props changed)
   branches/include_dynpmc_makefile/src/gc/alloc_resources.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/gc/api.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/gc/gc_inf.c
   branches/include_dynpmc_makefile/src/gc/gc_ms.c
   branches/include_dynpmc_makefile/src/gc/gc_private.h
   branches/include_dynpmc_makefile/src/gc/malloc.c   (props changed)
   branches/include_dynpmc_makefile/src/gc/malloc_trace.c   (props changed)
   branches/include_dynpmc_makefile/src/gc/mark_sweep.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/gc/system.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/global.c
   branches/include_dynpmc_makefile/src/global_setup.c
   branches/include_dynpmc_makefile/src/hash.c
   branches/include_dynpmc_makefile/src/hll.c
   branches/include_dynpmc_makefile/src/interp/inter_cb.c   (props changed)
   branches/include_dynpmc_makefile/src/interp/inter_create.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/interp/inter_misc.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/io/api.c
   branches/include_dynpmc_makefile/src/io/buffer.c
   branches/include_dynpmc_makefile/src/io/filehandle.c
   branches/include_dynpmc_makefile/src/io/unix.c
   branches/include_dynpmc_makefile/src/io/utf8.c
   branches/include_dynpmc_makefile/src/io/win32.c
   branches/include_dynpmc_makefile/src/key.c
   branches/include_dynpmc_makefile/src/library.c
   branches/include_dynpmc_makefile/src/main.c
   branches/include_dynpmc_makefile/src/misc.c
   branches/include_dynpmc_makefile/src/multidispatch.c
   branches/include_dynpmc_makefile/src/nci/api.c
   branches/include_dynpmc_makefile/src/nci/core_thunks.c
   branches/include_dynpmc_makefile/src/nci/extra_thunks.c
   branches/include_dynpmc_makefile/src/oo.c
   branches/include_dynpmc_makefile/src/ops/bit.ops
   branches/include_dynpmc_makefile/src/ops/cmp.ops
   branches/include_dynpmc_makefile/src/ops/core.ops
   branches/include_dynpmc_makefile/src/ops/object.ops
   branches/include_dynpmc_makefile/src/ops/ops.num
   branches/include_dynpmc_makefile/src/ops/pmc.ops
   branches/include_dynpmc_makefile/src/ops/set.ops
   branches/include_dynpmc_makefile/src/ops/string.ops
   branches/include_dynpmc_makefile/src/ops/var.ops
   branches/include_dynpmc_makefile/src/packdump.c
   branches/include_dynpmc_makefile/src/packfile.c
   branches/include_dynpmc_makefile/src/packfile/pf_items.c
   branches/include_dynpmc_makefile/src/parrot_debugger.c
   branches/include_dynpmc_makefile/src/pbc_dump.c
   branches/include_dynpmc_makefile/src/pbc_merge.c
   branches/include_dynpmc_makefile/src/pmc.c
   branches/include_dynpmc_makefile/src/pmc/addrregistry.pmc
   branches/include_dynpmc_makefile/src/pmc/arrayiterator.pmc
   branches/include_dynpmc_makefile/src/pmc/bigint.pmc
   branches/include_dynpmc_makefile/src/pmc/bignum.pmc
   branches/include_dynpmc_makefile/src/pmc/boolean.pmc
   branches/include_dynpmc_makefile/src/pmc/callcontext.pmc
   branches/include_dynpmc_makefile/src/pmc/capture.pmc
   branches/include_dynpmc_makefile/src/pmc/class.pmc
   branches/include_dynpmc_makefile/src/pmc/codestring.pmc
   branches/include_dynpmc_makefile/src/pmc/complex.pmc
   branches/include_dynpmc_makefile/src/pmc/continuation.pmc
   branches/include_dynpmc_makefile/src/pmc/coroutine.pmc
   branches/include_dynpmc_makefile/src/pmc/default.pmc
   branches/include_dynpmc_makefile/src/pmc/env.pmc
   branches/include_dynpmc_makefile/src/pmc/eval.pmc
   branches/include_dynpmc_makefile/src/pmc/eventhandler.pmc
   branches/include_dynpmc_makefile/src/pmc/exception.pmc
   branches/include_dynpmc_makefile/src/pmc/exceptionhandler.pmc
   branches/include_dynpmc_makefile/src/pmc/exporter.pmc
   branches/include_dynpmc_makefile/src/pmc/file.pmc
   branches/include_dynpmc_makefile/src/pmc/filehandle.pmc
   branches/include_dynpmc_makefile/src/pmc/fixedbooleanarray.pmc
   branches/include_dynpmc_makefile/src/pmc/fixedfloatarray.pmc
   branches/include_dynpmc_makefile/src/pmc/fixedintegerarray.pmc
   branches/include_dynpmc_makefile/src/pmc/fixedpmcarray.pmc
   branches/include_dynpmc_makefile/src/pmc/fixedstringarray.pmc
   branches/include_dynpmc_makefile/src/pmc/float.pmc
   branches/include_dynpmc_makefile/src/pmc/handle.pmc
   branches/include_dynpmc_makefile/src/pmc/hash.pmc
   branches/include_dynpmc_makefile/src/pmc/hashiterator.pmc
   branches/include_dynpmc_makefile/src/pmc/hashiteratorkey.pmc
   branches/include_dynpmc_makefile/src/pmc/imageio.pmc
   branches/include_dynpmc_makefile/src/pmc/imageiosize.pmc
   branches/include_dynpmc_makefile/src/pmc/integer.pmc
   branches/include_dynpmc_makefile/src/pmc/iterator.pmc
   branches/include_dynpmc_makefile/src/pmc/key.pmc
   branches/include_dynpmc_makefile/src/pmc/lexinfo.pmc
   branches/include_dynpmc_makefile/src/pmc/lexpad.pmc
   branches/include_dynpmc_makefile/src/pmc/managedstruct.pmc
   branches/include_dynpmc_makefile/src/pmc/multisub.pmc
   branches/include_dynpmc_makefile/src/pmc/namespace.pmc
   branches/include_dynpmc_makefile/src/pmc/nci.pmc
   branches/include_dynpmc_makefile/src/pmc/null.pmc
   branches/include_dynpmc_makefile/src/pmc/object.pmc
   branches/include_dynpmc_makefile/src/pmc/opcode.pmc
   branches/include_dynpmc_makefile/src/pmc/oplib.pmc
   branches/include_dynpmc_makefile/src/pmc/orderedhash.pmc
   branches/include_dynpmc_makefile/src/pmc/orderedhashiterator.pmc
   branches/include_dynpmc_makefile/src/pmc/os.pmc
   branches/include_dynpmc_makefile/src/pmc/packfile.pmc
   branches/include_dynpmc_makefile/src/pmc/packfileannotation.pmc
   branches/include_dynpmc_makefile/src/pmc/packfileannotations.pmc
   branches/include_dynpmc_makefile/src/pmc/packfileconstanttable.pmc
   branches/include_dynpmc_makefile/src/pmc/packfiledirectory.pmc
   branches/include_dynpmc_makefile/src/pmc/packfilefixupentry.pmc
   branches/include_dynpmc_makefile/src/pmc/packfilefixuptable.pmc
   branches/include_dynpmc_makefile/src/pmc/packfilerawsegment.pmc
   branches/include_dynpmc_makefile/src/pmc/packfilesegment.pmc
   branches/include_dynpmc_makefile/src/pmc/parrotinterpreter.pmc
   branches/include_dynpmc_makefile/src/pmc/parrotlibrary.pmc
   branches/include_dynpmc_makefile/src/pmc/parrotrunningthread.pmc
   branches/include_dynpmc_makefile/src/pmc/parrotthread.pmc
   branches/include_dynpmc_makefile/src/pmc/pmcproxy.pmc
   branches/include_dynpmc_makefile/src/pmc/pointer.pmc
   branches/include_dynpmc_makefile/src/pmc/resizablebooleanarray.pmc
   branches/include_dynpmc_makefile/src/pmc/resizablefloatarray.pmc
   branches/include_dynpmc_makefile/src/pmc/resizableintegerarray.pmc
   branches/include_dynpmc_makefile/src/pmc/resizablepmcarray.pmc
   branches/include_dynpmc_makefile/src/pmc/resizablestringarray.pmc
   branches/include_dynpmc_makefile/src/pmc/role.pmc
   branches/include_dynpmc_makefile/src/pmc/scalar.pmc
   branches/include_dynpmc_makefile/src/pmc/scheduler.pmc
   branches/include_dynpmc_makefile/src/pmc/schedulermessage.pmc
   branches/include_dynpmc_makefile/src/pmc/sockaddr.pmc
   branches/include_dynpmc_makefile/src/pmc/socket.pmc
   branches/include_dynpmc_makefile/src/pmc/string.pmc
   branches/include_dynpmc_makefile/src/pmc/stringhandle.pmc
   branches/include_dynpmc_makefile/src/pmc/stringiterator.pmc
   branches/include_dynpmc_makefile/src/pmc/sub.pmc
   branches/include_dynpmc_makefile/src/pmc/task.pmc
   branches/include_dynpmc_makefile/src/pmc/timer.pmc
   branches/include_dynpmc_makefile/src/pmc/undef.pmc
   branches/include_dynpmc_makefile/src/pmc/unmanagedstruct.pmc
   branches/include_dynpmc_makefile/src/pmc_freeze.c
   branches/include_dynpmc_makefile/src/runcore/cores.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/runcore/main.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/runcore/profiling.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/runcore/trace.c   (contents, props changed)
   branches/include_dynpmc_makefile/src/scheduler.c
   branches/include_dynpmc_makefile/src/spf_render.c
   branches/include_dynpmc_makefile/src/spf_vtable.c
   branches/include_dynpmc_makefile/src/string/api.c
   branches/include_dynpmc_makefile/src/string/charset.c
   branches/include_dynpmc_makefile/src/string/charset/ascii.c
   branches/include_dynpmc_makefile/src/string/charset/ascii.h
   branches/include_dynpmc_makefile/src/string/charset/binary.c
   branches/include_dynpmc_makefile/src/string/charset/binary.h
   branches/include_dynpmc_makefile/src/string/charset/iso-8859-1.c
   branches/include_dynpmc_makefile/src/string/charset/iso-8859-1.h
   branches/include_dynpmc_makefile/src/string/charset/unicode.c
   branches/include_dynpmc_makefile/src/string/charset/unicode.h
   branches/include_dynpmc_makefile/src/string/encoding.c
   branches/include_dynpmc_makefile/src/string/encoding/fixed_8.c
   branches/include_dynpmc_makefile/src/string/encoding/fixed_8.h
   branches/include_dynpmc_makefile/src/string/encoding/ucs2.c
   branches/include_dynpmc_makefile/src/string/encoding/ucs2.h
   branches/include_dynpmc_makefile/src/string/encoding/utf16.c
   branches/include_dynpmc_makefile/src/string/encoding/utf16.h
   branches/include_dynpmc_makefile/src/string/encoding/utf8.c
   branches/include_dynpmc_makefile/src/string/encoding/utf8.h
   branches/include_dynpmc_makefile/src/string/primitives.c
   branches/include_dynpmc_makefile/src/sub.c
   branches/include_dynpmc_makefile/src/thread.c
   branches/include_dynpmc_makefile/src/utils.c
   branches/include_dynpmc_makefile/src/vtables.c
   branches/include_dynpmc_makefile/t/codingstd/c_function_docs.t
   branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/optc.t
   branches/include_dynpmc_makefile/t/compilers/imcc/syn/file.t
   branches/include_dynpmc_makefile/t/compilers/imcc/syn/regressions.t
   branches/include_dynpmc_makefile/t/compilers/imcc/syn/subflags.t
   branches/include_dynpmc_makefile/t/compilers/imcc/syn/tail.t
   branches/include_dynpmc_makefile/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/include_dynpmc_makefile/t/distro/file_metadata.t
   branches/include_dynpmc_makefile/t/dynpmc/rational.t
   branches/include_dynpmc_makefile/t/dynpmc/rotest.t
   branches/include_dynpmc_makefile/t/examples/tutorial.t
   branches/include_dynpmc_makefile/t/harness
   branches/include_dynpmc_makefile/t/library/getopt_obj.t
   branches/include_dynpmc_makefile/t/library/p6object.t
   branches/include_dynpmc_makefile/t/library/test_builder_tester.t
   branches/include_dynpmc_makefile/t/library/test_more.t
   branches/include_dynpmc_makefile/t/native_pbc/annotations.pbc
   branches/include_dynpmc_makefile/t/native_pbc/integer_1.pbc
   branches/include_dynpmc_makefile/t/native_pbc/number_1.pbc
   branches/include_dynpmc_makefile/t/native_pbc/string_1.pbc
   branches/include_dynpmc_makefile/t/oo/composition.t
   branches/include_dynpmc_makefile/t/oo/mro-c3.t
   branches/include_dynpmc_makefile/t/oo/proxy.t
   branches/include_dynpmc_makefile/t/oo/root_new.t   (props changed)
   branches/include_dynpmc_makefile/t/op/calling.t
   branches/include_dynpmc_makefile/t/op/exceptions.t
   branches/include_dynpmc_makefile/t/op/gc.t
   branches/include_dynpmc_makefile/t/op/interp.t
   branches/include_dynpmc_makefile/t/op/string.t
   branches/include_dynpmc_makefile/t/op/vivify.t
   branches/include_dynpmc_makefile/t/pmc/callcontext.t
   branches/include_dynpmc_makefile/t/pmc/class.t
   branches/include_dynpmc_makefile/t/pmc/context.t
   branches/include_dynpmc_makefile/t/pmc/continuation.t
   branches/include_dynpmc_makefile/t/pmc/eval.t
   branches/include_dynpmc_makefile/t/pmc/exception-old.t
   branches/include_dynpmc_makefile/t/pmc/fixedpmcarray.t
   branches/include_dynpmc_makefile/t/pmc/freeze.t
   branches/include_dynpmc_makefile/t/pmc/handle.t
   branches/include_dynpmc_makefile/t/pmc/multidispatch.t
   branches/include_dynpmc_makefile/t/pmc/namespace-old.t   (contents, props changed)
   branches/include_dynpmc_makefile/t/pmc/nci.t
   branches/include_dynpmc_makefile/t/pmc/objects.t
   branches/include_dynpmc_makefile/t/pmc/parrotobject.t
   branches/include_dynpmc_makefile/t/pmc/pmcproxy.t
   branches/include_dynpmc_makefile/t/pmc/ro.t
   branches/include_dynpmc_makefile/t/pmc/string.t
   branches/include_dynpmc_makefile/t/pmc/threads.t
   branches/include_dynpmc_makefile/t/src/basic.t
   branches/include_dynpmc_makefile/t/src/embed.t   (contents, props changed)
   branches/include_dynpmc_makefile/t/src/extend.t
   branches/include_dynpmc_makefile/t/src/warnings.t
   branches/include_dynpmc_makefile/t/steps/auto/arch-01.t
   branches/include_dynpmc_makefile/t/steps/gen/platform-01.t
   branches/include_dynpmc_makefile/t/steps/init/defaults-01.t
   branches/include_dynpmc_makefile/t/steps/init/hints/linux-01.t   (props changed)
   branches/include_dynpmc_makefile/t/steps/inter/progs-04.t
   branches/include_dynpmc_makefile/tools/build/h2inc.pl   (props changed)
   branches/include_dynpmc_makefile/tools/build/headerizer.pl
   branches/include_dynpmc_makefile/tools/dev/fetch_languages.pl   (props changed)
   branches/include_dynpmc_makefile/tools/dev/mk_gitignore.pl   (props changed)
   branches/include_dynpmc_makefile/tools/dev/mk_inno.pl
   branches/include_dynpmc_makefile/tools/dev/mk_manifest_and_skip.pl
   branches/include_dynpmc_makefile/tools/dev/nci_thunk_gen.pir
   branches/include_dynpmc_makefile/tools/dev/pbc_to_exe.pir
   branches/include_dynpmc_makefile/tools/util/perlcritic-cage.conf   (props changed)
   branches/include_dynpmc_makefile/tools/util/release.json

Copied: branches/include_dynpmc_makefile/.gitignore (from r45870, trunk/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/.gitignore)
@@ -0,0 +1,72 @@
+/*.patch
+/*.tmp
+/*.vcproj*
+/*.sln
+/*.ncb
+/*.suo
+/*.sto
+/CFLAGS
+/MANIFEST.configure.generated
+/Makefile
+/TAGS
+/all_cstring.str
+/blib
+/config_lib.pir
+/install_config.fpmc
+/libparrot.def
+/libparrot.dll
+/miniparrot
+/myconfig
+/parrot
+/parrot_config
+/parrot_config.c
+/parrot_config.pbc
+/parrot_nci_thunk_gen
+/parrot_nci_thunk_gen.c
+/parrot_nci_thunk_gen.pbc
+/parrot-nqp
+/parrot-nqp.c
+/parrot-nqp.pbc
+/parrot.ilk
+/parrot.pdb
+/parrot.pc
+/parrot_test_run.tar.gz
+/pbc_disassemble
+/pbc_info
+/pbc_merge
+/pbc_dump
+/tags
+/temp.file
+/test
+/test.c
+/test.cco
+/test.err
+/test.ilk
+/test.ldo
+/test.out
+/test.pdb
+/vc60.pdb
+/vc70.pdb
+/vtable.dump
+/installable*
+/*.exe
+/*.core
+/*.pdb
+/*.ilk
+/*.def
+/*.lib
+/*.obj
+/*.o
+/*.exp
+/*.manifest
+/parrot.iss
+/cover_db
+/pbc_to_exe
+/pbc_to_exe.*
+/perl6
+/.parrot_current_rev
+/.git
+/parrot_debugger
+/pirc
+/tapir
+/tapir.*

Modified: branches/include_dynpmc_makefile/CREDITS
==============================================================================
--- branches/include_dynpmc_makefile/CREDITS	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/CREDITS	Wed Apr 21 23:40:50 2010	(r45876)
@@ -402,7 +402,7 @@
 
 N: Gerd Pokorra
 E: pokorra at uni-siegen.de
-D: Release manager for 1.9.0
+D: Release manager for 1.9.0 and 2.3.0
 
 N: Goplat
 D: Win98 and other fixes.

Modified: branches/include_dynpmc_makefile/ChangeLog
==============================================================================
--- branches/include_dynpmc_makefile/ChangeLog	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ChangeLog	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,9 @@
 #1 $Id$
 
+2010.04.20     Gerd
+	* Released 2.3.0
+	See NEWS for more.
+
 2010.03.16     cotto
 	* Released 2.2.0
 	See NEWS for more.

Modified: branches/include_dynpmc_makefile/Configure.pl
==============================================================================
--- branches/include_dynpmc_makefile/Configure.pl	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/Configure.pl	Wed Apr 21 23:40:50 2010	(r45876)
@@ -632,10 +632,8 @@
     auto::env
     auto::gmp
     auto::readline
-    auto::gdbm
     auto::pcre
     auto::opengl
-    auto::crypto
     auto::gettext
     auto::snprintf
     # auto::perldoc
@@ -644,7 +642,6 @@
     auto::icu
     gen::config_h
     gen::core_pmcs
-    gen::crypto
     gen::opengl
     gen::makefiles
     gen::platform

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

Modified: branches/include_dynpmc_makefile/MANIFEST
==============================================================================
--- branches/include_dynpmc_makefile/MANIFEST	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/MANIFEST	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Fri Mar 19 12:06:56 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 21 09:32:21 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -235,8 +235,6 @@
 config/auto/cpu/sun4/auto.pm                                []
 config/auto/cpu/sun4/test_atomic_c.in                       []
 config/auto/cpu/x86_64/auto.pm                              []
-config/auto/crypto.pm                                       []
-config/auto/crypto/crypto_c.in                              []
 config/auto/ctags.pm                                        []
 config/auto/env.pm                                          []
 config/auto/env/test_setenv_c.in                            []
@@ -250,8 +248,6 @@
 config/auto/gc/test_c.in                                    []
 config/auto/gcc.pm                                          []
 config/auto/gcc/test_c.in                                   []
-config/auto/gdbm.pm                                         []
-config/auto/gdbm/gdbm_c.in                                  []
 config/auto/gettext.pm                                      []
 config/auto/gettext/gettext_c.in                            []
 config/auto/glibc.pm                                        []
@@ -309,15 +305,13 @@
 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                     []
@@ -359,7 +353,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                           []
@@ -1043,6 +1036,7 @@
 include/parrot/oplib.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
@@ -1238,6 +1232,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]
@@ -1267,6 +1265,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]
@@ -1285,6 +1286,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]
@@ -1310,19 +1312,16 @@
 src/dynoplibs/Rules.in                                      []
 src/dynoplibs/math.ops                                      []
 src/dynoplibs/obscure.ops                                   []
-src/dynpmc/Defines.in                                       []
 src/dynpmc/README.pod                                       []doc
-src/dynpmc/Rules.in                                         []
-src/dynpmc/dynlexpad.pmc                                    [devel]src
+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/foo.pmc                                          []
+src/dynpmc/foo2.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/pccmethod_test.pmc                               []
+src/dynpmc/rational.pmc                                     []
+src/dynpmc/rotest.pmc                                       []
+src/dynpmc/subproxy.pmc                                     []
 src/embed.c                                                 []
 src/exceptions.c                                            []
 src/exit.c                                                  []
@@ -1396,91 +1395,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/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/file.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/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/os.pmc                                              []
+src/pmc/packfile.pmc                                        []
+src/pmc/packfileannotation.pmc                              []
+src/pmc/packfileannotations.pmc                             []
+src/pmc/packfileconstanttable.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/parrotrunningthread.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/timer.pmc                                           []
+src/pmc/undef.pmc                                           []
+src/pmc/unmanagedstruct.pmc                                 []
 src/pmc_freeze.c                                            []
 src/runcore/cores.c                                         []
 src/runcore/main.c                                          []
@@ -1695,7 +1693,6 @@
 t/dynpmc/dynlexpad.t                                        [test]
 t/dynpmc/foo.t                                              [test]
 t/dynpmc/foo2.t                                             [test]
-t/dynpmc/gdbmhash.t                                         [test]
 t/dynpmc/pccmethod_test.t                                   [test]
 t/dynpmc/rational.t                                         [test]
 t/dynpmc/rotest.t                                           [test]
@@ -1714,6 +1711,7 @@
 t/examples/subs.t                                           [test]
 t/examples/tutorial.t                                       [test]
 t/harness                                                   [test]
+t/harness.pir                                               [test]
 t/include/fp_equality.t                                     [test]
 t/library/cgi_query_hash.t                                  [test]
 t/library/configure.t                                       [test]
@@ -1724,6 +1722,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]
@@ -1734,6 +1733,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]
@@ -1910,6 +1910,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]
@@ -1947,7 +1948,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]
@@ -1971,6 +1971,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]
@@ -1987,14 +1988,12 @@
 t/steps/auto/byteorder-01.t                                 [test]
 t/steps/auto/cgoto-01.t                                     [test]
 t/steps/auto/cpu-01.t                                       [test]
-t/steps/auto/crypto-01.t                                    [test]
 t/steps/auto/ctags-01.t                                     [test]
 t/steps/auto/env-01.t                                       [test]
 t/steps/auto/format-01.t                                    [test]
 t/steps/auto/frames-01.t                                    [test]
 t/steps/auto/gc-01.t                                        [test]
 t/steps/auto/gcc-01.t                                       [test]
-t/steps/auto/gdbm-01.t                                      [test]
 t/steps/auto/gettext-01.t                                   [test]
 t/steps/auto/glibc-01.t                                     [test]
 t/steps/auto/gmp-01.t                                       [test]
@@ -2190,10 +2189,13 @@
 tools/dev/search-ops.pl                                     []
 tools/dev/svnclobber.pl                                     []
 tools/dev/symlink.pl                                        []
+tools/dev/tapir.pir                                         []
 tools/dev/vgp                                               []
 tools/dev/vgp_darwin                                        []
 tools/dev/vms-patch                                         []
 tools/dev/vtablize.pl                                       []
+tools/docs/book-to-latex.pl                                 []
+tools/docs/filename_and_chapter.pl                          []
 tools/docs/mk_chm.pl                                        []
 tools/docs/ops_summary.pl                                   []
 tools/docs/write_docs.pl                                    []

Modified: branches/include_dynpmc_makefile/MANIFEST.SKIP
==============================================================================
--- branches/include_dynpmc_makefile/MANIFEST.SKIP	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/MANIFEST.SKIP	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 Wed Apr 21 10:28:38 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -65,8 +65,8 @@
 ^all_cstring\.str/
 ^blib$
 ^blib/
-^config_lib\.pasm$
-^config_lib\.pasm/
+^config_lib\.pir$
+^config_lib\.pir/
 ^cover_db$
 ^cover_db/
 ^install_config\.fpmc$
@@ -131,6 +131,10 @@
 ^pirc/
 ^tags$
 ^tags/
+^tapir$
+^tapir/
+^tapir\..*$
+^tapir\..*/
 ^temp\.file$
 ^temp\.file/
 ^test$
@@ -464,6 +468,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$
@@ -599,12 +605,20 @@
 # generated from svn:ignore of 'runtime/parrot/library/Parrot/'
 ^runtime/parrot/library/Parrot/.*\.pbc$
 ^runtime/parrot/library/Parrot/.*\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/ProfTest/'
+^runtime/parrot/library/ProfTest/.*\.pbc$
+^runtime/parrot/library/ProfTest/.*\.pbc/
+^runtime/parrot/library/ProfTest/.*\.pir$
+^runtime/parrot/library/ProfTest/.*\.pir/
 # generated from svn:ignore of 'runtime/parrot/library/Stream/'
 ^runtime/parrot/library/Stream/.*\.pbc$
 ^runtime/parrot/library/Stream/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/String/'
 ^runtime/parrot/library/String/Utils\.pbc$
 ^runtime/parrot/library/String/Utils\.pbc/
+# generated from svn:ignore of 'runtime/parrot/library/TAP/'
+^runtime/parrot/library/TAP/.*\.pbc$
+^runtime/parrot/library/TAP/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/Tcl/'
 ^runtime/parrot/library/Tcl/.*\.pbc$
 ^runtime/parrot/library/Tcl/.*\.pbc/

Modified: branches/include_dynpmc_makefile/MANIFEST.generated
==============================================================================
--- branches/include_dynpmc_makefile/MANIFEST.generated	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/MANIFEST.generated	Wed Apr 21 23:40:50 2010	(r45876)
@@ -2,10 +2,10 @@
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
 # Please re-sort this file after *EVERY* modification
-blib/lib/libparrot.2.2.0.dylib                    [main]lib
+blib/lib/libparrot.2.3.0.dylib                    [main]lib
 blib/lib/libparrot.a                              [main]lib
 blib/lib/libparrot.dylib                          [main]lib
-blib/lib/libparrot.so.2.2.0                       [main]lib
+blib/lib/libparrot.so.2.3.0                       [main]lib
 blib/lib/libparrot.so                             [main]lib
 compilers/data_json/data_json.pbc                 [data_json]
 compilers/json/JSON.pbc                           [json]
@@ -44,7 +44,6 @@
 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 +66,8 @@
 installable_pbc_to_exe                            [main]bin
 installable_parrot-nqp.exe                        [main]bin
 installable_parrot-nqp                            [main]bin
+installable_tapir.exe                             [main]bin
+installable_tapir                                 [main]bin
 lib/Parrot/Config/Generated.pm                    [devel]lib
 libparrot.dll                                     [main]bin
 libparrot.lib                                     [main]bin
@@ -118,6 +119,7 @@
 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]
@@ -172,6 +174,7 @@
 runtime/parrot/library/OpenGL_funcs.pir           [main]
 runtime/parrot/library/OpenGL_funcs.pbc           [main]
 runtime/parrot/library/OpenGL.pbc                 [main]
+runtime/parrot/library/osutils.pbc                [main]
 runtime/parrot/library/P6object.pbc               [main]
 runtime/parrot/library/P6Regex.pbc                [main]
 runtime/parrot/library/Parrot/Capture_PIR.pbc     [main]
@@ -204,6 +207,9 @@
 runtime/parrot/library/Stream/Replay.pbc          [main]
 runtime/parrot/library/Stream/Sub.pbc             [main]
 runtime/parrot/library/Stream/Writer.pbc          [main]
+runtime/parrot/library/TAP/Formatter.pbc          [main]
+runtime/parrot/library/TAP/Harness.pbc            [main]
+runtime/parrot/library/TAP/Parser.pbc             [main]
 runtime/parrot/library/Tcl/Glob.pbc               [main]
 runtime/parrot/library/TclLibrary.pbc             [main]
 runtime/parrot/library/Test/Builder/Test.pbc      [main]

Modified: branches/include_dynpmc_makefile/META.yml
==============================================================================
--- branches/include_dynpmc_makefile/META.yml	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/META.yml	Wed Apr 21 23:40:50 2010	(r45876)
@@ -4,7 +4,7 @@
 # See http://module-build.sourceforge.net/META-spec-current.html for details.
 ---
 name: parrot
-version: 2.2.0
+version: 2.3.0
 author: parrot-dev at lists.parrot.org
 abstract: a virtual machine designed for dynamic languages
 license: artistic2

Modified: branches/include_dynpmc_makefile/NEWS
==============================================================================
--- branches/include_dynpmc_makefile/NEWS	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/NEWS	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,18 +1,25 @@
 # $Id$
 
 New in 2.3.0
-- Features
 - Core
-- Compilers
-- Deprecations
-- API
+  + 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
-- Bugfix
-- Tests
+  + Cygwin packages will be updated again with Parrot releases
+  + Fedora packages add desktop files
+  + gzip and bzip2 compressed tar files for releases
 - Tools
-- Documentation
+  + tapir executable added; tapir is a TAP test harness
+  + Added TAP options --merge --ignore-exit
 - Miscellaneous
+  + 3 month cycle for supported releases
+  + Review and vote of GSoC applications
 
 New in 2.2.0
 - Core changes

Modified: branches/include_dynpmc_makefile/PBC_COMPAT
==============================================================================
--- branches/include_dynpmc_makefile/PBC_COMPAT	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/PBC_COMPAT	Wed Apr 21 23:40:50 2010	(r45876)
@@ -27,6 +27,8 @@
 
 # please insert tab separated entries at the top of the list
 
+6.7	2010.04.22	coke	remove RetContinuation PMC
+6.6	2010.04.17	bacek	add replace op
 6.5	2010.03.09	cotto	remove cpu_ret op
 6.4	2010.03.02	cotto	remove prederef__ and reserved
 6.3	2010.02.16	whiteknight	Add OpLib and Opcode PMCs

Modified: branches/include_dynpmc_makefile/README
==============================================================================
--- branches/include_dynpmc_makefile/README	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/README	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.2.0
+This is Parrot, version 2.3.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.

Modified: branches/include_dynpmc_makefile/README_cygwin.pod
==============================================================================
--- branches/include_dynpmc_makefile/README_cygwin.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/README_cygwin.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/README_win32.pod
==============================================================================
--- branches/include_dynpmc_makefile/README_win32.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/README_win32.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/RESPONSIBLE_PARTIES
==============================================================================
--- branches/include_dynpmc_makefile/RESPONSIBLE_PARTIES	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/RESPONSIBLE_PARTIES	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/VERSION
==============================================================================
--- branches/include_dynpmc_makefile/VERSION	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/VERSION	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1 +1 @@
-2.2.0
+2.3.0

Copied: branches/include_dynpmc_makefile/compilers/data_json/.gitignore (from r45870, trunk/compilers/data_json/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/data_json/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/data_json/.gitignore)
@@ -0,0 +1 @@
+/data_json.pbc

Copied: branches/include_dynpmc_makefile/compilers/data_json/data_json/.gitignore (from r45870, trunk/compilers/data_json/data_json/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/data_json/data_json/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/data_json/data_json/.gitignore)
@@ -0,0 +1,2 @@
+/*.pir
+/*.pbc

Copied: branches/include_dynpmc_makefile/compilers/imcc/.gitignore (from r45870, trunk/compilers/imcc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/imcc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/imcc/.gitignore)
@@ -0,0 +1,10 @@
+/*.flag
+/*.o
+/*.tmp
+/imcc
+/imclexer.c
+/imcparser.c
+/imcparser.h
+/imcparser.output
+/*.obj
+/Rules.mak

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

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

Modified: branches/include_dynpmc_makefile/compilers/imcc/imcparser.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/imcparser.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/imcparser.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/imcc/imcparser.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/imcparser.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/imcparser.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/imcc/instructions.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/instructions.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/instructions.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -277,11 +277,7 @@
     const int f = ins->flags;
     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;
@@ -344,6 +340,7 @@
     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/include_dynpmc_makefile/compilers/imcc/main.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/main.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/main.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -78,7 +78,7 @@
     int obj_file,
     ARGIN_NULLOK(const char *output_file),
     int argc,
-    ARGIN(char **argv))
+    ARGIN(const char **argv))
         __attribute__nonnull__(1)
         __attribute__nonnull__(5);
 
@@ -462,7 +462,7 @@
 /*
 
 =item C<static void imcc_run_pbc(PARROT_INTERP, int obj_file, const char
-*output_file, int argc, char **argv)>
+*output_file, int argc, const char **argv)>
 
 Write out or run Parrot bytecode.
 
@@ -472,7 +472,7 @@
 
 static void
 imcc_run_pbc(PARROT_INTERP, int obj_file, ARGIN_NULLOK(const char *output_file),
-        int argc, ARGIN(char **argv))
+        int argc, ARGIN(const char **argv))
 {
     ASSERT_ARGS(imcc_run_pbc)
     if (IMCC_INFO(interp)->imcc_warn)
@@ -692,7 +692,7 @@
 
 /*
 
-=item C<int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, char
+=item C<int imcc_run(PARROT_INTERP, const char *sourcefile, int argc, const char
 **argv)>
 
 Entry point of IMCC, as invoked by Parrot's main function.
@@ -705,7 +705,7 @@
 
 int
 imcc_run(PARROT_INTERP, ARGIN(const char *sourcefile), int argc,
-        ARGIN(char **argv))
+        ARGIN(const char **argv))
 {
     int                obj_file;
     yyscan_t           yyscanner   = IMCC_INFO(interp)->yyscanner;

Modified: branches/include_dynpmc_makefile/compilers/imcc/optimizer.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/optimizer.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/optimizer.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/imcc/parser_util.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/parser_util.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/parser_util.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -654,7 +654,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 +708,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 +935,13 @@
     IMCC_push_parser_state(interp);
     {
         /* Store a copy, in order to know how to free it later */
-        char *copyname = mem_sys_strdup(fullname);
+        char *copyname                 = mem_sys_strdup(fullname);
         IMCC_INFO(interp)->state->file = copyname;
         ext                            = strrchr(copyname, '.');
     }
-    IMCC_INFO(interp)->line        = 1;
+
+    /* start over; let the start of line rule increment this to 1 */
+    IMCC_INFO(interp)->line = 0;
 
     /*
      * the Parrot_str_compare() called from pmc_type() triggers GC

Modified: branches/include_dynpmc_makefile/compilers/imcc/pbc.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/pbc.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/pbc.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1064,8 +1064,7 @@
     if (!pcc_sub->multi[0])
         return Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
 
-    multi_sig = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    VTABLE_set_integer_native(interp, multi_sig, n);
+    multi_sig = Parrot_pmc_new_init_int(interp, enum_class_FixedPMCArray, n);
     ct        = interp->code->const_table;
 
     for (i = 0; i < n; ++i) {
@@ -1337,8 +1336,10 @@
         unit->subid = r;
     else {
         /* trim the quotes  */
+        char *oldname     = unit->subid->name;
         unit->subid->name = mem_sys_strdup(unit->subid->name + 1);
         unit->subid->name[strlen(unit->subid->name) - 1] = 0;
+        mem_sys_free(oldname);
 
         /* create string constant for it. */
         unit->subid->color = add_const_str(interp, unit->subid);
@@ -1395,7 +1396,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);
@@ -1404,14 +1405,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;
@@ -1542,7 +1542,7 @@
     SymReg   *reg;
 
     char      s_key[KEYLEN * 10];
-    opcode_t  key[KEYLEN];
+    opcode_t  key[KEYLEN + 1]; /* [0] -> length, [1..] -> keys */
     opcode_t  size;
     int       key_length;     /* P0["hi;there"; S0; 2] has length 3 */
     int       k;

Modified: branches/include_dynpmc_makefile/compilers/imcc/pcc.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/pcc.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/pcc.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/imcc/symreg.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/symreg.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/symreg.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/imcc/unit.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/imcc/unit.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/imcc/unit.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/compilers/json/.gitignore (from r45870, trunk/compilers/json/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/json/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/json/.gitignore)
@@ -0,0 +1 @@
+/JSON.pbc

Copied: branches/include_dynpmc_makefile/compilers/json/JSON/.gitignore (from r45870, trunk/compilers/json/JSON/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/json/JSON/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/json/JSON/.gitignore)
@@ -0,0 +1,2 @@
+/*.pbc
+/*.pir

Copied: branches/include_dynpmc_makefile/compilers/ncigen/.gitignore (from r45870, trunk/compilers/ncigen/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/ncigen/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/ncigen/.gitignore)
@@ -0,0 +1,2 @@
+/Makefile
+/ncigen.pbc

Copied: branches/include_dynpmc_makefile/compilers/ncigen/src/.gitignore (from r45870, trunk/compilers/ncigen/src/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/ncigen/src/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/ncigen/src/.gitignore)
@@ -0,0 +1,3 @@
+/gen_actions.pir
+/gen_grammar.pir
+/gen_builtins.pir

Copied: branches/include_dynpmc_makefile/compilers/nqp/.gitignore (from r45870, trunk/compilers/nqp/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/nqp/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/nqp/.gitignore)
@@ -0,0 +1 @@
+/nqp.pbc

Copied: branches/include_dynpmc_makefile/compilers/nqp/bootstrap/.gitignore (from r45870, trunk/compilers/nqp/bootstrap/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/nqp/bootstrap/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/nqp/bootstrap/.gitignore)
@@ -0,0 +1,2 @@
+/nqp.pbc
+/gen_actions.pir

Copied: branches/include_dynpmc_makefile/compilers/nqp/src/.gitignore (from r45870, trunk/compilers/nqp/src/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/nqp/src/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/nqp/src/.gitignore)
@@ -0,0 +1 @@
+/Grammar_gen.pir

Copied: branches/include_dynpmc_makefile/compilers/pct/src/PAST/.gitignore (from r45870, trunk/compilers/pct/src/PAST/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pct/src/PAST/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pct/src/PAST/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/compilers/pct/src/PCT/.gitignore (from r45870, trunk/compilers/pct/src/PCT/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pct/src/PCT/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pct/src/PCT/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Modified: branches/include_dynpmc_makefile/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pct/src/PCT/HLLCompiler.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pct/src/PCT/HLLCompiler.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/compilers/pct/src/POST/.gitignore (from r45870, trunk/compilers/pct/src/POST/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pct/src/POST/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pct/src/POST/.gitignore)
@@ -0,0 +1,2 @@
+/Grammar_gen.pir
+/*.pbc

Modified: branches/include_dynpmc_makefile/compilers/pct/src/POST/Node.pir
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pct/src/POST/Node.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pct/src/POST/Node.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -82,7 +82,7 @@
 .end
 
 
-=item get_string()   # vtable method
+=item get_string()
 
 Returns the result of the current node as a string.
 

Copied: branches/include_dynpmc_makefile/compilers/pge/.gitignore (from r45870, trunk/compilers/pge/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pge/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pge/.gitignore)
@@ -0,0 +1 @@
+/PGE.pbc

Copied: branches/include_dynpmc_makefile/compilers/pge/PGE/.gitignore (from r45870, trunk/compilers/pge/PGE/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pge/PGE/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pge/PGE/.gitignore)
@@ -0,0 +1,2 @@
+/builtins_gen.pir
+/*.dll

Modified: branches/include_dynpmc_makefile/compilers/pge/PGE/Exp.pir
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pge/PGE/Exp.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pge/PGE/Exp.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -163,7 +163,7 @@
     .local string returnop
     returnop = '.yield'
     code.'emit'(<<"        CODE", name, pirflags, namecorou, .INTERPINFO_CURRENT_SUB)
-      .sub %0 :method %1
+      .sub %0 :method :nsentry %1
           .param pmc adverbs   :slurpy :named
           .local pmc mob
           .const 'Sub' corou = %2
@@ -192,7 +192,7 @@
     ##   Initial code for a rule that cannot be backtracked into.
     returnop = '.return'
     code.'emit'(<<"        CODE", name, pirflags)
-      .sub %0 :method %1
+      .sub %0 :method :nsentry %1
           .param pmc adverbs      :unique_reg :slurpy :named
           .local pmc mob
           .local string target    :unique_reg
@@ -718,7 +718,7 @@
 
 .namespace [ 'PGE';'Exp';'CGroup' ]
 
-.sub 'pir' :method
+.sub 'pir' :method :nsentry
     .param pmc code
     .param string label
     .param string next

Modified: branches/include_dynpmc_makefile/compilers/pge/PGE/Regex.pir
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pge/PGE/Regex.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pge/PGE/Regex.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/compilers/pirc/.gitignore (from r45870, trunk/compilers/pirc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pirc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pirc/.gitignore)
@@ -0,0 +1,5 @@
+/pirc
+/pirc.exe
+/*.o
+/*.obj
+/*.pbd

Modified: branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pircompiler.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pircompiler.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pircompunit.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pircompunit.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pircompunit.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pircompunit.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pircompunit.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pircompunit.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pirlexer.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pirlexer.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pirlexer.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pirparser.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pirparser.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pirparser.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.c
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.h
==============================================================================
--- branches/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/compilers/pirc/src/pirsymbol.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/compilers/pirc/t/.gitignore (from r45870, trunk/compilers/pirc/t/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/pirc/t/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/pirc/t/.gitignore)
@@ -0,0 +1,6 @@
+/subflags_?.pir
+/heredoc_?.pir
+/stmts_?.pir
+/basic_?.pir
+/basic_??.pir
+/macro_?.pir

Copied: branches/include_dynpmc_makefile/compilers/tge/.gitignore (from r45870, trunk/compilers/tge/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/tge/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/tge/.gitignore)
@@ -0,0 +1 @@
+/tgc.pbc

Copied: branches/include_dynpmc_makefile/compilers/tge/TGE/.gitignore (from r45870, trunk/compilers/tge/TGE/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/compilers/tge/TGE/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/compilers/tge/TGE/.gitignore)
@@ -0,0 +1 @@
+/Parser.pir

Modified: branches/include_dynpmc_makefile/config/auto/arch.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/auto/arch.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/auto/arch.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/auto/attributes.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/auto/attributes.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/auto/attributes.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/auto/attributes/test_c.in
==============================================================================
--- branches/include_dynpmc_makefile/config/auto/attributes/test_c.in	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/auto/attributes/test_c.in	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/auto/crypto.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/auto/crypto.pm	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/config/auto/gdbm.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/auto/gdbm.pm	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/config/auto/warnings.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/auto/warnings.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/auto/warnings.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
@@ -247,13 +249,21 @@
         -Wwrite-strings
         ),
         # Disable some warnings and notifications that are overly noisy
-        '-diag-disable 981',  # Operands are evaluated in unspecified order
-        '-diag-disable 2259', # Non-pointer conversion from "typeA" to "typeB" may lose significant bits
+        '-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++
 
@@ -273,6 +283,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"

Modified: branches/include_dynpmc_makefile/config/gen/config_pm.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/config_pm.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/config_pm.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/config_pm/config_lib_pasm.in
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/config_pm/config_lib_pasm.in	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/config/gen/config_pm/config_lib_pir.in (from r45870, trunk/config/gen/config_pm/config_lib_pir.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/config/gen/config_pm/config_lib_pir.in	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/config/gen/config_pm/config_pir.in
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/config_pm/config_pir.in	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/config_pm/config_pir.in	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/core_pmcs.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/core_pmcs.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/core_pmcs.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/crypto.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/crypto.pm	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/config/gen/makefiles/docs.in
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/makefiles/docs.in	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/makefiles/docs.in	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2006, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 # Setup of some commands
@@ -11,6 +11,9 @@
 PERLDOC_BIN = @perldoc@
 VERSION = @VERSION@@DEVEL@
 
+# chapters in the generated PDF parrot book
+CHAPTERS = $(PERL) ../tools/docs/filename_and_chapter.pl --b_out
+
 # long list of .pod files
 POD = @TEMP_pod@
 
@@ -50,6 +53,21 @@
 html: all
 	$(PERL) -I../lib ../tools/docs/write_docs.pl --silent --version=$(VERSION)
 
+# The pdf target is to generate a parrot PDF document.
+# It will not work on Windows. It call a script which use a specific Unix
+# command. May be that will be changed.
+pdf: ../tools/docs/book-to-latex.pl ../tools/docs/filename_and_chapter.pl
+	$(MKPATH) build/modified_pod
+	$(PERL) ../tools/docs/filename_and_chapter.pl
+	$(PERL) ../tools/docs/book-to-latex.pl `$(CHAPTERS)` > build/parrot-book.tex
+	cd build && pdflatex parrot-book.tex && pdflatex parrot-book.tex
+
+#pdf-release: build/parrot-book.pdf
+#	cp build/parrot-book.pdf build/parrot-book-$$(date +"%Y.%m").pdf
+
+pdf-clean:
+	$(RM_RF) build
+
 html-clean:
 	$(RM_RF) html
 

Modified: branches/include_dynpmc_makefile/config/gen/makefiles/root.in
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/makefiles/root.in	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/makefiles/root.in	Wed Apr 21 23:40:50 2010	(r45876)
@@ -154,7 +154,6 @@
 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 \
@@ -170,23 +169,7 @@
 #IF(has_opengl):    src/glut_nci_thunks.nci \
 #IF(has_glut):    src/glut_callbacks.c \
     src/core_pmcs.c \
-#IF(has_crypto):    src/dynpmc/md2.pmc \
-#IF(has_crypto):    src/dynpmc/md4.pmc \
-#IF(has_crypto):    src/dynpmc/md5.pmc \
-#IF(has_crypto):    src/dynpmc/ripemd160.pmc \
-#IF(has_crypto):    src/dynpmc/sha.pmc \
-#IF(has_crypto):    src/dynpmc/sha1.pmc \
-#IF(has_crypto):    src/dynpmc/sha256.pmc \
-#IF(has_crypto):    src/dynpmc/sha512.pmc \
-#IF(has_crypto):    t/dynpmc/md2.t \
-#IF(has_crypto):    t/dynpmc/md4.t \
-#IF(has_crypto):    t/dynpmc/md5.t \
-#IF(has_crypto):    t/dynpmc/ripemd160.t \
-#IF(has_crypto):    t/dynpmc/sha.t \
-#IF(has_crypto):    t/dynpmc/sha1.t \
-#IF(has_crypto):    t/dynpmc/sha256.t \
-#IF(has_crypto):    t/dynpmc/sha512.t \
-    config_lib.pasm \
+    config_lib.pir \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
     compilers/imcc/imcc.l.flag \
@@ -212,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 \
@@ -297,7 +281,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 \
@@ -320,6 +310,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 \
@@ -345,6 +338,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
 
 
@@ -529,6 +526,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)
@@ -540,6 +538,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@
@@ -549,7 +548,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@
@@ -580,10 +579,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 $@ $<
@@ -802,16 +799,17 @@
 
 world : all parrot_utils
 
-parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O)
+parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O) $(TAPIR)
 
-installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
+installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN) $(INSTALLABLETAPIR)
 
 
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
 
-runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
-	$(MINIPARROT) config_lib.pasm > $@
+runtime/parrot/include/config.fpmc : myconfig config_lib.pir \
+    runtime/parrot/include/datatypes.pasm $(MINIPARROT)
+	$(MINIPARROT) -Iruntime/parrot/include config_lib.pir > $@
 
 $(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
@@ -831,6 +829,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
@@ -851,7 +855,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 \
@@ -868,9 +872,9 @@
 	$(PERL) $(BUILD_TOOLS_DIR)/parrot_config_c.pl --mini > \
     src/null_config.c
 
-install_config.fpmc : myconfig config_lib.pasm $(PARROT)
+install_config.fpmc : myconfig config_lib.pir $(PARROT)
 	@echo "Invoking Parrot to generate install_config.fpmc"
-	$(PARROT) config_lib.pasm --install > $@
+	$(PARROT) config_lib.pir --install > $@
 
 src/parrot_config$(O) : $(PARROT_H_HEADERS)
 
@@ -946,6 +950,9 @@
 $(INSTALLABLENCITHUNKGEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE) src/install_config$(O)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc --install
 
+$(INSTALLABLETAPIR) : tapir.pbc $(PBC_TO_EXE)
+	$(PBC_TO_EXE) tapir.pbc --install
+
 #
 # Parrot Debugger
 #
@@ -1037,6 +1044,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 > $@
+
+
 
 ###############################################################################
 #
@@ -1087,6 +1134,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 $@
 
@@ -1562,6 +1612,12 @@
 htmlhelp-clean :
 	$(MAKE) docs htmlhelp-clean
 
+#UNLESS(win32):pdf:
+#UNLESS(win32):	$(MAKE) docs pdf
+
+pdf-clean:
+	$(MAKE) docs pdf-clean
+
 ###############################################################################
 #
 # compiler implementation targets:
@@ -1676,6 +1732,7 @@
 	testS \
 	src_tests \
 	run_tests \
+	buildtools_tests \
 	perl_tests \
 	library_tests \
 	nqp_test \
@@ -1823,8 +1880,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) \
@@ -2061,7 +2120,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
 
@@ -2073,7 +2133,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 \
     \
@@ -2095,14 +2155,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 \
@@ -2110,9 +2172,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 \
@@ -2121,63 +2193,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 \
@@ -2196,13 +2249,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
@@ -2211,7 +2278,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'
@@ -2450,7 +2517,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*)
@@ -2467,11 +2534,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:
@@ -2483,6 +2550,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
@@ -2492,6 +2560,7 @@
 
 HEADERIZER_O_FILES = \
     $(O_FILES) \
+    src/main$(O) \
     src/packdump$(O) \
     src/pbc_merge$(O) \
     $(PIRC_O_FILES)

Modified: branches/include_dynpmc_makefile/config/gen/opengl.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/opengl.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/opengl.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/platform.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/platform.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/platform.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/platform/ansi/dl.c
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/platform/ansi/dl.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/platform/ansi/dl.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/platform/generic/dl.c
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/platform/generic/dl.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/platform/generic/dl.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/gen/platform/generic/env.c
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/platform/generic/env.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/platform/generic/env.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Deleted: branches/include_dynpmc_makefile/config/gen/platform/platform_interface.h
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/platform/platform_interface.h	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/config/gen/platform/win32/dl.c
==============================================================================
--- branches/include_dynpmc_makefile/config/gen/platform/win32/dl.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/gen/platform/win32/dl.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/init/defaults.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/init/defaults.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/init/defaults.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -94,23 +94,14 @@
         # Compiler -- used to turn .c files into object files.
         # (Usually cc or cl, or something like that.)
         cc      => $cc_option ? $cc_option : $Config{cc},
-        # If we specify a compiler, we can't use existing ccflags and ccwarn.
+        # If we specify a compiler, we can't use existing ccflags.
         ccflags => $cc_option ? ''         : $Config{ccflags},
-        ccwarn  => $cc_option ? ''         : $Config{ccwarn},
+        ccwarn  => '',
 
         # Flags used to indicate this object file is to be compiled
         # with position-independent code suitable for dynamic loading.
         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".
@@ -193,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',
@@ -285,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/include_dynpmc_makefile/config/init/hints/cygwin.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/init/hints/cygwin.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/init/hints/cygwin.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/init/hints/irix.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/init/hints/irix.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/init/hints/irix.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/config/inter/progs.pm
==============================================================================
--- branches/include_dynpmc_makefile/config/inter/progs.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/config/inter/progs.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
 }
 

Copied: branches/include_dynpmc_makefile/docs/.gitignore (from r45870, trunk/docs/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/docs/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/docs/.gitignore)
@@ -0,0 +1,6 @@
+/*.tmp
+/html
+/Makefile
+/packfile-c.pod
+/packfile-perl.pod
+/doc-prep

Copied: branches/include_dynpmc_makefile/docs/book/.gitignore (from r45870, trunk/docs/book/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/docs/book/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/docs/book/.gitignore)
@@ -0,0 +1 @@
+/*.html

Modified: branches/include_dynpmc_makefile/docs/book/draft/ch07_dynpmcs.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/book/draft/ch07_dynpmcs.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/book/draft/ch07_dynpmcs.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/book/draft/chXX_hlls.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/book/draft/chXX_hlls.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/book/draft/chXX_hlls.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/dev/infant.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/dev/infant.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/dev/infant.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/dev/pccmethods.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/dev/pccmethods.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/dev/pccmethods.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/dev/pmc_freeze.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/dev/pmc_freeze.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/dev/pmc_freeze.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/dev/pmc_obj_design_meeting_notes.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/dev/pmc_obj_design_meeting_notes.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/dev/pmc_obj_design_meeting_notes.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/embed.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/embed.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/embed.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1551,8 +1551,6 @@
 
 =item C<Parrot_store_sub_in_namespace>
 
-=item C<Parrot_str_append>
-
 =item C<Parrot_str_boolean>
 
 =item C<Parrot_str_byte_length>

Modified: branches/include_dynpmc_makefile/docs/intro.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/intro.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/intro.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -391,7 +391,7 @@
 
 =begin PIR_FRAGMENT
 
-  .local pmc result, factorial
+  .local int result
   result = factorial($I0)
 
 =end PIR_FRAGMENT

Copied: branches/include_dynpmc_makefile/docs/ops/.gitignore (from r45870, trunk/docs/ops/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/docs/ops/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/docs/ops/.gitignore)
@@ -0,0 +1 @@
+/*.pod

Modified: branches/include_dynpmc_makefile/docs/parrothist.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/parrothist.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/parrothist.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -105,4 +105,6 @@
  chromatic   2.0.0 *        2010-Jan-19     "Inevitable"
  darbelo     2.1.0          2010-Feb-16     "As Scheduled"
  cotto       2.2.0          2010-Mar-16     "Like Clockwork"
+
+ Gerd        2.3.0 *        2010-Apr-20     "Samoan Lory"
 =cut

Modified: branches/include_dynpmc_makefile/docs/pdds/draft/pdd01_overview.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd01_overview.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd01_overview.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd05_opfunc.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd05_opfunc.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd05_opfunc.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd06_pasm.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd06_pasm.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd06_pasm.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd08_keys.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd08_keys.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd08_keys.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd10_embedding.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd10_embedding.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd10_embedding.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd11_extending.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd11_extending.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd11_extending.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd14_numbers.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd14_numbers.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd14_numbers.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd16_native_call.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd16_native_call.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd16_native_call.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd29_compiler_tools.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd29_compiler_tools.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd29_compiler_tools.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll_interop.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll_interop.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/draft/pdd31_hll_interop.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/pdd00_pdd.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd00_pdd.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd00_pdd.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/pdd03_calling_conventions.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd03_calling_conventions.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd03_calling_conventions.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/pdd07_codingstd.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd07_codingstd.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd07_codingstd.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/pdd09_gc.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd09_gc.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd09_gc.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/pdd15_objects.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd15_objects.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd15_objects.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd17_pmc.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd17_pmc.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,
@@ -1656,8 +1656,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 +1809,9 @@
 
 =back
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
-  docs/pmc2c.pod
+F<docs/pmc2c.pod>
 
 =cut
 

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

Modified: branches/include_dynpmc_makefile/docs/pdds/pdd30_install.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/pdds/pdd30_install.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/pdds/pdd30_install.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -160,14 +160,6 @@
 good choice, and can be combined with Autoconf, CMake, Perl, Python,
 etc. for more complex conditional builds).
 
-=head2 Attachments
-
-None.
-
-=head2 Footnotes
-
-None.
-
 =head2 References
 
 None.

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

Modified: branches/include_dynpmc_makefile/docs/running.pod
==============================================================================
--- branches/include_dynpmc_makefile/docs/running.pod	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/docs/running.pod	Wed Apr 21 23:40:50 2010	(r45876)
@@ -142,6 +142,7 @@
                 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

Copied: branches/include_dynpmc_makefile/editor/.gitignore (from r45870, trunk/editor/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/editor/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/editor/.gitignore)
@@ -0,0 +1,4 @@
+/Makefile
+/imc.vim
+/imcc.xml
+/pir.vim

Copied: branches/include_dynpmc_makefile/examples/languages/abc/.gitignore (from r45870, trunk/examples/languages/abc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/languages/abc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/languages/abc/.gitignore)
@@ -0,0 +1,10 @@
+/MANIFEST
+/*.pbc
+/*.c
+/*.o
+/*.obj
+/*.exe
+/*.iss
+/abc
+/installable_abc
+/man

Modified: branches/include_dynpmc_makefile/examples/languages/abc/setup.pir
==============================================================================
--- branches/include_dynpmc_makefile/examples/languages/abc/setup.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/examples/languages/abc/setup.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/examples/languages/abc/src/.gitignore (from r45870, trunk/examples/languages/abc/src/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/languages/abc/src/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/languages/abc/src/.gitignore)
@@ -0,0 +1,3 @@
+/gen_actions.pir
+/gen_grammar.pir
+/gen_builtins.pir

Copied: branches/include_dynpmc_makefile/examples/languages/abc/t/.gitignore (from r45870, trunk/examples/languages/abc/t/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/languages/abc/t/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/languages/abc/t/.gitignore)
@@ -0,0 +1,2 @@
+/*_*.pir
+/*_*.out

Copied: branches/include_dynpmc_makefile/examples/languages/squaak/.gitignore (from r45870, trunk/examples/languages/squaak/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/languages/squaak/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/languages/squaak/.gitignore)
@@ -0,0 +1,9 @@
+/MANIFEST
+/*.pbc
+/*.c
+/*.o
+/*.obj
+/*.exe
+/*.iss
+/squaak
+/installable_squaak

Copied: branches/include_dynpmc_makefile/examples/languages/squaak/src/.gitignore (from r45870, trunk/examples/languages/squaak/src/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/languages/squaak/src/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/languages/squaak/src/.gitignore)
@@ -0,0 +1 @@
+/gen_*.pir

Copied: branches/include_dynpmc_makefile/examples/mops/.gitignore (from r45870, trunk/examples/mops/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/mops/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/mops/.gitignore)
@@ -0,0 +1,2 @@
+/*.o
+/mops

Copied: branches/include_dynpmc_makefile/examples/nci/.gitignore (from r45870, trunk/examples/nci/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/nci/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/nci/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/examples/pasm/.gitignore (from r45870, trunk/examples/pasm/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/pasm/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/pasm/.gitignore)
@@ -0,0 +1,3 @@
+/hello
+/hello.o
+/hello.pbc

Copied: branches/include_dynpmc_makefile/examples/pir/befunge/.gitignore (from r45870, trunk/examples/pir/befunge/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/examples/pir/befunge/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/examples/pir/befunge/.gitignore)
@@ -0,0 +1,9 @@
+/MANIFEST
+/*.pbc
+/*.c
+/*.o
+/*.obj
+/*.exe
+/*.iss
+/befunge
+/installable_befunge

Modified: branches/include_dynpmc_makefile/examples/pir/befunge/setup.pir
==============================================================================
--- branches/include_dynpmc_makefile/examples/pir/befunge/setup.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/examples/pir/befunge/setup.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/examples/tutorial/56_defined.pir
==============================================================================
--- branches/include_dynpmc_makefile/examples/tutorial/56_defined.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/examples/tutorial/56_defined.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/ext/.gitignore (from r45870, trunk/ext/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ext/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/ext/.gitignore)
@@ -0,0 +1 @@
+/Makefile

Copied: branches/include_dynpmc_makefile/ext/Parrot-Embed/.gitignore (from r45870, trunk/ext/Parrot-Embed/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ext/Parrot-Embed/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/ext/Parrot-Embed/.gitignore)
@@ -0,0 +1,29 @@
+/*.tmp
+/*.pdb
+/_build
+/blib
+/Build
+/Build.bat
+/Makefile
+/Makefile.PL
+/*.bundle
+/*.c
+/*.dump
+/*.dylib
+/*.h
+/*.so
+/*.o
+/*.exe
+/*.pdb
+/*.ilk
+/*.def
+/*.lib
+/*.obj
+/*.exp
+/*.dll
+/*.manifest
+/*.bs
+/*.old
+/*.xs
+/pm_to_blib
+/dll.base

Modified: branches/include_dynpmc_makefile/ext/Parrot-Embed/Build.PL
==============================================================================
--- branches/include_dynpmc_makefile/ext/Parrot-Embed/Build.PL	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ext/Parrot-Embed/Build.PL	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 @_;
 }

Copied: branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/.gitignore (from r45870, trunk/ext/Parrot-Embed/lib/Parrot/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/ext/Parrot-Embed/lib/Parrot/.gitignore)
@@ -0,0 +1,2 @@
+/*.obj
+/*.c

Modified: branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/Embed.xs
==============================================================================
--- branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/Embed.xs	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ext/Parrot-Embed/lib/Parrot/Embed.xs	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/ext/Parrot-Embed/t/.gitignore (from r45870, trunk/ext/Parrot-Embed/t/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ext/Parrot-Embed/t/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/ext/Parrot-Embed/t/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Modified: branches/include_dynpmc_makefile/ext/Parrot-Embed/t/interp.t
==============================================================================
--- branches/include_dynpmc_makefile/ext/Parrot-Embed/t/interp.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ext/Parrot-Embed/t/interp.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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!',

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

Modified: branches/include_dynpmc_makefile/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/include_dynpmc_makefile/ext/nqp-rx/src/stage0/NQP-s0.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ext/nqp-rx/src/stage0/NQP-s0.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -15,387 +15,387 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204702.05125")
+.sub "_block11"  :anon :subid("10_1271336396.90314")
 .annotate "line", 0
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     capture_lex $P14
-    $P1296 = $P14()
+    $P1299 = $P14()
 .annotate "line", 1
-    .return ($P1296)
+    .return ($P1299)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post331") :outer("10_1267204702.05125")
+.sub "" :load :init :subid("post331") :outer("10_1271336396.90314")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204702.05125" 
+    .const 'Sub' $P12 = "10_1271336396.90314" 
     .local pmc block
     set block, $P12
-    $P1297 = get_root_global ["parrot"], "P6metaclass"
-    $P1297."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
+    $P1300 = get_root_global ["parrot"], "P6metaclass"
+    $P1300."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1267204702.05125") :outer("10_1267204702.05125")
+.sub "_block13"  :subid("11_1271336396.90314") :outer("10_1271336396.90314")
 .annotate "line", 4
-    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
-    capture_lex $P1240
-    .const 'Sub' $P1226 = "317_1267204702.05125" 
-    capture_lex $P1226
-    .const 'Sub' $P1220 = "315_1267204702.05125" 
-    capture_lex $P1220
-    .const 'Sub' $P1214 = "313_1267204702.05125" 
-    capture_lex $P1214
-    .const 'Sub' $P1207 = "311_1267204702.05125" 
-    capture_lex $P1207
-    .const 'Sub' $P1200 = "309_1267204702.05125" 
-    capture_lex $P1200
-    .const 'Sub' $P1193 = "307_1267204702.05125" 
-    capture_lex $P1193
-    .const 'Sub' $P1186 = "305_1267204702.05125" 
-    capture_lex $P1186
-    .const 'Sub' $P1180 = "303_1267204702.05125" 
-    capture_lex $P1180
-    .const 'Sub' $P1173 = "301_1267204702.05125" 
-    capture_lex $P1173
-    .const 'Sub' $P1166 = "299_1267204702.05125" 
-    capture_lex $P1166
-    .const 'Sub' $P1159 = "297_1267204702.05125" 
-    capture_lex $P1159
-    .const 'Sub' $P1152 = "295_1267204702.05125" 
-    capture_lex $P1152
-    .const 'Sub' $P1145 = "293_1267204702.05125" 
-    capture_lex $P1145
-    .const 'Sub' $P1138 = "291_1267204702.05125" 
-    capture_lex $P1138
-    .const 'Sub' $P1131 = "289_1267204702.05125" 
-    capture_lex $P1131
-    .const 'Sub' $P1124 = "287_1267204702.05125" 
-    capture_lex $P1124
-    .const 'Sub' $P1117 = "285_1267204702.05125" 
-    capture_lex $P1117
-    .const 'Sub' $P1110 = "283_1267204702.05125" 
-    capture_lex $P1110
-    .const 'Sub' $P1103 = "281_1267204702.05125" 
-    capture_lex $P1103
-    .const 'Sub' $P1096 = "279_1267204702.05125" 
-    capture_lex $P1096
-    .const 'Sub' $P1089 = "277_1267204702.05125" 
-    capture_lex $P1089
-    .const 'Sub' $P1082 = "275_1267204702.05125" 
-    capture_lex $P1082
-    .const 'Sub' $P1075 = "273_1267204702.05125" 
-    capture_lex $P1075
-    .const 'Sub' $P1068 = "271_1267204702.05125" 
-    capture_lex $P1068
-    .const 'Sub' $P1061 = "269_1267204702.05125" 
-    capture_lex $P1061
-    .const 'Sub' $P1054 = "267_1267204702.05125" 
-    capture_lex $P1054
-    .const 'Sub' $P1047 = "265_1267204702.05125" 
-    capture_lex $P1047
-    .const 'Sub' $P1040 = "263_1267204702.05125" 
-    capture_lex $P1040
-    .const 'Sub' $P1033 = "261_1267204702.05125" 
-    capture_lex $P1033
-    .const 'Sub' $P1026 = "259_1267204702.05125" 
-    capture_lex $P1026
-    .const 'Sub' $P1019 = "257_1267204702.05125" 
-    capture_lex $P1019
-    .const 'Sub' $P1012 = "255_1267204702.05125" 
-    capture_lex $P1012
-    .const 'Sub' $P1005 = "253_1267204702.05125" 
-    capture_lex $P1005
-    .const 'Sub' $P998 = "251_1267204702.05125" 
-    capture_lex $P998
-    .const 'Sub' $P992 = "249_1267204702.05125" 
-    capture_lex $P992
-    .const 'Sub' $P985 = "247_1267204702.05125" 
-    capture_lex $P985
-    .const 'Sub' $P978 = "245_1267204702.05125" 
-    capture_lex $P978
-    .const 'Sub' $P971 = "243_1267204702.05125" 
-    capture_lex $P971
-    .const 'Sub' $P964 = "241_1267204702.05125" 
-    capture_lex $P964
-    .const 'Sub' $P957 = "239_1267204702.05125" 
-    capture_lex $P957
-    .const 'Sub' $P950 = "237_1267204702.05125" 
-    capture_lex $P950
-    .const 'Sub' $P943 = "235_1267204702.05125" 
-    capture_lex $P943
-    .const 'Sub' $P937 = "233_1267204702.05125" 
-    capture_lex $P937
-    .const 'Sub' $P931 = "231_1267204702.05125" 
-    capture_lex $P931
-    .const 'Sub' $P926 = "229_1267204702.05125" 
-    capture_lex $P926
-    .const 'Sub' $P920 = "227_1267204702.05125" 
-    capture_lex $P920
-    .const 'Sub' $P914 = "225_1267204702.05125" 
-    capture_lex $P914
-    .const 'Sub' $P909 = "223_1267204702.05125" 
-    capture_lex $P909
-    .const 'Sub' $P904 = "221_1267204702.05125" 
-    capture_lex $P904
-    .const 'Sub' $P897 = "219_1267204702.05125" 
-    capture_lex $P897
-    .const 'Sub' $P889 = "217_1267204702.05125" 
-    capture_lex $P889
-    .const 'Sub' $P884 = "215_1267204702.05125" 
-    capture_lex $P884
-    .const 'Sub' $P879 = "213_1267204702.05125" 
-    capture_lex $P879
-    .const 'Sub' $P874 = "211_1267204702.05125" 
-    capture_lex $P874
-    .const 'Sub' $P866 = "209_1267204702.05125" 
-    capture_lex $P866
-    .const 'Sub' $P858 = "207_1267204702.05125" 
-    capture_lex $P858
-    .const 'Sub' $P853 = "205_1267204702.05125" 
-    capture_lex $P853
-    .const 'Sub' $P848 = "203_1267204702.05125" 
-    capture_lex $P848
-    .const 'Sub' $P842 = "201_1267204702.05125" 
-    capture_lex $P842
-    .const 'Sub' $P836 = "199_1267204702.05125" 
-    capture_lex $P836
-    .const 'Sub' $P830 = "197_1267204702.05125" 
-    capture_lex $P830
-    .const 'Sub' $P824 = "195_1267204702.05125" 
-    capture_lex $P824
-    .const 'Sub' $P818 = "193_1267204702.05125" 
-    capture_lex $P818
-    .const 'Sub' $P813 = "191_1267204702.05125" 
-    capture_lex $P813
-    .const 'Sub' $P808 = "189_1267204702.05125" 
-    capture_lex $P808
-    .const 'Sub' $P795 = "185_1267204702.05125" 
-    capture_lex $P795
-    .const 'Sub' $P787 = "183_1267204702.05125" 
-    capture_lex $P787
-    .const 'Sub' $P781 = "181_1267204702.05125" 
-    capture_lex $P781
-    .const 'Sub' $P774 = "179_1267204702.05125" 
-    capture_lex $P774
-    .const 'Sub' $P768 = "177_1267204702.05125" 
-    capture_lex $P768
-    .const 'Sub' $P760 = "175_1267204702.05125" 
-    capture_lex $P760
-    .const 'Sub' $P752 = "173_1267204702.05125" 
-    capture_lex $P752
-    .const 'Sub' $P746 = "171_1267204702.05125" 
-    capture_lex $P746
-    .const 'Sub' $P740 = "169_1267204702.05125" 
-    capture_lex $P740
-    .const 'Sub' $P725 = "165_1267204702.05125" 
-    capture_lex $P725
-    .const 'Sub' $P688 = "163_1267204702.05125" 
-    capture_lex $P688
-    .const 'Sub' $P680 = "161_1267204702.05125" 
-    capture_lex $P680
-    .const 'Sub' $P674 = "159_1267204702.05125" 
-    capture_lex $P674
-    .const 'Sub' $P664 = "157_1267204702.05125" 
-    capture_lex $P664
-    .const 'Sub' $P649 = "155_1267204702.05125" 
-    capture_lex $P649
-    .const 'Sub' $P640 = "153_1267204702.05125" 
-    capture_lex $P640
-    .const 'Sub' $P621 = "151_1267204702.05125" 
-    capture_lex $P621
-    .const 'Sub' $P597 = "149_1267204702.05125" 
-    capture_lex $P597
-    .const 'Sub' $P590 = "147_1267204702.05125" 
-    capture_lex $P590
-    .const 'Sub' $P583 = "145_1267204702.05125" 
-    capture_lex $P583
-    .const 'Sub' $P573 = "141_1267204702.05125" 
-    capture_lex $P573
-    .const 'Sub' $P562 = "139_1267204702.05125" 
-    capture_lex $P562
-    .const 'Sub' $P555 = "137_1267204702.05125" 
-    capture_lex $P555
-    .const 'Sub' $P548 = "135_1267204702.05125" 
-    capture_lex $P548
-    .const 'Sub' $P541 = "133_1267204702.05125" 
-    capture_lex $P541
-    .const 'Sub' $P514 = "129_1267204702.05125" 
-    capture_lex $P514
-    .const 'Sub' $P505 = "127_1267204702.05125" 
-    capture_lex $P505
-    .const 'Sub' $P498 = "125_1267204702.05125" 
-    capture_lex $P498
-    .const 'Sub' $P489 = "121_1267204702.05125" 
-    capture_lex $P489
-    .const 'Sub' $P484 = "119_1267204702.05125" 
-    capture_lex $P484
-    .const 'Sub' $P472 = "117_1267204702.05125" 
-    capture_lex $P472
-    .const 'Sub' $P460 = "115_1267204702.05125" 
-    capture_lex $P460
-    .const 'Sub' $P452 = "113_1267204702.05125" 
-    capture_lex $P452
-    .const 'Sub' $P447 = "111_1267204702.05125" 
-    capture_lex $P447
-    .const 'Sub' $P441 = "109_1267204702.05125" 
-    capture_lex $P441
-    .const 'Sub' $P435 = "107_1267204702.05125" 
-    capture_lex $P435
-    .const 'Sub' $P429 = "105_1267204702.05125" 
-    capture_lex $P429
-    .const 'Sub' $P423 = "103_1267204702.05125" 
-    capture_lex $P423
-    .const 'Sub' $P417 = "101_1267204702.05125" 
-    capture_lex $P417
-    .const 'Sub' $P411 = "99_1267204702.05125" 
-    capture_lex $P411
-    .const 'Sub' $P405 = "97_1267204702.05125" 
-    capture_lex $P405
-    .const 'Sub' $P399 = "95_1267204702.05125" 
-    capture_lex $P399
-    .const 'Sub' $P391 = "93_1267204702.05125" 
-    capture_lex $P391
-    .const 'Sub' $P383 = "91_1267204702.05125" 
-    capture_lex $P383
-    .const 'Sub' $P371 = "87_1267204702.05125" 
-    capture_lex $P371
-    .const 'Sub' $P363 = "85_1267204702.05125" 
-    capture_lex $P363
-    .const 'Sub' $P353 = "81_1267204702.05125" 
-    capture_lex $P353
-    .const 'Sub' $P346 = "79_1267204702.05125" 
-    capture_lex $P346
-    .const 'Sub' $P339 = "77_1267204702.05125" 
-    capture_lex $P339
-    .const 'Sub' $P327 = "73_1267204702.05125" 
-    capture_lex $P327
-    .const 'Sub' $P319 = "71_1267204702.05125" 
-    capture_lex $P319
-    .const 'Sub' $P311 = "69_1267204702.05125" 
-    capture_lex $P311
-    .const 'Sub' $P291 = "67_1267204702.05125" 
-    capture_lex $P291
-    .const 'Sub' $P282 = "65_1267204702.05125" 
-    capture_lex $P282
-    .const 'Sub' $P264 = "62_1267204702.05125" 
-    capture_lex $P264
-    .const 'Sub' $P244 = "60_1267204702.05125" 
-    capture_lex $P244
-    .const 'Sub' $P235 = "56_1267204702.05125" 
-    capture_lex $P235
-    .const 'Sub' $P230 = "54_1267204702.05125" 
-    capture_lex $P230
-    .const 'Sub' $P221 = "50_1267204702.05125" 
-    capture_lex $P221
-    .const 'Sub' $P216 = "48_1267204702.05125" 
-    capture_lex $P216
-    .const 'Sub' $P208 = "46_1267204702.05125" 
-    capture_lex $P208
-    .const 'Sub' $P201 = "44_1267204702.05125" 
-    capture_lex $P201
-    .const 'Sub' $P195 = "42_1267204702.05125" 
-    capture_lex $P195
-    .const 'Sub' $P187 = "40_1267204702.05125" 
-    capture_lex $P187
-    .const 'Sub' $P181 = "38_1267204702.05125" 
-    capture_lex $P181
-    .const 'Sub' $P175 = "36_1267204702.05125" 
-    capture_lex $P175
-    .const 'Sub' $P159 = "33_1267204702.05125" 
-    capture_lex $P159
-    .const 'Sub' $P146 = "31_1267204702.05125" 
-    capture_lex $P146
-    .const 'Sub' $P139 = "29_1267204702.05125" 
-    capture_lex $P139
-    .const 'Sub' $P96 = "26_1267204702.05125" 
+    get_hll_global $P1243, ["NQP";"Regex"], "_block1242" 
+    capture_lex $P1243
+    .const 'Sub' $P1229 = "317_1271336396.90314" 
+    capture_lex $P1229
+    .const 'Sub' $P1223 = "315_1271336396.90314" 
+    capture_lex $P1223
+    .const 'Sub' $P1217 = "313_1271336396.90314" 
+    capture_lex $P1217
+    .const 'Sub' $P1210 = "311_1271336396.90314" 
+    capture_lex $P1210
+    .const 'Sub' $P1203 = "309_1271336396.90314" 
+    capture_lex $P1203
+    .const 'Sub' $P1196 = "307_1271336396.90314" 
+    capture_lex $P1196
+    .const 'Sub' $P1189 = "305_1271336396.90314" 
+    capture_lex $P1189
+    .const 'Sub' $P1183 = "303_1271336396.90314" 
+    capture_lex $P1183
+    .const 'Sub' $P1176 = "301_1271336396.90314" 
+    capture_lex $P1176
+    .const 'Sub' $P1169 = "299_1271336396.90314" 
+    capture_lex $P1169
+    .const 'Sub' $P1162 = "297_1271336396.90314" 
+    capture_lex $P1162
+    .const 'Sub' $P1155 = "295_1271336396.90314" 
+    capture_lex $P1155
+    .const 'Sub' $P1148 = "293_1271336396.90314" 
+    capture_lex $P1148
+    .const 'Sub' $P1141 = "291_1271336396.90314" 
+    capture_lex $P1141
+    .const 'Sub' $P1134 = "289_1271336396.90314" 
+    capture_lex $P1134
+    .const 'Sub' $P1127 = "287_1271336396.90314" 
+    capture_lex $P1127
+    .const 'Sub' $P1120 = "285_1271336396.90314" 
+    capture_lex $P1120
+    .const 'Sub' $P1113 = "283_1271336396.90314" 
+    capture_lex $P1113
+    .const 'Sub' $P1106 = "281_1271336396.90314" 
+    capture_lex $P1106
+    .const 'Sub' $P1099 = "279_1271336396.90314" 
+    capture_lex $P1099
+    .const 'Sub' $P1092 = "277_1271336396.90314" 
+    capture_lex $P1092
+    .const 'Sub' $P1085 = "275_1271336396.90314" 
+    capture_lex $P1085
+    .const 'Sub' $P1078 = "273_1271336396.90314" 
+    capture_lex $P1078
+    .const 'Sub' $P1071 = "271_1271336396.90314" 
+    capture_lex $P1071
+    .const 'Sub' $P1064 = "269_1271336396.90314" 
+    capture_lex $P1064
+    .const 'Sub' $P1057 = "267_1271336396.90314" 
+    capture_lex $P1057
+    .const 'Sub' $P1050 = "265_1271336396.90314" 
+    capture_lex $P1050
+    .const 'Sub' $P1043 = "263_1271336396.90314" 
+    capture_lex $P1043
+    .const 'Sub' $P1036 = "261_1271336396.90314" 
+    capture_lex $P1036
+    .const 'Sub' $P1029 = "259_1271336396.90314" 
+    capture_lex $P1029
+    .const 'Sub' $P1022 = "257_1271336396.90314" 
+    capture_lex $P1022
+    .const 'Sub' $P1015 = "255_1271336396.90314" 
+    capture_lex $P1015
+    .const 'Sub' $P1008 = "253_1271336396.90314" 
+    capture_lex $P1008
+    .const 'Sub' $P1001 = "251_1271336396.90314" 
+    capture_lex $P1001
+    .const 'Sub' $P995 = "249_1271336396.90314" 
+    capture_lex $P995
+    .const 'Sub' $P988 = "247_1271336396.90314" 
+    capture_lex $P988
+    .const 'Sub' $P981 = "245_1271336396.90314" 
+    capture_lex $P981
+    .const 'Sub' $P974 = "243_1271336396.90314" 
+    capture_lex $P974
+    .const 'Sub' $P967 = "241_1271336396.90314" 
+    capture_lex $P967
+    .const 'Sub' $P960 = "239_1271336396.90314" 
+    capture_lex $P960
+    .const 'Sub' $P953 = "237_1271336396.90314" 
+    capture_lex $P953
+    .const 'Sub' $P946 = "235_1271336396.90314" 
+    capture_lex $P946
+    .const 'Sub' $P940 = "233_1271336396.90314" 
+    capture_lex $P940
+    .const 'Sub' $P934 = "231_1271336396.90314" 
+    capture_lex $P934
+    .const 'Sub' $P929 = "229_1271336396.90314" 
+    capture_lex $P929
+    .const 'Sub' $P923 = "227_1271336396.90314" 
+    capture_lex $P923
+    .const 'Sub' $P917 = "225_1271336396.90314" 
+    capture_lex $P917
+    .const 'Sub' $P912 = "223_1271336396.90314" 
+    capture_lex $P912
+    .const 'Sub' $P907 = "221_1271336396.90314" 
+    capture_lex $P907
+    .const 'Sub' $P900 = "219_1271336396.90314" 
+    capture_lex $P900
+    .const 'Sub' $P892 = "217_1271336396.90314" 
+    capture_lex $P892
+    .const 'Sub' $P887 = "215_1271336396.90314" 
+    capture_lex $P887
+    .const 'Sub' $P882 = "213_1271336396.90314" 
+    capture_lex $P882
+    .const 'Sub' $P877 = "211_1271336396.90314" 
+    capture_lex $P877
+    .const 'Sub' $P869 = "209_1271336396.90314" 
+    capture_lex $P869
+    .const 'Sub' $P861 = "207_1271336396.90314" 
+    capture_lex $P861
+    .const 'Sub' $P856 = "205_1271336396.90314" 
+    capture_lex $P856
+    .const 'Sub' $P851 = "203_1271336396.90314" 
+    capture_lex $P851
+    .const 'Sub' $P845 = "201_1271336396.90314" 
+    capture_lex $P845
+    .const 'Sub' $P839 = "199_1271336396.90314" 
+    capture_lex $P839
+    .const 'Sub' $P833 = "197_1271336396.90314" 
+    capture_lex $P833
+    .const 'Sub' $P827 = "195_1271336396.90314" 
+    capture_lex $P827
+    .const 'Sub' $P821 = "193_1271336396.90314" 
+    capture_lex $P821
+    .const 'Sub' $P816 = "191_1271336396.90314" 
+    capture_lex $P816
+    .const 'Sub' $P811 = "189_1271336396.90314" 
+    capture_lex $P811
+    .const 'Sub' $P798 = "185_1271336396.90314" 
+    capture_lex $P798
+    .const 'Sub' $P790 = "183_1271336396.90314" 
+    capture_lex $P790
+    .const 'Sub' $P784 = "181_1271336396.90314" 
+    capture_lex $P784
+    .const 'Sub' $P777 = "179_1271336396.90314" 
+    capture_lex $P777
+    .const 'Sub' $P771 = "177_1271336396.90314" 
+    capture_lex $P771
+    .const 'Sub' $P763 = "175_1271336396.90314" 
+    capture_lex $P763
+    .const 'Sub' $P755 = "173_1271336396.90314" 
+    capture_lex $P755
+    .const 'Sub' $P749 = "171_1271336396.90314" 
+    capture_lex $P749
+    .const 'Sub' $P743 = "169_1271336396.90314" 
+    capture_lex $P743
+    .const 'Sub' $P728 = "165_1271336396.90314" 
+    capture_lex $P728
+    .const 'Sub' $P691 = "163_1271336396.90314" 
+    capture_lex $P691
+    .const 'Sub' $P683 = "161_1271336396.90314" 
+    capture_lex $P683
+    .const 'Sub' $P677 = "159_1271336396.90314" 
+    capture_lex $P677
+    .const 'Sub' $P667 = "157_1271336396.90314" 
+    capture_lex $P667
+    .const 'Sub' $P652 = "155_1271336396.90314" 
+    capture_lex $P652
+    .const 'Sub' $P643 = "153_1271336396.90314" 
+    capture_lex $P643
+    .const 'Sub' $P624 = "151_1271336396.90314" 
+    capture_lex $P624
+    .const 'Sub' $P600 = "149_1271336396.90314" 
+    capture_lex $P600
+    .const 'Sub' $P593 = "147_1271336396.90314" 
+    capture_lex $P593
+    .const 'Sub' $P586 = "145_1271336396.90314" 
+    capture_lex $P586
+    .const 'Sub' $P576 = "141_1271336396.90314" 
+    capture_lex $P576
+    .const 'Sub' $P565 = "139_1271336396.90314" 
+    capture_lex $P565
+    .const 'Sub' $P558 = "137_1271336396.90314" 
+    capture_lex $P558
+    .const 'Sub' $P551 = "135_1271336396.90314" 
+    capture_lex $P551
+    .const 'Sub' $P544 = "133_1271336396.90314" 
+    capture_lex $P544
+    .const 'Sub' $P517 = "129_1271336396.90314" 
+    capture_lex $P517
+    .const 'Sub' $P508 = "127_1271336396.90314" 
+    capture_lex $P508
+    .const 'Sub' $P501 = "125_1271336396.90314" 
+    capture_lex $P501
+    .const 'Sub' $P492 = "121_1271336396.90314" 
+    capture_lex $P492
+    .const 'Sub' $P487 = "119_1271336396.90314" 
+    capture_lex $P487
+    .const 'Sub' $P475 = "117_1271336396.90314" 
+    capture_lex $P475
+    .const 'Sub' $P463 = "115_1271336396.90314" 
+    capture_lex $P463
+    .const 'Sub' $P455 = "113_1271336396.90314" 
+    capture_lex $P455
+    .const 'Sub' $P450 = "111_1271336396.90314" 
+    capture_lex $P450
+    .const 'Sub' $P444 = "109_1271336396.90314" 
+    capture_lex $P444
+    .const 'Sub' $P438 = "107_1271336396.90314" 
+    capture_lex $P438
+    .const 'Sub' $P432 = "105_1271336396.90314" 
+    capture_lex $P432
+    .const 'Sub' $P426 = "103_1271336396.90314" 
+    capture_lex $P426
+    .const 'Sub' $P420 = "101_1271336396.90314" 
+    capture_lex $P420
+    .const 'Sub' $P414 = "99_1271336396.90314" 
+    capture_lex $P414
+    .const 'Sub' $P408 = "97_1271336396.90314" 
+    capture_lex $P408
+    .const 'Sub' $P402 = "95_1271336396.90314" 
+    capture_lex $P402
+    .const 'Sub' $P394 = "93_1271336396.90314" 
+    capture_lex $P394
+    .const 'Sub' $P386 = "91_1271336396.90314" 
+    capture_lex $P386
+    .const 'Sub' $P374 = "87_1271336396.90314" 
+    capture_lex $P374
+    .const 'Sub' $P366 = "85_1271336396.90314" 
+    capture_lex $P366
+    .const 'Sub' $P356 = "81_1271336396.90314" 
+    capture_lex $P356
+    .const 'Sub' $P349 = "79_1271336396.90314" 
+    capture_lex $P349
+    .const 'Sub' $P342 = "77_1271336396.90314" 
+    capture_lex $P342
+    .const 'Sub' $P330 = "73_1271336396.90314" 
+    capture_lex $P330
+    .const 'Sub' $P322 = "71_1271336396.90314" 
+    capture_lex $P322
+    .const 'Sub' $P314 = "69_1271336396.90314" 
+    capture_lex $P314
+    .const 'Sub' $P294 = "67_1271336396.90314" 
+    capture_lex $P294
+    .const 'Sub' $P285 = "65_1271336396.90314" 
+    capture_lex $P285
+    .const 'Sub' $P267 = "62_1271336396.90314" 
+    capture_lex $P267
+    .const 'Sub' $P247 = "60_1271336396.90314" 
+    capture_lex $P247
+    .const 'Sub' $P238 = "56_1271336396.90314" 
+    capture_lex $P238
+    .const 'Sub' $P233 = "54_1271336396.90314" 
+    capture_lex $P233
+    .const 'Sub' $P224 = "50_1271336396.90314" 
+    capture_lex $P224
+    .const 'Sub' $P219 = "48_1271336396.90314" 
+    capture_lex $P219
+    .const 'Sub' $P211 = "46_1271336396.90314" 
+    capture_lex $P211
+    .const 'Sub' $P204 = "44_1271336396.90314" 
+    capture_lex $P204
+    .const 'Sub' $P198 = "42_1271336396.90314" 
+    capture_lex $P198
+    .const 'Sub' $P190 = "40_1271336396.90314" 
+    capture_lex $P190
+    .const 'Sub' $P184 = "38_1271336396.90314" 
+    capture_lex $P184
+    .const 'Sub' $P178 = "36_1271336396.90314" 
+    capture_lex $P178
+    .const 'Sub' $P162 = "33_1271336396.90314" 
+    capture_lex $P162
+    .const 'Sub' $P149 = "31_1271336396.90314" 
+    capture_lex $P149
+    .const 'Sub' $P142 = "29_1271336396.90314" 
+    capture_lex $P142
+    .const 'Sub' $P96 = "26_1271336396.90314" 
     capture_lex $P96
-    .const 'Sub' $P78 = "23_1267204702.05125" 
+    .const 'Sub' $P78 = "23_1271336396.90314" 
     capture_lex $P78
-    .const 'Sub' $P68 = "21_1267204702.05125" 
+    .const 'Sub' $P68 = "21_1271336396.90314" 
     capture_lex $P68
-    .const 'Sub' $P54 = "19_1267204702.05125" 
+    .const 'Sub' $P54 = "19_1271336396.90314" 
     capture_lex $P54
-    .const 'Sub' $P46 = "17_1267204702.05125" 
+    .const 'Sub' $P46 = "17_1271336396.90314" 
     capture_lex $P46
-    .const 'Sub' $P39 = "15_1267204702.05125" 
+    .const 'Sub' $P39 = "15_1271336396.90314" 
     capture_lex $P39
-    .const 'Sub' $P33 = "13_1267204702.05125" 
+    .const 'Sub' $P33 = "13_1271336396.90314" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1267204702.05125" 
+    .const 'Sub' $P15 = "12_1271336396.90314" 
     capture_lex $P15
-.annotate "line", 531
-    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
-    capture_lex $P1240
-    $P1279 = $P1240()
+.annotate "line", 535
+    get_hll_global $P1243, ["NQP";"Regex"], "_block1242" 
+    capture_lex $P1243
+    $P1282 = $P1243()
 .annotate "line", 4
-    .return ($P1279)
+    .return ($P1282)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post332") :outer("11_1267204702.05125")
+.sub "" :load :init :subid("post332") :outer("11_1271336396.90314")
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
     set block, $P14
-.annotate "line", 418
-    get_hll_global $P1280, ["NQP"], "Grammar"
-    $P1280."O"(":prec<y=>, :assoc<unary>", "%methodop")
-.annotate "line", 419
-    get_hll_global $P1281, ["NQP"], "Grammar"
-    $P1281."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
-.annotate "line", 420
-    get_hll_global $P1282, ["NQP"], "Grammar"
-    $P1282."O"(":prec<w=>, :assoc<left>", "%exponentiation")
-.annotate "line", 421
-    get_hll_global $P1283, ["NQP"], "Grammar"
-    $P1283."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate "line", 422
-    get_hll_global $P1284, ["NQP"], "Grammar"
-    $P1284."O"(":prec<u=>, :assoc<left>", "%multiplicative")
+    get_hll_global $P1283, ["NQP"], "Grammar"
+    $P1283."O"(":prec<y=>, :assoc<unary>", "%methodop")
 .annotate "line", 423
-    get_hll_global $P1285, ["NQP"], "Grammar"
-    $P1285."O"(":prec<t=>, :assoc<left>", "%additive")
+    get_hll_global $P1284, ["NQP"], "Grammar"
+    $P1284."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
 .annotate "line", 424
-    get_hll_global $P1286, ["NQP"], "Grammar"
-    $P1286."O"(":prec<r=>, :assoc<left>", "%concatenation")
+    get_hll_global $P1285, ["NQP"], "Grammar"
+    $P1285."O"(":prec<w=>, :assoc<left>", "%exponentiation")
 .annotate "line", 425
-    get_hll_global $P1287, ["NQP"], "Grammar"
-    $P1287."O"(":prec<m=>, :assoc<left>", "%relational")
+    get_hll_global $P1286, ["NQP"], "Grammar"
+    $P1286."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate "line", 426
-    get_hll_global $P1288, ["NQP"], "Grammar"
-    $P1288."O"(":prec<l=>, :assoc<left>", "%tight_and")
+    get_hll_global $P1287, ["NQP"], "Grammar"
+    $P1287."O"(":prec<u=>, :assoc<left>", "%multiplicative")
 .annotate "line", 427
-    get_hll_global $P1289, ["NQP"], "Grammar"
-    $P1289."O"(":prec<k=>, :assoc<left>", "%tight_or")
+    get_hll_global $P1288, ["NQP"], "Grammar"
+    $P1288."O"(":prec<t=>, :assoc<left>", "%additive")
 .annotate "line", 428
-    get_hll_global $P1290, ["NQP"], "Grammar"
-    $P1290."O"(":prec<j=>, :assoc<right>", "%conditional")
+    get_hll_global $P1289, ["NQP"], "Grammar"
+    $P1289."O"(":prec<r=>, :assoc<left>", "%concatenation")
 .annotate "line", 429
-    get_hll_global $P1291, ["NQP"], "Grammar"
-    $P1291."O"(":prec<i=>, :assoc<right>", "%assignment")
+    get_hll_global $P1290, ["NQP"], "Grammar"
+    $P1290."O"(":prec<m=>, :assoc<left>", "%relational")
 .annotate "line", 430
-    get_hll_global $P1292, ["NQP"], "Grammar"
-    $P1292."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+    get_hll_global $P1291, ["NQP"], "Grammar"
+    $P1291."O"(":prec<l=>, :assoc<left>", "%tight_and")
 .annotate "line", 431
-    get_hll_global $P1293, ["NQP"], "Grammar"
-    $P1293."O"(":prec<f=>, :assoc<list>", "%list_infix")
+    get_hll_global $P1292, ["NQP"], "Grammar"
+    $P1292."O"(":prec<k=>, :assoc<left>", "%tight_or")
 .annotate "line", 432
+    get_hll_global $P1293, ["NQP"], "Grammar"
+    $P1293."O"(":prec<j=>, :assoc<right>", "%conditional")
+.annotate "line", 433
     get_hll_global $P1294, ["NQP"], "Grammar"
-    $P1294."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
-.annotate "line", 417
-    $P1295 = get_root_global ["parrot"], "P6metaclass"
-    $P1295."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
+    $P1294."O"(":prec<i=>, :assoc<right>", "%assignment")
+.annotate "line", 434
+    get_hll_global $P1295, ["NQP"], "Grammar"
+    $P1295."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+.annotate "line", 435
+    get_hll_global $P1296, ["NQP"], "Grammar"
+    $P1296."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate "line", 436
+    get_hll_global $P1297, ["NQP"], "Grammar"
+    $P1297."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
+.annotate "line", 421
+    $P1298 = get_root_global ["parrot"], "P6metaclass"
+    $P1298."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "TOP"  :subid("12_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "TOP"  :subid("12_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
@@ -478,7 +478,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "identifier"  :subid("13_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx34_tgt
     .local int rx34_pos
@@ -536,7 +536,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1267204702.05125") :method
+.sub "!PREFIX__identifier"  :subid("14_1271336396.90314") :method
 .annotate "line", 4
     $P36 = self."!PREFIX__!subrule"("ident", "")
     new $P37, "ResizablePMCArray"
@@ -546,7 +546,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "name"  :subid("15_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx40_tgt
     .local int rx40_pos
@@ -620,7 +620,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1267204702.05125") :method
+.sub "!PREFIX__name"  :subid("16_1271336396.90314") :method
 .annotate "line", 4
     new $P42, "ResizablePMCArray"
     push $P42, ""
@@ -629,7 +629,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "deflongname"  :subid("17_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx47_tgt
     .local int rx47_pos
@@ -702,7 +702,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1267204702.05125") :method
+.sub "!PREFIX__deflongname"  :subid("18_1271336396.90314") :method
 .annotate "line", 4
     $P49 = self."!PREFIX__!subrule"("identifier", "")
     new $P50, "ResizablePMCArray"
@@ -712,7 +712,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "ENDSTMT"  :subid("19_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx55_tgt
     .local int rx55_pos
@@ -844,7 +844,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1267204702.05125") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1271336396.90314") :method
 .annotate "line", 4
     new $P57, "ResizablePMCArray"
     push $P57, ""
@@ -853,7 +853,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "ws"  :subid("21_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
     .local string rx69_tgt
     .local int rx69_pos
@@ -979,7 +979,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1267204702.05125") :method
+.sub "!PREFIX__ws"  :subid("22_1271336396.90314") :method
 .annotate "line", 4
     new $P71, "ResizablePMCArray"
     push $P71, ""
@@ -989,9 +989,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "unv"  :subid("23_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P86 = "25_1267204702.05125" 
+    .const 'Sub' $P86 = "25_1271336396.90314" 
     capture_lex $P86
     .local string rx79_tgt
     .local int rx79_pos
@@ -1037,7 +1037,7 @@
   rxanchor84_done:
   # rx subrule "before" subtype=zerowidth negate=
     rx79_cur."!cursor_pos"(rx79_pos)
-    .const 'Sub' $P86 = "25_1267204702.05125" 
+    .const 'Sub' $P86 = "25_1271336396.90314" 
     capture_lex $P86
     $P10 = rx79_cur."before"($P86)
     unless $P10, rx79_fail
@@ -1116,7 +1116,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1267204702.05125") :method
+.sub "!PREFIX__unv"  :subid("24_1271336396.90314") :method
 .annotate "line", 4
     new $P81, "ResizablePMCArray"
     push $P81, ""
@@ -1127,7 +1127,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block85"  :anon :subid("25_1267204702.05125") :method :outer("23_1267204702.05125")
+.sub "_block85"  :anon :subid("25_1271336396.90314") :method :outer("23_1271336396.90314")
 .annotate "line", 44
     .local string rx87_tgt
     .local int rx87_pos
@@ -1217,10 +1217,10 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "pod_comment"  :subid("26_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P131 = "28_1267204702.05125" 
-    capture_lex $P131
+    .const 'Sub' $P133 = "28_1271336396.90314" 
+    capture_lex $P133
     .local string rx97_tgt
     .local int rx97_pos
     .local int rx97_off
@@ -1643,40 +1643,48 @@
 .annotate "line", 60
     goto alt104_end
   alt104_3:
-.annotate "line", 68
-  # rx rxquantr129 ** 0..1
-    set_addr $I137, rxquantr129_done
-    rx97_cur."!mark_push"(0, rx97_pos, $I137)
-  rxquantr129_loop:
-.annotate "line", 67
-  # rx subrule "before" subtype=zerowidth negate=
-    rx97_cur."!cursor_pos"(rx97_pos)
-    .const 'Sub' $P131 = "28_1267204702.05125" 
-    capture_lex $P131
-    $P10 = rx97_cur."before"($P131)
-    unless $P10, rx97_fail
-.annotate "line", 68
-  # rx subrule "panic" subtype=method negate=
+    set_addr $I10, alt104_4
+    rx97_cur."!mark_push"(0, rx97_pos, $I10)
+.annotate "line", 66
+  # rx subrule "identifier" subtype=capture negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    $P10 = rx97_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    $P10 = rx97_cur."identifier"()
     unless $P10, rx97_fail
+    rx97_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("identifier")
     rx97_pos = $P10."pos"()
-    (rx97_rep) = rx97_cur."!mark_commit"($I137)
-  rxquantr129_done:
-  alt138_0:
-.annotate "line", 69
-    set_addr $I10, alt138_1
+.annotate "line", 67
+  # rx rxquantf129 ** 0..*
+    set_addr $I10, rxquantf129_loop
     rx97_cur."!mark_push"(0, rx97_pos, $I10)
-  # rx subrule "alpha" subtype=capture negate=
+    goto rxquantf129_done
+  rxquantf129_loop:
+  # rx charclass .
+    ge rx97_pos, rx97_eos, rx97_fail
+    inc rx97_pos
+    set_addr $I10, rxquantf129_loop
+    rx97_cur."!mark_push"($I130, rx97_pos, $I10)
+  rxquantf129_done:
+  # rxanchor bol
+    eq rx97_pos, 0, rxanchor131_done
+    ge rx97_pos, rx97_eos, rx97_fail
+    sub $I10, rx97_pos, rx97_off
+    dec $I10
+    is_cclass $I11, 4096, rx97_tgt, $I10
+    unless $I11, rx97_fail
+  rxanchor131_done:
+  # rx subrule "before" subtype=zerowidth negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    $P10 = rx97_cur."alpha"()
+    .const 'Sub' $P133 = "28_1271336396.90314" 
+    capture_lex $P133
+    $P10 = rx97_cur."before"($P133)
     unless $P10, rx97_fail
-    rx97_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("alpha")
-    rx97_pos = $P10."pos"()
-    goto alt138_end
-  alt138_1:
-    set_addr $I10, alt138_2
+.annotate "line", 66
+    goto alt104_end
+  alt104_4:
+  alt141_0:
+.annotate "line", 73
+    set_addr $I10, alt141_1
     rx97_cur."!mark_push"(0, rx97_pos, $I10)
   # rx charclass s
     ge rx97_pos, rx97_eos, rx97_fail
@@ -1684,15 +1692,15 @@
     is_cclass $I11, 32, rx97_tgt, $I10
     unless $I11, rx97_fail
     inc rx97_pos
-    goto alt138_end
-  alt138_2:
+    goto alt141_end
+  alt141_1:
   # rx subrule "panic" subtype=method negate=
     rx97_cur."!cursor_pos"(rx97_pos)
     $P10 = rx97_cur."panic"("Illegal pod directive")
     unless $P10, rx97_fail
     rx97_pos = $P10."pos"()
-  alt138_end:
-.annotate "line", 70
+  alt141_end:
+.annotate "line", 74
   # rx charclass_q N r 0..-1
     sub $I10, rx97_pos, rx97_off
     find_cclass $I11, 4096, rx97_tgt, $I10, rx97_eos
@@ -1718,7 +1726,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1267204702.05125") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1271336396.90314") :method
 .annotate "line", 4
     new $P99, "ResizablePMCArray"
     push $P99, ""
@@ -1727,13585 +1735,13565 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block130"  :anon :subid("28_1267204702.05125") :method :outer("26_1267204702.05125")
+.sub "_block132"  :anon :subid("28_1271336396.90314") :method :outer("26_1271336396.90314")
 .annotate "line", 67
-    .local string rx132_tgt
-    .local int rx132_pos
-    .local int rx132_off
-    .local int rx132_eos
-    .local int rx132_rep
-    .local pmc rx132_cur
-    (rx132_cur, rx132_pos, rx132_tgt) = self."!cursor_start"()
-    rx132_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx132_cur
-    .local pmc match
-    .lex "$/", match
-    length rx132_eos, rx132_tgt
-    set rx132_off, 0
-    lt rx132_pos, 2, rx132_start
-    sub rx132_off, rx132_pos, 1
-    substr rx132_tgt, rx132_tgt, rx132_off
-  rx132_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan133_done
-    goto rxscan133_scan
-  rxscan133_loop:
-    ($P10) = rx132_cur."from"()
-    inc $P10
-    set rx132_pos, $P10
-    ge rx132_pos, rx132_eos, rxscan133_done
-  rxscan133_scan:
-    set_addr $I10, rxscan133_loop
-    rx132_cur."!mark_push"(0, rx132_pos, $I10)
-  rxscan133_done:
-  # rx rxquantf134 ** 0..*
-    set_addr $I10, rxquantf134_loop
-    rx132_cur."!mark_push"(0, rx132_pos, $I10)
-    goto rxquantf134_done
-  rxquantf134_loop:
-  # rx charclass .
-    ge rx132_pos, rx132_eos, rx132_fail
-    inc rx132_pos
-    set_addr $I10, rxquantf134_loop
-    rx132_cur."!mark_push"($I135, rx132_pos, $I10)
-  rxquantf134_done:
-  # rxanchor bol
-    eq rx132_pos, 0, rxanchor136_done
-    ge rx132_pos, rx132_eos, rx132_fail
-    sub $I10, rx132_pos, rx132_off
-    dec $I10
-    is_cclass $I11, 4096, rx132_tgt, $I10
-    unless $I11, rx132_fail
-  rxanchor136_done:
-  # rx literal  "=cut"
-    add $I11, rx132_pos, 4
-    gt $I11, rx132_eos, rx132_fail
-    sub $I11, rx132_pos, rx132_off
-    substr $S10, rx132_tgt, $I11, 4
-    ne $S10, "=cut", rx132_fail
-    add rx132_pos, 4
+    .local string rx134_tgt
+    .local int rx134_pos
+    .local int rx134_off
+    .local int rx134_eos
+    .local int rx134_rep
+    .local pmc rx134_cur
+    (rx134_cur, rx134_pos, rx134_tgt) = self."!cursor_start"()
+    rx134_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx134_cur
+    .local pmc match
+    .lex "$/", match
+    length rx134_eos, rx134_tgt
+    set rx134_off, 0
+    lt rx134_pos, 2, rx134_start
+    sub rx134_off, rx134_pos, 1
+    substr rx134_tgt, rx134_tgt, rx134_off
+  rx134_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan135_done
+    goto rxscan135_scan
+  rxscan135_loop:
+    ($P10) = rx134_cur."from"()
+    inc $P10
+    set rx134_pos, $P10
+    ge rx134_pos, rx134_eos, rxscan135_done
+  rxscan135_scan:
+    set_addr $I10, rxscan135_loop
+    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+  rxscan135_done:
+  # rx rxquantr136 ** 0..*
+    set_addr $I137, rxquantr136_done
+    rx134_cur."!mark_push"(0, rx134_pos, $I137)
+  rxquantr136_loop:
+  # rx enumcharlist negate=0 
+    ge rx134_pos, rx134_eos, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I10, 1
+    index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
+    lt $I11, 0, rx134_fail
+    inc rx134_pos
+    (rx134_rep) = rx134_cur."!mark_commit"($I137)
+    rx134_cur."!mark_push"(rx134_rep, rx134_pos, $I137)
+    goto rxquantr136_loop
+  rxquantr136_done:
+  alt138_0:
+    set_addr $I10, alt138_1
+    rx134_cur."!mark_push"(0, rx134_pos, $I10)
+.annotate "line", 68
+  # rx literal  "="
+    add $I11, rx134_pos, 1
+    gt $I11, rx134_eos, rx134_fail
+    sub $I11, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I11, 1
+    ne $S10, "=", rx134_fail
+    add rx134_pos, 1
+.annotate "line", 70
+  # rx rxquantr139 ** 0..1
+    set_addr $I140, rxquantr139_done
+    rx134_cur."!mark_push"(0, rx134_pos, $I140)
+  rxquantr139_loop:
+.annotate "line", 69
+  # rx literal  "cut"
+    add $I11, rx134_pos, 3
+    gt $I11, rx134_eos, rx134_fail
+    sub $I11, rx134_pos, rx134_off
+    substr $S10, rx134_tgt, $I11, 3
+    ne $S10, "cut", rx134_fail
+    add rx134_pos, 3
   # rxanchor rwb
-    le rx132_pos, 0, rx132_fail
-    sub $I10, rx132_pos, rx132_off
-    is_cclass $I11, 8192, rx132_tgt, $I10
-    if $I11, rx132_fail
+    le rx134_pos, 0, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    is_cclass $I11, 8192, rx134_tgt, $I10
+    if $I11, rx134_fail
     dec $I10
-    is_cclass $I11, 8192, rx132_tgt, $I10
-    unless $I11, rx132_fail
+    is_cclass $I11, 8192, rx134_tgt, $I10
+    unless $I11, rx134_fail
+.annotate "line", 70
+  # rx subrule "panic" subtype=method negate=
+    rx134_cur."!cursor_pos"(rx134_pos)
+    $P10 = rx134_cur."panic"("Obsolete pod format, please use =begin/=end instead")
+    unless $P10, rx134_fail
+    rx134_pos = $P10."pos"()
+    (rx134_rep) = rx134_cur."!mark_commit"($I140)
+  rxquantr139_done:
+.annotate "line", 67
+    goto alt138_end
+  alt138_1:
+.annotate "line", 71
+  # rx charclass nl
+    ge rx134_pos, rx134_eos, rx134_fail
+    sub $I10, rx134_pos, rx134_off
+    is_cclass $I11, 4096, rx134_tgt, $I10
+    unless $I11, rx134_fail
+    substr $S10, rx134_tgt, $I10, 2
+    iseq $I11, $S10, "\r\n"
+    add rx134_pos, $I11
+    inc rx134_pos
+  alt138_end:
+.annotate "line", 67
   # rx pass
-    rx132_cur."!cursor_pass"(rx132_pos, "")
-    rx132_cur."!cursor_debug"("PASS  ", "", " at pos=", rx132_pos)
-    .return (rx132_cur)
-  rx132_fail:
-    (rx132_rep, rx132_pos, $I10, $P10) = rx132_cur."!mark_fail"(0)
-    lt rx132_pos, -1, rx132_done
-    eq rx132_pos, -1, rx132_fail
-    jump $I10
-  rx132_done:
-    rx132_cur."!cursor_fail"()
-    rx132_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx132_cur)
+    rx134_cur."!cursor_pass"(rx134_pos, "")
+    rx134_cur."!cursor_debug"("PASS  ", "", " at pos=", rx134_pos)
+    .return (rx134_cur)
+  rx134_fail:
+    (rx134_rep, rx134_pos, $I10, $P10) = rx134_cur."!mark_fail"(0)
+    lt rx134_pos, -1, rx134_done
+    eq rx134_pos, -1, rx134_fail
+    jump $I10
+  rx134_done:
+    rx134_cur."!cursor_fail"()
+    rx134_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx134_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx140_tgt
-    .local int rx140_pos
-    .local int rx140_off
-    .local int rx140_eos
-    .local int rx140_rep
-    .local pmc rx140_cur
-    (rx140_cur, rx140_pos, rx140_tgt) = self."!cursor_start"()
-    rx140_cur."!cursor_debug"("START ", "comp_unit")
-    .lex unicode:"$\x{a2}", rx140_cur
-    .local pmc match
-    .lex "$/", match
-    length rx140_eos, rx140_tgt
-    set rx140_off, 0
-    lt rx140_pos, 2, rx140_start
-    sub rx140_off, rx140_pos, 1
-    substr rx140_tgt, rx140_tgt, rx140_off
-  rx140_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan144_done
-    goto rxscan144_scan
-  rxscan144_loop:
-    ($P10) = rx140_cur."from"()
-    inc $P10
-    set rx140_pos, $P10
-    ge rx140_pos, rx140_eos, rxscan144_done
-  rxscan144_scan:
-    set_addr $I10, rxscan144_loop
-    rx140_cur."!mark_push"(0, rx140_pos, $I10)
-  rxscan144_done:
-.annotate "line", 78
+.sub "comp_unit"  :subid("29_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx143_tgt
+    .local int rx143_pos
+    .local int rx143_off
+    .local int rx143_eos
+    .local int rx143_rep
+    .local pmc rx143_cur
+    (rx143_cur, rx143_pos, rx143_tgt) = self."!cursor_start"()
+    rx143_cur."!cursor_debug"("START ", "comp_unit")
+    .lex unicode:"$\x{a2}", rx143_cur
+    .local pmc match
+    .lex "$/", match
+    length rx143_eos, rx143_tgt
+    set rx143_off, 0
+    lt rx143_pos, 2, rx143_start
+    sub rx143_off, rx143_pos, 1
+    substr rx143_tgt, rx143_tgt, rx143_off
+  rx143_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan147_done
+    goto rxscan147_scan
+  rxscan147_loop:
+    ($P10) = rx143_cur."from"()
+    inc $P10
+    set rx143_pos, $P10
+    ge rx143_pos, rx143_eos, rxscan147_done
+  rxscan147_scan:
+    set_addr $I10, rxscan147_loop
+    rx143_cur."!mark_push"(0, rx143_pos, $I10)
+  rxscan147_done:
+.annotate "line", 82
   # rx subrule "newpad" subtype=method negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."newpad"()
-    unless $P10, rx140_fail
-    rx140_pos = $P10."pos"()
-.annotate "line", 79
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."newpad"()
+    unless $P10, rx143_fail
+    rx143_pos = $P10."pos"()
+.annotate "line", 83
   # rx subrule "statementlist" subtype=capture negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."statementlist"()
-    unless $P10, rx140_fail
-    rx140_cur."!mark_push"(0, -1, 0, $P10)
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."statementlist"()
+    unless $P10, rx143_fail
+    rx143_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx140_pos = $P10."pos"()
-  alt145_0:
-.annotate "line", 80
-    set_addr $I10, alt145_1
-    rx140_cur."!mark_push"(0, rx140_pos, $I10)
+    rx143_pos = $P10."pos"()
+  alt148_0:
+.annotate "line", 84
+    set_addr $I10, alt148_1
+    rx143_cur."!mark_push"(0, rx143_pos, $I10)
   # rxanchor eos
-    ne rx140_pos, rx140_eos, rx140_fail
-    goto alt145_end
-  alt145_1:
+    ne rx143_pos, rx143_eos, rx143_fail
+    goto alt148_end
+  alt148_1:
   # rx subrule "panic" subtype=method negate=
-    rx140_cur."!cursor_pos"(rx140_pos)
-    $P10 = rx140_cur."panic"("Confused")
-    unless $P10, rx140_fail
-    rx140_pos = $P10."pos"()
-  alt145_end:
-.annotate "line", 77
+    rx143_cur."!cursor_pos"(rx143_pos)
+    $P10 = rx143_cur."panic"("Confused")
+    unless $P10, rx143_fail
+    rx143_pos = $P10."pos"()
+  alt148_end:
+.annotate "line", 81
   # rx pass
-    rx140_cur."!cursor_pass"(rx140_pos, "comp_unit")
-    rx140_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx140_pos)
-    .return (rx140_cur)
-  rx140_fail:
+    rx143_cur."!cursor_pass"(rx143_pos, "comp_unit")
+    rx143_cur."!cursor_debug"("PASS  ", "comp_unit", " at pos=", rx143_pos)
+    .return (rx143_cur)
+  rx143_fail:
 .annotate "line", 4
-    (rx140_rep, rx140_pos, $I10, $P10) = rx140_cur."!mark_fail"(0)
-    lt rx140_pos, -1, rx140_done
-    eq rx140_pos, -1, rx140_fail
+    (rx143_rep, rx143_pos, $I10, $P10) = rx143_cur."!mark_fail"(0)
+    lt rx143_pos, -1, rx143_done
+    eq rx143_pos, -1, rx143_fail
     jump $I10
-  rx140_done:
-    rx140_cur."!cursor_fail"()
-    rx140_cur."!cursor_debug"("FAIL  ", "comp_unit")
-    .return (rx140_cur)
+  rx143_done:
+    rx143_cur."!cursor_fail"()
+    rx143_cur."!cursor_debug"("FAIL  ", "comp_unit")
+    .return (rx143_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1267204702.05125") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1271336396.90314") :method
 .annotate "line", 4
-    $P142 = self."!PREFIX__!subrule"("", "")
-    new $P143, "ResizablePMCArray"
-    push $P143, $P142
-    .return ($P143)
+    $P145 = self."!PREFIX__!subrule"("", "")
+    new $P146, "ResizablePMCArray"
+    push $P146, $P145
+    .return ($P146)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statementlist"  :subid("31_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx147_tgt
-    .local int rx147_pos
-    .local int rx147_off
-    .local int rx147_eos
-    .local int rx147_rep
-    .local pmc rx147_cur
-    (rx147_cur, rx147_pos, rx147_tgt) = self."!cursor_start"()
-    rx147_cur."!cursor_debug"("START ", "statementlist")
-    rx147_cur."!cursor_caparray"("statement")
-    .lex unicode:"$\x{a2}", rx147_cur
+    .local string rx150_tgt
+    .local int rx150_pos
+    .local int rx150_off
+    .local int rx150_eos
+    .local int rx150_rep
+    .local pmc rx150_cur
+    (rx150_cur, rx150_pos, rx150_tgt) = self."!cursor_start"()
+    rx150_cur."!cursor_debug"("START ", "statementlist")
+    rx150_cur."!cursor_caparray"("statement")
+    .lex unicode:"$\x{a2}", rx150_cur
     .local pmc match
     .lex "$/", match
-    length rx147_eos, rx147_tgt
-    set rx147_off, 0
-    lt rx147_pos, 2, rx147_start
-    sub rx147_off, rx147_pos, 1
-    substr rx147_tgt, rx147_tgt, rx147_off
-  rx147_start:
+    length rx150_eos, rx150_tgt
+    set rx150_off, 0
+    lt rx150_pos, 2, rx150_start
+    sub rx150_off, rx150_pos, 1
+    substr rx150_tgt, rx150_tgt, rx150_off
+  rx150_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan150_done
-    goto rxscan150_scan
-  rxscan150_loop:
-    ($P10) = rx147_cur."from"()
+    ne $I10, -1, rxscan153_done
+    goto rxscan153_scan
+  rxscan153_loop:
+    ($P10) = rx150_cur."from"()
     inc $P10
-    set rx147_pos, $P10
-    ge rx147_pos, rx147_eos, rxscan150_done
-  rxscan150_scan:
-    set_addr $I10, rxscan150_loop
-    rx147_cur."!mark_push"(0, rx147_pos, $I10)
-  rxscan150_done:
-  alt151_0:
-.annotate "line", 83
-    set_addr $I10, alt151_1
-    rx147_cur."!mark_push"(0, rx147_pos, $I10)
-.annotate "line", 84
+    set rx150_pos, $P10
+    ge rx150_pos, rx150_eos, rxscan153_done
+  rxscan153_scan:
+    set_addr $I10, rxscan153_loop
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+  rxscan153_done:
+  alt154_0:
+.annotate "line", 87
+    set_addr $I10, alt154_1
+    rx150_cur."!mark_push"(0, rx150_pos, $I10)
+.annotate "line", 88
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
   # rxanchor eos
-    ne rx147_pos, rx147_eos, rx147_fail
+    ne rx150_pos, rx150_eos, rx150_fail
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-    goto alt151_end
-  alt151_1:
-.annotate "line", 85
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+    goto alt154_end
+  alt154_1:
+.annotate "line", 89
   # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  # rx rxquantr155 ** 0..*
-    set_addr $I157, rxquantr155_done
-    rx147_cur."!mark_push"(0, rx147_pos, $I157)
-  rxquantr155_loop:
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  # rx rxquantr158 ** 0..*
+    set_addr $I160, rxquantr158_done
+    rx150_cur."!mark_push"(0, rx150_pos, $I160)
+  rxquantr158_loop:
   # rx subrule "statement" subtype=capture negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."statement"()
-    unless $P10, rx147_fail
-    rx147_cur."!mark_push"(0, -1, 0, $P10)
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."statement"()
+    unless $P10, rx150_fail
+    rx150_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx147_pos = $P10."pos"()
+    rx150_pos = $P10."pos"()
   # rx subrule "eat_terminator" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."eat_terminator"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-    (rx147_rep) = rx147_cur."!mark_commit"($I157)
-    rx147_cur."!mark_push"(rx147_rep, rx147_pos, $I157)
-    goto rxquantr155_loop
-  rxquantr155_done:
-  # rx subrule "ws" subtype=method negate=
-    rx147_cur."!cursor_pos"(rx147_pos)
-    $P10 = rx147_cur."ws"()
-    unless $P10, rx147_fail
-    rx147_pos = $P10."pos"()
-  alt151_end:
-.annotate "line", 83
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."eat_terminator"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+    (rx150_rep) = rx150_cur."!mark_commit"($I160)
+    rx150_cur."!mark_push"(rx150_rep, rx150_pos, $I160)
+    goto rxquantr158_loop
+  rxquantr158_done:
+  # rx subrule "ws" subtype=method negate=
+    rx150_cur."!cursor_pos"(rx150_pos)
+    $P10 = rx150_cur."ws"()
+    unless $P10, rx150_fail
+    rx150_pos = $P10."pos"()
+  alt154_end:
+.annotate "line", 87
   # rx pass
-    rx147_cur."!cursor_pass"(rx147_pos, "statementlist")
-    rx147_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx147_pos)
-    .return (rx147_cur)
-  rx147_fail:
+    rx150_cur."!cursor_pass"(rx150_pos, "statementlist")
+    rx150_cur."!cursor_debug"("PASS  ", "statementlist", " at pos=", rx150_pos)
+    .return (rx150_cur)
+  rx150_fail:
 .annotate "line", 4
-    (rx147_rep, rx147_pos, $I10, $P10) = rx147_cur."!mark_fail"(0)
-    lt rx147_pos, -1, rx147_done
-    eq rx147_pos, -1, rx147_fail
+    (rx150_rep, rx150_pos, $I10, $P10) = rx150_cur."!mark_fail"(0)
+    lt rx150_pos, -1, rx150_done
+    eq rx150_pos, -1, rx150_fail
     jump $I10
-  rx147_done:
-    rx147_cur."!cursor_fail"()
-    rx147_cur."!cursor_debug"("FAIL  ", "statementlist")
-    .return (rx147_cur)
+  rx150_done:
+    rx150_cur."!cursor_fail"()
+    rx150_cur."!cursor_debug"("FAIL  ", "statementlist")
+    .return (rx150_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1267204702.05125") :method
+.sub "!PREFIX__statementlist"  :subid("32_1271336396.90314") :method
 .annotate "line", 4
-    new $P149, "ResizablePMCArray"
-    push $P149, ""
-    push $P149, ""
-    .return ($P149)
+    new $P152, "ResizablePMCArray"
+    push $P152, ""
+    push $P152, ""
+    .return ($P152)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement"  :subid("33_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P165 = "35_1267204702.05125" 
-    capture_lex $P165
-    .local string rx160_tgt
-    .local int rx160_pos
-    .local int rx160_off
-    .local int rx160_eos
-    .local int rx160_rep
-    .local pmc rx160_cur
-    (rx160_cur, rx160_pos, rx160_tgt) = self."!cursor_start"()
-    rx160_cur."!cursor_debug"("START ", "statement")
-    rx160_cur."!cursor_caparray"("statement_mod_cond", "statement_mod_loop")
-    .lex unicode:"$\x{a2}", rx160_cur
+    .const 'Sub' $P168 = "35_1271336396.90314" 
+    capture_lex $P168
+    .local string rx163_tgt
+    .local int rx163_pos
+    .local int rx163_off
+    .local int rx163_eos
+    .local int rx163_rep
+    .local pmc rx163_cur
+    (rx163_cur, rx163_pos, rx163_tgt) = self."!cursor_start"()
+    rx163_cur."!cursor_debug"("START ", "statement")
+    rx163_cur."!cursor_caparray"("statement_mod_loop", "statement_mod_cond")
+    .lex unicode:"$\x{a2}", rx163_cur
     .local pmc match
     .lex "$/", match
-    length rx160_eos, rx160_tgt
-    set rx160_off, 0
-    lt rx160_pos, 2, rx160_start
-    sub rx160_off, rx160_pos, 1
-    substr rx160_tgt, rx160_tgt, rx160_off
-  rx160_start:
+    length rx163_eos, rx163_tgt
+    set rx163_off, 0
+    lt rx163_pos, 2, rx163_start
+    sub rx163_off, rx163_pos, 1
+    substr rx163_tgt, rx163_tgt, rx163_off
+  rx163_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan163_done
-    goto rxscan163_scan
-  rxscan163_loop:
-    ($P10) = rx160_cur."from"()
+    ne $I10, -1, rxscan166_done
+    goto rxscan166_scan
+  rxscan166_loop:
+    ($P10) = rx163_cur."from"()
     inc $P10
-    set rx160_pos, $P10
-    ge rx160_pos, rx160_eos, rxscan163_done
-  rxscan163_scan:
-    set_addr $I10, rxscan163_loop
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-  rxscan163_done:
-.annotate "line", 89
+    set rx163_pos, $P10
+    ge rx163_pos, rx163_eos, rxscan166_done
+  rxscan166_scan:
+    set_addr $I10, rxscan166_loop
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+  rxscan166_done:
+.annotate "line", 93
   # rx subrule "before" subtype=zerowidth negate=1
-    rx160_cur."!cursor_pos"(rx160_pos)
-    .const 'Sub' $P165 = "35_1267204702.05125" 
-    capture_lex $P165
-    $P10 = rx160_cur."before"($P165)
-    if $P10, rx160_fail
-  alt169_0:
-.annotate "line", 90
-    set_addr $I10, alt169_1
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 91
+    rx163_cur."!cursor_pos"(rx163_pos)
+    .const 'Sub' $P168 = "35_1271336396.90314" 
+    capture_lex $P168
+    $P10 = rx163_cur."before"($P168)
+    if $P10, rx163_fail
+  alt172_0:
+.annotate "line", 94
+    set_addr $I10, alt172_1
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 95
   # rx subrule "statement_control" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_control"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_control"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_control")
-    rx160_pos = $P10."pos"()
-    goto alt169_end
-  alt169_1:
-.annotate "line", 92
+    rx163_pos = $P10."pos"()
+    goto alt172_end
+  alt172_1:
+.annotate "line", 96
   # rx subrule "EXPR" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."EXPR"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."EXPR"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx160_pos = $P10."pos"()
+    rx163_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."ws"()
-    unless $P10, rx160_fail
-    rx160_pos = $P10."pos"()
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."ws"()
+    unless $P10, rx163_fail
+    rx163_pos = $P10."pos"()
+.annotate "line", 101
+  # rx rxquantr173 ** 0..1
+    set_addr $I177, rxquantr173_done
+    rx163_cur."!mark_push"(0, rx163_pos, $I177)
+  rxquantr173_loop:
+  alt174_0:
 .annotate "line", 97
-  # rx rxquantr170 ** 0..1
-    set_addr $I174, rxquantr170_done
-    rx160_cur."!mark_push"(0, rx160_pos, $I174)
-  rxquantr170_loop:
-  alt171_0:
-.annotate "line", 93
-    set_addr $I10, alt171_1
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 94
+    set_addr $I10, alt174_1
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 98
   # rx subrule "MARKED" subtype=zerowidth negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."MARKED"("endstmt")
-    unless $P10, rx160_fail
-    goto alt171_end
-  alt171_1:
-    set_addr $I10, alt171_2
-    rx160_cur."!mark_push"(0, rx160_pos, $I10)
-.annotate "line", 95
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."MARKED"("endstmt")
+    unless $P10, rx163_fail
+    goto alt174_end
+  alt174_1:
+    set_addr $I10, alt174_2
+    rx163_cur."!mark_push"(0, rx163_pos, $I10)
+.annotate "line", 99
   # rx subrule "statement_mod_cond" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_cond"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_cond"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_cond")
-    rx160_pos = $P10."pos"()
-  # rx rxquantr172 ** 0..1
-    set_addr $I173, rxquantr172_done
-    rx160_cur."!mark_push"(0, rx160_pos, $I173)
-  rxquantr172_loop:
+    rx163_pos = $P10."pos"()
+  # rx rxquantr175 ** 0..1
+    set_addr $I176, rxquantr175_done
+    rx163_cur."!mark_push"(0, rx163_pos, $I176)
+  rxquantr175_loop:
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_loop"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_loop"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx160_pos = $P10."pos"()
-    (rx160_rep) = rx160_cur."!mark_commit"($I173)
-  rxquantr172_done:
-    goto alt171_end
-  alt171_2:
-.annotate "line", 96
+    rx163_pos = $P10."pos"()
+    (rx163_rep) = rx163_cur."!mark_commit"($I176)
+  rxquantr175_done:
+    goto alt174_end
+  alt174_2:
+.annotate "line", 100
   # rx subrule "statement_mod_loop" subtype=capture negate=
-    rx160_cur."!cursor_pos"(rx160_pos)
-    $P10 = rx160_cur."statement_mod_loop"()
-    unless $P10, rx160_fail
-    rx160_cur."!mark_push"(0, -1, 0, $P10)
+    rx163_cur."!cursor_pos"(rx163_pos)
+    $P10 = rx163_cur."statement_mod_loop"()
+    unless $P10, rx163_fail
+    rx163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_mod_loop")
-    rx160_pos = $P10."pos"()
-  alt171_end:
-.annotate "line", 97
-    (rx160_rep) = rx160_cur."!mark_commit"($I174)
-  rxquantr170_done:
-  alt169_end:
-.annotate "line", 88
+    rx163_pos = $P10."pos"()
+  alt174_end:
+.annotate "line", 101
+    (rx163_rep) = rx163_cur."!mark_commit"($I177)
+  rxquantr173_done:
+  alt172_end:
+.annotate "line", 92
   # rx pass
-    rx160_cur."!cursor_pass"(rx160_pos, "statement")
-    rx160_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx160_pos)
-    .return (rx160_cur)
-  rx160_fail:
+    rx163_cur."!cursor_pass"(rx163_pos, "statement")
+    rx163_cur."!cursor_debug"("PASS  ", "statement", " at pos=", rx163_pos)
+    .return (rx163_cur)
+  rx163_fail:
 .annotate "line", 4
-    (rx160_rep, rx160_pos, $I10, $P10) = rx160_cur."!mark_fail"(0)
-    lt rx160_pos, -1, rx160_done
-    eq rx160_pos, -1, rx160_fail
+    (rx163_rep, rx163_pos, $I10, $P10) = rx163_cur."!mark_fail"(0)
+    lt rx163_pos, -1, rx163_done
+    eq rx163_pos, -1, rx163_fail
     jump $I10
-  rx160_done:
-    rx160_cur."!cursor_fail"()
-    rx160_cur."!cursor_debug"("FAIL  ", "statement")
-    .return (rx160_cur)
+  rx163_done:
+    rx163_cur."!cursor_fail"()
+    rx163_cur."!cursor_debug"("FAIL  ", "statement")
+    .return (rx163_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1267204702.05125") :method
+.sub "!PREFIX__statement"  :subid("34_1271336396.90314") :method
 .annotate "line", 4
-    new $P162, "ResizablePMCArray"
-    push $P162, ""
-    .return ($P162)
+    new $P165, "ResizablePMCArray"
+    push $P165, ""
+    .return ($P165)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block164"  :anon :subid("35_1267204702.05125") :method :outer("33_1267204702.05125")
-.annotate "line", 89
-    .local string rx166_tgt
-    .local int rx166_pos
-    .local int rx166_off
-    .local int rx166_eos
-    .local int rx166_rep
-    .local pmc rx166_cur
-    (rx166_cur, rx166_pos, rx166_tgt) = self."!cursor_start"()
-    rx166_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx166_cur
-    .local pmc match
-    .lex "$/", match
-    length rx166_eos, rx166_tgt
-    set rx166_off, 0
-    lt rx166_pos, 2, rx166_start
-    sub rx166_off, rx166_pos, 1
-    substr rx166_tgt, rx166_tgt, rx166_off
-  rx166_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan167_done
-    goto rxscan167_scan
-  rxscan167_loop:
-    ($P10) = rx166_cur."from"()
-    inc $P10
-    set rx166_pos, $P10
-    ge rx166_pos, rx166_eos, rxscan167_done
-  rxscan167_scan:
-    set_addr $I10, rxscan167_loop
-    rx166_cur."!mark_push"(0, rx166_pos, $I10)
-  rxscan167_done:
-  alt168_0:
-    set_addr $I10, alt168_1
-    rx166_cur."!mark_push"(0, rx166_pos, $I10)
+.sub "_block167"  :anon :subid("35_1271336396.90314") :method :outer("33_1271336396.90314")
+.annotate "line", 93
+    .local string rx169_tgt
+    .local int rx169_pos
+    .local int rx169_off
+    .local int rx169_eos
+    .local int rx169_rep
+    .local pmc rx169_cur
+    (rx169_cur, rx169_pos, rx169_tgt) = self."!cursor_start"()
+    rx169_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx169_cur
+    .local pmc match
+    .lex "$/", match
+    length rx169_eos, rx169_tgt
+    set rx169_off, 0
+    lt rx169_pos, 2, rx169_start
+    sub rx169_off, rx169_pos, 1
+    substr rx169_tgt, rx169_tgt, rx169_off
+  rx169_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan170_done
+    goto rxscan170_scan
+  rxscan170_loop:
+    ($P10) = rx169_cur."from"()
+    inc $P10
+    set rx169_pos, $P10
+    ge rx169_pos, rx169_eos, rxscan170_done
+  rxscan170_scan:
+    set_addr $I10, rxscan170_loop
+    rx169_cur."!mark_push"(0, rx169_pos, $I10)
+  rxscan170_done:
+  alt171_0:
+    set_addr $I10, alt171_1
+    rx169_cur."!mark_push"(0, rx169_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx166_pos, rx166_eos, rx166_fail
-    sub $I10, rx166_pos, rx166_off
-    substr $S10, rx166_tgt, $I10, 1
+    ge rx169_pos, rx169_eos, rx169_fail
+    sub $I10, rx169_pos, rx169_off
+    substr $S10, rx169_tgt, $I10, 1
     index $I11, "])}", $S10
-    lt $I11, 0, rx166_fail
-    inc rx166_pos
-    goto alt168_end
-  alt168_1:
+    lt $I11, 0, rx169_fail
+    inc rx169_pos
+    goto alt171_end
+  alt171_1:
   # rxanchor eos
-    ne rx166_pos, rx166_eos, rx166_fail
-  alt168_end:
+    ne rx169_pos, rx169_eos, rx169_fail
+  alt171_end:
   # rx pass
-    rx166_cur."!cursor_pass"(rx166_pos, "")
-    rx166_cur."!cursor_debug"("PASS  ", "", " at pos=", rx166_pos)
-    .return (rx166_cur)
-  rx166_fail:
-    (rx166_rep, rx166_pos, $I10, $P10) = rx166_cur."!mark_fail"(0)
-    lt rx166_pos, -1, rx166_done
-    eq rx166_pos, -1, rx166_fail
-    jump $I10
-  rx166_done:
-    rx166_cur."!cursor_fail"()
-    rx166_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx166_cur)
+    rx169_cur."!cursor_pass"(rx169_pos, "")
+    rx169_cur."!cursor_debug"("PASS  ", "", " at pos=", rx169_pos)
+    .return (rx169_cur)
+  rx169_fail:
+    (rx169_rep, rx169_pos, $I10, $P10) = rx169_cur."!mark_fail"(0)
+    lt rx169_pos, -1, rx169_done
+    eq rx169_pos, -1, rx169_fail
+    jump $I10
+  rx169_done:
+    rx169_cur."!cursor_fail"()
+    rx169_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx169_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx176_tgt
-    .local int rx176_pos
-    .local int rx176_off
-    .local int rx176_eos
-    .local int rx176_rep
-    .local pmc rx176_cur
-    (rx176_cur, rx176_pos, rx176_tgt) = self."!cursor_start"()
-    rx176_cur."!cursor_debug"("START ", "eat_terminator")
-    .lex unicode:"$\x{a2}", rx176_cur
-    .local pmc match
-    .lex "$/", match
-    length rx176_eos, rx176_tgt
-    set rx176_off, 0
-    lt rx176_pos, 2, rx176_start
-    sub rx176_off, rx176_pos, 1
-    substr rx176_tgt, rx176_tgt, rx176_off
-  rx176_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan179_done
-    goto rxscan179_scan
-  rxscan179_loop:
-    ($P10) = rx176_cur."from"()
-    inc $P10
-    set rx176_pos, $P10
-    ge rx176_pos, rx176_eos, rxscan179_done
-  rxscan179_scan:
-    set_addr $I10, rxscan179_loop
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-  rxscan179_done:
-  alt180_0:
-.annotate "line", 101
-    set_addr $I10, alt180_1
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 102
+.sub "eat_terminator"  :subid("36_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx179_tgt
+    .local int rx179_pos
+    .local int rx179_off
+    .local int rx179_eos
+    .local int rx179_rep
+    .local pmc rx179_cur
+    (rx179_cur, rx179_pos, rx179_tgt) = self."!cursor_start"()
+    rx179_cur."!cursor_debug"("START ", "eat_terminator")
+    .lex unicode:"$\x{a2}", rx179_cur
+    .local pmc match
+    .lex "$/", match
+    length rx179_eos, rx179_tgt
+    set rx179_off, 0
+    lt rx179_pos, 2, rx179_start
+    sub rx179_off, rx179_pos, 1
+    substr rx179_tgt, rx179_tgt, rx179_off
+  rx179_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan182_done
+    goto rxscan182_scan
+  rxscan182_loop:
+    ($P10) = rx179_cur."from"()
+    inc $P10
+    set rx179_pos, $P10
+    ge rx179_pos, rx179_eos, rxscan182_done
+  rxscan182_scan:
+    set_addr $I10, rxscan182_loop
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+  rxscan182_done:
+  alt183_0:
+.annotate "line", 105
+    set_addr $I10, alt183_1
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 106
   # rx literal  ";"
-    add $I11, rx176_pos, 1
-    gt $I11, rx176_eos, rx176_fail
-    sub $I11, rx176_pos, rx176_off
-    substr $S10, rx176_tgt, $I11, 1
-    ne $S10, ";", rx176_fail
-    add rx176_pos, 1
-    goto alt180_end
-  alt180_1:
-    set_addr $I10, alt180_2
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 103
+    add $I11, rx179_pos, 1
+    gt $I11, rx179_eos, rx179_fail
+    sub $I11, rx179_pos, rx179_off
+    substr $S10, rx179_tgt, $I11, 1
+    ne $S10, ";", rx179_fail
+    add rx179_pos, 1
+    goto alt183_end
+  alt183_1:
+    set_addr $I10, alt183_2
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 107
   # rx subrule "MARKED" subtype=zerowidth negate=
-    rx176_cur."!cursor_pos"(rx176_pos)
-    $P10 = rx176_cur."MARKED"("endstmt")
-    unless $P10, rx176_fail
-    goto alt180_end
-  alt180_2:
-    set_addr $I10, alt180_3
-    rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 104
+    rx179_cur."!cursor_pos"(rx179_pos)
+    $P10 = rx179_cur."MARKED"("endstmt")
+    unless $P10, rx179_fail
+    goto alt183_end
+  alt183_2:
+    set_addr $I10, alt183_3
+    rx179_cur."!mark_push"(0, rx179_pos, $I10)
+.annotate "line", 108
   # rx subrule "terminator" subtype=zerowidth negate=
-    rx176_cur."!cursor_pos"(rx176_pos)
-    $P10 = rx176_cur."terminator"()
-    unless $P10, rx176_fail
-    goto alt180_end
-  alt180_3:
-.annotate "line", 105
+    rx179_cur."!cursor_pos"(rx179_pos)
+    $P10 = rx179_cur."terminator"()
+    unless $P10, rx179_fail
+    goto alt183_end
+  alt183_3:
+.annotate "line", 109
   # rxanchor eos
-    ne rx176_pos, rx176_eos, rx176_fail
-  alt180_end:
-.annotate "line", 101
+    ne rx179_pos, rx179_eos, rx179_fail
+  alt183_end:
+.annotate "line", 105
   # rx pass
-    rx176_cur."!cursor_pass"(rx176_pos, "eat_terminator")
-    rx176_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx176_pos)
-    .return (rx176_cur)
-  rx176_fail:
+    rx179_cur."!cursor_pass"(rx179_pos, "eat_terminator")
+    rx179_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx179_pos)
+    .return (rx179_cur)
+  rx179_fail:
 .annotate "line", 4
-    (rx176_rep, rx176_pos, $I10, $P10) = rx176_cur."!mark_fail"(0)
-    lt rx176_pos, -1, rx176_done
-    eq rx176_pos, -1, rx176_fail
+    (rx179_rep, rx179_pos, $I10, $P10) = rx179_cur."!mark_fail"(0)
+    lt rx179_pos, -1, rx179_done
+    eq rx179_pos, -1, rx179_fail
     jump $I10
-  rx176_done:
-    rx176_cur."!cursor_fail"()
-    rx176_cur."!cursor_debug"("FAIL  ", "eat_terminator")
-    .return (rx176_cur)
+  rx179_done:
+    rx179_cur."!cursor_fail"()
+    rx179_cur."!cursor_debug"("FAIL  ", "eat_terminator")
+    .return (rx179_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1267204702.05125") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1271336396.90314") :method
 .annotate "line", 4
-    new $P178, "ResizablePMCArray"
-    push $P178, ""
-    push $P178, ""
-    push $P178, ""
-    push $P178, ";"
-    .return ($P178)
+    new $P181, "ResizablePMCArray"
+    push $P181, ""
+    push $P181, ""
+    push $P181, ""
+    push $P181, ";"
+    .return ($P181)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "xblock"  :subid("38_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx182_tgt
-    .local int rx182_pos
-    .local int rx182_off
-    .local int rx182_eos
-    .local int rx182_rep
-    .local pmc rx182_cur
-    (rx182_cur, rx182_pos, rx182_tgt) = self."!cursor_start"()
-    rx182_cur."!cursor_debug"("START ", "xblock")
-    .lex unicode:"$\x{a2}", rx182_cur
+    .local string rx185_tgt
+    .local int rx185_pos
+    .local int rx185_off
+    .local int rx185_eos
+    .local int rx185_rep
+    .local pmc rx185_cur
+    (rx185_cur, rx185_pos, rx185_tgt) = self."!cursor_start"()
+    rx185_cur."!cursor_debug"("START ", "xblock")
+    .lex unicode:"$\x{a2}", rx185_cur
     .local pmc match
     .lex "$/", match
-    length rx182_eos, rx182_tgt
-    set rx182_off, 0
-    lt rx182_pos, 2, rx182_start
-    sub rx182_off, rx182_pos, 1
-    substr rx182_tgt, rx182_tgt, rx182_off
-  rx182_start:
+    length rx185_eos, rx185_tgt
+    set rx185_off, 0
+    lt rx185_pos, 2, rx185_start
+    sub rx185_off, rx185_pos, 1
+    substr rx185_tgt, rx185_tgt, rx185_off
+  rx185_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan186_done
-    goto rxscan186_scan
-  rxscan186_loop:
-    ($P10) = rx182_cur."from"()
+    ne $I10, -1, rxscan189_done
+    goto rxscan189_scan
+  rxscan189_loop:
+    ($P10) = rx185_cur."from"()
     inc $P10
-    set rx182_pos, $P10
-    ge rx182_pos, rx182_eos, rxscan186_done
-  rxscan186_scan:
-    set_addr $I10, rxscan186_loop
-    rx182_cur."!mark_push"(0, rx182_pos, $I10)
-  rxscan186_done:
-.annotate "line", 109
+    set rx185_pos, $P10
+    ge rx185_pos, rx185_eos, rxscan189_done
+  rxscan189_scan:
+    set_addr $I10, rxscan189_loop
+    rx185_cur."!mark_push"(0, rx185_pos, $I10)
+  rxscan189_done:
+.annotate "line", 113
   # rx subrule "EXPR" subtype=capture negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."EXPR"()
-    unless $P10, rx182_fail
-    rx182_cur."!mark_push"(0, -1, 0, $P10)
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."EXPR"()
+    unless $P10, rx185_fail
+    rx185_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx182_pos = $P10."pos"()
+    rx185_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."ws"()
-    unless $P10, rx182_fail
-    rx182_pos = $P10."pos"()
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."ws"()
+    unless $P10, rx185_fail
+    rx185_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx182_cur."!cursor_pos"(rx182_pos)
-    $P10 = rx182_cur."pblock"()
-    unless $P10, rx182_fail
-    rx182_cur."!mark_push"(0, -1, 0, $P10)
+    rx185_cur."!cursor_pos"(rx185_pos)
+    $P10 = rx185_cur."pblock"()
+    unless $P10, rx185_fail
+    rx185_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx182_pos = $P10."pos"()
-.annotate "line", 108
+    rx185_pos = $P10."pos"()
+.annotate "line", 112
   # rx pass
-    rx182_cur."!cursor_pass"(rx182_pos, "xblock")
-    rx182_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx182_pos)
-    .return (rx182_cur)
-  rx182_fail:
+    rx185_cur."!cursor_pass"(rx185_pos, "xblock")
+    rx185_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx185_pos)
+    .return (rx185_cur)
+  rx185_fail:
 .annotate "line", 4
-    (rx182_rep, rx182_pos, $I10, $P10) = rx182_cur."!mark_fail"(0)
-    lt rx182_pos, -1, rx182_done
-    eq rx182_pos, -1, rx182_fail
+    (rx185_rep, rx185_pos, $I10, $P10) = rx185_cur."!mark_fail"(0)
+    lt rx185_pos, -1, rx185_done
+    eq rx185_pos, -1, rx185_fail
     jump $I10
-  rx182_done:
-    rx182_cur."!cursor_fail"()
-    rx182_cur."!cursor_debug"("FAIL  ", "xblock")
-    .return (rx182_cur)
+  rx185_done:
+    rx185_cur."!cursor_fail"()
+    rx185_cur."!cursor_debug"("FAIL  ", "xblock")
+    .return (rx185_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1267204702.05125") :method
+.sub "!PREFIX__xblock"  :subid("39_1271336396.90314") :method
 .annotate "line", 4
-    $P184 = self."!PREFIX__!subrule"("EXPR", "")
-    new $P185, "ResizablePMCArray"
-    push $P185, $P184
-    .return ($P185)
+    $P187 = self."!PREFIX__!subrule"("EXPR", "")
+    new $P188, "ResizablePMCArray"
+    push $P188, $P187
+    .return ($P188)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "pblock"  :subid("40_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx188_tgt
-    .local int rx188_pos
-    .local int rx188_off
-    .local int rx188_eos
-    .local int rx188_rep
-    .local pmc rx188_cur
-    (rx188_cur, rx188_pos, rx188_tgt) = self."!cursor_start"()
-    rx188_cur."!cursor_debug"("START ", "pblock")
-    .lex unicode:"$\x{a2}", rx188_cur
+    .local string rx191_tgt
+    .local int rx191_pos
+    .local int rx191_off
+    .local int rx191_eos
+    .local int rx191_rep
+    .local pmc rx191_cur
+    (rx191_cur, rx191_pos, rx191_tgt) = self."!cursor_start"()
+    rx191_cur."!cursor_debug"("START ", "pblock")
+    .lex unicode:"$\x{a2}", rx191_cur
     .local pmc match
     .lex "$/", match
-    length rx188_eos, rx188_tgt
-    set rx188_off, 0
-    lt rx188_pos, 2, rx188_start
-    sub rx188_off, rx188_pos, 1
-    substr rx188_tgt, rx188_tgt, rx188_off
-  rx188_start:
+    length rx191_eos, rx191_tgt
+    set rx191_off, 0
+    lt rx191_pos, 2, rx191_start
+    sub rx191_off, rx191_pos, 1
+    substr rx191_tgt, rx191_tgt, rx191_off
+  rx191_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan193_done
-    goto rxscan193_scan
-  rxscan193_loop:
-    ($P10) = rx188_cur."from"()
+    ne $I10, -1, rxscan196_done
+    goto rxscan196_scan
+  rxscan196_loop:
+    ($P10) = rx191_cur."from"()
     inc $P10
-    set rx188_pos, $P10
-    ge rx188_pos, rx188_eos, rxscan193_done
-  rxscan193_scan:
-    set_addr $I10, rxscan193_loop
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
-  rxscan193_done:
-  alt194_0:
-.annotate "line", 112
-    set_addr $I10, alt194_1
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
-.annotate "line", 113
+    set rx191_pos, $P10
+    ge rx191_pos, rx191_eos, rxscan196_done
+  rxscan196_scan:
+    set_addr $I10, rxscan196_loop
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+  rxscan196_done:
+  alt197_0:
+.annotate "line", 116
+    set_addr $I10, alt197_1
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate "line", 117
   # rx subrule "lambda" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."lambda"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 114
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."lambda"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 118
   # rx subrule "newpad" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."newpad"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 115
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."newpad"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 119
   # rx subrule "signature" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."signature"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."signature"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx188_pos = $P10."pos"()
-.annotate "line", 116
+    rx191_pos = $P10."pos"()
+.annotate "line", 120
   # rx subrule "blockoid" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."blockoid"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."blockoid"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx188_pos = $P10."pos"()
-.annotate "line", 113
-    goto alt194_end
-  alt194_1:
-    set_addr $I10, alt194_2
-    rx188_cur."!mark_push"(0, rx188_pos, $I10)
+    rx191_pos = $P10."pos"()
 .annotate "line", 117
+    goto alt197_end
+  alt197_1:
+    set_addr $I10, alt197_2
+    rx191_cur."!mark_push"(0, rx191_pos, $I10)
+.annotate "line", 121
   # rx enumcharlist negate=0 zerowidth
-    ge rx188_pos, rx188_eos, rx188_fail
-    sub $I10, rx188_pos, rx188_off
-    substr $S10, rx188_tgt, $I10, 1
+    ge rx191_pos, rx191_eos, rx191_fail
+    sub $I10, rx191_pos, rx191_off
+    substr $S10, rx191_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx188_fail
-.annotate "line", 118
+    lt $I11, 0, rx191_fail
+.annotate "line", 122
   # rx subrule "newpad" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."newpad"()
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-.annotate "line", 119
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."newpad"()
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+.annotate "line", 123
   # rx subrule "blockoid" subtype=capture negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."blockoid"()
-    unless $P10, rx188_fail
-    rx188_cur."!mark_push"(0, -1, 0, $P10)
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."blockoid"()
+    unless $P10, rx191_fail
+    rx191_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx188_pos = $P10."pos"()
-.annotate "line", 117
-    goto alt194_end
-  alt194_2:
-.annotate "line", 120
+    rx191_pos = $P10."pos"()
+.annotate "line", 121
+    goto alt197_end
+  alt197_2:
+.annotate "line", 124
   # rx subrule "panic" subtype=method negate=
-    rx188_cur."!cursor_pos"(rx188_pos)
-    $P10 = rx188_cur."panic"("Missing block")
-    unless $P10, rx188_fail
-    rx188_pos = $P10."pos"()
-  alt194_end:
-.annotate "line", 112
+    rx191_cur."!cursor_pos"(rx191_pos)
+    $P10 = rx191_cur."panic"("Missing block")
+    unless $P10, rx191_fail
+    rx191_pos = $P10."pos"()
+  alt197_end:
+.annotate "line", 116
   # rx pass
-    rx188_cur."!cursor_pass"(rx188_pos, "pblock")
-    rx188_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx188_pos)
-    .return (rx188_cur)
-  rx188_fail:
+    rx191_cur."!cursor_pass"(rx191_pos, "pblock")
+    rx191_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx191_pos)
+    .return (rx191_cur)
+  rx191_fail:
 .annotate "line", 4
-    (rx188_rep, rx188_pos, $I10, $P10) = rx188_cur."!mark_fail"(0)
-    lt rx188_pos, -1, rx188_done
-    eq rx188_pos, -1, rx188_fail
+    (rx191_rep, rx191_pos, $I10, $P10) = rx191_cur."!mark_fail"(0)
+    lt rx191_pos, -1, rx191_done
+    eq rx191_pos, -1, rx191_fail
     jump $I10
-  rx188_done:
-    rx188_cur."!cursor_fail"()
-    rx188_cur."!cursor_debug"("FAIL  ", "pblock")
-    .return (rx188_cur)
+  rx191_done:
+    rx191_cur."!cursor_fail"()
+    rx191_cur."!cursor_debug"("FAIL  ", "pblock")
+    .return (rx191_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1267204702.05125") :method
+.sub "!PREFIX__pblock"  :subid("41_1271336396.90314") :method
 .annotate "line", 4
-    $P190 = self."!PREFIX__!subrule"("", "")
-    $P191 = self."!PREFIX__!subrule"("", "")
-    new $P192, "ResizablePMCArray"
-    push $P192, $P190
-    push $P192, "{"
-    push $P192, $P191
-    .return ($P192)
+    $P193 = self."!PREFIX__!subrule"("", "")
+    $P194 = self."!PREFIX__!subrule"("", "")
+    new $P195, "ResizablePMCArray"
+    push $P195, $P193
+    push $P195, "{"
+    push $P195, $P194
+    .return ($P195)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "lambda"  :subid("42_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx196_tgt
-    .local int rx196_pos
-    .local int rx196_off
-    .local int rx196_eos
-    .local int rx196_rep
-    .local pmc rx196_cur
-    (rx196_cur, rx196_pos, rx196_tgt) = self."!cursor_start"()
-    rx196_cur."!cursor_debug"("START ", "lambda")
-    .lex unicode:"$\x{a2}", rx196_cur
+    .local string rx199_tgt
+    .local int rx199_pos
+    .local int rx199_off
+    .local int rx199_eos
+    .local int rx199_rep
+    .local pmc rx199_cur
+    (rx199_cur, rx199_pos, rx199_tgt) = self."!cursor_start"()
+    rx199_cur."!cursor_debug"("START ", "lambda")
+    .lex unicode:"$\x{a2}", rx199_cur
     .local pmc match
     .lex "$/", match
-    length rx196_eos, rx196_tgt
-    set rx196_off, 0
-    lt rx196_pos, 2, rx196_start
-    sub rx196_off, rx196_pos, 1
-    substr rx196_tgt, rx196_tgt, rx196_off
-  rx196_start:
+    length rx199_eos, rx199_tgt
+    set rx199_off, 0
+    lt rx199_pos, 2, rx199_start
+    sub rx199_off, rx199_pos, 1
+    substr rx199_tgt, rx199_tgt, rx199_off
+  rx199_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan199_done
-    goto rxscan199_scan
-  rxscan199_loop:
-    ($P10) = rx196_cur."from"()
+    ne $I10, -1, rxscan202_done
+    goto rxscan202_scan
+  rxscan202_loop:
+    ($P10) = rx199_cur."from"()
     inc $P10
-    set rx196_pos, $P10
-    ge rx196_pos, rx196_eos, rxscan199_done
-  rxscan199_scan:
-    set_addr $I10, rxscan199_loop
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
-  rxscan199_done:
-  alt200_0:
-.annotate "line", 123
-    set_addr $I10, alt200_1
-    rx196_cur."!mark_push"(0, rx196_pos, $I10)
+    set rx199_pos, $P10
+    ge rx199_pos, rx199_eos, rxscan202_done
+  rxscan202_scan:
+    set_addr $I10, rxscan202_loop
+    rx199_cur."!mark_push"(0, rx199_pos, $I10)
+  rxscan202_done:
+  alt203_0:
+.annotate "line", 127
+    set_addr $I10, alt203_1
+    rx199_cur."!mark_push"(0, rx199_pos, $I10)
   # rx literal  "->"
-    add $I11, rx196_pos, 2
-    gt $I11, rx196_eos, rx196_fail
-    sub $I11, rx196_pos, rx196_off
-    substr $S10, rx196_tgt, $I11, 2
-    ne $S10, "->", rx196_fail
-    add rx196_pos, 2
-    goto alt200_end
-  alt200_1:
+    add $I11, rx199_pos, 2
+    gt $I11, rx199_eos, rx199_fail
+    sub $I11, rx199_pos, rx199_off
+    substr $S10, rx199_tgt, $I11, 2
+    ne $S10, "->", rx199_fail
+    add rx199_pos, 2
+    goto alt203_end
+  alt203_1:
   # rx literal  "<->"
-    add $I11, rx196_pos, 3
-    gt $I11, rx196_eos, rx196_fail
-    sub $I11, rx196_pos, rx196_off
-    substr $S10, rx196_tgt, $I11, 3
-    ne $S10, "<->", rx196_fail
-    add rx196_pos, 3
-  alt200_end:
+    add $I11, rx199_pos, 3
+    gt $I11, rx199_eos, rx199_fail
+    sub $I11, rx199_pos, rx199_off
+    substr $S10, rx199_tgt, $I11, 3
+    ne $S10, "<->", rx199_fail
+    add rx199_pos, 3
+  alt203_end:
   # rx pass
-    rx196_cur."!cursor_pass"(rx196_pos, "lambda")
-    rx196_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx196_pos)
-    .return (rx196_cur)
-  rx196_fail:
+    rx199_cur."!cursor_pass"(rx199_pos, "lambda")
+    rx199_cur."!cursor_debug"("PASS  ", "lambda", " at pos=", rx199_pos)
+    .return (rx199_cur)
+  rx199_fail:
 .annotate "line", 4
-    (rx196_rep, rx196_pos, $I10, $P10) = rx196_cur."!mark_fail"(0)
-    lt rx196_pos, -1, rx196_done
-    eq rx196_pos, -1, rx196_fail
+    (rx199_rep, rx199_pos, $I10, $P10) = rx199_cur."!mark_fail"(0)
+    lt rx199_pos, -1, rx199_done
+    eq rx199_pos, -1, rx199_fail
     jump $I10
-  rx196_done:
-    rx196_cur."!cursor_fail"()
-    rx196_cur."!cursor_debug"("FAIL  ", "lambda")
-    .return (rx196_cur)
+  rx199_done:
+    rx199_cur."!cursor_fail"()
+    rx199_cur."!cursor_debug"("FAIL  ", "lambda")
+    .return (rx199_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1267204702.05125") :method
+.sub "!PREFIX__lambda"  :subid("43_1271336396.90314") :method
 .annotate "line", 4
-    new $P198, "ResizablePMCArray"
-    push $P198, "<->"
-    push $P198, "->"
-    .return ($P198)
+    new $P201, "ResizablePMCArray"
+    push $P201, "<->"
+    push $P201, "->"
+    .return ($P201)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "block"  :subid("44_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx202_tgt
-    .local int rx202_pos
-    .local int rx202_off
-    .local int rx202_eos
-    .local int rx202_rep
-    .local pmc rx202_cur
-    (rx202_cur, rx202_pos, rx202_tgt) = self."!cursor_start"()
-    rx202_cur."!cursor_debug"("START ", "block")
-    .lex unicode:"$\x{a2}", rx202_cur
+    .local string rx205_tgt
+    .local int rx205_pos
+    .local int rx205_off
+    .local int rx205_eos
+    .local int rx205_rep
+    .local pmc rx205_cur
+    (rx205_cur, rx205_pos, rx205_tgt) = self."!cursor_start"()
+    rx205_cur."!cursor_debug"("START ", "block")
+    .lex unicode:"$\x{a2}", rx205_cur
     .local pmc match
     .lex "$/", match
-    length rx202_eos, rx202_tgt
-    set rx202_off, 0
-    lt rx202_pos, 2, rx202_start
-    sub rx202_off, rx202_pos, 1
-    substr rx202_tgt, rx202_tgt, rx202_off
-  rx202_start:
+    length rx205_eos, rx205_tgt
+    set rx205_off, 0
+    lt rx205_pos, 2, rx205_start
+    sub rx205_off, rx205_pos, 1
+    substr rx205_tgt, rx205_tgt, rx205_off
+  rx205_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan206_done
-    goto rxscan206_scan
-  rxscan206_loop:
-    ($P10) = rx202_cur."from"()
+    ne $I10, -1, rxscan209_done
+    goto rxscan209_scan
+  rxscan209_loop:
+    ($P10) = rx205_cur."from"()
     inc $P10
-    set rx202_pos, $P10
-    ge rx202_pos, rx202_eos, rxscan206_done
-  rxscan206_scan:
-    set_addr $I10, rxscan206_loop
-    rx202_cur."!mark_push"(0, rx202_pos, $I10)
-  rxscan206_done:
-  alt207_0:
-.annotate "line", 126
-    set_addr $I10, alt207_1
-    rx202_cur."!mark_push"(0, rx202_pos, $I10)
+    set rx205_pos, $P10
+    ge rx205_pos, rx205_eos, rxscan209_done
+  rxscan209_scan:
+    set_addr $I10, rxscan209_loop
+    rx205_cur."!mark_push"(0, rx205_pos, $I10)
+  rxscan209_done:
+  alt210_0:
+.annotate "line", 130
+    set_addr $I10, alt210_1
+    rx205_cur."!mark_push"(0, rx205_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx202_pos, rx202_eos, rx202_fail
-    sub $I10, rx202_pos, rx202_off
-    substr $S10, rx202_tgt, $I10, 1
+    ge rx205_pos, rx205_eos, rx205_fail
+    sub $I10, rx205_pos, rx205_off
+    substr $S10, rx205_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx202_fail
-    goto alt207_end
-  alt207_1:
+    lt $I11, 0, rx205_fail
+    goto alt210_end
+  alt210_1:
   # rx subrule "panic" subtype=method negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."panic"("Missing block")
-    unless $P10, rx202_fail
-    rx202_pos = $P10."pos"()
-  alt207_end:
-.annotate "line", 127
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."panic"("Missing block")
+    unless $P10, rx205_fail
+    rx205_pos = $P10."pos"()
+  alt210_end:
+.annotate "line", 131
   # rx subrule "newpad" subtype=method negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."newpad"()
-    unless $P10, rx202_fail
-    rx202_pos = $P10."pos"()
-.annotate "line", 128
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."newpad"()
+    unless $P10, rx205_fail
+    rx205_pos = $P10."pos"()
+.annotate "line", 132
   # rx subrule "blockoid" subtype=capture negate=
-    rx202_cur."!cursor_pos"(rx202_pos)
-    $P10 = rx202_cur."blockoid"()
-    unless $P10, rx202_fail
-    rx202_cur."!mark_push"(0, -1, 0, $P10)
+    rx205_cur."!cursor_pos"(rx205_pos)
+    $P10 = rx205_cur."blockoid"()
+    unless $P10, rx205_fail
+    rx205_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx202_pos = $P10."pos"()
-.annotate "line", 125
+    rx205_pos = $P10."pos"()
+.annotate "line", 129
   # rx pass
-    rx202_cur."!cursor_pass"(rx202_pos, "block")
-    rx202_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx202_pos)
-    .return (rx202_cur)
-  rx202_fail:
+    rx205_cur."!cursor_pass"(rx205_pos, "block")
+    rx205_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx205_pos)
+    .return (rx205_cur)
+  rx205_fail:
 .annotate "line", 4
-    (rx202_rep, rx202_pos, $I10, $P10) = rx202_cur."!mark_fail"(0)
-    lt rx202_pos, -1, rx202_done
-    eq rx202_pos, -1, rx202_fail
+    (rx205_rep, rx205_pos, $I10, $P10) = rx205_cur."!mark_fail"(0)
+    lt rx205_pos, -1, rx205_done
+    eq rx205_pos, -1, rx205_fail
     jump $I10
-  rx202_done:
-    rx202_cur."!cursor_fail"()
-    rx202_cur."!cursor_debug"("FAIL  ", "block")
-    .return (rx202_cur)
+  rx205_done:
+    rx205_cur."!cursor_fail"()
+    rx205_cur."!cursor_debug"("FAIL  ", "block")
+    .return (rx205_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1267204702.05125") :method
+.sub "!PREFIX__block"  :subid("45_1271336396.90314") :method
 .annotate "line", 4
-    $P204 = self."!PREFIX__!subrule"("", "")
-    new $P205, "ResizablePMCArray"
-    push $P205, $P204
-    push $P205, "{"
-    .return ($P205)
+    $P207 = self."!PREFIX__!subrule"("", "")
+    new $P208, "ResizablePMCArray"
+    push $P208, $P207
+    push $P208, "{"
+    .return ($P208)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "blockoid"  :subid("46_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx209_tgt
-    .local int rx209_pos
-    .local int rx209_off
-    .local int rx209_eos
-    .local int rx209_rep
-    .local pmc rx209_cur
-    (rx209_cur, rx209_pos, rx209_tgt) = self."!cursor_start"()
-    rx209_cur."!cursor_debug"("START ", "blockoid")
-    .lex unicode:"$\x{a2}", rx209_cur
+    .local string rx212_tgt
+    .local int rx212_pos
+    .local int rx212_off
+    .local int rx212_eos
+    .local int rx212_rep
+    .local pmc rx212_cur
+    (rx212_cur, rx212_pos, rx212_tgt) = self."!cursor_start"()
+    rx212_cur."!cursor_debug"("START ", "blockoid")
+    .lex unicode:"$\x{a2}", rx212_cur
     .local pmc match
     .lex "$/", match
-    length rx209_eos, rx209_tgt
-    set rx209_off, 0
-    lt rx209_pos, 2, rx209_start
-    sub rx209_off, rx209_pos, 1
-    substr rx209_tgt, rx209_tgt, rx209_off
-  rx209_start:
+    length rx212_eos, rx212_tgt
+    set rx212_off, 0
+    lt rx212_pos, 2, rx212_start
+    sub rx212_off, rx212_pos, 1
+    substr rx212_tgt, rx212_tgt, rx212_off
+  rx212_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan213_done
-    goto rxscan213_scan
-  rxscan213_loop:
-    ($P10) = rx209_cur."from"()
+    ne $I10, -1, rxscan216_done
+    goto rxscan216_scan
+  rxscan216_loop:
+    ($P10) = rx212_cur."from"()
     inc $P10
-    set rx209_pos, $P10
-    ge rx209_pos, rx209_eos, rxscan213_done
-  rxscan213_scan:
-    set_addr $I10, rxscan213_loop
-    rx209_cur."!mark_push"(0, rx209_pos, $I10)
-  rxscan213_done:
-.annotate "line", 132
+    set rx212_pos, $P10
+    ge rx212_pos, rx212_eos, rxscan216_done
+  rxscan216_scan:
+    set_addr $I10, rxscan216_loop
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
+  rxscan216_done:
+.annotate "line", 136
   # rx subrule "finishpad" subtype=method negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."finishpad"()
-    unless $P10, rx209_fail
-    rx209_pos = $P10."pos"()
-.annotate "line", 133
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."finishpad"()
+    unless $P10, rx212_fail
+    rx212_pos = $P10."pos"()
+.annotate "line", 137
   # rx literal  "{"
-    add $I11, rx209_pos, 1
-    gt $I11, rx209_eos, rx209_fail
-    sub $I11, rx209_pos, rx209_off
-    substr $S10, rx209_tgt, $I11, 1
-    ne $S10, "{", rx209_fail
-    add rx209_pos, 1
+    add $I11, rx212_pos, 1
+    gt $I11, rx212_eos, rx212_fail
+    sub $I11, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I11, 1
+    ne $S10, "{", rx212_fail
+    add rx212_pos, 1
   # rx subrule "statementlist" subtype=capture negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."statementlist"()
-    unless $P10, rx209_fail
-    rx209_cur."!mark_push"(0, -1, 0, $P10)
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."statementlist"()
+    unless $P10, rx212_fail
+    rx212_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statementlist")
-    rx209_pos = $P10."pos"()
-  alt214_0:
-    set_addr $I10, alt214_1
-    rx209_cur."!mark_push"(0, rx209_pos, $I10)
+    rx212_pos = $P10."pos"()
+  alt217_0:
+    set_addr $I10, alt217_1
+    rx212_cur."!mark_push"(0, rx212_pos, $I10)
   # rx literal  "}"
-    add $I11, rx209_pos, 1
-    gt $I11, rx209_eos, rx209_fail
-    sub $I11, rx209_pos, rx209_off
-    substr $S10, rx209_tgt, $I11, 1
-    ne $S10, "}", rx209_fail
-    add rx209_pos, 1
-    goto alt214_end
-  alt214_1:
+    add $I11, rx212_pos, 1
+    gt $I11, rx212_eos, rx212_fail
+    sub $I11, rx212_pos, rx212_off
+    substr $S10, rx212_tgt, $I11, 1
+    ne $S10, "}", rx212_fail
+    add rx212_pos, 1
+    goto alt217_end
+  alt217_1:
   # rx subrule "FAILGOAL" subtype=method negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."FAILGOAL"("'}'")
-    unless $P10, rx209_fail
-    rx209_pos = $P10."pos"()
-  alt214_end:
-.annotate "line", 134
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."FAILGOAL"("'}'")
+    unless $P10, rx212_fail
+    rx212_pos = $P10."pos"()
+  alt217_end:
+.annotate "line", 138
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx209_cur."!cursor_pos"(rx209_pos)
-    $P10 = rx209_cur."ENDSTMT"()
-    unless $P10, rx209_fail
-.annotate "line", 131
+    rx212_cur."!cursor_pos"(rx212_pos)
+    $P10 = rx212_cur."ENDSTMT"()
+    unless $P10, rx212_fail
+.annotate "line", 135
   # rx pass
-    rx209_cur."!cursor_pass"(rx209_pos, "blockoid")
-    rx209_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx209_pos)
-    .return (rx209_cur)
-  rx209_fail:
+    rx212_cur."!cursor_pass"(rx212_pos, "blockoid")
+    rx212_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx212_pos)
+    .return (rx212_cur)
+  rx212_fail:
 .annotate "line", 4
-    (rx209_rep, rx209_pos, $I10, $P10) = rx209_cur."!mark_fail"(0)
-    lt rx209_pos, -1, rx209_done
-    eq rx209_pos, -1, rx209_fail
+    (rx212_rep, rx212_pos, $I10, $P10) = rx212_cur."!mark_fail"(0)
+    lt rx212_pos, -1, rx212_done
+    eq rx212_pos, -1, rx212_fail
     jump $I10
-  rx209_done:
-    rx209_cur."!cursor_fail"()
-    rx209_cur."!cursor_debug"("FAIL  ", "blockoid")
-    .return (rx209_cur)
+  rx212_done:
+    rx212_cur."!cursor_fail"()
+    rx212_cur."!cursor_debug"("FAIL  ", "blockoid")
+    .return (rx212_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1267204702.05125") :method
+.sub "!PREFIX__blockoid"  :subid("47_1271336396.90314") :method
 .annotate "line", 4
-    $P211 = self."!PREFIX__!subrule"("", "")
-    new $P212, "ResizablePMCArray"
-    push $P212, $P211
-    .return ($P212)
+    $P214 = self."!PREFIX__!subrule"("", "")
+    new $P215, "ResizablePMCArray"
+    push $P215, $P214
+    .return ($P215)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "newpad"  :subid("48_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx217_tgt
-    .local int rx217_pos
-    .local int rx217_off
-    .local int rx217_eos
-    .local int rx217_rep
-    .local pmc rx217_cur
-    (rx217_cur, rx217_pos, rx217_tgt) = self."!cursor_start"()
-    rx217_cur."!cursor_debug"("START ", "newpad")
-    .lex unicode:"$\x{a2}", rx217_cur
+    .local string rx220_tgt
+    .local int rx220_pos
+    .local int rx220_off
+    .local int rx220_eos
+    .local int rx220_rep
+    .local pmc rx220_cur
+    (rx220_cur, rx220_pos, rx220_tgt) = self."!cursor_start"()
+    rx220_cur."!cursor_debug"("START ", "newpad")
+    .lex unicode:"$\x{a2}", rx220_cur
     .local pmc match
     .lex "$/", match
-    length rx217_eos, rx217_tgt
-    set rx217_off, 0
-    lt rx217_pos, 2, rx217_start
-    sub rx217_off, rx217_pos, 1
-    substr rx217_tgt, rx217_tgt, rx217_off
-  rx217_start:
+    length rx220_eos, rx220_tgt
+    set rx220_off, 0
+    lt rx220_pos, 2, rx220_start
+    sub rx220_off, rx220_pos, 1
+    substr rx220_tgt, rx220_tgt, rx220_off
+  rx220_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan220_done
-    goto rxscan220_scan
-  rxscan220_loop:
-    ($P10) = rx217_cur."from"()
+    ne $I10, -1, rxscan223_done
+    goto rxscan223_scan
+  rxscan223_loop:
+    ($P10) = rx220_cur."from"()
     inc $P10
-    set rx217_pos, $P10
-    ge rx217_pos, rx217_eos, rxscan220_done
-  rxscan220_scan:
-    set_addr $I10, rxscan220_loop
-    rx217_cur."!mark_push"(0, rx217_pos, $I10)
-  rxscan220_done:
-.annotate "line", 137
+    set rx220_pos, $P10
+    ge rx220_pos, rx220_eos, rxscan223_done
+  rxscan223_scan:
+    set_addr $I10, rxscan223_loop
+    rx220_cur."!mark_push"(0, rx220_pos, $I10)
+  rxscan223_done:
+.annotate "line", 141
   # rx pass
-    rx217_cur."!cursor_pass"(rx217_pos, "newpad")
-    rx217_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx217_pos)
-    .return (rx217_cur)
-  rx217_fail:
+    rx220_cur."!cursor_pass"(rx220_pos, "newpad")
+    rx220_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx220_pos)
+    .return (rx220_cur)
+  rx220_fail:
 .annotate "line", 4
-    (rx217_rep, rx217_pos, $I10, $P10) = rx217_cur."!mark_fail"(0)
-    lt rx217_pos, -1, rx217_done
-    eq rx217_pos, -1, rx217_fail
+    (rx220_rep, rx220_pos, $I10, $P10) = rx220_cur."!mark_fail"(0)
+    lt rx220_pos, -1, rx220_done
+    eq rx220_pos, -1, rx220_fail
     jump $I10
-  rx217_done:
-    rx217_cur."!cursor_fail"()
-    rx217_cur."!cursor_debug"("FAIL  ", "newpad")
-    .return (rx217_cur)
+  rx220_done:
+    rx220_cur."!cursor_fail"()
+    rx220_cur."!cursor_debug"("FAIL  ", "newpad")
+    .return (rx220_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1267204702.05125") :method
+.sub "!PREFIX__newpad"  :subid("49_1271336396.90314") :method
 .annotate "line", 4
-    new $P219, "ResizablePMCArray"
-    push $P219, ""
-    .return ($P219)
+    new $P222, "ResizablePMCArray"
+    push $P222, ""
+    .return ($P222)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("50_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "finishpad"  :subid("50_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx222_tgt
-    .local int rx222_pos
-    .local int rx222_off
-    .local int rx222_eos
-    .local int rx222_rep
-    .local pmc rx222_cur
-    (rx222_cur, rx222_pos, rx222_tgt) = self."!cursor_start"()
-    rx222_cur."!cursor_debug"("START ", "finishpad")
-    .lex unicode:"$\x{a2}", rx222_cur
+    .local string rx225_tgt
+    .local int rx225_pos
+    .local int rx225_off
+    .local int rx225_eos
+    .local int rx225_rep
+    .local pmc rx225_cur
+    (rx225_cur, rx225_pos, rx225_tgt) = self."!cursor_start"()
+    rx225_cur."!cursor_debug"("START ", "finishpad")
+    .lex unicode:"$\x{a2}", rx225_cur
     .local pmc match
     .lex "$/", match
-    length rx222_eos, rx222_tgt
-    set rx222_off, 0
-    lt rx222_pos, 2, rx222_start
-    sub rx222_off, rx222_pos, 1
-    substr rx222_tgt, rx222_tgt, rx222_off
-  rx222_start:
+    length rx225_eos, rx225_tgt
+    set rx225_off, 0
+    lt rx225_pos, 2, rx225_start
+    sub rx225_off, rx225_pos, 1
+    substr rx225_tgt, rx225_tgt, rx225_off
+  rx225_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan225_done
-    goto rxscan225_scan
-  rxscan225_loop:
-    ($P10) = rx222_cur."from"()
+    ne $I10, -1, rxscan228_done
+    goto rxscan228_scan
+  rxscan228_loop:
+    ($P10) = rx225_cur."from"()
     inc $P10
-    set rx222_pos, $P10
-    ge rx222_pos, rx222_eos, rxscan225_done
-  rxscan225_scan:
-    set_addr $I10, rxscan225_loop
-    rx222_cur."!mark_push"(0, rx222_pos, $I10)
-  rxscan225_done:
-.annotate "line", 138
+    set rx225_pos, $P10
+    ge rx225_pos, rx225_eos, rxscan228_done
+  rxscan228_scan:
+    set_addr $I10, rxscan228_loop
+    rx225_cur."!mark_push"(0, rx225_pos, $I10)
+  rxscan228_done:
+.annotate "line", 142
   # rx pass
-    rx222_cur."!cursor_pass"(rx222_pos, "finishpad")
-    rx222_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx222_pos)
-    .return (rx222_cur)
-  rx222_fail:
+    rx225_cur."!cursor_pass"(rx225_pos, "finishpad")
+    rx225_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx225_pos)
+    .return (rx225_cur)
+  rx225_fail:
 .annotate "line", 4
-    (rx222_rep, rx222_pos, $I10, $P10) = rx222_cur."!mark_fail"(0)
-    lt rx222_pos, -1, rx222_done
-    eq rx222_pos, -1, rx222_fail
+    (rx225_rep, rx225_pos, $I10, $P10) = rx225_cur."!mark_fail"(0)
+    lt rx225_pos, -1, rx225_done
+    eq rx225_pos, -1, rx225_fail
     jump $I10
-  rx222_done:
-    rx222_cur."!cursor_fail"()
-    rx222_cur."!cursor_debug"("FAIL  ", "finishpad")
-    .return (rx222_cur)
+  rx225_done:
+    rx225_cur."!cursor_fail"()
+    rx225_cur."!cursor_debug"("FAIL  ", "finishpad")
+    .return (rx225_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("51_1267204702.05125") :method
+.sub "!PREFIX__finishpad"  :subid("51_1271336396.90314") :method
 .annotate "line", 4
-    new $P224, "ResizablePMCArray"
-    push $P224, ""
-    .return ($P224)
+    new $P227, "ResizablePMCArray"
+    push $P227, ""
+    .return ($P227)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("52_1267204702.05125") :method
-.annotate "line", 140
-    $P227 = self."!protoregex"("terminator")
-    .return ($P227)
+.sub "terminator"  :subid("52_1271336396.90314") :method
+.annotate "line", 144
+    $P230 = self."!protoregex"("terminator")
+    .return ($P230)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("53_1267204702.05125") :method
-.annotate "line", 140
-    $P229 = self."!PREFIX__!protoregex"("terminator")
-    .return ($P229)
+.sub "!PREFIX__terminator"  :subid("53_1271336396.90314") :method
+.annotate "line", 144
+    $P232 = self."!PREFIX__!protoregex"("terminator")
+    .return ($P232)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("54_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "terminator:sym<;>"  :subid("54_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx231_tgt
-    .local int rx231_pos
-    .local int rx231_off
-    .local int rx231_eos
-    .local int rx231_rep
-    .local pmc rx231_cur
-    (rx231_cur, rx231_pos, rx231_tgt) = self."!cursor_start"()
-    rx231_cur."!cursor_debug"("START ", "terminator:sym<;>")
-    .lex unicode:"$\x{a2}", rx231_cur
-    .local pmc match
-    .lex "$/", match
-    length rx231_eos, rx231_tgt
-    set rx231_off, 0
-    lt rx231_pos, 2, rx231_start
-    sub rx231_off, rx231_pos, 1
-    substr rx231_tgt, rx231_tgt, rx231_off
-  rx231_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan234_done
-    goto rxscan234_scan
-  rxscan234_loop:
-    ($P10) = rx231_cur."from"()
-    inc $P10
-    set rx231_pos, $P10
-    ge rx231_pos, rx231_eos, rxscan234_done
-  rxscan234_scan:
-    set_addr $I10, rxscan234_loop
-    rx231_cur."!mark_push"(0, rx231_pos, $I10)
-  rxscan234_done:
-.annotate "line", 142
+    .local string rx234_tgt
+    .local int rx234_pos
+    .local int rx234_off
+    .local int rx234_eos
+    .local int rx234_rep
+    .local pmc rx234_cur
+    (rx234_cur, rx234_pos, rx234_tgt) = self."!cursor_start"()
+    rx234_cur."!cursor_debug"("START ", "terminator:sym<;>")
+    .lex unicode:"$\x{a2}", rx234_cur
+    .local pmc match
+    .lex "$/", match
+    length rx234_eos, rx234_tgt
+    set rx234_off, 0
+    lt rx234_pos, 2, rx234_start
+    sub rx234_off, rx234_pos, 1
+    substr rx234_tgt, rx234_tgt, rx234_off
+  rx234_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan237_done
+    goto rxscan237_scan
+  rxscan237_loop:
+    ($P10) = rx234_cur."from"()
+    inc $P10
+    set rx234_pos, $P10
+    ge rx234_pos, rx234_eos, rxscan237_done
+  rxscan237_scan:
+    set_addr $I10, rxscan237_loop
+    rx234_cur."!mark_push"(0, rx234_pos, $I10)
+  rxscan237_done:
+.annotate "line", 146
   # rx enumcharlist negate=0 zerowidth
-    ge rx231_pos, rx231_eos, rx231_fail
-    sub $I10, rx231_pos, rx231_off
-    substr $S10, rx231_tgt, $I10, 1
+    ge rx234_pos, rx234_eos, rx234_fail
+    sub $I10, rx234_pos, rx234_off
+    substr $S10, rx234_tgt, $I10, 1
     index $I11, ";", $S10
-    lt $I11, 0, rx231_fail
+    lt $I11, 0, rx234_fail
   # rx pass
-    rx231_cur."!cursor_pass"(rx231_pos, "terminator:sym<;>")
-    rx231_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx231_pos)
-    .return (rx231_cur)
-  rx231_fail:
+    rx234_cur."!cursor_pass"(rx234_pos, "terminator:sym<;>")
+    rx234_cur."!cursor_debug"("PASS  ", "terminator:sym<;>", " at pos=", rx234_pos)
+    .return (rx234_cur)
+  rx234_fail:
 .annotate "line", 4
-    (rx231_rep, rx231_pos, $I10, $P10) = rx231_cur."!mark_fail"(0)
-    lt rx231_pos, -1, rx231_done
-    eq rx231_pos, -1, rx231_fail
+    (rx234_rep, rx234_pos, $I10, $P10) = rx234_cur."!mark_fail"(0)
+    lt rx234_pos, -1, rx234_done
+    eq rx234_pos, -1, rx234_fail
     jump $I10
-  rx231_done:
-    rx231_cur."!cursor_fail"()
-    rx231_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
-    .return (rx231_cur)
+  rx234_done:
+    rx234_cur."!cursor_fail"()
+    rx234_cur."!cursor_debug"("FAIL  ", "terminator:sym<;>")
+    .return (rx234_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("55_1267204702.05125") :method
+.sub "!PREFIX__terminator:sym<;>"  :subid("55_1271336396.90314") :method
 .annotate "line", 4
-    new $P233, "ResizablePMCArray"
-    push $P233, ";"
-    .return ($P233)
+    new $P236, "ResizablePMCArray"
+    push $P236, ";"
+    .return ($P236)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("56_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "terminator:sym<}>"  :subid("56_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx236_tgt
-    .local int rx236_pos
-    .local int rx236_off
-    .local int rx236_eos
-    .local int rx236_rep
-    .local pmc rx236_cur
-    (rx236_cur, rx236_pos, rx236_tgt) = self."!cursor_start"()
-    rx236_cur."!cursor_debug"("START ", "terminator:sym<}>")
-    .lex unicode:"$\x{a2}", rx236_cur
+    .local string rx239_tgt
+    .local int rx239_pos
+    .local int rx239_off
+    .local int rx239_eos
+    .local int rx239_rep
+    .local pmc rx239_cur
+    (rx239_cur, rx239_pos, rx239_tgt) = self."!cursor_start"()
+    rx239_cur."!cursor_debug"("START ", "terminator:sym<}>")
+    .lex unicode:"$\x{a2}", rx239_cur
     .local pmc match
     .lex "$/", match
-    length rx236_eos, rx236_tgt
-    set rx236_off, 0
-    lt rx236_pos, 2, rx236_start
-    sub rx236_off, rx236_pos, 1
-    substr rx236_tgt, rx236_tgt, rx236_off
-  rx236_start:
+    length rx239_eos, rx239_tgt
+    set rx239_off, 0
+    lt rx239_pos, 2, rx239_start
+    sub rx239_off, rx239_pos, 1
+    substr rx239_tgt, rx239_tgt, rx239_off
+  rx239_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan239_done
-    goto rxscan239_scan
-  rxscan239_loop:
-    ($P10) = rx236_cur."from"()
+    ne $I10, -1, rxscan242_done
+    goto rxscan242_scan
+  rxscan242_loop:
+    ($P10) = rx239_cur."from"()
     inc $P10
-    set rx236_pos, $P10
-    ge rx236_pos, rx236_eos, rxscan239_done
-  rxscan239_scan:
-    set_addr $I10, rxscan239_loop
-    rx236_cur."!mark_push"(0, rx236_pos, $I10)
-  rxscan239_done:
-.annotate "line", 143
+    set rx239_pos, $P10
+    ge rx239_pos, rx239_eos, rxscan242_done
+  rxscan242_scan:
+    set_addr $I10, rxscan242_loop
+    rx239_cur."!mark_push"(0, rx239_pos, $I10)
+  rxscan242_done:
+.annotate "line", 147
   # rx enumcharlist negate=0 zerowidth
-    ge rx236_pos, rx236_eos, rx236_fail
-    sub $I10, rx236_pos, rx236_off
-    substr $S10, rx236_tgt, $I10, 1
+    ge rx239_pos, rx239_eos, rx239_fail
+    sub $I10, rx239_pos, rx239_off
+    substr $S10, rx239_tgt, $I10, 1
     index $I11, "}", $S10
-    lt $I11, 0, rx236_fail
+    lt $I11, 0, rx239_fail
   # rx pass
-    rx236_cur."!cursor_pass"(rx236_pos, "terminator:sym<}>")
-    rx236_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx236_pos)
-    .return (rx236_cur)
-  rx236_fail:
+    rx239_cur."!cursor_pass"(rx239_pos, "terminator:sym<}>")
+    rx239_cur."!cursor_debug"("PASS  ", "terminator:sym<}>", " at pos=", rx239_pos)
+    .return (rx239_cur)
+  rx239_fail:
 .annotate "line", 4
-    (rx236_rep, rx236_pos, $I10, $P10) = rx236_cur."!mark_fail"(0)
-    lt rx236_pos, -1, rx236_done
-    eq rx236_pos, -1, rx236_fail
+    (rx239_rep, rx239_pos, $I10, $P10) = rx239_cur."!mark_fail"(0)
+    lt rx239_pos, -1, rx239_done
+    eq rx239_pos, -1, rx239_fail
     jump $I10
-  rx236_done:
-    rx236_cur."!cursor_fail"()
-    rx236_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
-    .return (rx236_cur)
+  rx239_done:
+    rx239_cur."!cursor_fail"()
+    rx239_cur."!cursor_debug"("FAIL  ", "terminator:sym<}>")
+    .return (rx239_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("57_1267204702.05125") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("57_1271336396.90314") :method
 .annotate "line", 4
-    new $P238, "ResizablePMCArray"
-    push $P238, "}"
-    .return ($P238)
+    new $P241, "ResizablePMCArray"
+    push $P241, "}"
+    .return ($P241)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("58_1267204702.05125") :method
-.annotate "line", 147
-    $P241 = self."!protoregex"("statement_control")
-    .return ($P241)
+.sub "statement_control"  :subid("58_1271336396.90314") :method
+.annotate "line", 151
+    $P244 = self."!protoregex"("statement_control")
+    .return ($P244)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("59_1267204702.05125") :method
-.annotate "line", 147
-    $P243 = self."!PREFIX__!protoregex"("statement_control")
-    .return ($P243)
+.sub "!PREFIX__statement_control"  :subid("59_1271336396.90314") :method
+.annotate "line", 151
+    $P246 = self."!PREFIX__!protoregex"("statement_control")
+    .return ($P246)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("60_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<if>"  :subid("60_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx245_tgt
-    .local int rx245_pos
-    .local int rx245_off
-    .local int rx245_eos
-    .local int rx245_rep
-    .local pmc rx245_cur
-    (rx245_cur, rx245_pos, rx245_tgt) = self."!cursor_start"()
-    rx245_cur."!cursor_debug"("START ", "statement_control:sym<if>")
-    rx245_cur."!cursor_caparray"("else", "xblock")
-    .lex unicode:"$\x{a2}", rx245_cur
-    .local pmc match
-    .lex "$/", match
-    length rx245_eos, rx245_tgt
-    set rx245_off, 0
-    lt rx245_pos, 2, rx245_start
-    sub rx245_off, rx245_pos, 1
-    substr rx245_tgt, rx245_tgt, rx245_off
-  rx245_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan248_done
-    goto rxscan248_scan
-  rxscan248_loop:
-    ($P10) = rx245_cur."from"()
-    inc $P10
-    set rx245_pos, $P10
-    ge rx245_pos, rx245_eos, rxscan248_done
-  rxscan248_scan:
-    set_addr $I10, rxscan248_loop
-    rx245_cur."!mark_push"(0, rx245_pos, $I10)
-  rxscan248_done:
-.annotate "line", 150
+    .local string rx248_tgt
+    .local int rx248_pos
+    .local int rx248_off
+    .local int rx248_eos
+    .local int rx248_rep
+    .local pmc rx248_cur
+    (rx248_cur, rx248_pos, rx248_tgt) = self."!cursor_start"()
+    rx248_cur."!cursor_debug"("START ", "statement_control:sym<if>")
+    rx248_cur."!cursor_caparray"("else", "xblock")
+    .lex unicode:"$\x{a2}", rx248_cur
+    .local pmc match
+    .lex "$/", match
+    length rx248_eos, rx248_tgt
+    set rx248_off, 0
+    lt rx248_pos, 2, rx248_start
+    sub rx248_off, rx248_pos, 1
+    substr rx248_tgt, rx248_tgt, rx248_off
+  rx248_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan251_done
+    goto rxscan251_scan
+  rxscan251_loop:
+    ($P10) = rx248_cur."from"()
+    inc $P10
+    set rx248_pos, $P10
+    ge rx248_pos, rx248_eos, rxscan251_done
+  rxscan251_scan:
+    set_addr $I10, rxscan251_loop
+    rx248_cur."!mark_push"(0, rx248_pos, $I10)
+  rxscan251_done:
+.annotate "line", 154
   # rx subcapture "sym"
-    set_addr $I10, rxcap_249_fail
-    rx245_cur."!mark_push"(0, rx245_pos, $I10)
+    set_addr $I10, rxcap_252_fail
+    rx248_cur."!mark_push"(0, rx248_pos, $I10)
   # rx literal  "if"
-    add $I11, rx245_pos, 2
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 2
-    ne $S10, "if", rx245_fail
-    add rx245_pos, 2
-    set_addr $I10, rxcap_249_fail
-    ($I12, $I11) = rx245_cur."!mark_peek"($I10)
-    rx245_cur."!cursor_pos"($I11)
-    ($P10) = rx245_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx245_pos, "")
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx248_pos, 2
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 2
+    ne $S10, "if", rx248_fail
+    add rx248_pos, 2
+    set_addr $I10, rxcap_252_fail
+    ($I12, $I11) = rx248_cur."!mark_peek"($I10)
+    rx248_cur."!cursor_pos"($I11)
+    ($P10) = rx248_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx248_pos, "")
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_249_done
-  rxcap_249_fail:
-    goto rx245_fail
-  rxcap_249_done:
+    goto rxcap_252_done
+  rxcap_252_fail:
+    goto rx248_fail
+  rxcap_252_done:
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 151
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 155
   # rx subrule "xblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."xblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."xblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 152
-  # rx rxquantr252 ** 0..*
-    set_addr $I256, rxquantr252_done
-    rx245_cur."!mark_push"(0, rx245_pos, $I256)
-  rxquantr252_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 156
+  # rx rxquantr255 ** 0..*
+    set_addr $I259, rxquantr255_done
+    rx248_cur."!mark_push"(0, rx248_pos, $I259)
+  rxquantr255_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx literal  "elsif"
-    add $I11, rx245_pos, 5
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 5
-    ne $S10, "elsif", rx245_fail
-    add rx245_pos, 5
+    add $I11, rx248_pos, 5
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 5
+    ne $S10, "elsif", rx248_fail
+    add rx248_pos, 5
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx subrule "xblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."xblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."xblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-    (rx245_rep) = rx245_cur."!mark_commit"($I256)
-    rx245_cur."!mark_push"(rx245_rep, rx245_pos, $I256)
-    goto rxquantr252_loop
-  rxquantr252_done:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 153
-  # rx rxquantr258 ** 0..1
-    set_addr $I262, rxquantr258_done
-    rx245_cur."!mark_push"(0, rx245_pos, $I262)
-  rxquantr258_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+    (rx248_rep) = rx248_cur."!mark_commit"($I259)
+    rx248_cur."!mark_push"(rx248_rep, rx248_pos, $I259)
+    goto rxquantr255_loop
+  rxquantr255_done:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 157
+  # rx rxquantr261 ** 0..1
+    set_addr $I265, rxquantr261_done
+    rx248_cur."!mark_push"(0, rx248_pos, $I265)
+  rxquantr261_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx literal  "else"
-    add $I11, rx245_pos, 4
-    gt $I11, rx245_eos, rx245_fail
-    sub $I11, rx245_pos, rx245_off
-    substr $S10, rx245_tgt, $I11, 4
-    ne $S10, "else", rx245_fail
-    add rx245_pos, 4
+    add $I11, rx248_pos, 4
+    gt $I11, rx248_eos, rx248_fail
+    sub $I11, rx248_pos, rx248_off
+    substr $S10, rx248_tgt, $I11, 4
+    ne $S10, "else", rx248_fail
+    add rx248_pos, 4
   # rx charclass s
-    ge rx245_pos, rx245_eos, rx245_fail
-    sub $I10, rx245_pos, rx245_off
-    is_cclass $I11, 32, rx245_tgt, $I10
-    unless $I11, rx245_fail
-    inc rx245_pos
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
+    ge rx248_pos, rx248_eos, rx248_fail
+    sub $I10, rx248_pos, rx248_off
+    is_cclass $I11, 32, rx248_tgt, $I10
+    unless $I11, rx248_fail
+    inc rx248_pos
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."pblock"()
-    unless $P10, rx245_fail
-    rx245_cur."!mark_push"(0, -1, 0, $P10)
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."pblock"()
+    unless $P10, rx248_fail
+    rx248_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("else")
-    rx245_pos = $P10."pos"()
+    rx248_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-    (rx245_rep) = rx245_cur."!mark_commit"($I262)
-  rxquantr258_done:
-  # rx subrule "ws" subtype=method negate=
-    rx245_cur."!cursor_pos"(rx245_pos)
-    $P10 = rx245_cur."ws"()
-    unless $P10, rx245_fail
-    rx245_pos = $P10."pos"()
-.annotate "line", 149
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+    (rx248_rep) = rx248_cur."!mark_commit"($I265)
+  rxquantr261_done:
+  # rx subrule "ws" subtype=method negate=
+    rx248_cur."!cursor_pos"(rx248_pos)
+    $P10 = rx248_cur."ws"()
+    unless $P10, rx248_fail
+    rx248_pos = $P10."pos"()
+.annotate "line", 153
   # rx pass
-    rx245_cur."!cursor_pass"(rx245_pos, "statement_control:sym<if>")
-    rx245_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx245_pos)
-    .return (rx245_cur)
-  rx245_fail:
+    rx248_cur."!cursor_pass"(rx248_pos, "statement_control:sym<if>")
+    rx248_cur."!cursor_debug"("PASS  ", "statement_control:sym<if>", " at pos=", rx248_pos)
+    .return (rx248_cur)
+  rx248_fail:
 .annotate "line", 4
-    (rx245_rep, rx245_pos, $I10, $P10) = rx245_cur."!mark_fail"(0)
-    lt rx245_pos, -1, rx245_done
-    eq rx245_pos, -1, rx245_fail
+    (rx248_rep, rx248_pos, $I10, $P10) = rx248_cur."!mark_fail"(0)
+    lt rx248_pos, -1, rx248_done
+    eq rx248_pos, -1, rx248_fail
     jump $I10
-  rx245_done:
-    rx245_cur."!cursor_fail"()
-    rx245_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
-    .return (rx245_cur)
+  rx248_done:
+    rx248_cur."!cursor_fail"()
+    rx248_cur."!cursor_debug"("FAIL  ", "statement_control:sym<if>")
+    .return (rx248_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1271336396.90314") :method
 .annotate "line", 4
-    new $P247, "ResizablePMCArray"
-    push $P247, "if"
-    .return ($P247)
+    new $P250, "ResizablePMCArray"
+    push $P250, "if"
+    .return ($P250)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("62_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<unless>"  :subid("62_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .const 'Sub' $P275 = "64_1267204702.05125" 
-    capture_lex $P275
-    .local string rx265_tgt
-    .local int rx265_pos
-    .local int rx265_off
-    .local int rx265_eos
-    .local int rx265_rep
-    .local pmc rx265_cur
-    (rx265_cur, rx265_pos, rx265_tgt) = self."!cursor_start"()
-    rx265_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
-    .lex unicode:"$\x{a2}", rx265_cur
+    .const 'Sub' $P278 = "64_1271336396.90314" 
+    capture_lex $P278
+    .local string rx268_tgt
+    .local int rx268_pos
+    .local int rx268_off
+    .local int rx268_eos
+    .local int rx268_rep
+    .local pmc rx268_cur
+    (rx268_cur, rx268_pos, rx268_tgt) = self."!cursor_start"()
+    rx268_cur."!cursor_debug"("START ", "statement_control:sym<unless>")
+    .lex unicode:"$\x{a2}", rx268_cur
     .local pmc match
     .lex "$/", match
-    length rx265_eos, rx265_tgt
-    set rx265_off, 0
-    lt rx265_pos, 2, rx265_start
-    sub rx265_off, rx265_pos, 1
-    substr rx265_tgt, rx265_tgt, rx265_off
-  rx265_start:
+    length rx268_eos, rx268_tgt
+    set rx268_off, 0
+    lt rx268_pos, 2, rx268_start
+    sub rx268_off, rx268_pos, 1
+    substr rx268_tgt, rx268_tgt, rx268_off
+  rx268_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan268_done
-    goto rxscan268_scan
-  rxscan268_loop:
-    ($P10) = rx265_cur."from"()
+    ne $I10, -1, rxscan271_done
+    goto rxscan271_scan
+  rxscan271_loop:
+    ($P10) = rx268_cur."from"()
     inc $P10
-    set rx265_pos, $P10
-    ge rx265_pos, rx265_eos, rxscan268_done
-  rxscan268_scan:
-    set_addr $I10, rxscan268_loop
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
-  rxscan268_done:
-.annotate "line", 157
+    set rx268_pos, $P10
+    ge rx268_pos, rx268_eos, rxscan271_done
+  rxscan271_scan:
+    set_addr $I10, rxscan271_loop
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
+  rxscan271_done:
+.annotate "line", 161
   # rx subcapture "sym"
-    set_addr $I10, rxcap_269_fail
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+    set_addr $I10, rxcap_272_fail
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx265_pos, 6
-    gt $I11, rx265_eos, rx265_fail
-    sub $I11, rx265_pos, rx265_off
-    substr $S10, rx265_tgt, $I11, 6
-    ne $S10, "unless", rx265_fail
-    add rx265_pos, 6
-    set_addr $I10, rxcap_269_fail
-    ($I12, $I11) = rx265_cur."!mark_peek"($I10)
-    rx265_cur."!cursor_pos"($I11)
-    ($P10) = rx265_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx265_pos, "")
-    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx268_pos, 6
+    gt $I11, rx268_eos, rx268_fail
+    sub $I11, rx268_pos, rx268_off
+    substr $S10, rx268_tgt, $I11, 6
+    ne $S10, "unless", rx268_fail
+    add rx268_pos, 6
+    set_addr $I10, rxcap_272_fail
+    ($I12, $I11) = rx268_cur."!mark_peek"($I10)
+    rx268_cur."!cursor_pos"($I11)
+    ($P10) = rx268_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx268_pos, "")
+    rx268_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_269_done
-  rxcap_269_fail:
-    goto rx265_fail
-  rxcap_269_done:
+    goto rxcap_272_done
+  rxcap_272_fail:
+    goto rx268_fail
+  rxcap_272_done:
   # rx charclass s
-    ge rx265_pos, rx265_eos, rx265_fail
-    sub $I10, rx265_pos, rx265_off
-    is_cclass $I11, 32, rx265_tgt, $I10
-    unless $I11, rx265_fail
-    inc rx265_pos
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-.annotate "line", 158
+    ge rx268_pos, rx268_eos, rx268_fail
+    sub $I10, rx268_pos, rx268_off
+    is_cclass $I11, 32, rx268_tgt, $I10
+    unless $I11, rx268_fail
+    inc rx268_pos
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+.annotate "line", 162
   # rx subrule "xblock" subtype=capture negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."xblock"()
-    unless $P10, rx265_fail
-    rx265_cur."!mark_push"(0, -1, 0, $P10)
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."xblock"()
+    unless $P10, rx268_fail
+    rx268_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx265_pos = $P10."pos"()
+    rx268_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  alt272_0:
-.annotate "line", 159
-    set_addr $I10, alt272_1
-    rx265_cur."!mark_push"(0, rx265_pos, $I10)
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  alt275_0:
+.annotate "line", 163
+    set_addr $I10, alt275_1
+    rx268_cur."!mark_push"(0, rx268_pos, $I10)
   # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
   # rx subrule "before" subtype=zerowidth negate=1
-    rx265_cur."!cursor_pos"(rx265_pos)
-    .const 'Sub' $P275 = "64_1267204702.05125" 
-    capture_lex $P275
-    $P10 = rx265_cur."before"($P275)
-    if $P10, rx265_fail
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-    goto alt272_end
-  alt272_1:
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
+    rx268_cur."!cursor_pos"(rx268_pos)
+    .const 'Sub' $P278 = "64_1271336396.90314" 
+    capture_lex $P278
+    $P10 = rx268_cur."before"($P278)
+    if $P10, rx268_fail
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+    goto alt275_end
+  alt275_1:
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-  alt272_end:
-  # rx subrule "ws" subtype=method negate=
-    rx265_cur."!cursor_pos"(rx265_pos)
-    $P10 = rx265_cur."ws"()
-    unless $P10, rx265_fail
-    rx265_pos = $P10."pos"()
-.annotate "line", 156
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."panic"("unless does not take \"else\", please rewrite using \"if\"")
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+  alt275_end:
+  # rx subrule "ws" subtype=method negate=
+    rx268_cur."!cursor_pos"(rx268_pos)
+    $P10 = rx268_cur."ws"()
+    unless $P10, rx268_fail
+    rx268_pos = $P10."pos"()
+.annotate "line", 160
   # rx pass
-    rx265_cur."!cursor_pass"(rx265_pos, "statement_control:sym<unless>")
-    rx265_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx265_pos)
-    .return (rx265_cur)
-  rx265_fail:
+    rx268_cur."!cursor_pass"(rx268_pos, "statement_control:sym<unless>")
+    rx268_cur."!cursor_debug"("PASS  ", "statement_control:sym<unless>", " at pos=", rx268_pos)
+    .return (rx268_cur)
+  rx268_fail:
 .annotate "line", 4
-    (rx265_rep, rx265_pos, $I10, $P10) = rx265_cur."!mark_fail"(0)
-    lt rx265_pos, -1, rx265_done
-    eq rx265_pos, -1, rx265_fail
+    (rx268_rep, rx268_pos, $I10, $P10) = rx268_cur."!mark_fail"(0)
+    lt rx268_pos, -1, rx268_done
+    eq rx268_pos, -1, rx268_fail
     jump $I10
-  rx265_done:
-    rx265_cur."!cursor_fail"()
-    rx265_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
-    .return (rx265_cur)
+  rx268_done:
+    rx268_cur."!cursor_fail"()
+    rx268_cur."!cursor_debug"("FAIL  ", "statement_control:sym<unless>")
+    .return (rx268_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1271336396.90314") :method
 .annotate "line", 4
-    new $P267, "ResizablePMCArray"
-    push $P267, "unless"
-    .return ($P267)
+    new $P270, "ResizablePMCArray"
+    push $P270, "unless"
+    .return ($P270)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block274"  :anon :subid("64_1267204702.05125") :method :outer("62_1267204702.05125")
-.annotate "line", 159
-    .local string rx276_tgt
-    .local int rx276_pos
-    .local int rx276_off
-    .local int rx276_eos
-    .local int rx276_rep
-    .local pmc rx276_cur
-    (rx276_cur, rx276_pos, rx276_tgt) = self."!cursor_start"()
-    rx276_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx276_cur
-    .local pmc match
-    .lex "$/", match
-    length rx276_eos, rx276_tgt
-    set rx276_off, 0
-    lt rx276_pos, 2, rx276_start
-    sub rx276_off, rx276_pos, 1
-    substr rx276_tgt, rx276_tgt, rx276_off
-  rx276_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan277_done
-    goto rxscan277_scan
-  rxscan277_loop:
-    ($P10) = rx276_cur."from"()
-    inc $P10
-    set rx276_pos, $P10
-    ge rx276_pos, rx276_eos, rxscan277_done
-  rxscan277_scan:
-    set_addr $I10, rxscan277_loop
-    rx276_cur."!mark_push"(0, rx276_pos, $I10)
-  rxscan277_done:
+.sub "_block277"  :anon :subid("64_1271336396.90314") :method :outer("62_1271336396.90314")
+.annotate "line", 163
+    .local string rx279_tgt
+    .local int rx279_pos
+    .local int rx279_off
+    .local int rx279_eos
+    .local int rx279_rep
+    .local pmc rx279_cur
+    (rx279_cur, rx279_pos, rx279_tgt) = self."!cursor_start"()
+    rx279_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx279_cur
+    .local pmc match
+    .lex "$/", match
+    length rx279_eos, rx279_tgt
+    set rx279_off, 0
+    lt rx279_pos, 2, rx279_start
+    sub rx279_off, rx279_pos, 1
+    substr rx279_tgt, rx279_tgt, rx279_off
+  rx279_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan280_done
+    goto rxscan280_scan
+  rxscan280_loop:
+    ($P10) = rx279_cur."from"()
+    inc $P10
+    set rx279_pos, $P10
+    ge rx279_pos, rx279_eos, rxscan280_done
+  rxscan280_scan:
+    set_addr $I10, rxscan280_loop
+    rx279_cur."!mark_push"(0, rx279_pos, $I10)
+  rxscan280_done:
   # rx literal  "else"
-    add $I11, rx276_pos, 4
-    gt $I11, rx276_eos, rx276_fail
-    sub $I11, rx276_pos, rx276_off
-    substr $S10, rx276_tgt, $I11, 4
-    ne $S10, "else", rx276_fail
-    add rx276_pos, 4
-  # rx pass
-    rx276_cur."!cursor_pass"(rx276_pos, "")
-    rx276_cur."!cursor_debug"("PASS  ", "", " at pos=", rx276_pos)
-    .return (rx276_cur)
-  rx276_fail:
-    (rx276_rep, rx276_pos, $I10, $P10) = rx276_cur."!mark_fail"(0)
-    lt rx276_pos, -1, rx276_done
-    eq rx276_pos, -1, rx276_fail
-    jump $I10
-  rx276_done:
-    rx276_cur."!cursor_fail"()
-    rx276_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx276_cur)
+    add $I11, rx279_pos, 4
+    gt $I11, rx279_eos, rx279_fail
+    sub $I11, rx279_pos, rx279_off
+    substr $S10, rx279_tgt, $I11, 4
+    ne $S10, "else", rx279_fail
+    add rx279_pos, 4
+  # rx pass
+    rx279_cur."!cursor_pass"(rx279_pos, "")
+    rx279_cur."!cursor_debug"("PASS  ", "", " at pos=", rx279_pos)
+    .return (rx279_cur)
+  rx279_fail:
+    (rx279_rep, rx279_pos, $I10, $P10) = rx279_cur."!mark_fail"(0)
+    lt rx279_pos, -1, rx279_done
+    eq rx279_pos, -1, rx279_fail
+    jump $I10
+  rx279_done:
+    rx279_cur."!cursor_fail"()
+    rx279_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx279_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("65_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx283_tgt
-    .local int rx283_pos
-    .local int rx283_off
-    .local int rx283_eos
-    .local int rx283_rep
-    .local pmc rx283_cur
-    (rx283_cur, rx283_pos, rx283_tgt) = self."!cursor_start"()
-    rx283_cur."!cursor_debug"("START ", "statement_control:sym<while>")
-    .lex unicode:"$\x{a2}", rx283_cur
-    .local pmc match
-    .lex "$/", match
-    length rx283_eos, rx283_tgt
-    set rx283_off, 0
-    lt rx283_pos, 2, rx283_start
-    sub rx283_off, rx283_pos, 1
-    substr rx283_tgt, rx283_tgt, rx283_off
-  rx283_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan286_done
-    goto rxscan286_scan
-  rxscan286_loop:
-    ($P10) = rx283_cur."from"()
-    inc $P10
-    set rx283_pos, $P10
-    ge rx283_pos, rx283_eos, rxscan286_done
-  rxscan286_scan:
-    set_addr $I10, rxscan286_loop
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  rxscan286_done:
-.annotate "line", 163
+.sub "statement_control:sym<while>"  :subid("65_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx286_tgt
+    .local int rx286_pos
+    .local int rx286_off
+    .local int rx286_eos
+    .local int rx286_rep
+    .local pmc rx286_cur
+    (rx286_cur, rx286_pos, rx286_tgt) = self."!cursor_start"()
+    rx286_cur."!cursor_debug"("START ", "statement_control:sym<while>")
+    .lex unicode:"$\x{a2}", rx286_cur
+    .local pmc match
+    .lex "$/", match
+    length rx286_eos, rx286_tgt
+    set rx286_off, 0
+    lt rx286_pos, 2, rx286_start
+    sub rx286_off, rx286_pos, 1
+    substr rx286_tgt, rx286_tgt, rx286_off
+  rx286_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan289_done
+    goto rxscan289_scan
+  rxscan289_loop:
+    ($P10) = rx286_cur."from"()
+    inc $P10
+    set rx286_pos, $P10
+    ge rx286_pos, rx286_eos, rxscan289_done
+  rxscan289_scan:
+    set_addr $I10, rxscan289_loop
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  rxscan289_done:
+.annotate "line", 167
   # rx subcapture "sym"
-    set_addr $I10, rxcap_288_fail
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
-  alt287_0:
-    set_addr $I10, alt287_1
-    rx283_cur."!mark_push"(0, rx283_pos, $I10)
+    set_addr $I10, rxcap_291_fail
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
+  alt290_0:
+    set_addr $I10, alt290_1
+    rx286_cur."!mark_push"(0, rx286_pos, $I10)
   # rx literal  "while"
-    add $I11, rx283_pos, 5
-    gt $I11, rx283_eos, rx283_fail
-    sub $I11, rx283_pos, rx283_off
-    substr $S10, rx283_tgt, $I11, 5
-    ne $S10, "while", rx283_fail
-    add rx283_pos, 5
-    goto alt287_end
-  alt287_1:
+    add $I11, rx286_pos, 5
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 5
+    ne $S10, "while", rx286_fail
+    add rx286_pos, 5
+    goto alt290_end
+  alt290_1:
   # rx literal  "until"
-    add $I11, rx283_pos, 5
-    gt $I11, rx283_eos, rx283_fail
-    sub $I11, rx283_pos, rx283_off
-    substr $S10, rx283_tgt, $I11, 5
-    ne $S10, "until", rx283_fail
-    add rx283_pos, 5
-  alt287_end:
-    set_addr $I10, rxcap_288_fail
-    ($I12, $I11) = rx283_cur."!mark_peek"($I10)
-    rx283_cur."!cursor_pos"($I11)
-    ($P10) = rx283_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx283_pos, "")
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx286_pos, 5
+    gt $I11, rx286_eos, rx286_fail
+    sub $I11, rx286_pos, rx286_off
+    substr $S10, rx286_tgt, $I11, 5
+    ne $S10, "until", rx286_fail
+    add rx286_pos, 5
+  alt290_end:
+    set_addr $I10, rxcap_291_fail
+    ($I12, $I11) = rx286_cur."!mark_peek"($I10)
+    rx286_cur."!cursor_pos"($I11)
+    ($P10) = rx286_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx286_pos, "")
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_288_done
-  rxcap_288_fail:
-    goto rx283_fail
-  rxcap_288_done:
+    goto rxcap_291_done
+  rxcap_291_fail:
+    goto rx286_fail
+  rxcap_291_done:
   # rx charclass s
-    ge rx283_pos, rx283_eos, rx283_fail
-    sub $I10, rx283_pos, rx283_off
-    is_cclass $I11, 32, rx283_tgt, $I10
-    unless $I11, rx283_fail
-    inc rx283_pos
-  # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
-.annotate "line", 164
+    ge rx286_pos, rx286_eos, rx286_fail
+    sub $I10, rx286_pos, rx286_off
+    is_cclass $I11, 32, rx286_tgt, $I10
+    unless $I11, rx286_fail
+    inc rx286_pos
+  # rx subrule "ws" subtype=method negate=
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
+.annotate "line", 168
   # rx subrule "xblock" subtype=capture negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."xblock"()
-    unless $P10, rx283_fail
-    rx283_cur."!mark_push"(0, -1, 0, $P10)
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."xblock"()
+    unless $P10, rx286_fail
+    rx286_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx283_pos = $P10."pos"()
+    rx286_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx283_cur."!cursor_pos"(rx283_pos)
-    $P10 = rx283_cur."ws"()
-    unless $P10, rx283_fail
-    rx283_pos = $P10."pos"()
-.annotate "line", 162
+    rx286_cur."!cursor_pos"(rx286_pos)
+    $P10 = rx286_cur."ws"()
+    unless $P10, rx286_fail
+    rx286_pos = $P10."pos"()
+.annotate "line", 166
   # rx pass
-    rx283_cur."!cursor_pass"(rx283_pos, "statement_control:sym<while>")
-    rx283_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx283_pos)
-    .return (rx283_cur)
-  rx283_fail:
+    rx286_cur."!cursor_pass"(rx286_pos, "statement_control:sym<while>")
+    rx286_cur."!cursor_debug"("PASS  ", "statement_control:sym<while>", " at pos=", rx286_pos)
+    .return (rx286_cur)
+  rx286_fail:
 .annotate "line", 4
-    (rx283_rep, rx283_pos, $I10, $P10) = rx283_cur."!mark_fail"(0)
-    lt rx283_pos, -1, rx283_done
-    eq rx283_pos, -1, rx283_fail
+    (rx286_rep, rx286_pos, $I10, $P10) = rx286_cur."!mark_fail"(0)
+    lt rx286_pos, -1, rx286_done
+    eq rx286_pos, -1, rx286_fail
     jump $I10
-  rx283_done:
-    rx283_cur."!cursor_fail"()
-    rx283_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
-    .return (rx283_cur)
+  rx286_done:
+    rx286_cur."!cursor_fail"()
+    rx286_cur."!cursor_debug"("FAIL  ", "statement_control:sym<while>")
+    .return (rx286_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1271336396.90314") :method
 .annotate "line", 4
-    new $P285, "ResizablePMCArray"
-    push $P285, "until"
-    push $P285, "while"
-    .return ($P285)
+    new $P288, "ResizablePMCArray"
+    push $P288, "until"
+    push $P288, "while"
+    .return ($P288)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("67_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<repeat>"  :subid("67_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx292_tgt
-    .local int rx292_pos
-    .local int rx292_off
-    .local int rx292_eos
-    .local int rx292_rep
-    .local pmc rx292_cur
-    (rx292_cur, rx292_pos, rx292_tgt) = self."!cursor_start"()
-    rx292_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
-    .lex unicode:"$\x{a2}", rx292_cur
+    .local string rx295_tgt
+    .local int rx295_pos
+    .local int rx295_off
+    .local int rx295_eos
+    .local int rx295_rep
+    .local pmc rx295_cur
+    (rx295_cur, rx295_pos, rx295_tgt) = self."!cursor_start"()
+    rx295_cur."!cursor_debug"("START ", "statement_control:sym<repeat>")
+    .lex unicode:"$\x{a2}", rx295_cur
     .local pmc match
     .lex "$/", match
-    length rx292_eos, rx292_tgt
-    set rx292_off, 0
-    lt rx292_pos, 2, rx292_start
-    sub rx292_off, rx292_pos, 1
-    substr rx292_tgt, rx292_tgt, rx292_off
-  rx292_start:
+    length rx295_eos, rx295_tgt
+    set rx295_off, 0
+    lt rx295_pos, 2, rx295_start
+    sub rx295_off, rx295_pos, 1
+    substr rx295_tgt, rx295_tgt, rx295_off
+  rx295_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan295_done
-    goto rxscan295_scan
-  rxscan295_loop:
-    ($P10) = rx292_cur."from"()
+    ne $I10, -1, rxscan298_done
+    goto rxscan298_scan
+  rxscan298_loop:
+    ($P10) = rx295_cur."from"()
     inc $P10
-    set rx292_pos, $P10
-    ge rx292_pos, rx292_eos, rxscan295_done
-  rxscan295_scan:
-    set_addr $I10, rxscan295_loop
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  rxscan295_done:
-.annotate "line", 168
+    set rx295_pos, $P10
+    ge rx295_pos, rx295_eos, rxscan298_done
+  rxscan298_scan:
+    set_addr $I10, rxscan298_loop
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  rxscan298_done:
+.annotate "line", 172
   # rx subcapture "sym"
-    set_addr $I10, rxcap_296_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_299_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "repeat"
-    add $I11, rx292_pos, 6
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 6
-    ne $S10, "repeat", rx292_fail
-    add rx292_pos, 6
-    set_addr $I10, rxcap_296_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx295_pos, 6
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 6
+    ne $S10, "repeat", rx295_fail
+    add rx295_pos, 6
+    set_addr $I10, rxcap_299_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_296_done
-  rxcap_296_fail:
-    goto rx292_fail
-  rxcap_296_done:
+    goto rxcap_299_done
+  rxcap_299_fail:
+    goto rx295_fail
+  rxcap_299_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  alt298_0:
-.annotate "line", 169
-    set_addr $I10, alt298_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-.annotate "line", 170
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+  alt301_0:
+.annotate "line", 173
+    set_addr $I10, alt301_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+.annotate "line", 174
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subcapture "wu"
-    set_addr $I10, rxcap_301_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  alt300_0:
-    set_addr $I10, alt300_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_304_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  alt303_0:
+    set_addr $I10, alt303_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "while"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "while", rx292_fail
-    add rx292_pos, 5
-    goto alt300_end
-  alt300_1:
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "while", rx295_fail
+    add rx295_pos, 5
+    goto alt303_end
+  alt303_1:
   # rx literal  "until"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "until", rx292_fail
-    add rx292_pos, 5
-  alt300_end:
-    set_addr $I10, rxcap_301_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "until", rx295_fail
+    add rx295_pos, 5
+  alt303_end:
+    set_addr $I10, rxcap_304_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("wu")
-    goto rxcap_301_done
-  rxcap_301_fail:
-    goto rx292_fail
-  rxcap_301_done:
+    goto rxcap_304_done
+  rxcap_304_fail:
+    goto rx295_fail
+  rxcap_304_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "xblock" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."xblock"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."xblock"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-    goto alt298_end
-  alt298_1:
-.annotate "line", 171
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+    goto alt301_end
+  alt301_1:
+.annotate "line", 175
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "pblock" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."pblock"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."pblock"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subcapture "wu"
-    set_addr $I10, rxcap_307_fail
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
-  alt306_0:
-    set_addr $I10, alt306_1
-    rx292_cur."!mark_push"(0, rx292_pos, $I10)
+    set_addr $I10, rxcap_310_fail
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
+  alt309_0:
+    set_addr $I10, alt309_1
+    rx295_cur."!mark_push"(0, rx295_pos, $I10)
   # rx literal  "while"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "while", rx292_fail
-    add rx292_pos, 5
-    goto alt306_end
-  alt306_1:
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "while", rx295_fail
+    add rx295_pos, 5
+    goto alt309_end
+  alt309_1:
   # rx literal  "until"
-    add $I11, rx292_pos, 5
-    gt $I11, rx292_eos, rx292_fail
-    sub $I11, rx292_pos, rx292_off
-    substr $S10, rx292_tgt, $I11, 5
-    ne $S10, "until", rx292_fail
-    add rx292_pos, 5
-  alt306_end:
-    set_addr $I10, rxcap_307_fail
-    ($I12, $I11) = rx292_cur."!mark_peek"($I10)
-    rx292_cur."!cursor_pos"($I11)
-    ($P10) = rx292_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx292_pos, "")
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx295_pos, 5
+    gt $I11, rx295_eos, rx295_fail
+    sub $I11, rx295_pos, rx295_off
+    substr $S10, rx295_tgt, $I11, 5
+    ne $S10, "until", rx295_fail
+    add rx295_pos, 5
+  alt309_end:
+    set_addr $I10, rxcap_310_fail
+    ($I12, $I11) = rx295_cur."!mark_peek"($I10)
+    rx295_cur."!cursor_pos"($I11)
+    ($P10) = rx295_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx295_pos, "")
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("wu")
-    goto rxcap_307_done
-  rxcap_307_fail:
-    goto rx292_fail
-  rxcap_307_done:
+    goto rxcap_310_done
+  rxcap_310_fail:
+    goto rx295_fail
+  rxcap_310_done:
   # rx charclass s
-    ge rx292_pos, rx292_eos, rx292_fail
-    sub $I10, rx292_pos, rx292_off
-    is_cclass $I11, 32, rx292_tgt, $I10
-    unless $I11, rx292_fail
-    inc rx292_pos
-  # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
+    ge rx295_pos, rx295_eos, rx295_fail
+    sub $I10, rx295_pos, rx295_off
+    is_cclass $I11, 32, rx295_tgt, $I10
+    unless $I11, rx295_fail
+    inc rx295_pos
+  # rx subrule "ws" subtype=method negate=
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."EXPR"()
-    unless $P10, rx292_fail
-    rx292_cur."!mark_push"(0, -1, 0, $P10)
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."EXPR"()
+    unless $P10, rx295_fail
+    rx295_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx292_pos = $P10."pos"()
+    rx295_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-  alt298_end:
-.annotate "line", 172
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+  alt301_end:
+.annotate "line", 176
   # rx subrule "ws" subtype=method negate=
-    rx292_cur."!cursor_pos"(rx292_pos)
-    $P10 = rx292_cur."ws"()
-    unless $P10, rx292_fail
-    rx292_pos = $P10."pos"()
-.annotate "line", 167
+    rx295_cur."!cursor_pos"(rx295_pos)
+    $P10 = rx295_cur."ws"()
+    unless $P10, rx295_fail
+    rx295_pos = $P10."pos"()
+.annotate "line", 171
   # rx pass
-    rx292_cur."!cursor_pass"(rx292_pos, "statement_control:sym<repeat>")
-    rx292_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx292_pos)
-    .return (rx292_cur)
-  rx292_fail:
+    rx295_cur."!cursor_pass"(rx295_pos, "statement_control:sym<repeat>")
+    rx295_cur."!cursor_debug"("PASS  ", "statement_control:sym<repeat>", " at pos=", rx295_pos)
+    .return (rx295_cur)
+  rx295_fail:
 .annotate "line", 4
-    (rx292_rep, rx292_pos, $I10, $P10) = rx292_cur."!mark_fail"(0)
-    lt rx292_pos, -1, rx292_done
-    eq rx292_pos, -1, rx292_fail
+    (rx295_rep, rx295_pos, $I10, $P10) = rx295_cur."!mark_fail"(0)
+    lt rx295_pos, -1, rx295_done
+    eq rx295_pos, -1, rx295_fail
     jump $I10
-  rx292_done:
-    rx292_cur."!cursor_fail"()
-    rx292_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
-    .return (rx292_cur)
+  rx295_done:
+    rx295_cur."!cursor_fail"()
+    rx295_cur."!cursor_debug"("FAIL  ", "statement_control:sym<repeat>")
+    .return (rx295_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1271336396.90314") :method
 .annotate "line", 4
-    new $P294, "ResizablePMCArray"
-    push $P294, "repeat"
-    .return ($P294)
+    new $P297, "ResizablePMCArray"
+    push $P297, "repeat"
+    .return ($P297)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("69_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<for>"  :subid("69_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx312_tgt
-    .local int rx312_pos
-    .local int rx312_off
-    .local int rx312_eos
-    .local int rx312_rep
-    .local pmc rx312_cur
-    (rx312_cur, rx312_pos, rx312_tgt) = self."!cursor_start"()
-    rx312_cur."!cursor_debug"("START ", "statement_control:sym<for>")
-    .lex unicode:"$\x{a2}", rx312_cur
-    .local pmc match
-    .lex "$/", match
-    length rx312_eos, rx312_tgt
-    set rx312_off, 0
-    lt rx312_pos, 2, rx312_start
-    sub rx312_off, rx312_pos, 1
-    substr rx312_tgt, rx312_tgt, rx312_off
-  rx312_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan315_done
-    goto rxscan315_scan
-  rxscan315_loop:
-    ($P10) = rx312_cur."from"()
-    inc $P10
-    set rx312_pos, $P10
-    ge rx312_pos, rx312_eos, rxscan315_done
-  rxscan315_scan:
-    set_addr $I10, rxscan315_loop
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
-  rxscan315_done:
-.annotate "line", 176
+    .local string rx315_tgt
+    .local int rx315_pos
+    .local int rx315_off
+    .local int rx315_eos
+    .local int rx315_rep
+    .local pmc rx315_cur
+    (rx315_cur, rx315_pos, rx315_tgt) = self."!cursor_start"()
+    rx315_cur."!cursor_debug"("START ", "statement_control:sym<for>")
+    .lex unicode:"$\x{a2}", rx315_cur
+    .local pmc match
+    .lex "$/", match
+    length rx315_eos, rx315_tgt
+    set rx315_off, 0
+    lt rx315_pos, 2, rx315_start
+    sub rx315_off, rx315_pos, 1
+    substr rx315_tgt, rx315_tgt, rx315_off
+  rx315_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan318_done
+    goto rxscan318_scan
+  rxscan318_loop:
+    ($P10) = rx315_cur."from"()
+    inc $P10
+    set rx315_pos, $P10
+    ge rx315_pos, rx315_eos, rxscan318_done
+  rxscan318_scan:
+    set_addr $I10, rxscan318_loop
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
+  rxscan318_done:
+.annotate "line", 180
   # rx subcapture "sym"
-    set_addr $I10, rxcap_316_fail
-    rx312_cur."!mark_push"(0, rx312_pos, $I10)
+    set_addr $I10, rxcap_319_fail
+    rx315_cur."!mark_push"(0, rx315_pos, $I10)
   # rx literal  "for"
-    add $I11, rx312_pos, 3
-    gt $I11, rx312_eos, rx312_fail
-    sub $I11, rx312_pos, rx312_off
-    substr $S10, rx312_tgt, $I11, 3
-    ne $S10, "for", rx312_fail
-    add rx312_pos, 3
-    set_addr $I10, rxcap_316_fail
-    ($I12, $I11) = rx312_cur."!mark_peek"($I10)
-    rx312_cur."!cursor_pos"($I11)
-    ($P10) = rx312_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx312_pos, "")
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx315_pos, 3
+    gt $I11, rx315_eos, rx315_fail
+    sub $I11, rx315_pos, rx315_off
+    substr $S10, rx315_tgt, $I11, 3
+    ne $S10, "for", rx315_fail
+    add rx315_pos, 3
+    set_addr $I10, rxcap_319_fail
+    ($I12, $I11) = rx315_cur."!mark_peek"($I10)
+    rx315_cur."!cursor_pos"($I11)
+    ($P10) = rx315_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx315_pos, "")
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_316_done
-  rxcap_316_fail:
-    goto rx312_fail
-  rxcap_316_done:
+    goto rxcap_319_done
+  rxcap_319_fail:
+    goto rx315_fail
+  rxcap_319_done:
   # rx charclass s
-    ge rx312_pos, rx312_eos, rx312_fail
-    sub $I10, rx312_pos, rx312_off
-    is_cclass $I11, 32, rx312_tgt, $I10
-    unless $I11, rx312_fail
-    inc rx312_pos
-  # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
-.annotate "line", 177
+    ge rx315_pos, rx315_eos, rx315_fail
+    sub $I10, rx315_pos, rx315_off
+    is_cclass $I11, 32, rx315_tgt, $I10
+    unless $I11, rx315_fail
+    inc rx315_pos
+  # rx subrule "ws" subtype=method negate=
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."ws"()
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate "line", 181
   # rx subrule "xblock" subtype=capture negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."xblock"()
-    unless $P10, rx312_fail
-    rx312_cur."!mark_push"(0, -1, 0, $P10)
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."xblock"()
+    unless $P10, rx315_fail
+    rx315_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("xblock")
-    rx312_pos = $P10."pos"()
+    rx315_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx312_cur."!cursor_pos"(rx312_pos)
-    $P10 = rx312_cur."ws"()
-    unless $P10, rx312_fail
-    rx312_pos = $P10."pos"()
-.annotate "line", 175
+    rx315_cur."!cursor_pos"(rx315_pos)
+    $P10 = rx315_cur."ws"()
+    unless $P10, rx315_fail
+    rx315_pos = $P10."pos"()
+.annotate "line", 179
   # rx pass
-    rx312_cur."!cursor_pass"(rx312_pos, "statement_control:sym<for>")
-    rx312_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx312_pos)
-    .return (rx312_cur)
-  rx312_fail:
+    rx315_cur."!cursor_pass"(rx315_pos, "statement_control:sym<for>")
+    rx315_cur."!cursor_debug"("PASS  ", "statement_control:sym<for>", " at pos=", rx315_pos)
+    .return (rx315_cur)
+  rx315_fail:
 .annotate "line", 4
-    (rx312_rep, rx312_pos, $I10, $P10) = rx312_cur."!mark_fail"(0)
-    lt rx312_pos, -1, rx312_done
-    eq rx312_pos, -1, rx312_fail
+    (rx315_rep, rx315_pos, $I10, $P10) = rx315_cur."!mark_fail"(0)
+    lt rx315_pos, -1, rx315_done
+    eq rx315_pos, -1, rx315_fail
     jump $I10
-  rx312_done:
-    rx312_cur."!cursor_fail"()
-    rx312_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
-    .return (rx312_cur)
+  rx315_done:
+    rx315_cur."!cursor_fail"()
+    rx315_cur."!cursor_debug"("FAIL  ", "statement_control:sym<for>")
+    .return (rx315_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1271336396.90314") :method
 .annotate "line", 4
-    new $P314, "ResizablePMCArray"
-    push $P314, "for"
-    .return ($P314)
+    new $P317, "ResizablePMCArray"
+    push $P317, "for"
+    .return ($P317)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("71_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<CATCH>"  :subid("71_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx320_tgt
-    .local int rx320_pos
-    .local int rx320_off
-    .local int rx320_eos
-    .local int rx320_rep
-    .local pmc rx320_cur
-    (rx320_cur, rx320_pos, rx320_tgt) = self."!cursor_start"()
-    rx320_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
-    .lex unicode:"$\x{a2}", rx320_cur
+    .local string rx323_tgt
+    .local int rx323_pos
+    .local int rx323_off
+    .local int rx323_eos
+    .local int rx323_rep
+    .local pmc rx323_cur
+    (rx323_cur, rx323_pos, rx323_tgt) = self."!cursor_start"()
+    rx323_cur."!cursor_debug"("START ", "statement_control:sym<CATCH>")
+    .lex unicode:"$\x{a2}", rx323_cur
     .local pmc match
     .lex "$/", match
-    length rx320_eos, rx320_tgt
-    set rx320_off, 0
-    lt rx320_pos, 2, rx320_start
-    sub rx320_off, rx320_pos, 1
-    substr rx320_tgt, rx320_tgt, rx320_off
-  rx320_start:
+    length rx323_eos, rx323_tgt
+    set rx323_off, 0
+    lt rx323_pos, 2, rx323_start
+    sub rx323_off, rx323_pos, 1
+    substr rx323_tgt, rx323_tgt, rx323_off
+  rx323_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan323_done
-    goto rxscan323_scan
-  rxscan323_loop:
-    ($P10) = rx320_cur."from"()
+    ne $I10, -1, rxscan326_done
+    goto rxscan326_scan
+  rxscan326_loop:
+    ($P10) = rx323_cur."from"()
     inc $P10
-    set rx320_pos, $P10
-    ge rx320_pos, rx320_eos, rxscan323_done
-  rxscan323_scan:
-    set_addr $I10, rxscan323_loop
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
-  rxscan323_done:
-.annotate "line", 181
+    set rx323_pos, $P10
+    ge rx323_pos, rx323_eos, rxscan326_done
+  rxscan326_scan:
+    set_addr $I10, rxscan326_loop
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
+  rxscan326_done:
+.annotate "line", 185
   # rx subcapture "sym"
-    set_addr $I10, rxcap_324_fail
-    rx320_cur."!mark_push"(0, rx320_pos, $I10)
+    set_addr $I10, rxcap_327_fail
+    rx323_cur."!mark_push"(0, rx323_pos, $I10)
   # rx literal  "CATCH"
-    add $I11, rx320_pos, 5
-    gt $I11, rx320_eos, rx320_fail
-    sub $I11, rx320_pos, rx320_off
-    substr $S10, rx320_tgt, $I11, 5
-    ne $S10, "CATCH", rx320_fail
-    add rx320_pos, 5
-    set_addr $I10, rxcap_324_fail
-    ($I12, $I11) = rx320_cur."!mark_peek"($I10)
-    rx320_cur."!cursor_pos"($I11)
-    ($P10) = rx320_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx320_pos, "")
-    rx320_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx323_pos, 5
+    gt $I11, rx323_eos, rx323_fail
+    sub $I11, rx323_pos, rx323_off
+    substr $S10, rx323_tgt, $I11, 5
+    ne $S10, "CATCH", rx323_fail
+    add rx323_pos, 5
+    set_addr $I10, rxcap_327_fail
+    ($I12, $I11) = rx323_cur."!mark_peek"($I10)
+    rx323_cur."!cursor_pos"($I11)
+    ($P10) = rx323_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx323_pos, "")
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_324_done
-  rxcap_324_fail:
-    goto rx320_fail
-  rxcap_324_done:
+    goto rxcap_327_done
+  rxcap_327_fail:
+    goto rx323_fail
+  rxcap_327_done:
   # rx charclass s
-    ge rx320_pos, rx320_eos, rx320_fail
-    sub $I10, rx320_pos, rx320_off
-    is_cclass $I11, 32, rx320_tgt, $I10
-    unless $I11, rx320_fail
-    inc rx320_pos
-  # rx subrule "ws" subtype=method negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."ws"()
-    unless $P10, rx320_fail
-    rx320_pos = $P10."pos"()
-.annotate "line", 182
+    ge rx323_pos, rx323_eos, rx323_fail
+    sub $I10, rx323_pos, rx323_off
+    is_cclass $I11, 32, rx323_tgt, $I10
+    unless $I11, rx323_fail
+    inc rx323_pos
+  # rx subrule "ws" subtype=method negate=
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+.annotate "line", 186
   # rx subrule "block" subtype=capture negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."block"()
-    unless $P10, rx320_fail
-    rx320_cur."!mark_push"(0, -1, 0, $P10)
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."block"()
+    unless $P10, rx323_fail
+    rx323_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx320_pos = $P10."pos"()
+    rx323_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx320_cur."!cursor_pos"(rx320_pos)
-    $P10 = rx320_cur."ws"()
-    unless $P10, rx320_fail
-    rx320_pos = $P10."pos"()
-.annotate "line", 180
+    rx323_cur."!cursor_pos"(rx323_pos)
+    $P10 = rx323_cur."ws"()
+    unless $P10, rx323_fail
+    rx323_pos = $P10."pos"()
+.annotate "line", 184
   # rx pass
-    rx320_cur."!cursor_pass"(rx320_pos, "statement_control:sym<CATCH>")
-    rx320_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx320_pos)
-    .return (rx320_cur)
-  rx320_fail:
+    rx323_cur."!cursor_pass"(rx323_pos, "statement_control:sym<CATCH>")
+    rx323_cur."!cursor_debug"("PASS  ", "statement_control:sym<CATCH>", " at pos=", rx323_pos)
+    .return (rx323_cur)
+  rx323_fail:
 .annotate "line", 4
-    (rx320_rep, rx320_pos, $I10, $P10) = rx320_cur."!mark_fail"(0)
-    lt rx320_pos, -1, rx320_done
-    eq rx320_pos, -1, rx320_fail
+    (rx323_rep, rx323_pos, $I10, $P10) = rx323_cur."!mark_fail"(0)
+    lt rx323_pos, -1, rx323_done
+    eq rx323_pos, -1, rx323_fail
     jump $I10
-  rx320_done:
-    rx320_cur."!cursor_fail"()
-    rx320_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
-    .return (rx320_cur)
+  rx323_done:
+    rx323_cur."!cursor_fail"()
+    rx323_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CATCH>")
+    .return (rx323_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1271336396.90314") :method
 .annotate "line", 4
-    new $P322, "ResizablePMCArray"
-    push $P322, "CATCH"
-    .return ($P322)
+    new $P325, "ResizablePMCArray"
+    push $P325, "CATCH"
+    .return ($P325)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("73_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_control:sym<CONTROL>"  :subid("73_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx328_tgt
-    .local int rx328_pos
-    .local int rx328_off
-    .local int rx328_eos
-    .local int rx328_rep
-    .local pmc rx328_cur
-    (rx328_cur, rx328_pos, rx328_tgt) = self."!cursor_start"()
-    rx328_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
-    .lex unicode:"$\x{a2}", rx328_cur
+    .local string rx331_tgt
+    .local int rx331_pos
+    .local int rx331_off
+    .local int rx331_eos
+    .local int rx331_rep
+    .local pmc rx331_cur
+    (rx331_cur, rx331_pos, rx331_tgt) = self."!cursor_start"()
+    rx331_cur."!cursor_debug"("START ", "statement_control:sym<CONTROL>")
+    .lex unicode:"$\x{a2}", rx331_cur
     .local pmc match
     .lex "$/", match
-    length rx328_eos, rx328_tgt
-    set rx328_off, 0
-    lt rx328_pos, 2, rx328_start
-    sub rx328_off, rx328_pos, 1
-    substr rx328_tgt, rx328_tgt, rx328_off
-  rx328_start:
+    length rx331_eos, rx331_tgt
+    set rx331_off, 0
+    lt rx331_pos, 2, rx331_start
+    sub rx331_off, rx331_pos, 1
+    substr rx331_tgt, rx331_tgt, rx331_off
+  rx331_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan331_done
-    goto rxscan331_scan
-  rxscan331_loop:
-    ($P10) = rx328_cur."from"()
+    ne $I10, -1, rxscan334_done
+    goto rxscan334_scan
+  rxscan334_loop:
+    ($P10) = rx331_cur."from"()
     inc $P10
-    set rx328_pos, $P10
-    ge rx328_pos, rx328_eos, rxscan331_done
-  rxscan331_scan:
-    set_addr $I10, rxscan331_loop
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
-  rxscan331_done:
-.annotate "line", 186
+    set rx331_pos, $P10
+    ge rx331_pos, rx331_eos, rxscan334_done
+  rxscan334_scan:
+    set_addr $I10, rxscan334_loop
+    rx331_cur."!mark_push"(0, rx331_pos, $I10)
+  rxscan334_done:
+.annotate "line", 190
   # rx subcapture "sym"
-    set_addr $I10, rxcap_332_fail
-    rx328_cur."!mark_push"(0, rx328_pos, $I10)
+    set_addr $I10, rxcap_335_fail
+    rx331_cur."!mark_push"(0, rx331_pos, $I10)
   # rx literal  "CONTROL"
-    add $I11, rx328_pos, 7
-    gt $I11, rx328_eos, rx328_fail
-    sub $I11, rx328_pos, rx328_off
-    substr $S10, rx328_tgt, $I11, 7
-    ne $S10, "CONTROL", rx328_fail
-    add rx328_pos, 7
-    set_addr $I10, rxcap_332_fail
-    ($I12, $I11) = rx328_cur."!mark_peek"($I10)
-    rx328_cur."!cursor_pos"($I11)
-    ($P10) = rx328_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx328_pos, "")
-    rx328_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx331_pos, 7
+    gt $I11, rx331_eos, rx331_fail
+    sub $I11, rx331_pos, rx331_off
+    substr $S10, rx331_tgt, $I11, 7
+    ne $S10, "CONTROL", rx331_fail
+    add rx331_pos, 7
+    set_addr $I10, rxcap_335_fail
+    ($I12, $I11) = rx331_cur."!mark_peek"($I10)
+    rx331_cur."!cursor_pos"($I11)
+    ($P10) = rx331_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx331_pos, "")
+    rx331_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_332_done
-  rxcap_332_fail:
-    goto rx328_fail
-  rxcap_332_done:
+    goto rxcap_335_done
+  rxcap_335_fail:
+    goto rx331_fail
+  rxcap_335_done:
   # rx charclass s
-    ge rx328_pos, rx328_eos, rx328_fail
-    sub $I10, rx328_pos, rx328_off
-    is_cclass $I11, 32, rx328_tgt, $I10
-    unless $I11, rx328_fail
-    inc rx328_pos
-  # rx subrule "ws" subtype=method negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."ws"()
-    unless $P10, rx328_fail
-    rx328_pos = $P10."pos"()
-.annotate "line", 187
+    ge rx331_pos, rx331_eos, rx331_fail
+    sub $I10, rx331_pos, rx331_off
+    is_cclass $I11, 32, rx331_tgt, $I10
+    unless $I11, rx331_fail
+    inc rx331_pos
+  # rx subrule "ws" subtype=method negate=
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."ws"()
+    unless $P10, rx331_fail
+    rx331_pos = $P10."pos"()
+.annotate "line", 191
   # rx subrule "block" subtype=capture negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."block"()
-    unless $P10, rx328_fail
-    rx328_cur."!mark_push"(0, -1, 0, $P10)
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."block"()
+    unless $P10, rx331_fail
+    rx331_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx328_pos = $P10."pos"()
+    rx331_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx328_cur."!cursor_pos"(rx328_pos)
-    $P10 = rx328_cur."ws"()
-    unless $P10, rx328_fail
-    rx328_pos = $P10."pos"()
-.annotate "line", 185
+    rx331_cur."!cursor_pos"(rx331_pos)
+    $P10 = rx331_cur."ws"()
+    unless $P10, rx331_fail
+    rx331_pos = $P10."pos"()
+.annotate "line", 189
   # rx pass
-    rx328_cur."!cursor_pass"(rx328_pos, "statement_control:sym<CONTROL>")
-    rx328_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx328_pos)
-    .return (rx328_cur)
-  rx328_fail:
+    rx331_cur."!cursor_pass"(rx331_pos, "statement_control:sym<CONTROL>")
+    rx331_cur."!cursor_debug"("PASS  ", "statement_control:sym<CONTROL>", " at pos=", rx331_pos)
+    .return (rx331_cur)
+  rx331_fail:
 .annotate "line", 4
-    (rx328_rep, rx328_pos, $I10, $P10) = rx328_cur."!mark_fail"(0)
-    lt rx328_pos, -1, rx328_done
-    eq rx328_pos, -1, rx328_fail
+    (rx331_rep, rx331_pos, $I10, $P10) = rx331_cur."!mark_fail"(0)
+    lt rx331_pos, -1, rx331_done
+    eq rx331_pos, -1, rx331_fail
     jump $I10
-  rx328_done:
-    rx328_cur."!cursor_fail"()
-    rx328_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
-    .return (rx328_cur)
+  rx331_done:
+    rx331_cur."!cursor_fail"()
+    rx331_cur."!cursor_debug"("FAIL  ", "statement_control:sym<CONTROL>")
+    .return (rx331_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1267204702.05125") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1271336396.90314") :method
 .annotate "line", 4
-    new $P330, "ResizablePMCArray"
-    push $P330, "CONTROL"
-    .return ($P330)
+    new $P333, "ResizablePMCArray"
+    push $P333, "CONTROL"
+    .return ($P333)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("75_1267204702.05125") :method
-.annotate "line", 190
-    $P336 = self."!protoregex"("statement_prefix")
-    .return ($P336)
+.sub "statement_prefix"  :subid("75_1271336396.90314") :method
+.annotate "line", 194
+    $P339 = self."!protoregex"("statement_prefix")
+    .return ($P339)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("76_1267204702.05125") :method
-.annotate "line", 190
-    $P338 = self."!PREFIX__!protoregex"("statement_prefix")
-    .return ($P338)
+.sub "!PREFIX__statement_prefix"  :subid("76_1271336396.90314") :method
+.annotate "line", 194
+    $P341 = self."!PREFIX__!protoregex"("statement_prefix")
+    .return ($P341)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("77_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_prefix:sym<INIT>"  :subid("77_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx340_tgt
-    .local int rx340_pos
-    .local int rx340_off
-    .local int rx340_eos
-    .local int rx340_rep
-    .local pmc rx340_cur
-    (rx340_cur, rx340_pos, rx340_tgt) = self."!cursor_start"()
-    rx340_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
-    .lex unicode:"$\x{a2}", rx340_cur
-    .local pmc match
-    .lex "$/", match
-    length rx340_eos, rx340_tgt
-    set rx340_off, 0
-    lt rx340_pos, 2, rx340_start
-    sub rx340_off, rx340_pos, 1
-    substr rx340_tgt, rx340_tgt, rx340_off
-  rx340_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan344_done
-    goto rxscan344_scan
-  rxscan344_loop:
-    ($P10) = rx340_cur."from"()
-    inc $P10
-    set rx340_pos, $P10
-    ge rx340_pos, rx340_eos, rxscan344_done
-  rxscan344_scan:
-    set_addr $I10, rxscan344_loop
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
-  rxscan344_done:
-.annotate "line", 191
+    .local string rx343_tgt
+    .local int rx343_pos
+    .local int rx343_off
+    .local int rx343_eos
+    .local int rx343_rep
+    .local pmc rx343_cur
+    (rx343_cur, rx343_pos, rx343_tgt) = self."!cursor_start"()
+    rx343_cur."!cursor_debug"("START ", "statement_prefix:sym<INIT>")
+    .lex unicode:"$\x{a2}", rx343_cur
+    .local pmc match
+    .lex "$/", match
+    length rx343_eos, rx343_tgt
+    set rx343_off, 0
+    lt rx343_pos, 2, rx343_start
+    sub rx343_off, rx343_pos, 1
+    substr rx343_tgt, rx343_tgt, rx343_off
+  rx343_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan347_done
+    goto rxscan347_scan
+  rxscan347_loop:
+    ($P10) = rx343_cur."from"()
+    inc $P10
+    set rx343_pos, $P10
+    ge rx343_pos, rx343_eos, rxscan347_done
+  rxscan347_scan:
+    set_addr $I10, rxscan347_loop
+    rx343_cur."!mark_push"(0, rx343_pos, $I10)
+  rxscan347_done:
+.annotate "line", 195
   # rx subcapture "sym"
-    set_addr $I10, rxcap_345_fail
-    rx340_cur."!mark_push"(0, rx340_pos, $I10)
+    set_addr $I10, rxcap_348_fail
+    rx343_cur."!mark_push"(0, rx343_pos, $I10)
   # rx literal  "INIT"
-    add $I11, rx340_pos, 4
-    gt $I11, rx340_eos, rx340_fail
-    sub $I11, rx340_pos, rx340_off
-    substr $S10, rx340_tgt, $I11, 4
-    ne $S10, "INIT", rx340_fail
-    add rx340_pos, 4
-    set_addr $I10, rxcap_345_fail
-    ($I12, $I11) = rx340_cur."!mark_peek"($I10)
-    rx340_cur."!cursor_pos"($I11)
-    ($P10) = rx340_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx340_pos, "")
-    rx340_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx343_pos, 4
+    gt $I11, rx343_eos, rx343_fail
+    sub $I11, rx343_pos, rx343_off
+    substr $S10, rx343_tgt, $I11, 4
+    ne $S10, "INIT", rx343_fail
+    add rx343_pos, 4
+    set_addr $I10, rxcap_348_fail
+    ($I12, $I11) = rx343_cur."!mark_peek"($I10)
+    rx343_cur."!cursor_pos"($I11)
+    ($P10) = rx343_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx343_pos, "")
+    rx343_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_345_done
-  rxcap_345_fail:
-    goto rx340_fail
-  rxcap_345_done:
+    goto rxcap_348_done
+  rxcap_348_fail:
+    goto rx343_fail
+  rxcap_348_done:
   # rx subrule "blorst" subtype=capture negate=
-    rx340_cur."!cursor_pos"(rx340_pos)
-    $P10 = rx340_cur."blorst"()
-    unless $P10, rx340_fail
-    rx340_cur."!mark_push"(0, -1, 0, $P10)
+    rx343_cur."!cursor_pos"(rx343_pos)
+    $P10 = rx343_cur."blorst"()
+    unless $P10, rx343_fail
+    rx343_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx340_pos = $P10."pos"()
+    rx343_pos = $P10."pos"()
   # rx pass
-    rx340_cur."!cursor_pass"(rx340_pos, "statement_prefix:sym<INIT>")
-    rx340_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx340_pos)
-    .return (rx340_cur)
-  rx340_fail:
+    rx343_cur."!cursor_pass"(rx343_pos, "statement_prefix:sym<INIT>")
+    rx343_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<INIT>", " at pos=", rx343_pos)
+    .return (rx343_cur)
+  rx343_fail:
 .annotate "line", 4
-    (rx340_rep, rx340_pos, $I10, $P10) = rx340_cur."!mark_fail"(0)
-    lt rx340_pos, -1, rx340_done
-    eq rx340_pos, -1, rx340_fail
+    (rx343_rep, rx343_pos, $I10, $P10) = rx343_cur."!mark_fail"(0)
+    lt rx343_pos, -1, rx343_done
+    eq rx343_pos, -1, rx343_fail
     jump $I10
-  rx340_done:
-    rx340_cur."!cursor_fail"()
-    rx340_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
-    .return (rx340_cur)
+  rx343_done:
+    rx343_cur."!cursor_fail"()
+    rx343_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<INIT>")
+    .return (rx343_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1267204702.05125") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1271336396.90314") :method
 .annotate "line", 4
-    $P342 = self."!PREFIX__!subrule"("blorst", "INIT")
-    new $P343, "ResizablePMCArray"
-    push $P343, $P342
-    .return ($P343)
+    $P345 = self."!PREFIX__!subrule"("blorst", "INIT")
+    new $P346, "ResizablePMCArray"
+    push $P346, $P345
+    .return ($P346)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("79_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_prefix:sym<try>"  :subid("79_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx347_tgt
-    .local int rx347_pos
-    .local int rx347_off
-    .local int rx347_eos
-    .local int rx347_rep
-    .local pmc rx347_cur
-    (rx347_cur, rx347_pos, rx347_tgt) = self."!cursor_start"()
-    rx347_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
-    .lex unicode:"$\x{a2}", rx347_cur
-    .local pmc match
-    .lex "$/", match
-    length rx347_eos, rx347_tgt
-    set rx347_off, 0
-    lt rx347_pos, 2, rx347_start
-    sub rx347_off, rx347_pos, 1
-    substr rx347_tgt, rx347_tgt, rx347_off
-  rx347_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan351_done
-    goto rxscan351_scan
-  rxscan351_loop:
-    ($P10) = rx347_cur."from"()
-    inc $P10
-    set rx347_pos, $P10
-    ge rx347_pos, rx347_eos, rxscan351_done
-  rxscan351_scan:
-    set_addr $I10, rxscan351_loop
-    rx347_cur."!mark_push"(0, rx347_pos, $I10)
-  rxscan351_done:
-.annotate "line", 194
+    .local string rx350_tgt
+    .local int rx350_pos
+    .local int rx350_off
+    .local int rx350_eos
+    .local int rx350_rep
+    .local pmc rx350_cur
+    (rx350_cur, rx350_pos, rx350_tgt) = self."!cursor_start"()
+    rx350_cur."!cursor_debug"("START ", "statement_prefix:sym<try>")
+    .lex unicode:"$\x{a2}", rx350_cur
+    .local pmc match
+    .lex "$/", match
+    length rx350_eos, rx350_tgt
+    set rx350_off, 0
+    lt rx350_pos, 2, rx350_start
+    sub rx350_off, rx350_pos, 1
+    substr rx350_tgt, rx350_tgt, rx350_off
+  rx350_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan354_done
+    goto rxscan354_scan
+  rxscan354_loop:
+    ($P10) = rx350_cur."from"()
+    inc $P10
+    set rx350_pos, $P10
+    ge rx350_pos, rx350_eos, rxscan354_done
+  rxscan354_scan:
+    set_addr $I10, rxscan354_loop
+    rx350_cur."!mark_push"(0, rx350_pos, $I10)
+  rxscan354_done:
+.annotate "line", 198
   # rx subcapture "sym"
-    set_addr $I10, rxcap_352_fail
-    rx347_cur."!mark_push"(0, rx347_pos, $I10)
+    set_addr $I10, rxcap_355_fail
+    rx350_cur."!mark_push"(0, rx350_pos, $I10)
   # rx literal  "try"
-    add $I11, rx347_pos, 3
-    gt $I11, rx347_eos, rx347_fail
-    sub $I11, rx347_pos, rx347_off
-    substr $S10, rx347_tgt, $I11, 3
-    ne $S10, "try", rx347_fail
-    add rx347_pos, 3
-    set_addr $I10, rxcap_352_fail
-    ($I12, $I11) = rx347_cur."!mark_peek"($I10)
-    rx347_cur."!cursor_pos"($I11)
-    ($P10) = rx347_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx347_pos, "")
-    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx350_pos, 3
+    gt $I11, rx350_eos, rx350_fail
+    sub $I11, rx350_pos, rx350_off
+    substr $S10, rx350_tgt, $I11, 3
+    ne $S10, "try", rx350_fail
+    add rx350_pos, 3
+    set_addr $I10, rxcap_355_fail
+    ($I12, $I11) = rx350_cur."!mark_peek"($I10)
+    rx350_cur."!cursor_pos"($I11)
+    ($P10) = rx350_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx350_pos, "")
+    rx350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_352_done
-  rxcap_352_fail:
-    goto rx347_fail
-  rxcap_352_done:
-.annotate "line", 195
+    goto rxcap_355_done
+  rxcap_355_fail:
+    goto rx350_fail
+  rxcap_355_done:
+.annotate "line", 199
   # rx subrule "blorst" subtype=capture negate=
-    rx347_cur."!cursor_pos"(rx347_pos)
-    $P10 = rx347_cur."blorst"()
-    unless $P10, rx347_fail
-    rx347_cur."!mark_push"(0, -1, 0, $P10)
+    rx350_cur."!cursor_pos"(rx350_pos)
+    $P10 = rx350_cur."blorst"()
+    unless $P10, rx350_fail
+    rx350_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
-    rx347_pos = $P10."pos"()
-.annotate "line", 193
+    rx350_pos = $P10."pos"()
+.annotate "line", 197
   # rx pass
-    rx347_cur."!cursor_pass"(rx347_pos, "statement_prefix:sym<try>")
-    rx347_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx347_pos)
-    .return (rx347_cur)
-  rx347_fail:
+    rx350_cur."!cursor_pass"(rx350_pos, "statement_prefix:sym<try>")
+    rx350_cur."!cursor_debug"("PASS  ", "statement_prefix:sym<try>", " at pos=", rx350_pos)
+    .return (rx350_cur)
+  rx350_fail:
 .annotate "line", 4
-    (rx347_rep, rx347_pos, $I10, $P10) = rx347_cur."!mark_fail"(0)
-    lt rx347_pos, -1, rx347_done
-    eq rx347_pos, -1, rx347_fail
+    (rx350_rep, rx350_pos, $I10, $P10) = rx350_cur."!mark_fail"(0)
+    lt rx350_pos, -1, rx350_done
+    eq rx350_pos, -1, rx350_fail
     jump $I10
-  rx347_done:
-    rx347_cur."!cursor_fail"()
-    rx347_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
-    .return (rx347_cur)
+  rx350_done:
+    rx350_cur."!cursor_fail"()
+    rx350_cur."!cursor_debug"("FAIL  ", "statement_prefix:sym<try>")
+    .return (rx350_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1267204702.05125") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1271336396.90314") :method
 .annotate "line", 4
-    $P349 = self."!PREFIX__!subrule"("blorst", "try")
-    new $P350, "ResizablePMCArray"
-    push $P350, $P349
-    .return ($P350)
+    $P352 = self."!PREFIX__!subrule"("blorst", "try")
+    new $P353, "ResizablePMCArray"
+    push $P353, $P352
+    .return ($P353)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("81_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "blorst"  :subid("81_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx354_tgt
-    .local int rx354_pos
-    .local int rx354_off
-    .local int rx354_eos
-    .local int rx354_rep
-    .local pmc rx354_cur
-    (rx354_cur, rx354_pos, rx354_tgt) = self."!cursor_start"()
-    rx354_cur."!cursor_debug"("START ", "blorst")
-    .lex unicode:"$\x{a2}", rx354_cur
+    .local string rx357_tgt
+    .local int rx357_pos
+    .local int rx357_off
+    .local int rx357_eos
+    .local int rx357_rep
+    .local pmc rx357_cur
+    (rx357_cur, rx357_pos, rx357_tgt) = self."!cursor_start"()
+    rx357_cur."!cursor_debug"("START ", "blorst")
+    .lex unicode:"$\x{a2}", rx357_cur
     .local pmc match
     .lex "$/", match
-    length rx354_eos, rx354_tgt
-    set rx354_off, 0
-    lt rx354_pos, 2, rx354_start
-    sub rx354_off, rx354_pos, 1
-    substr rx354_tgt, rx354_tgt, rx354_off
-  rx354_start:
+    length rx357_eos, rx357_tgt
+    set rx357_off, 0
+    lt rx357_pos, 2, rx357_start
+    sub rx357_off, rx357_pos, 1
+    substr rx357_tgt, rx357_tgt, rx357_off
+  rx357_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan357_done
-    goto rxscan357_scan
-  rxscan357_loop:
-    ($P10) = rx354_cur."from"()
+    ne $I10, -1, rxscan360_done
+    goto rxscan360_scan
+  rxscan360_loop:
+    ($P10) = rx357_cur."from"()
     inc $P10
-    set rx354_pos, $P10
-    ge rx354_pos, rx354_eos, rxscan357_done
-  rxscan357_scan:
-    set_addr $I10, rxscan357_loop
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
-  rxscan357_done:
-.annotate "line", 199
+    set rx357_pos, $P10
+    ge rx357_pos, rx357_eos, rxscan360_done
+  rxscan360_scan:
+    set_addr $I10, rxscan360_loop
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
+  rxscan360_done:
+.annotate "line", 203
   # rx charclass s
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    is_cclass $I11, 32, rx354_tgt, $I10
-    unless $I11, rx354_fail
-    inc rx354_pos
-  # rx subrule "ws" subtype=method negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."ws"()
-    unless $P10, rx354_fail
-    rx354_pos = $P10."pos"()
-  alt358_0:
-    set_addr $I10, alt358_1
-    rx354_cur."!mark_push"(0, rx354_pos, $I10)
+    ge rx357_pos, rx357_eos, rx357_fail
+    sub $I10, rx357_pos, rx357_off
+    is_cclass $I11, 32, rx357_tgt, $I10
+    unless $I11, rx357_fail
+    inc rx357_pos
+  # rx subrule "ws" subtype=method negate=
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."ws"()
+    unless $P10, rx357_fail
+    rx357_pos = $P10."pos"()
+  alt361_0:
+    set_addr $I10, alt361_1
+    rx357_cur."!mark_push"(0, rx357_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx354_pos, rx354_eos, rx354_fail
-    sub $I10, rx354_pos, rx354_off
-    substr $S10, rx354_tgt, $I10, 1
+    ge rx357_pos, rx357_eos, rx357_fail
+    sub $I10, rx357_pos, rx357_off
+    substr $S10, rx357_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx354_fail
+    lt $I11, 0, rx357_fail
   # rx subrule "block" subtype=capture negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."block"()
-    unless $P10, rx354_fail
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."block"()
+    unless $P10, rx357_fail
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx354_pos = $P10."pos"()
-    goto alt358_end
-  alt358_1:
+    rx357_pos = $P10."pos"()
+    goto alt361_end
+  alt361_1:
   # rx subrule "statement" subtype=capture negate=
-    rx354_cur."!cursor_pos"(rx354_pos)
-    $P10 = rx354_cur."statement"()
-    unless $P10, rx354_fail
-    rx354_cur."!mark_push"(0, -1, 0, $P10)
+    rx357_cur."!cursor_pos"(rx357_pos)
+    $P10 = rx357_cur."statement"()
+    unless $P10, rx357_fail
+    rx357_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx354_pos = $P10."pos"()
-  alt358_end:
-.annotate "line", 198
+    rx357_pos = $P10."pos"()
+  alt361_end:
+.annotate "line", 202
   # rx pass
-    rx354_cur."!cursor_pass"(rx354_pos, "blorst")
-    rx354_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx354_pos)
-    .return (rx354_cur)
-  rx354_fail:
+    rx357_cur."!cursor_pass"(rx357_pos, "blorst")
+    rx357_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx357_pos)
+    .return (rx357_cur)
+  rx357_fail:
 .annotate "line", 4
-    (rx354_rep, rx354_pos, $I10, $P10) = rx354_cur."!mark_fail"(0)
-    lt rx354_pos, -1, rx354_done
-    eq rx354_pos, -1, rx354_fail
+    (rx357_rep, rx357_pos, $I10, $P10) = rx357_cur."!mark_fail"(0)
+    lt rx357_pos, -1, rx357_done
+    eq rx357_pos, -1, rx357_fail
     jump $I10
-  rx354_done:
-    rx354_cur."!cursor_fail"()
-    rx354_cur."!cursor_debug"("FAIL  ", "blorst")
-    .return (rx354_cur)
+  rx357_done:
+    rx357_cur."!cursor_fail"()
+    rx357_cur."!cursor_debug"("FAIL  ", "blorst")
+    .return (rx357_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("82_1267204702.05125") :method
+.sub "!PREFIX__blorst"  :subid("82_1271336396.90314") :method
 .annotate "line", 4
-    new $P356, "ResizablePMCArray"
-    push $P356, ""
-    .return ($P356)
+    new $P359, "ResizablePMCArray"
+    push $P359, ""
+    .return ($P359)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("83_1267204702.05125") :method
-.annotate "line", 204
-    $P360 = self."!protoregex"("statement_mod_cond")
-    .return ($P360)
+.sub "statement_mod_cond"  :subid("83_1271336396.90314") :method
+.annotate "line", 208
+    $P363 = self."!protoregex"("statement_mod_cond")
+    .return ($P363)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("84_1267204702.05125") :method
-.annotate "line", 204
-    $P362 = self."!PREFIX__!protoregex"("statement_mod_cond")
-    .return ($P362)
+.sub "!PREFIX__statement_mod_cond"  :subid("84_1271336396.90314") :method
+.annotate "line", 208
+    $P365 = self."!PREFIX__!protoregex"("statement_mod_cond")
+    .return ($P365)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("85_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_cond:sym<if>"  :subid("85_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx364_tgt
-    .local int rx364_pos
-    .local int rx364_off
-    .local int rx364_eos
-    .local int rx364_rep
-    .local pmc rx364_cur
-    (rx364_cur, rx364_pos, rx364_tgt) = self."!cursor_start"()
-    rx364_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
-    .lex unicode:"$\x{a2}", rx364_cur
-    .local pmc match
-    .lex "$/", match
-    length rx364_eos, rx364_tgt
-    set rx364_off, 0
-    lt rx364_pos, 2, rx364_start
-    sub rx364_off, rx364_pos, 1
-    substr rx364_tgt, rx364_tgt, rx364_off
-  rx364_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan367_done
-    goto rxscan367_scan
-  rxscan367_loop:
-    ($P10) = rx364_cur."from"()
-    inc $P10
-    set rx364_pos, $P10
-    ge rx364_pos, rx364_eos, rxscan367_done
-  rxscan367_scan:
-    set_addr $I10, rxscan367_loop
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
-  rxscan367_done:
-.annotate "line", 206
+    .local string rx367_tgt
+    .local int rx367_pos
+    .local int rx367_off
+    .local int rx367_eos
+    .local int rx367_rep
+    .local pmc rx367_cur
+    (rx367_cur, rx367_pos, rx367_tgt) = self."!cursor_start"()
+    rx367_cur."!cursor_debug"("START ", "statement_mod_cond:sym<if>")
+    .lex unicode:"$\x{a2}", rx367_cur
+    .local pmc match
+    .lex "$/", match
+    length rx367_eos, rx367_tgt
+    set rx367_off, 0
+    lt rx367_pos, 2, rx367_start
+    sub rx367_off, rx367_pos, 1
+    substr rx367_tgt, rx367_tgt, rx367_off
+  rx367_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan370_done
+    goto rxscan370_scan
+  rxscan370_loop:
+    ($P10) = rx367_cur."from"()
+    inc $P10
+    set rx367_pos, $P10
+    ge rx367_pos, rx367_eos, rxscan370_done
+  rxscan370_scan:
+    set_addr $I10, rxscan370_loop
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
+  rxscan370_done:
+.annotate "line", 210
   # rx subcapture "sym"
-    set_addr $I10, rxcap_368_fail
-    rx364_cur."!mark_push"(0, rx364_pos, $I10)
+    set_addr $I10, rxcap_371_fail
+    rx367_cur."!mark_push"(0, rx367_pos, $I10)
   # rx literal  "if"
-    add $I11, rx364_pos, 2
-    gt $I11, rx364_eos, rx364_fail
-    sub $I11, rx364_pos, rx364_off
-    substr $S10, rx364_tgt, $I11, 2
-    ne $S10, "if", rx364_fail
-    add rx364_pos, 2
-    set_addr $I10, rxcap_368_fail
-    ($I12, $I11) = rx364_cur."!mark_peek"($I10)
-    rx364_cur."!cursor_pos"($I11)
-    ($P10) = rx364_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx364_pos, "")
-    rx364_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx367_pos, 2
+    gt $I11, rx367_eos, rx367_fail
+    sub $I11, rx367_pos, rx367_off
+    substr $S10, rx367_tgt, $I11, 2
+    ne $S10, "if", rx367_fail
+    add rx367_pos, 2
+    set_addr $I10, rxcap_371_fail
+    ($I12, $I11) = rx367_cur."!mark_peek"($I10)
+    rx367_cur."!cursor_pos"($I11)
+    ($P10) = rx367_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx367_pos, "")
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_368_done
-  rxcap_368_fail:
-    goto rx364_fail
-  rxcap_368_done:
-  # rx subrule "ws" subtype=method negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."ws"()
-    unless $P10, rx364_fail
-    rx364_pos = $P10."pos"()
+    goto rxcap_371_done
+  rxcap_371_fail:
+    goto rx367_fail
+  rxcap_371_done:
+  # rx subrule "ws" subtype=method negate=
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."ws"()
+    unless $P10, rx367_fail
+    rx367_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."EXPR"()
-    unless $P10, rx364_fail
-    rx364_cur."!mark_push"(0, -1, 0, $P10)
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."EXPR"()
+    unless $P10, rx367_fail
+    rx367_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx364_pos = $P10."pos"()
+    rx367_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx364_cur."!cursor_pos"(rx364_pos)
-    $P10 = rx364_cur."ws"()
-    unless $P10, rx364_fail
-    rx364_pos = $P10."pos"()
+    rx367_cur."!cursor_pos"(rx367_pos)
+    $P10 = rx367_cur."ws"()
+    unless $P10, rx367_fail
+    rx367_pos = $P10."pos"()
   # rx pass
-    rx364_cur."!cursor_pass"(rx364_pos, "statement_mod_cond:sym<if>")
-    rx364_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx364_pos)
-    .return (rx364_cur)
-  rx364_fail:
+    rx367_cur."!cursor_pass"(rx367_pos, "statement_mod_cond:sym<if>")
+    rx367_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<if>", " at pos=", rx367_pos)
+    .return (rx367_cur)
+  rx367_fail:
 .annotate "line", 4
-    (rx364_rep, rx364_pos, $I10, $P10) = rx364_cur."!mark_fail"(0)
-    lt rx364_pos, -1, rx364_done
-    eq rx364_pos, -1, rx364_fail
+    (rx367_rep, rx367_pos, $I10, $P10) = rx367_cur."!mark_fail"(0)
+    lt rx367_pos, -1, rx367_done
+    eq rx367_pos, -1, rx367_fail
     jump $I10
-  rx364_done:
-    rx364_cur."!cursor_fail"()
-    rx364_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
-    .return (rx364_cur)
+  rx367_done:
+    rx367_cur."!cursor_fail"()
+    rx367_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<if>")
+    .return (rx367_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1271336396.90314") :method
 .annotate "line", 4
-    new $P366, "ResizablePMCArray"
-    push $P366, "if"
-    .return ($P366)
+    new $P369, "ResizablePMCArray"
+    push $P369, "if"
+    .return ($P369)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("87_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_cond:sym<unless>"  :subid("87_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx372_tgt
-    .local int rx372_pos
-    .local int rx372_off
-    .local int rx372_eos
-    .local int rx372_rep
-    .local pmc rx372_cur
-    (rx372_cur, rx372_pos, rx372_tgt) = self."!cursor_start"()
-    rx372_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
-    .lex unicode:"$\x{a2}", rx372_cur
+    .local string rx375_tgt
+    .local int rx375_pos
+    .local int rx375_off
+    .local int rx375_eos
+    .local int rx375_rep
+    .local pmc rx375_cur
+    (rx375_cur, rx375_pos, rx375_tgt) = self."!cursor_start"()
+    rx375_cur."!cursor_debug"("START ", "statement_mod_cond:sym<unless>")
+    .lex unicode:"$\x{a2}", rx375_cur
     .local pmc match
     .lex "$/", match
-    length rx372_eos, rx372_tgt
-    set rx372_off, 0
-    lt rx372_pos, 2, rx372_start
-    sub rx372_off, rx372_pos, 1
-    substr rx372_tgt, rx372_tgt, rx372_off
-  rx372_start:
+    length rx375_eos, rx375_tgt
+    set rx375_off, 0
+    lt rx375_pos, 2, rx375_start
+    sub rx375_off, rx375_pos, 1
+    substr rx375_tgt, rx375_tgt, rx375_off
+  rx375_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan375_done
-    goto rxscan375_scan
-  rxscan375_loop:
-    ($P10) = rx372_cur."from"()
+    ne $I10, -1, rxscan378_done
+    goto rxscan378_scan
+  rxscan378_loop:
+    ($P10) = rx375_cur."from"()
     inc $P10
-    set rx372_pos, $P10
-    ge rx372_pos, rx372_eos, rxscan375_done
-  rxscan375_scan:
-    set_addr $I10, rxscan375_loop
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
-  rxscan375_done:
-.annotate "line", 207
+    set rx375_pos, $P10
+    ge rx375_pos, rx375_eos, rxscan378_done
+  rxscan378_scan:
+    set_addr $I10, rxscan378_loop
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
+  rxscan378_done:
+.annotate "line", 211
   # rx subcapture "sym"
-    set_addr $I10, rxcap_376_fail
-    rx372_cur."!mark_push"(0, rx372_pos, $I10)
+    set_addr $I10, rxcap_379_fail
+    rx375_cur."!mark_push"(0, rx375_pos, $I10)
   # rx literal  "unless"
-    add $I11, rx372_pos, 6
-    gt $I11, rx372_eos, rx372_fail
-    sub $I11, rx372_pos, rx372_off
-    substr $S10, rx372_tgt, $I11, 6
-    ne $S10, "unless", rx372_fail
-    add rx372_pos, 6
-    set_addr $I10, rxcap_376_fail
-    ($I12, $I11) = rx372_cur."!mark_peek"($I10)
-    rx372_cur."!cursor_pos"($I11)
-    ($P10) = rx372_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx372_pos, "")
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx375_pos, 6
+    gt $I11, rx375_eos, rx375_fail
+    sub $I11, rx375_pos, rx375_off
+    substr $S10, rx375_tgt, $I11, 6
+    ne $S10, "unless", rx375_fail
+    add rx375_pos, 6
+    set_addr $I10, rxcap_379_fail
+    ($I12, $I11) = rx375_cur."!mark_peek"($I10)
+    rx375_cur."!cursor_pos"($I11)
+    ($P10) = rx375_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx375_pos, "")
+    rx375_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_376_done
-  rxcap_376_fail:
-    goto rx372_fail
-  rxcap_376_done:
-  # rx subrule "ws" subtype=method negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."ws"()
-    unless $P10, rx372_fail
-    rx372_pos = $P10."pos"()
+    goto rxcap_379_done
+  rxcap_379_fail:
+    goto rx375_fail
+  rxcap_379_done:
+  # rx subrule "ws" subtype=method negate=
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."ws"()
+    unless $P10, rx375_fail
+    rx375_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."EXPR"()
-    unless $P10, rx372_fail
-    rx372_cur."!mark_push"(0, -1, 0, $P10)
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."EXPR"()
+    unless $P10, rx375_fail
+    rx375_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx372_pos = $P10."pos"()
+    rx375_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx372_cur."!cursor_pos"(rx372_pos)
-    $P10 = rx372_cur."ws"()
-    unless $P10, rx372_fail
-    rx372_pos = $P10."pos"()
+    rx375_cur."!cursor_pos"(rx375_pos)
+    $P10 = rx375_cur."ws"()
+    unless $P10, rx375_fail
+    rx375_pos = $P10."pos"()
   # rx pass
-    rx372_cur."!cursor_pass"(rx372_pos, "statement_mod_cond:sym<unless>")
-    rx372_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx372_pos)
-    .return (rx372_cur)
-  rx372_fail:
+    rx375_cur."!cursor_pass"(rx375_pos, "statement_mod_cond:sym<unless>")
+    rx375_cur."!cursor_debug"("PASS  ", "statement_mod_cond:sym<unless>", " at pos=", rx375_pos)
+    .return (rx375_cur)
+  rx375_fail:
 .annotate "line", 4
-    (rx372_rep, rx372_pos, $I10, $P10) = rx372_cur."!mark_fail"(0)
-    lt rx372_pos, -1, rx372_done
-    eq rx372_pos, -1, rx372_fail
+    (rx375_rep, rx375_pos, $I10, $P10) = rx375_cur."!mark_fail"(0)
+    lt rx375_pos, -1, rx375_done
+    eq rx375_pos, -1, rx375_fail
     jump $I10
-  rx372_done:
-    rx372_cur."!cursor_fail"()
-    rx372_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
-    .return (rx372_cur)
+  rx375_done:
+    rx375_cur."!cursor_fail"()
+    rx375_cur."!cursor_debug"("FAIL  ", "statement_mod_cond:sym<unless>")
+    .return (rx375_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1271336396.90314") :method
 .annotate "line", 4
-    new $P374, "ResizablePMCArray"
-    push $P374, "unless"
-    .return ($P374)
+    new $P377, "ResizablePMCArray"
+    push $P377, "unless"
+    .return ($P377)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("89_1267204702.05125") :method
-.annotate "line", 209
-    $P380 = self."!protoregex"("statement_mod_loop")
-    .return ($P380)
+.sub "statement_mod_loop"  :subid("89_1271336396.90314") :method
+.annotate "line", 213
+    $P383 = self."!protoregex"("statement_mod_loop")
+    .return ($P383)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("90_1267204702.05125") :method
-.annotate "line", 209
-    $P382 = self."!PREFIX__!protoregex"("statement_mod_loop")
-    .return ($P382)
+.sub "!PREFIX__statement_mod_loop"  :subid("90_1271336396.90314") :method
+.annotate "line", 213
+    $P385 = self."!PREFIX__!protoregex"("statement_mod_loop")
+    .return ($P385)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("91_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_loop:sym<while>"  :subid("91_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx384_tgt
-    .local int rx384_pos
-    .local int rx384_off
-    .local int rx384_eos
-    .local int rx384_rep
-    .local pmc rx384_cur
-    (rx384_cur, rx384_pos, rx384_tgt) = self."!cursor_start"()
-    rx384_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
-    .lex unicode:"$\x{a2}", rx384_cur
-    .local pmc match
-    .lex "$/", match
-    length rx384_eos, rx384_tgt
-    set rx384_off, 0
-    lt rx384_pos, 2, rx384_start
-    sub rx384_off, rx384_pos, 1
-    substr rx384_tgt, rx384_tgt, rx384_off
-  rx384_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan387_done
-    goto rxscan387_scan
-  rxscan387_loop:
-    ($P10) = rx384_cur."from"()
-    inc $P10
-    set rx384_pos, $P10
-    ge rx384_pos, rx384_eos, rxscan387_done
-  rxscan387_scan:
-    set_addr $I10, rxscan387_loop
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
-  rxscan387_done:
-.annotate "line", 211
+    .local string rx387_tgt
+    .local int rx387_pos
+    .local int rx387_off
+    .local int rx387_eos
+    .local int rx387_rep
+    .local pmc rx387_cur
+    (rx387_cur, rx387_pos, rx387_tgt) = self."!cursor_start"()
+    rx387_cur."!cursor_debug"("START ", "statement_mod_loop:sym<while>")
+    .lex unicode:"$\x{a2}", rx387_cur
+    .local pmc match
+    .lex "$/", match
+    length rx387_eos, rx387_tgt
+    set rx387_off, 0
+    lt rx387_pos, 2, rx387_start
+    sub rx387_off, rx387_pos, 1
+    substr rx387_tgt, rx387_tgt, rx387_off
+  rx387_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan390_done
+    goto rxscan390_scan
+  rxscan390_loop:
+    ($P10) = rx387_cur."from"()
+    inc $P10
+    set rx387_pos, $P10
+    ge rx387_pos, rx387_eos, rxscan390_done
+  rxscan390_scan:
+    set_addr $I10, rxscan390_loop
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
+  rxscan390_done:
+.annotate "line", 215
   # rx subcapture "sym"
-    set_addr $I10, rxcap_388_fail
-    rx384_cur."!mark_push"(0, rx384_pos, $I10)
+    set_addr $I10, rxcap_391_fail
+    rx387_cur."!mark_push"(0, rx387_pos, $I10)
   # rx literal  "while"
-    add $I11, rx384_pos, 5
-    gt $I11, rx384_eos, rx384_fail
-    sub $I11, rx384_pos, rx384_off
-    substr $S10, rx384_tgt, $I11, 5
-    ne $S10, "while", rx384_fail
-    add rx384_pos, 5
-    set_addr $I10, rxcap_388_fail
-    ($I12, $I11) = rx384_cur."!mark_peek"($I10)
-    rx384_cur."!cursor_pos"($I11)
-    ($P10) = rx384_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx384_pos, "")
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx387_pos, 5
+    gt $I11, rx387_eos, rx387_fail
+    sub $I11, rx387_pos, rx387_off
+    substr $S10, rx387_tgt, $I11, 5
+    ne $S10, "while", rx387_fail
+    add rx387_pos, 5
+    set_addr $I10, rxcap_391_fail
+    ($I12, $I11) = rx387_cur."!mark_peek"($I10)
+    rx387_cur."!cursor_pos"($I11)
+    ($P10) = rx387_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx387_pos, "")
+    rx387_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_388_done
-  rxcap_388_fail:
-    goto rx384_fail
-  rxcap_388_done:
-  # rx subrule "ws" subtype=method negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."ws"()
-    unless $P10, rx384_fail
-    rx384_pos = $P10."pos"()
+    goto rxcap_391_done
+  rxcap_391_fail:
+    goto rx387_fail
+  rxcap_391_done:
+  # rx subrule "ws" subtype=method negate=
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."ws"()
+    unless $P10, rx387_fail
+    rx387_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."EXPR"()
-    unless $P10, rx384_fail
-    rx384_cur."!mark_push"(0, -1, 0, $P10)
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."EXPR"()
+    unless $P10, rx387_fail
+    rx387_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx384_pos = $P10."pos"()
+    rx387_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx384_cur."!cursor_pos"(rx384_pos)
-    $P10 = rx384_cur."ws"()
-    unless $P10, rx384_fail
-    rx384_pos = $P10."pos"()
+    rx387_cur."!cursor_pos"(rx387_pos)
+    $P10 = rx387_cur."ws"()
+    unless $P10, rx387_fail
+    rx387_pos = $P10."pos"()
   # rx pass
-    rx384_cur."!cursor_pass"(rx384_pos, "statement_mod_loop:sym<while>")
-    rx384_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx384_pos)
-    .return (rx384_cur)
-  rx384_fail:
+    rx387_cur."!cursor_pass"(rx387_pos, "statement_mod_loop:sym<while>")
+    rx387_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<while>", " at pos=", rx387_pos)
+    .return (rx387_cur)
+  rx387_fail:
 .annotate "line", 4
-    (rx384_rep, rx384_pos, $I10, $P10) = rx384_cur."!mark_fail"(0)
-    lt rx384_pos, -1, rx384_done
-    eq rx384_pos, -1, rx384_fail
+    (rx387_rep, rx387_pos, $I10, $P10) = rx387_cur."!mark_fail"(0)
+    lt rx387_pos, -1, rx387_done
+    eq rx387_pos, -1, rx387_fail
     jump $I10
-  rx384_done:
-    rx384_cur."!cursor_fail"()
-    rx384_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
-    .return (rx384_cur)
+  rx387_done:
+    rx387_cur."!cursor_fail"()
+    rx387_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<while>")
+    .return (rx387_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1271336396.90314") :method
 .annotate "line", 4
-    new $P386, "ResizablePMCArray"
-    push $P386, "while"
-    .return ($P386)
+    new $P389, "ResizablePMCArray"
+    push $P389, "while"
+    .return ($P389)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("93_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "statement_mod_loop:sym<until>"  :subid("93_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx392_tgt
-    .local int rx392_pos
-    .local int rx392_off
-    .local int rx392_eos
-    .local int rx392_rep
-    .local pmc rx392_cur
-    (rx392_cur, rx392_pos, rx392_tgt) = self."!cursor_start"()
-    rx392_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
-    .lex unicode:"$\x{a2}", rx392_cur
+    .local string rx395_tgt
+    .local int rx395_pos
+    .local int rx395_off
+    .local int rx395_eos
+    .local int rx395_rep
+    .local pmc rx395_cur
+    (rx395_cur, rx395_pos, rx395_tgt) = self."!cursor_start"()
+    rx395_cur."!cursor_debug"("START ", "statement_mod_loop:sym<until>")
+    .lex unicode:"$\x{a2}", rx395_cur
     .local pmc match
     .lex "$/", match
-    length rx392_eos, rx392_tgt
-    set rx392_off, 0
-    lt rx392_pos, 2, rx392_start
-    sub rx392_off, rx392_pos, 1
-    substr rx392_tgt, rx392_tgt, rx392_off
-  rx392_start:
+    length rx395_eos, rx395_tgt
+    set rx395_off, 0
+    lt rx395_pos, 2, rx395_start
+    sub rx395_off, rx395_pos, 1
+    substr rx395_tgt, rx395_tgt, rx395_off
+  rx395_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan395_done
-    goto rxscan395_scan
-  rxscan395_loop:
-    ($P10) = rx392_cur."from"()
+    ne $I10, -1, rxscan398_done
+    goto rxscan398_scan
+  rxscan398_loop:
+    ($P10) = rx395_cur."from"()
     inc $P10
-    set rx392_pos, $P10
-    ge rx392_pos, rx392_eos, rxscan395_done
-  rxscan395_scan:
-    set_addr $I10, rxscan395_loop
-    rx392_cur."!mark_push"(0, rx392_pos, $I10)
-  rxscan395_done:
-.annotate "line", 212
+    set rx395_pos, $P10
+    ge rx395_pos, rx395_eos, rxscan398_done
+  rxscan398_scan:
+    set_addr $I10, rxscan398_loop
+    rx395_cur."!mark_push"(0, rx395_pos, $I10)
+  rxscan398_done:
+.annotate "line", 216
   # rx subcapture "sym"
-    set_addr $I10, rxcap_396_fail
-    rx392_cur."!mark_push"(0, rx392_pos, $I10)
+    set_addr $I10, rxcap_399_fail
+    rx395_cur."!mark_push"(0, rx395_pos, $I10)
   # rx literal  "until"
-    add $I11, rx392_pos, 5
-    gt $I11, rx392_eos, rx392_fail
-    sub $I11, rx392_pos, rx392_off
-    substr $S10, rx392_tgt, $I11, 5
-    ne $S10, "until", rx392_fail
-    add rx392_pos, 5
-    set_addr $I10, rxcap_396_fail
-    ($I12, $I11) = rx392_cur."!mark_peek"($I10)
-    rx392_cur."!cursor_pos"($I11)
-    ($P10) = rx392_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx392_pos, "")
-    rx392_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx395_pos, 5
+    gt $I11, rx395_eos, rx395_fail
+    sub $I11, rx395_pos, rx395_off
+    substr $S10, rx395_tgt, $I11, 5
+    ne $S10, "until", rx395_fail
+    add rx395_pos, 5
+    set_addr $I10, rxcap_399_fail
+    ($I12, $I11) = rx395_cur."!mark_peek"($I10)
+    rx395_cur."!cursor_pos"($I11)
+    ($P10) = rx395_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx395_pos, "")
+    rx395_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_396_done
-  rxcap_396_fail:
-    goto rx392_fail
-  rxcap_396_done:
-  # rx subrule "ws" subtype=method negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."ws"()
-    unless $P10, rx392_fail
-    rx392_pos = $P10."pos"()
+    goto rxcap_399_done
+  rxcap_399_fail:
+    goto rx395_fail
+  rxcap_399_done:
+  # rx subrule "ws" subtype=method negate=
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."ws"()
+    unless $P10, rx395_fail
+    rx395_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."EXPR"()
-    unless $P10, rx392_fail
-    rx392_cur."!mark_push"(0, -1, 0, $P10)
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."EXPR"()
+    unless $P10, rx395_fail
+    rx395_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("cond")
-    rx392_pos = $P10."pos"()
+    rx395_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx392_cur."!cursor_pos"(rx392_pos)
-    $P10 = rx392_cur."ws"()
-    unless $P10, rx392_fail
-    rx392_pos = $P10."pos"()
+    rx395_cur."!cursor_pos"(rx395_pos)
+    $P10 = rx395_cur."ws"()
+    unless $P10, rx395_fail
+    rx395_pos = $P10."pos"()
   # rx pass
-    rx392_cur."!cursor_pass"(rx392_pos, "statement_mod_loop:sym<until>")
-    rx392_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx392_pos)
-    .return (rx392_cur)
-  rx392_fail:
+    rx395_cur."!cursor_pass"(rx395_pos, "statement_mod_loop:sym<until>")
+    rx395_cur."!cursor_debug"("PASS  ", "statement_mod_loop:sym<until>", " at pos=", rx395_pos)
+    .return (rx395_cur)
+  rx395_fail:
 .annotate "line", 4
-    (rx392_rep, rx392_pos, $I10, $P10) = rx392_cur."!mark_fail"(0)
-    lt rx392_pos, -1, rx392_done
-    eq rx392_pos, -1, rx392_fail
+    (rx395_rep, rx395_pos, $I10, $P10) = rx395_cur."!mark_fail"(0)
+    lt rx395_pos, -1, rx395_done
+    eq rx395_pos, -1, rx395_fail
     jump $I10
-  rx392_done:
-    rx392_cur."!cursor_fail"()
-    rx392_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
-    .return (rx392_cur)
+  rx395_done:
+    rx395_cur."!cursor_fail"()
+    rx395_cur."!cursor_debug"("FAIL  ", "statement_mod_loop:sym<until>")
+    .return (rx395_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1267204702.05125") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1271336396.90314") :method
 .annotate "line", 4
-    new $P394, "ResizablePMCArray"
-    push $P394, "until"
-    .return ($P394)
+    new $P397, "ResizablePMCArray"
+    push $P397, "until"
+    .return ($P397)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("95_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<fatarrow>"  :subid("95_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx400_tgt
-    .local int rx400_pos
-    .local int rx400_off
-    .local int rx400_eos
-    .local int rx400_rep
-    .local pmc rx400_cur
-    (rx400_cur, rx400_pos, rx400_tgt) = self."!cursor_start"()
-    rx400_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
-    .lex unicode:"$\x{a2}", rx400_cur
+    .local string rx403_tgt
+    .local int rx403_pos
+    .local int rx403_off
+    .local int rx403_eos
+    .local int rx403_rep
+    .local pmc rx403_cur
+    (rx403_cur, rx403_pos, rx403_tgt) = self."!cursor_start"()
+    rx403_cur."!cursor_debug"("START ", "term:sym<fatarrow>")
+    .lex unicode:"$\x{a2}", rx403_cur
     .local pmc match
     .lex "$/", match
-    length rx400_eos, rx400_tgt
-    set rx400_off, 0
-    lt rx400_pos, 2, rx400_start
-    sub rx400_off, rx400_pos, 1
-    substr rx400_tgt, rx400_tgt, rx400_off
-  rx400_start:
+    length rx403_eos, rx403_tgt
+    set rx403_off, 0
+    lt rx403_pos, 2, rx403_start
+    sub rx403_off, rx403_pos, 1
+    substr rx403_tgt, rx403_tgt, rx403_off
+  rx403_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan404_done
-    goto rxscan404_scan
-  rxscan404_loop:
-    ($P10) = rx400_cur."from"()
+    ne $I10, -1, rxscan407_done
+    goto rxscan407_scan
+  rxscan407_loop:
+    ($P10) = rx403_cur."from"()
     inc $P10
-    set rx400_pos, $P10
-    ge rx400_pos, rx400_eos, rxscan404_done
-  rxscan404_scan:
-    set_addr $I10, rxscan404_loop
-    rx400_cur."!mark_push"(0, rx400_pos, $I10)
-  rxscan404_done:
-.annotate "line", 216
+    set rx403_pos, $P10
+    ge rx403_pos, rx403_eos, rxscan407_done
+  rxscan407_scan:
+    set_addr $I10, rxscan407_loop
+    rx403_cur."!mark_push"(0, rx403_pos, $I10)
+  rxscan407_done:
+.annotate "line", 220
   # rx subrule "fatarrow" subtype=capture negate=
-    rx400_cur."!cursor_pos"(rx400_pos)
-    $P10 = rx400_cur."fatarrow"()
-    unless $P10, rx400_fail
-    rx400_cur."!mark_push"(0, -1, 0, $P10)
+    rx403_cur."!cursor_pos"(rx403_pos)
+    $P10 = rx403_cur."fatarrow"()
+    unless $P10, rx403_fail
+    rx403_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("fatarrow")
-    rx400_pos = $P10."pos"()
+    rx403_pos = $P10."pos"()
   # rx pass
-    rx400_cur."!cursor_pass"(rx400_pos, "term:sym<fatarrow>")
-    rx400_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx400_pos)
-    .return (rx400_cur)
-  rx400_fail:
+    rx403_cur."!cursor_pass"(rx403_pos, "term:sym<fatarrow>")
+    rx403_cur."!cursor_debug"("PASS  ", "term:sym<fatarrow>", " at pos=", rx403_pos)
+    .return (rx403_cur)
+  rx403_fail:
 .annotate "line", 4
-    (rx400_rep, rx400_pos, $I10, $P10) = rx400_cur."!mark_fail"(0)
-    lt rx400_pos, -1, rx400_done
-    eq rx400_pos, -1, rx400_fail
+    (rx403_rep, rx403_pos, $I10, $P10) = rx403_cur."!mark_fail"(0)
+    lt rx403_pos, -1, rx403_done
+    eq rx403_pos, -1, rx403_fail
     jump $I10
-  rx400_done:
-    rx400_cur."!cursor_fail"()
-    rx400_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
-    .return (rx400_cur)
+  rx403_done:
+    rx403_cur."!cursor_fail"()
+    rx403_cur."!cursor_debug"("FAIL  ", "term:sym<fatarrow>")
+    .return (rx403_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1267204702.05125") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1271336396.90314") :method
 .annotate "line", 4
-    $P402 = self."!PREFIX__!subrule"("fatarrow", "")
-    new $P403, "ResizablePMCArray"
-    push $P403, $P402
-    .return ($P403)
+    $P405 = self."!PREFIX__!subrule"("fatarrow", "")
+    new $P406, "ResizablePMCArray"
+    push $P406, $P405
+    .return ($P406)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("97_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<colonpair>"  :subid("97_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx406_tgt
-    .local int rx406_pos
-    .local int rx406_off
-    .local int rx406_eos
-    .local int rx406_rep
-    .local pmc rx406_cur
-    (rx406_cur, rx406_pos, rx406_tgt) = self."!cursor_start"()
-    rx406_cur."!cursor_debug"("START ", "term:sym<colonpair>")
-    .lex unicode:"$\x{a2}", rx406_cur
+    .local string rx409_tgt
+    .local int rx409_pos
+    .local int rx409_off
+    .local int rx409_eos
+    .local int rx409_rep
+    .local pmc rx409_cur
+    (rx409_cur, rx409_pos, rx409_tgt) = self."!cursor_start"()
+    rx409_cur."!cursor_debug"("START ", "term:sym<colonpair>")
+    .lex unicode:"$\x{a2}", rx409_cur
     .local pmc match
     .lex "$/", match
-    length rx406_eos, rx406_tgt
-    set rx406_off, 0
-    lt rx406_pos, 2, rx406_start
-    sub rx406_off, rx406_pos, 1
-    substr rx406_tgt, rx406_tgt, rx406_off
-  rx406_start:
+    length rx409_eos, rx409_tgt
+    set rx409_off, 0
+    lt rx409_pos, 2, rx409_start
+    sub rx409_off, rx409_pos, 1
+    substr rx409_tgt, rx409_tgt, rx409_off
+  rx409_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan410_done
-    goto rxscan410_scan
-  rxscan410_loop:
-    ($P10) = rx406_cur."from"()
+    ne $I10, -1, rxscan413_done
+    goto rxscan413_scan
+  rxscan413_loop:
+    ($P10) = rx409_cur."from"()
     inc $P10
-    set rx406_pos, $P10
-    ge rx406_pos, rx406_eos, rxscan410_done
-  rxscan410_scan:
-    set_addr $I10, rxscan410_loop
-    rx406_cur."!mark_push"(0, rx406_pos, $I10)
-  rxscan410_done:
-.annotate "line", 217
+    set rx409_pos, $P10
+    ge rx409_pos, rx409_eos, rxscan413_done
+  rxscan413_scan:
+    set_addr $I10, rxscan413_loop
+    rx409_cur."!mark_push"(0, rx409_pos, $I10)
+  rxscan413_done:
+.annotate "line", 221
   # rx subrule "colonpair" subtype=capture negate=
-    rx406_cur."!cursor_pos"(rx406_pos)
-    $P10 = rx406_cur."colonpair"()
-    unless $P10, rx406_fail
-    rx406_cur."!mark_push"(0, -1, 0, $P10)
+    rx409_cur."!cursor_pos"(rx409_pos)
+    $P10 = rx409_cur."colonpair"()
+    unless $P10, rx409_fail
+    rx409_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("colonpair")
-    rx406_pos = $P10."pos"()
+    rx409_pos = $P10."pos"()
   # rx pass
-    rx406_cur."!cursor_pass"(rx406_pos, "term:sym<colonpair>")
-    rx406_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx406_pos)
-    .return (rx406_cur)
-  rx406_fail:
+    rx409_cur."!cursor_pass"(rx409_pos, "term:sym<colonpair>")
+    rx409_cur."!cursor_debug"("PASS  ", "term:sym<colonpair>", " at pos=", rx409_pos)
+    .return (rx409_cur)
+  rx409_fail:
 .annotate "line", 4
-    (rx406_rep, rx406_pos, $I10, $P10) = rx406_cur."!mark_fail"(0)
-    lt rx406_pos, -1, rx406_done
-    eq rx406_pos, -1, rx406_fail
+    (rx409_rep, rx409_pos, $I10, $P10) = rx409_cur."!mark_fail"(0)
+    lt rx409_pos, -1, rx409_done
+    eq rx409_pos, -1, rx409_fail
     jump $I10
-  rx406_done:
-    rx406_cur."!cursor_fail"()
-    rx406_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
-    .return (rx406_cur)
+  rx409_done:
+    rx409_cur."!cursor_fail"()
+    rx409_cur."!cursor_debug"("FAIL  ", "term:sym<colonpair>")
+    .return (rx409_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1267204702.05125") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1271336396.90314") :method
 .annotate "line", 4
-    $P408 = self."!PREFIX__!subrule"("colonpair", "")
-    new $P409, "ResizablePMCArray"
-    push $P409, $P408
-    .return ($P409)
+    $P411 = self."!PREFIX__!subrule"("colonpair", "")
+    new $P412, "ResizablePMCArray"
+    push $P412, $P411
+    .return ($P412)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("99_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<variable>"  :subid("99_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx412_tgt
-    .local int rx412_pos
-    .local int rx412_off
-    .local int rx412_eos
-    .local int rx412_rep
-    .local pmc rx412_cur
-    (rx412_cur, rx412_pos, rx412_tgt) = self."!cursor_start"()
-    rx412_cur."!cursor_debug"("START ", "term:sym<variable>")
-    .lex unicode:"$\x{a2}", rx412_cur
+    .local string rx415_tgt
+    .local int rx415_pos
+    .local int rx415_off
+    .local int rx415_eos
+    .local int rx415_rep
+    .local pmc rx415_cur
+    (rx415_cur, rx415_pos, rx415_tgt) = self."!cursor_start"()
+    rx415_cur."!cursor_debug"("START ", "term:sym<variable>")
+    .lex unicode:"$\x{a2}", rx415_cur
     .local pmc match
     .lex "$/", match
-    length rx412_eos, rx412_tgt
-    set rx412_off, 0
-    lt rx412_pos, 2, rx412_start
-    sub rx412_off, rx412_pos, 1
-    substr rx412_tgt, rx412_tgt, rx412_off
-  rx412_start:
+    length rx415_eos, rx415_tgt
+    set rx415_off, 0
+    lt rx415_pos, 2, rx415_start
+    sub rx415_off, rx415_pos, 1
+    substr rx415_tgt, rx415_tgt, rx415_off
+  rx415_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan416_done
-    goto rxscan416_scan
-  rxscan416_loop:
-    ($P10) = rx412_cur."from"()
+    ne $I10, -1, rxscan419_done
+    goto rxscan419_scan
+  rxscan419_loop:
+    ($P10) = rx415_cur."from"()
     inc $P10
-    set rx412_pos, $P10
-    ge rx412_pos, rx412_eos, rxscan416_done
-  rxscan416_scan:
-    set_addr $I10, rxscan416_loop
-    rx412_cur."!mark_push"(0, rx412_pos, $I10)
-  rxscan416_done:
-.annotate "line", 218
+    set rx415_pos, $P10
+    ge rx415_pos, rx415_eos, rxscan419_done
+  rxscan419_scan:
+    set_addr $I10, rxscan419_loop
+    rx415_cur."!mark_push"(0, rx415_pos, $I10)
+  rxscan419_done:
+.annotate "line", 222
   # rx subrule "variable" subtype=capture negate=
-    rx412_cur."!cursor_pos"(rx412_pos)
-    $P10 = rx412_cur."variable"()
-    unless $P10, rx412_fail
-    rx412_cur."!mark_push"(0, -1, 0, $P10)
+    rx415_cur."!cursor_pos"(rx415_pos)
+    $P10 = rx415_cur."variable"()
+    unless $P10, rx415_fail
+    rx415_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx412_pos = $P10."pos"()
+    rx415_pos = $P10."pos"()
   # rx pass
-    rx412_cur."!cursor_pass"(rx412_pos, "term:sym<variable>")
-    rx412_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx412_pos)
-    .return (rx412_cur)
-  rx412_fail:
+    rx415_cur."!cursor_pass"(rx415_pos, "term:sym<variable>")
+    rx415_cur."!cursor_debug"("PASS  ", "term:sym<variable>", " at pos=", rx415_pos)
+    .return (rx415_cur)
+  rx415_fail:
 .annotate "line", 4
-    (rx412_rep, rx412_pos, $I10, $P10) = rx412_cur."!mark_fail"(0)
-    lt rx412_pos, -1, rx412_done
-    eq rx412_pos, -1, rx412_fail
+    (rx415_rep, rx415_pos, $I10, $P10) = rx415_cur."!mark_fail"(0)
+    lt rx415_pos, -1, rx415_done
+    eq rx415_pos, -1, rx415_fail
     jump $I10
-  rx412_done:
-    rx412_cur."!cursor_fail"()
-    rx412_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
-    .return (rx412_cur)
+  rx415_done:
+    rx415_cur."!cursor_fail"()
+    rx415_cur."!cursor_debug"("FAIL  ", "term:sym<variable>")
+    .return (rx415_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("100_1267204702.05125") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("100_1271336396.90314") :method
 .annotate "line", 4
-    $P414 = self."!PREFIX__!subrule"("variable", "")
-    new $P415, "ResizablePMCArray"
-    push $P415, $P414
-    .return ($P415)
+    $P417 = self."!PREFIX__!subrule"("variable", "")
+    new $P418, "ResizablePMCArray"
+    push $P418, $P417
+    .return ($P418)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("101_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<package_declarator>"  :subid("101_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx418_tgt
-    .local int rx418_pos
-    .local int rx418_off
-    .local int rx418_eos
-    .local int rx418_rep
-    .local pmc rx418_cur
-    (rx418_cur, rx418_pos, rx418_tgt) = self."!cursor_start"()
-    rx418_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
-    .lex unicode:"$\x{a2}", rx418_cur
+    .local string rx421_tgt
+    .local int rx421_pos
+    .local int rx421_off
+    .local int rx421_eos
+    .local int rx421_rep
+    .local pmc rx421_cur
+    (rx421_cur, rx421_pos, rx421_tgt) = self."!cursor_start"()
+    rx421_cur."!cursor_debug"("START ", "term:sym<package_declarator>")
+    .lex unicode:"$\x{a2}", rx421_cur
     .local pmc match
     .lex "$/", match
-    length rx418_eos, rx418_tgt
-    set rx418_off, 0
-    lt rx418_pos, 2, rx418_start
-    sub rx418_off, rx418_pos, 1
-    substr rx418_tgt, rx418_tgt, rx418_off
-  rx418_start:
+    length rx421_eos, rx421_tgt
+    set rx421_off, 0
+    lt rx421_pos, 2, rx421_start
+    sub rx421_off, rx421_pos, 1
+    substr rx421_tgt, rx421_tgt, rx421_off
+  rx421_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan422_done
-    goto rxscan422_scan
-  rxscan422_loop:
-    ($P10) = rx418_cur."from"()
+    ne $I10, -1, rxscan425_done
+    goto rxscan425_scan
+  rxscan425_loop:
+    ($P10) = rx421_cur."from"()
     inc $P10
-    set rx418_pos, $P10
-    ge rx418_pos, rx418_eos, rxscan422_done
-  rxscan422_scan:
-    set_addr $I10, rxscan422_loop
-    rx418_cur."!mark_push"(0, rx418_pos, $I10)
-  rxscan422_done:
-.annotate "line", 219
+    set rx421_pos, $P10
+    ge rx421_pos, rx421_eos, rxscan425_done
+  rxscan425_scan:
+    set_addr $I10, rxscan425_loop
+    rx421_cur."!mark_push"(0, rx421_pos, $I10)
+  rxscan425_done:
+.annotate "line", 223
   # rx subrule "package_declarator" subtype=capture negate=
-    rx418_cur."!cursor_pos"(rx418_pos)
-    $P10 = rx418_cur."package_declarator"()
-    unless $P10, rx418_fail
-    rx418_cur."!mark_push"(0, -1, 0, $P10)
+    rx421_cur."!cursor_pos"(rx421_pos)
+    $P10 = rx421_cur."package_declarator"()
+    unless $P10, rx421_fail
+    rx421_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_declarator")
-    rx418_pos = $P10."pos"()
+    rx421_pos = $P10."pos"()
   # rx pass
-    rx418_cur."!cursor_pass"(rx418_pos, "term:sym<package_declarator>")
-    rx418_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx418_pos)
-    .return (rx418_cur)
-  rx418_fail:
+    rx421_cur."!cursor_pass"(rx421_pos, "term:sym<package_declarator>")
+    rx421_cur."!cursor_debug"("PASS  ", "term:sym<package_declarator>", " at pos=", rx421_pos)
+    .return (rx421_cur)
+  rx421_fail:
 .annotate "line", 4
-    (rx418_rep, rx418_pos, $I10, $P10) = rx418_cur."!mark_fail"(0)
-    lt rx418_pos, -1, rx418_done
-    eq rx418_pos, -1, rx418_fail
+    (rx421_rep, rx421_pos, $I10, $P10) = rx421_cur."!mark_fail"(0)
+    lt rx421_pos, -1, rx421_done
+    eq rx421_pos, -1, rx421_fail
     jump $I10
-  rx418_done:
-    rx418_cur."!cursor_fail"()
-    rx418_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
-    .return (rx418_cur)
+  rx421_done:
+    rx421_cur."!cursor_fail"()
+    rx421_cur."!cursor_debug"("FAIL  ", "term:sym<package_declarator>")
+    .return (rx421_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1267204702.05125") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1271336396.90314") :method
 .annotate "line", 4
-    $P420 = self."!PREFIX__!subrule"("package_declarator", "")
-    new $P421, "ResizablePMCArray"
-    push $P421, $P420
-    .return ($P421)
+    $P423 = self."!PREFIX__!subrule"("package_declarator", "")
+    new $P424, "ResizablePMCArray"
+    push $P424, $P423
+    .return ($P424)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("103_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<scope_declarator>"  :subid("103_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx424_tgt
-    .local int rx424_pos
-    .local int rx424_off
-    .local int rx424_eos
-    .local int rx424_rep
-    .local pmc rx424_cur
-    (rx424_cur, rx424_pos, rx424_tgt) = self."!cursor_start"()
-    rx424_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
-    .lex unicode:"$\x{a2}", rx424_cur
+    .local string rx427_tgt
+    .local int rx427_pos
+    .local int rx427_off
+    .local int rx427_eos
+    .local int rx427_rep
+    .local pmc rx427_cur
+    (rx427_cur, rx427_pos, rx427_tgt) = self."!cursor_start"()
+    rx427_cur."!cursor_debug"("START ", "term:sym<scope_declarator>")
+    .lex unicode:"$\x{a2}", rx427_cur
     .local pmc match
     .lex "$/", match
-    length rx424_eos, rx424_tgt
-    set rx424_off, 0
-    lt rx424_pos, 2, rx424_start
-    sub rx424_off, rx424_pos, 1
-    substr rx424_tgt, rx424_tgt, rx424_off
-  rx424_start:
+    length rx427_eos, rx427_tgt
+    set rx427_off, 0
+    lt rx427_pos, 2, rx427_start
+    sub rx427_off, rx427_pos, 1
+    substr rx427_tgt, rx427_tgt, rx427_off
+  rx427_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan428_done
-    goto rxscan428_scan
-  rxscan428_loop:
-    ($P10) = rx424_cur."from"()
+    ne $I10, -1, rxscan431_done
+    goto rxscan431_scan
+  rxscan431_loop:
+    ($P10) = rx427_cur."from"()
     inc $P10
-    set rx424_pos, $P10
-    ge rx424_pos, rx424_eos, rxscan428_done
-  rxscan428_scan:
-    set_addr $I10, rxscan428_loop
-    rx424_cur."!mark_push"(0, rx424_pos, $I10)
-  rxscan428_done:
-.annotate "line", 220
+    set rx427_pos, $P10
+    ge rx427_pos, rx427_eos, rxscan431_done
+  rxscan431_scan:
+    set_addr $I10, rxscan431_loop
+    rx427_cur."!mark_push"(0, rx427_pos, $I10)
+  rxscan431_done:
+.annotate "line", 224
   # rx subrule "scope_declarator" subtype=capture negate=
-    rx424_cur."!cursor_pos"(rx424_pos)
-    $P10 = rx424_cur."scope_declarator"()
-    unless $P10, rx424_fail
-    rx424_cur."!mark_push"(0, -1, 0, $P10)
+    rx427_cur."!cursor_pos"(rx427_pos)
+    $P10 = rx427_cur."scope_declarator"()
+    unless $P10, rx427_fail
+    rx427_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scope_declarator")
-    rx424_pos = $P10."pos"()
+    rx427_pos = $P10."pos"()
   # rx pass
-    rx424_cur."!cursor_pass"(rx424_pos, "term:sym<scope_declarator>")
-    rx424_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx424_pos)
-    .return (rx424_cur)
-  rx424_fail:
+    rx427_cur."!cursor_pass"(rx427_pos, "term:sym<scope_declarator>")
+    rx427_cur."!cursor_debug"("PASS  ", "term:sym<scope_declarator>", " at pos=", rx427_pos)
+    .return (rx427_cur)
+  rx427_fail:
 .annotate "line", 4
-    (rx424_rep, rx424_pos, $I10, $P10) = rx424_cur."!mark_fail"(0)
-    lt rx424_pos, -1, rx424_done
-    eq rx424_pos, -1, rx424_fail
+    (rx427_rep, rx427_pos, $I10, $P10) = rx427_cur."!mark_fail"(0)
+    lt rx427_pos, -1, rx427_done
+    eq rx427_pos, -1, rx427_fail
     jump $I10
-  rx424_done:
-    rx424_cur."!cursor_fail"()
-    rx424_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
-    .return (rx424_cur)
+  rx427_done:
+    rx427_cur."!cursor_fail"()
+    rx427_cur."!cursor_debug"("FAIL  ", "term:sym<scope_declarator>")
+    .return (rx427_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1267204702.05125") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1271336396.90314") :method
 .annotate "line", 4
-    $P426 = self."!PREFIX__!subrule"("scope_declarator", "")
-    new $P427, "ResizablePMCArray"
-    push $P427, $P426
-    .return ($P427)
+    $P429 = self."!PREFIX__!subrule"("scope_declarator", "")
+    new $P430, "ResizablePMCArray"
+    push $P430, $P429
+    .return ($P430)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("105_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<routine_declarator>"  :subid("105_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx430_tgt
-    .local int rx430_pos
-    .local int rx430_off
-    .local int rx430_eos
-    .local int rx430_rep
-    .local pmc rx430_cur
-    (rx430_cur, rx430_pos, rx430_tgt) = self."!cursor_start"()
-    rx430_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
-    .lex unicode:"$\x{a2}", rx430_cur
+    .local string rx433_tgt
+    .local int rx433_pos
+    .local int rx433_off
+    .local int rx433_eos
+    .local int rx433_rep
+    .local pmc rx433_cur
+    (rx433_cur, rx433_pos, rx433_tgt) = self."!cursor_start"()
+    rx433_cur."!cursor_debug"("START ", "term:sym<routine_declarator>")
+    .lex unicode:"$\x{a2}", rx433_cur
     .local pmc match
     .lex "$/", match
-    length rx430_eos, rx430_tgt
-    set rx430_off, 0
-    lt rx430_pos, 2, rx430_start
-    sub rx430_off, rx430_pos, 1
-    substr rx430_tgt, rx430_tgt, rx430_off
-  rx430_start:
+    length rx433_eos, rx433_tgt
+    set rx433_off, 0
+    lt rx433_pos, 2, rx433_start
+    sub rx433_off, rx433_pos, 1
+    substr rx433_tgt, rx433_tgt, rx433_off
+  rx433_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan434_done
-    goto rxscan434_scan
-  rxscan434_loop:
-    ($P10) = rx430_cur."from"()
+    ne $I10, -1, rxscan437_done
+    goto rxscan437_scan
+  rxscan437_loop:
+    ($P10) = rx433_cur."from"()
     inc $P10
-    set rx430_pos, $P10
-    ge rx430_pos, rx430_eos, rxscan434_done
-  rxscan434_scan:
-    set_addr $I10, rxscan434_loop
-    rx430_cur."!mark_push"(0, rx430_pos, $I10)
-  rxscan434_done:
-.annotate "line", 221
+    set rx433_pos, $P10
+    ge rx433_pos, rx433_eos, rxscan437_done
+  rxscan437_scan:
+    set_addr $I10, rxscan437_loop
+    rx433_cur."!mark_push"(0, rx433_pos, $I10)
+  rxscan437_done:
+.annotate "line", 225
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx430_cur."!cursor_pos"(rx430_pos)
-    $P10 = rx430_cur."routine_declarator"()
-    unless $P10, rx430_fail
-    rx430_cur."!mark_push"(0, -1, 0, $P10)
+    rx433_cur."!cursor_pos"(rx433_pos)
+    $P10 = rx433_cur."routine_declarator"()
+    unless $P10, rx433_fail
+    rx433_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx430_pos = $P10."pos"()
+    rx433_pos = $P10."pos"()
   # rx pass
-    rx430_cur."!cursor_pass"(rx430_pos, "term:sym<routine_declarator>")
-    rx430_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx430_pos)
-    .return (rx430_cur)
-  rx430_fail:
+    rx433_cur."!cursor_pass"(rx433_pos, "term:sym<routine_declarator>")
+    rx433_cur."!cursor_debug"("PASS  ", "term:sym<routine_declarator>", " at pos=", rx433_pos)
+    .return (rx433_cur)
+  rx433_fail:
 .annotate "line", 4
-    (rx430_rep, rx430_pos, $I10, $P10) = rx430_cur."!mark_fail"(0)
-    lt rx430_pos, -1, rx430_done
-    eq rx430_pos, -1, rx430_fail
+    (rx433_rep, rx433_pos, $I10, $P10) = rx433_cur."!mark_fail"(0)
+    lt rx433_pos, -1, rx433_done
+    eq rx433_pos, -1, rx433_fail
     jump $I10
-  rx430_done:
-    rx430_cur."!cursor_fail"()
-    rx430_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
-    .return (rx430_cur)
+  rx433_done:
+    rx433_cur."!cursor_fail"()
+    rx433_cur."!cursor_debug"("FAIL  ", "term:sym<routine_declarator>")
+    .return (rx433_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1267204702.05125") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1271336396.90314") :method
 .annotate "line", 4
-    $P432 = self."!PREFIX__!subrule"("routine_declarator", "")
-    new $P433, "ResizablePMCArray"
-    push $P433, $P432
-    .return ($P433)
+    $P435 = self."!PREFIX__!subrule"("routine_declarator", "")
+    new $P436, "ResizablePMCArray"
+    push $P436, $P435
+    .return ($P436)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("107_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<regex_declarator>"  :subid("107_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx436_tgt
-    .local int rx436_pos
-    .local int rx436_off
-    .local int rx436_eos
-    .local int rx436_rep
-    .local pmc rx436_cur
-    (rx436_cur, rx436_pos, rx436_tgt) = self."!cursor_start"()
-    rx436_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
-    .lex unicode:"$\x{a2}", rx436_cur
+    .local string rx439_tgt
+    .local int rx439_pos
+    .local int rx439_off
+    .local int rx439_eos
+    .local int rx439_rep
+    .local pmc rx439_cur
+    (rx439_cur, rx439_pos, rx439_tgt) = self."!cursor_start"()
+    rx439_cur."!cursor_debug"("START ", "term:sym<regex_declarator>")
+    .lex unicode:"$\x{a2}", rx439_cur
     .local pmc match
     .lex "$/", match
-    length rx436_eos, rx436_tgt
-    set rx436_off, 0
-    lt rx436_pos, 2, rx436_start
-    sub rx436_off, rx436_pos, 1
-    substr rx436_tgt, rx436_tgt, rx436_off
-  rx436_start:
+    length rx439_eos, rx439_tgt
+    set rx439_off, 0
+    lt rx439_pos, 2, rx439_start
+    sub rx439_off, rx439_pos, 1
+    substr rx439_tgt, rx439_tgt, rx439_off
+  rx439_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan440_done
-    goto rxscan440_scan
-  rxscan440_loop:
-    ($P10) = rx436_cur."from"()
+    ne $I10, -1, rxscan443_done
+    goto rxscan443_scan
+  rxscan443_loop:
+    ($P10) = rx439_cur."from"()
     inc $P10
-    set rx436_pos, $P10
-    ge rx436_pos, rx436_eos, rxscan440_done
-  rxscan440_scan:
-    set_addr $I10, rxscan440_loop
-    rx436_cur."!mark_push"(0, rx436_pos, $I10)
-  rxscan440_done:
-.annotate "line", 222
+    set rx439_pos, $P10
+    ge rx439_pos, rx439_eos, rxscan443_done
+  rxscan443_scan:
+    set_addr $I10, rxscan443_loop
+    rx439_cur."!mark_push"(0, rx439_pos, $I10)
+  rxscan443_done:
+.annotate "line", 226
   # rx subrule "regex_declarator" subtype=capture negate=
-    rx436_cur."!cursor_pos"(rx436_pos)
-    $P10 = rx436_cur."regex_declarator"()
-    unless $P10, rx436_fail
-    rx436_cur."!mark_push"(0, -1, 0, $P10)
+    rx439_cur."!cursor_pos"(rx439_pos)
+    $P10 = rx439_cur."regex_declarator"()
+    unless $P10, rx439_fail
+    rx439_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("regex_declarator")
-    rx436_pos = $P10."pos"()
+    rx439_pos = $P10."pos"()
   # rx pass
-    rx436_cur."!cursor_pass"(rx436_pos, "term:sym<regex_declarator>")
-    rx436_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx436_pos)
-    .return (rx436_cur)
-  rx436_fail:
+    rx439_cur."!cursor_pass"(rx439_pos, "term:sym<regex_declarator>")
+    rx439_cur."!cursor_debug"("PASS  ", "term:sym<regex_declarator>", " at pos=", rx439_pos)
+    .return (rx439_cur)
+  rx439_fail:
 .annotate "line", 4
-    (rx436_rep, rx436_pos, $I10, $P10) = rx436_cur."!mark_fail"(0)
-    lt rx436_pos, -1, rx436_done
-    eq rx436_pos, -1, rx436_fail
+    (rx439_rep, rx439_pos, $I10, $P10) = rx439_cur."!mark_fail"(0)
+    lt rx439_pos, -1, rx439_done
+    eq rx439_pos, -1, rx439_fail
     jump $I10
-  rx436_done:
-    rx436_cur."!cursor_fail"()
-    rx436_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
-    .return (rx436_cur)
+  rx439_done:
+    rx439_cur."!cursor_fail"()
+    rx439_cur."!cursor_debug"("FAIL  ", "term:sym<regex_declarator>")
+    .return (rx439_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1267204702.05125") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1271336396.90314") :method
 .annotate "line", 4
-    $P438 = self."!PREFIX__!subrule"("regex_declarator", "")
-    new $P439, "ResizablePMCArray"
-    push $P439, $P438
-    .return ($P439)
+    $P441 = self."!PREFIX__!subrule"("regex_declarator", "")
+    new $P442, "ResizablePMCArray"
+    push $P442, $P441
+    .return ($P442)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("109_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<statement_prefix>"  :subid("109_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx442_tgt
-    .local int rx442_pos
-    .local int rx442_off
-    .local int rx442_eos
-    .local int rx442_rep
-    .local pmc rx442_cur
-    (rx442_cur, rx442_pos, rx442_tgt) = self."!cursor_start"()
-    rx442_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
-    .lex unicode:"$\x{a2}", rx442_cur
+    .local string rx445_tgt
+    .local int rx445_pos
+    .local int rx445_off
+    .local int rx445_eos
+    .local int rx445_rep
+    .local pmc rx445_cur
+    (rx445_cur, rx445_pos, rx445_tgt) = self."!cursor_start"()
+    rx445_cur."!cursor_debug"("START ", "term:sym<statement_prefix>")
+    .lex unicode:"$\x{a2}", rx445_cur
     .local pmc match
     .lex "$/", match
-    length rx442_eos, rx442_tgt
-    set rx442_off, 0
-    lt rx442_pos, 2, rx442_start
-    sub rx442_off, rx442_pos, 1
-    substr rx442_tgt, rx442_tgt, rx442_off
-  rx442_start:
+    length rx445_eos, rx445_tgt
+    set rx445_off, 0
+    lt rx445_pos, 2, rx445_start
+    sub rx445_off, rx445_pos, 1
+    substr rx445_tgt, rx445_tgt, rx445_off
+  rx445_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan446_done
-    goto rxscan446_scan
-  rxscan446_loop:
-    ($P10) = rx442_cur."from"()
+    ne $I10, -1, rxscan449_done
+    goto rxscan449_scan
+  rxscan449_loop:
+    ($P10) = rx445_cur."from"()
     inc $P10
-    set rx442_pos, $P10
-    ge rx442_pos, rx442_eos, rxscan446_done
-  rxscan446_scan:
-    set_addr $I10, rxscan446_loop
-    rx442_cur."!mark_push"(0, rx442_pos, $I10)
-  rxscan446_done:
-.annotate "line", 223
+    set rx445_pos, $P10
+    ge rx445_pos, rx445_eos, rxscan449_done
+  rxscan449_scan:
+    set_addr $I10, rxscan449_loop
+    rx445_cur."!mark_push"(0, rx445_pos, $I10)
+  rxscan449_done:
+.annotate "line", 227
   # rx subrule "statement_prefix" subtype=capture negate=
-    rx442_cur."!cursor_pos"(rx442_pos)
-    $P10 = rx442_cur."statement_prefix"()
-    unless $P10, rx442_fail
-    rx442_cur."!mark_push"(0, -1, 0, $P10)
+    rx445_cur."!cursor_pos"(rx445_pos)
+    $P10 = rx445_cur."statement_prefix"()
+    unless $P10, rx445_fail
+    rx445_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement_prefix")
-    rx442_pos = $P10."pos"()
+    rx445_pos = $P10."pos"()
   # rx pass
-    rx442_cur."!cursor_pass"(rx442_pos, "term:sym<statement_prefix>")
-    rx442_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx442_pos)
-    .return (rx442_cur)
-  rx442_fail:
+    rx445_cur."!cursor_pass"(rx445_pos, "term:sym<statement_prefix>")
+    rx445_cur."!cursor_debug"("PASS  ", "term:sym<statement_prefix>", " at pos=", rx445_pos)
+    .return (rx445_cur)
+  rx445_fail:
 .annotate "line", 4
-    (rx442_rep, rx442_pos, $I10, $P10) = rx442_cur."!mark_fail"(0)
-    lt rx442_pos, -1, rx442_done
-    eq rx442_pos, -1, rx442_fail
+    (rx445_rep, rx445_pos, $I10, $P10) = rx445_cur."!mark_fail"(0)
+    lt rx445_pos, -1, rx445_done
+    eq rx445_pos, -1, rx445_fail
     jump $I10
-  rx442_done:
-    rx442_cur."!cursor_fail"()
-    rx442_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
-    .return (rx442_cur)
+  rx445_done:
+    rx445_cur."!cursor_fail"()
+    rx445_cur."!cursor_debug"("FAIL  ", "term:sym<statement_prefix>")
+    .return (rx445_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1267204702.05125") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1271336396.90314") :method
 .annotate "line", 4
-    $P444 = self."!PREFIX__!subrule"("statement_prefix", "")
-    new $P445, "ResizablePMCArray"
-    push $P445, $P444
-    .return ($P445)
+    $P447 = self."!PREFIX__!subrule"("statement_prefix", "")
+    new $P448, "ResizablePMCArray"
+    push $P448, $P447
+    .return ($P448)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("111_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<lambda>"  :subid("111_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx448_tgt
-    .local int rx448_pos
-    .local int rx448_off
-    .local int rx448_eos
-    .local int rx448_rep
-    .local pmc rx448_cur
-    (rx448_cur, rx448_pos, rx448_tgt) = self."!cursor_start"()
-    rx448_cur."!cursor_debug"("START ", "term:sym<lambda>")
-    .lex unicode:"$\x{a2}", rx448_cur
+    .local string rx451_tgt
+    .local int rx451_pos
+    .local int rx451_off
+    .local int rx451_eos
+    .local int rx451_rep
+    .local pmc rx451_cur
+    (rx451_cur, rx451_pos, rx451_tgt) = self."!cursor_start"()
+    rx451_cur."!cursor_debug"("START ", "term:sym<lambda>")
+    .lex unicode:"$\x{a2}", rx451_cur
     .local pmc match
     .lex "$/", match
-    length rx448_eos, rx448_tgt
-    set rx448_off, 0
-    lt rx448_pos, 2, rx448_start
-    sub rx448_off, rx448_pos, 1
-    substr rx448_tgt, rx448_tgt, rx448_off
-  rx448_start:
+    length rx451_eos, rx451_tgt
+    set rx451_off, 0
+    lt rx451_pos, 2, rx451_start
+    sub rx451_off, rx451_pos, 1
+    substr rx451_tgt, rx451_tgt, rx451_off
+  rx451_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan451_done
-    goto rxscan451_scan
-  rxscan451_loop:
-    ($P10) = rx448_cur."from"()
+    ne $I10, -1, rxscan454_done
+    goto rxscan454_scan
+  rxscan454_loop:
+    ($P10) = rx451_cur."from"()
     inc $P10
-    set rx448_pos, $P10
-    ge rx448_pos, rx448_eos, rxscan451_done
-  rxscan451_scan:
-    set_addr $I10, rxscan451_loop
-    rx448_cur."!mark_push"(0, rx448_pos, $I10)
-  rxscan451_done:
-.annotate "line", 224
+    set rx451_pos, $P10
+    ge rx451_pos, rx451_eos, rxscan454_done
+  rxscan454_scan:
+    set_addr $I10, rxscan454_loop
+    rx451_cur."!mark_push"(0, rx451_pos, $I10)
+  rxscan454_done:
+.annotate "line", 228
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx448_cur."!cursor_pos"(rx448_pos)
-    $P10 = rx448_cur."lambda"()
-    unless $P10, rx448_fail
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."lambda"()
+    unless $P10, rx451_fail
   # rx subrule "pblock" subtype=capture negate=
-    rx448_cur."!cursor_pos"(rx448_pos)
-    $P10 = rx448_cur."pblock"()
-    unless $P10, rx448_fail
-    rx448_cur."!mark_push"(0, -1, 0, $P10)
+    rx451_cur."!cursor_pos"(rx451_pos)
+    $P10 = rx451_cur."pblock"()
+    unless $P10, rx451_fail
+    rx451_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx448_pos = $P10."pos"()
+    rx451_pos = $P10."pos"()
   # rx pass
-    rx448_cur."!cursor_pass"(rx448_pos, "term:sym<lambda>")
-    rx448_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx448_pos)
-    .return (rx448_cur)
-  rx448_fail:
+    rx451_cur."!cursor_pass"(rx451_pos, "term:sym<lambda>")
+    rx451_cur."!cursor_debug"("PASS  ", "term:sym<lambda>", " at pos=", rx451_pos)
+    .return (rx451_cur)
+  rx451_fail:
 .annotate "line", 4
-    (rx448_rep, rx448_pos, $I10, $P10) = rx448_cur."!mark_fail"(0)
-    lt rx448_pos, -1, rx448_done
-    eq rx448_pos, -1, rx448_fail
+    (rx451_rep, rx451_pos, $I10, $P10) = rx451_cur."!mark_fail"(0)
+    lt rx451_pos, -1, rx451_done
+    eq rx451_pos, -1, rx451_fail
     jump $I10
-  rx448_done:
-    rx448_cur."!cursor_fail"()
-    rx448_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
-    .return (rx448_cur)
+  rx451_done:
+    rx451_cur."!cursor_fail"()
+    rx451_cur."!cursor_debug"("FAIL  ", "term:sym<lambda>")
+    .return (rx451_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("112_1267204702.05125") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("112_1271336396.90314") :method
 .annotate "line", 4
-    new $P450, "ResizablePMCArray"
-    push $P450, ""
-    .return ($P450)
+    new $P453, "ResizablePMCArray"
+    push $P453, ""
+    .return ($P453)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("113_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "fatarrow"  :subid("113_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx453_tgt
-    .local int rx453_pos
-    .local int rx453_off
-    .local int rx453_eos
-    .local int rx453_rep
-    .local pmc rx453_cur
-    (rx453_cur, rx453_pos, rx453_tgt) = self."!cursor_start"()
-    rx453_cur."!cursor_debug"("START ", "fatarrow")
-    .lex unicode:"$\x{a2}", rx453_cur
+    .local string rx456_tgt
+    .local int rx456_pos
+    .local int rx456_off
+    .local int rx456_eos
+    .local int rx456_rep
+    .local pmc rx456_cur
+    (rx456_cur, rx456_pos, rx456_tgt) = self."!cursor_start"()
+    rx456_cur."!cursor_debug"("START ", "fatarrow")
+    .lex unicode:"$\x{a2}", rx456_cur
     .local pmc match
     .lex "$/", match
-    length rx453_eos, rx453_tgt
-    set rx453_off, 0
-    lt rx453_pos, 2, rx453_start
-    sub rx453_off, rx453_pos, 1
-    substr rx453_tgt, rx453_tgt, rx453_off
-  rx453_start:
+    length rx456_eos, rx456_tgt
+    set rx456_off, 0
+    lt rx456_pos, 2, rx456_start
+    sub rx456_off, rx456_pos, 1
+    substr rx456_tgt, rx456_tgt, rx456_off
+  rx456_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan457_done
-    goto rxscan457_scan
-  rxscan457_loop:
-    ($P10) = rx453_cur."from"()
+    ne $I10, -1, rxscan460_done
+    goto rxscan460_scan
+  rxscan460_loop:
+    ($P10) = rx456_cur."from"()
     inc $P10
-    set rx453_pos, $P10
-    ge rx453_pos, rx453_eos, rxscan457_done
-  rxscan457_scan:
-    set_addr $I10, rxscan457_loop
-    rx453_cur."!mark_push"(0, rx453_pos, $I10)
-  rxscan457_done:
-.annotate "line", 227
+    set rx456_pos, $P10
+    ge rx456_pos, rx456_eos, rxscan460_done
+  rxscan460_scan:
+    set_addr $I10, rxscan460_loop
+    rx456_cur."!mark_push"(0, rx456_pos, $I10)
+  rxscan460_done:
+.annotate "line", 231
   # rx subrule "identifier" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."identifier"()
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."identifier"()
+    unless $P10, rx456_fail
+    rx456_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("key")
-    rx453_pos = $P10."pos"()
-  # rx rxquantr458 ** 0..*
-    set_addr $I459, rxquantr458_done
-    rx453_cur."!mark_push"(0, rx453_pos, $I459)
-  rxquantr458_loop:
+    rx456_pos = $P10."pos"()
+  # rx rxquantr461 ** 0..*
+    set_addr $I462, rxquantr461_done
+    rx456_cur."!mark_push"(0, rx456_pos, $I462)
+  rxquantr461_loop:
   # rx enumcharlist negate=0 
-    ge rx453_pos, rx453_eos, rx453_fail
-    sub $I10, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I10, 1
+    ge rx456_pos, rx456_eos, rx456_fail
+    sub $I10, rx456_pos, rx456_off
+    substr $S10, rx456_tgt, $I10, 1
     index $I11, unicode:"\t \x{a0}\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000", $S10
-    lt $I11, 0, rx453_fail
-    inc rx453_pos
-    (rx453_rep) = rx453_cur."!mark_commit"($I459)
-    rx453_cur."!mark_push"(rx453_rep, rx453_pos, $I459)
-    goto rxquantr458_loop
-  rxquantr458_done:
+    lt $I11, 0, rx456_fail
+    inc rx456_pos
+    (rx456_rep) = rx456_cur."!mark_commit"($I462)
+    rx456_cur."!mark_push"(rx456_rep, rx456_pos, $I462)
+    goto rxquantr461_loop
+  rxquantr461_done:
   # rx literal  "=>"
-    add $I11, rx453_pos, 2
-    gt $I11, rx453_eos, rx453_fail
-    sub $I11, rx453_pos, rx453_off
-    substr $S10, rx453_tgt, $I11, 2
-    ne $S10, "=>", rx453_fail
-    add rx453_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."ws"()
-    unless $P10, rx453_fail
-    rx453_pos = $P10."pos"()
+    add $I11, rx456_pos, 2
+    gt $I11, rx456_eos, rx456_fail
+    sub $I11, rx456_pos, rx456_off
+    substr $S10, rx456_tgt, $I11, 2
+    ne $S10, "=>", rx456_fail
+    add rx456_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."ws"()
+    unless $P10, rx456_fail
+    rx456_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx453_cur."!cursor_pos"(rx453_pos)
-    $P10 = rx453_cur."EXPR"("i=")
-    unless $P10, rx453_fail
-    rx453_cur."!mark_push"(0, -1, 0, $P10)
+    rx456_cur."!cursor_pos"(rx456_pos)
+    $P10 = rx456_cur."EXPR"("i=")
+    unless $P10, rx456_fail
+    rx456_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("val")
-    rx453_pos = $P10."pos"()
-.annotate "line", 226
+    rx456_pos = $P10."pos"()
+.annotate "line", 230
   # rx pass
-    rx453_cur."!cursor_pass"(rx453_pos, "fatarrow")
-    rx453_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx453_pos)
-    .return (rx453_cur)
-  rx453_fail:
+    rx456_cur."!cursor_pass"(rx456_pos, "fatarrow")
+    rx456_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx456_pos)
+    .return (rx456_cur)
+  rx456_fail:
 .annotate "line", 4
-    (rx453_rep, rx453_pos, $I10, $P10) = rx453_cur."!mark_fail"(0)
-    lt rx453_pos, -1, rx453_done
-    eq rx453_pos, -1, rx453_fail
+    (rx456_rep, rx456_pos, $I10, $P10) = rx456_cur."!mark_fail"(0)
+    lt rx456_pos, -1, rx456_done
+    eq rx456_pos, -1, rx456_fail
     jump $I10
-  rx453_done:
-    rx453_cur."!cursor_fail"()
-    rx453_cur."!cursor_debug"("FAIL  ", "fatarrow")
-    .return (rx453_cur)
+  rx456_done:
+    rx456_cur."!cursor_fail"()
+    rx456_cur."!cursor_debug"("FAIL  ", "fatarrow")
+    .return (rx456_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("114_1267204702.05125") :method
+.sub "!PREFIX__fatarrow"  :subid("114_1271336396.90314") :method
 .annotate "line", 4
-    $P455 = self."!PREFIX__!subrule"("key", "")
-    new $P456, "ResizablePMCArray"
-    push $P456, $P455
-    .return ($P456)
+    $P458 = self."!PREFIX__!subrule"("key", "")
+    new $P459, "ResizablePMCArray"
+    push $P459, $P458
+    .return ($P459)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("115_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "colonpair"  :subid("115_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx461_tgt
-    .local int rx461_pos
-    .local int rx461_off
-    .local int rx461_eos
-    .local int rx461_rep
-    .local pmc rx461_cur
-    (rx461_cur, rx461_pos, rx461_tgt) = self."!cursor_start"()
-    rx461_cur."!cursor_debug"("START ", "colonpair")
-    rx461_cur."!cursor_caparray"("circumfix")
-    .lex unicode:"$\x{a2}", rx461_cur
+    .local string rx464_tgt
+    .local int rx464_pos
+    .local int rx464_off
+    .local int rx464_eos
+    .local int rx464_rep
+    .local pmc rx464_cur
+    (rx464_cur, rx464_pos, rx464_tgt) = self."!cursor_start"()
+    rx464_cur."!cursor_debug"("START ", "colonpair")
+    rx464_cur."!cursor_caparray"("circumfix")
+    .lex unicode:"$\x{a2}", rx464_cur
     .local pmc match
     .lex "$/", match
-    length rx461_eos, rx461_tgt
-    set rx461_off, 0
-    lt rx461_pos, 2, rx461_start
-    sub rx461_off, rx461_pos, 1
-    substr rx461_tgt, rx461_tgt, rx461_off
-  rx461_start:
+    length rx464_eos, rx464_tgt
+    set rx464_off, 0
+    lt rx464_pos, 2, rx464_start
+    sub rx464_off, rx464_pos, 1
+    substr rx464_tgt, rx464_tgt, rx464_off
+  rx464_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan467_done
-    goto rxscan467_scan
-  rxscan467_loop:
-    ($P10) = rx461_cur."from"()
+    ne $I10, -1, rxscan470_done
+    goto rxscan470_scan
+  rxscan470_loop:
+    ($P10) = rx464_cur."from"()
     inc $P10
-    set rx461_pos, $P10
-    ge rx461_pos, rx461_eos, rxscan467_done
-  rxscan467_scan:
-    set_addr $I10, rxscan467_loop
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-  rxscan467_done:
-.annotate "line", 231
+    set rx464_pos, $P10
+    ge rx464_pos, rx464_eos, rxscan470_done
+  rxscan470_scan:
+    set_addr $I10, rxscan470_loop
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+  rxscan470_done:
+.annotate "line", 235
   # rx literal  ":"
-    add $I11, rx461_pos, 1
-    gt $I11, rx461_eos, rx461_fail
-    sub $I11, rx461_pos, rx461_off
-    substr $S10, rx461_tgt, $I11, 1
-    ne $S10, ":", rx461_fail
-    add rx461_pos, 1
-  alt468_0:
-.annotate "line", 232
-    set_addr $I10, alt468_1
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 233
+    add $I11, rx464_pos, 1
+    gt $I11, rx464_eos, rx464_fail
+    sub $I11, rx464_pos, rx464_off
+    substr $S10, rx464_tgt, $I11, 1
+    ne $S10, ":", rx464_fail
+    add rx464_pos, 1
+  alt471_0:
+.annotate "line", 236
+    set_addr $I10, alt471_1
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+.annotate "line", 237
   # rx subcapture "not"
-    set_addr $I10, rxcap_469_fail
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
+    set_addr $I10, rxcap_472_fail
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
   # rx literal  "!"
-    add $I11, rx461_pos, 1
-    gt $I11, rx461_eos, rx461_fail
-    sub $I11, rx461_pos, rx461_off
-    substr $S10, rx461_tgt, $I11, 1
-    ne $S10, "!", rx461_fail
-    add rx461_pos, 1
-    set_addr $I10, rxcap_469_fail
-    ($I12, $I11) = rx461_cur."!mark_peek"($I10)
-    rx461_cur."!cursor_pos"($I11)
-    ($P10) = rx461_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx461_pos, "")
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx464_pos, 1
+    gt $I11, rx464_eos, rx464_fail
+    sub $I11, rx464_pos, rx464_off
+    substr $S10, rx464_tgt, $I11, 1
+    ne $S10, "!", rx464_fail
+    add rx464_pos, 1
+    set_addr $I10, rxcap_472_fail
+    ($I12, $I11) = rx464_cur."!mark_peek"($I10)
+    rx464_cur."!cursor_pos"($I11)
+    ($P10) = rx464_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx464_pos, "")
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("not")
-    goto rxcap_469_done
-  rxcap_469_fail:
-    goto rx461_fail
-  rxcap_469_done:
+    goto rxcap_472_done
+  rxcap_472_fail:
+    goto rx464_fail
+  rxcap_472_done:
   # rx subrule "identifier" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."identifier"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."identifier"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx461_pos = $P10."pos"()
-    goto alt468_end
-  alt468_1:
-    set_addr $I10, alt468_2
-    rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 234
+    rx464_pos = $P10."pos"()
+    goto alt471_end
+  alt471_1:
+    set_addr $I10, alt471_2
+    rx464_cur."!mark_push"(0, rx464_pos, $I10)
+.annotate "line", 238
   # rx subrule "identifier" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."identifier"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."identifier"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx461_pos = $P10."pos"()
-  # rx rxquantr470 ** 0..1
-    set_addr $I471, rxquantr470_done
-    rx461_cur."!mark_push"(0, rx461_pos, $I471)
-  rxquantr470_loop:
+    rx464_pos = $P10."pos"()
+  # rx rxquantr473 ** 0..1
+    set_addr $I474, rxquantr473_done
+    rx464_cur."!mark_push"(0, rx464_pos, $I474)
+  rxquantr473_loop:
   # rx subrule "circumfix" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."circumfix"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."circumfix"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx461_pos = $P10."pos"()
-    (rx461_rep) = rx461_cur."!mark_commit"($I471)
-  rxquantr470_done:
-    goto alt468_end
-  alt468_2:
-.annotate "line", 235
+    rx464_pos = $P10."pos"()
+    (rx464_rep) = rx464_cur."!mark_commit"($I474)
+  rxquantr473_done:
+    goto alt471_end
+  alt471_2:
+.annotate "line", 239
   # rx subrule "circumfix" subtype=capture negate=
-    rx461_cur."!cursor_pos"(rx461_pos)
-    $P10 = rx461_cur."circumfix"()
-    unless $P10, rx461_fail
-    rx461_cur."!mark_push"(0, -1, 0, $P10)
+    rx464_cur."!cursor_pos"(rx464_pos)
+    $P10 = rx464_cur."circumfix"()
+    unless $P10, rx464_fail
+    rx464_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("circumfix")
-    rx461_pos = $P10."pos"()
-  alt468_end:
-.annotate "line", 230
+    rx464_pos = $P10."pos"()
+  alt471_end:
+.annotate "line", 234
   # rx pass
-    rx461_cur."!cursor_pass"(rx461_pos, "colonpair")
-    rx461_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx461_pos)
-    .return (rx461_cur)
-  rx461_fail:
+    rx464_cur."!cursor_pass"(rx464_pos, "colonpair")
+    rx464_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx464_pos)
+    .return (rx464_cur)
+  rx464_fail:
 .annotate "line", 4
-    (rx461_rep, rx461_pos, $I10, $P10) = rx461_cur."!mark_fail"(0)
-    lt rx461_pos, -1, rx461_done
-    eq rx461_pos, -1, rx461_fail
+    (rx464_rep, rx464_pos, $I10, $P10) = rx464_cur."!mark_fail"(0)
+    lt rx464_pos, -1, rx464_done
+    eq rx464_pos, -1, rx464_fail
     jump $I10
-  rx461_done:
-    rx461_cur."!cursor_fail"()
-    rx461_cur."!cursor_debug"("FAIL  ", "colonpair")
-    .return (rx461_cur)
+  rx464_done:
+    rx464_cur."!cursor_fail"()
+    rx464_cur."!cursor_debug"("FAIL  ", "colonpair")
+    .return (rx464_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("116_1267204702.05125") :method
+.sub "!PREFIX__colonpair"  :subid("116_1271336396.90314") :method
 .annotate "line", 4
-    $P463 = self."!PREFIX__!subrule"("circumfix", ":")
-    $P464 = self."!PREFIX__!subrule"("identifier", ":")
-    $P465 = self."!PREFIX__!subrule"("identifier", ":!")
-    new $P466, "ResizablePMCArray"
-    push $P466, $P463
-    push $P466, $P464
-    push $P466, $P465
-    .return ($P466)
+    $P466 = self."!PREFIX__!subrule"("circumfix", ":")
+    $P467 = self."!PREFIX__!subrule"("identifier", ":")
+    $P468 = self."!PREFIX__!subrule"("identifier", ":!")
+    new $P469, "ResizablePMCArray"
+    push $P469, $P466
+    push $P469, $P467
+    push $P469, $P468
+    .return ($P469)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("117_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "variable"  :subid("117_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx473_tgt
-    .local int rx473_pos
-    .local int rx473_off
-    .local int rx473_eos
-    .local int rx473_rep
-    .local pmc rx473_cur
-    (rx473_cur, rx473_pos, rx473_tgt) = self."!cursor_start"()
-    rx473_cur."!cursor_debug"("START ", "variable")
-    rx473_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx473_cur
+    .local string rx476_tgt
+    .local int rx476_pos
+    .local int rx476_off
+    .local int rx476_eos
+    .local int rx476_rep
+    .local pmc rx476_cur
+    (rx476_cur, rx476_pos, rx476_tgt) = self."!cursor_start"()
+    rx476_cur."!cursor_debug"("START ", "variable")
+    rx476_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx476_cur
     .local pmc match
     .lex "$/", match
-    length rx473_eos, rx473_tgt
-    set rx473_off, 0
-    lt rx473_pos, 2, rx473_start
-    sub rx473_off, rx473_pos, 1
-    substr rx473_tgt, rx473_tgt, rx473_off
-  rx473_start:
+    length rx476_eos, rx476_tgt
+    set rx476_off, 0
+    lt rx476_pos, 2, rx476_start
+    sub rx476_off, rx476_pos, 1
+    substr rx476_tgt, rx476_tgt, rx476_off
+  rx476_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan478_done
-    goto rxscan478_scan
-  rxscan478_loop:
-    ($P10) = rx473_cur."from"()
+    ne $I10, -1, rxscan481_done
+    goto rxscan481_scan
+  rxscan481_loop:
+    ($P10) = rx476_cur."from"()
     inc $P10
-    set rx473_pos, $P10
-    ge rx473_pos, rx473_eos, rxscan478_done
-  rxscan478_scan:
-    set_addr $I10, rxscan478_loop
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-  rxscan478_done:
-  alt479_0:
-.annotate "line", 239
-    set_addr $I10, alt479_1
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 240
+    set rx476_pos, $P10
+    ge rx476_pos, rx476_eos, rxscan481_done
+  rxscan481_scan:
+    set_addr $I10, rxscan481_loop
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+  rxscan481_done:
+  alt482_0:
+.annotate "line", 243
+    set_addr $I10, alt482_1
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+.annotate "line", 244
   # rx subrule "sigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."sigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."sigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx473_pos = $P10."pos"()
-  # rx rxquantr480 ** 0..1
-    set_addr $I481, rxquantr480_done
-    rx473_cur."!mark_push"(0, rx473_pos, $I481)
-  rxquantr480_loop:
+    rx476_pos = $P10."pos"()
+  # rx rxquantr483 ** 0..1
+    set_addr $I484, rxquantr483_done
+    rx476_cur."!mark_push"(0, rx476_pos, $I484)
+  rxquantr483_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."twigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."twigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx473_pos = $P10."pos"()
-    (rx473_rep) = rx473_cur."!mark_commit"($I481)
-  rxquantr480_done:
+    rx476_pos = $P10."pos"()
+    (rx476_rep) = rx476_cur."!mark_commit"($I484)
+  rxquantr483_done:
   # rx subrule "name" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."name"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."name"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    rx473_pos = $P10."pos"()
-    goto alt479_end
-  alt479_1:
-    set_addr $I10, alt479_2
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 241
+    rx476_pos = $P10."pos"()
+    goto alt482_end
+  alt482_1:
+    set_addr $I10, alt482_2
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
+.annotate "line", 245
   # rx subrule "sigil" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."sigil"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."sigil"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx473_pos = $P10."pos"()
+    rx476_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx473_pos, rx473_eos, rx473_fail
-    sub $I10, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I10, 1
+    ge rx476_pos, rx476_eos, rx476_fail
+    sub $I10, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I10, 1
     index $I11, "<[", $S10
-    lt $I11, 0, rx473_fail
+    lt $I11, 0, rx476_fail
   # rx subrule "postcircumfix" subtype=capture negate=
-    rx473_cur."!cursor_pos"(rx473_pos)
-    $P10 = rx473_cur."postcircumfix"()
-    unless $P10, rx473_fail
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    rx476_cur."!cursor_pos"(rx476_pos)
+    $P10 = rx476_cur."postcircumfix"()
+    unless $P10, rx476_fail
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("postcircumfix")
-    rx473_pos = $P10."pos"()
-    goto alt479_end
-  alt479_2:
-.annotate "line", 242
+    rx476_pos = $P10."pos"()
+    goto alt482_end
+  alt482_2:
+.annotate "line", 246
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_482_fail
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+    set_addr $I10, rxcap_485_fail
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
   # rx literal  "$"
-    add $I11, rx473_pos, 1
-    gt $I11, rx473_eos, rx473_fail
-    sub $I11, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I11, 1
-    ne $S10, "$", rx473_fail
-    add rx473_pos, 1
-    set_addr $I10, rxcap_482_fail
-    ($I12, $I11) = rx473_cur."!mark_peek"($I10)
-    rx473_cur."!cursor_pos"($I11)
-    ($P10) = rx473_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx473_pos, "")
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx476_pos, 1
+    gt $I11, rx476_eos, rx476_fail
+    sub $I11, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I11, 1
+    ne $S10, "$", rx476_fail
+    add rx476_pos, 1
+    set_addr $I10, rxcap_485_fail
+    ($I12, $I11) = rx476_cur."!mark_peek"($I10)
+    rx476_cur."!cursor_pos"($I11)
+    ($P10) = rx476_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx476_pos, "")
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_482_done
-  rxcap_482_fail:
-    goto rx473_fail
-  rxcap_482_done:
+    goto rxcap_485_done
+  rxcap_485_fail:
+    goto rx476_fail
+  rxcap_485_done:
   # rx subcapture "desigilname"
-    set_addr $I10, rxcap_483_fail
-    rx473_cur."!mark_push"(0, rx473_pos, $I10)
+    set_addr $I10, rxcap_486_fail
+    rx476_cur."!mark_push"(0, rx476_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx473_pos, rx473_eos, rx473_fail
-    sub $I10, rx473_pos, rx473_off
-    substr $S10, rx473_tgt, $I10, 1
+    ge rx476_pos, rx476_eos, rx476_fail
+    sub $I10, rx476_pos, rx476_off
+    substr $S10, rx476_tgt, $I10, 1
     index $I11, "/_!", $S10
-    lt $I11, 0, rx473_fail
-    inc rx473_pos
-    set_addr $I10, rxcap_483_fail
-    ($I12, $I11) = rx473_cur."!mark_peek"($I10)
-    rx473_cur."!cursor_pos"($I11)
-    ($P10) = rx473_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx473_pos, "")
-    rx473_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx476_fail
+    inc rx476_pos
+    set_addr $I10, rxcap_486_fail
+    ($I12, $I11) = rx476_cur."!mark_peek"($I10)
+    rx476_cur."!cursor_pos"($I11)
+    ($P10) = rx476_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx476_pos, "")
+    rx476_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("desigilname")
-    goto rxcap_483_done
-  rxcap_483_fail:
-    goto rx473_fail
-  rxcap_483_done:
-  alt479_end:
-.annotate "line", 239
+    goto rxcap_486_done
+  rxcap_486_fail:
+    goto rx476_fail
+  rxcap_486_done:
+  alt482_end:
+.annotate "line", 243
   # rx pass
-    rx473_cur."!cursor_pass"(rx473_pos, "variable")
-    rx473_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx473_pos)
-    .return (rx473_cur)
-  rx473_fail:
+    rx476_cur."!cursor_pass"(rx476_pos, "variable")
+    rx476_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx476_pos)
+    .return (rx476_cur)
+  rx476_fail:
 .annotate "line", 4
-    (rx473_rep, rx473_pos, $I10, $P10) = rx473_cur."!mark_fail"(0)
-    lt rx473_pos, -1, rx473_done
-    eq rx473_pos, -1, rx473_fail
+    (rx476_rep, rx476_pos, $I10, $P10) = rx476_cur."!mark_fail"(0)
+    lt rx476_pos, -1, rx476_done
+    eq rx476_pos, -1, rx476_fail
     jump $I10
-  rx473_done:
-    rx473_cur."!cursor_fail"()
-    rx473_cur."!cursor_debug"("FAIL  ", "variable")
-    .return (rx473_cur)
+  rx476_done:
+    rx476_cur."!cursor_fail"()
+    rx476_cur."!cursor_debug"("FAIL  ", "variable")
+    .return (rx476_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("118_1267204702.05125") :method
+.sub "!PREFIX__variable"  :subid("118_1271336396.90314") :method
 .annotate "line", 4
-    $P475 = self."!PREFIX__!subrule"("sigil", "")
-    $P476 = self."!PREFIX__!subrule"("sigil", "")
-    new $P477, "ResizablePMCArray"
-    push $P477, "$!"
-    push $P477, "$_"
-    push $P477, "$/"
-    push $P477, $P475
-    push $P477, $P476
-    .return ($P477)
+    $P478 = self."!PREFIX__!subrule"("sigil", "")
+    $P479 = self."!PREFIX__!subrule"("sigil", "")
+    new $P480, "ResizablePMCArray"
+    push $P480, "$!"
+    push $P480, "$_"
+    push $P480, "$/"
+    push $P480, $P478
+    push $P480, $P479
+    .return ($P480)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("119_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "sigil"  :subid("119_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx485_tgt
-    .local int rx485_pos
-    .local int rx485_off
-    .local int rx485_eos
-    .local int rx485_rep
-    .local pmc rx485_cur
-    (rx485_cur, rx485_pos, rx485_tgt) = self."!cursor_start"()
-    rx485_cur."!cursor_debug"("START ", "sigil")
-    .lex unicode:"$\x{a2}", rx485_cur
+    .local string rx488_tgt
+    .local int rx488_pos
+    .local int rx488_off
+    .local int rx488_eos
+    .local int rx488_rep
+    .local pmc rx488_cur
+    (rx488_cur, rx488_pos, rx488_tgt) = self."!cursor_start"()
+    rx488_cur."!cursor_debug"("START ", "sigil")
+    .lex unicode:"$\x{a2}", rx488_cur
     .local pmc match
     .lex "$/", match
-    length rx485_eos, rx485_tgt
-    set rx485_off, 0
-    lt rx485_pos, 2, rx485_start
-    sub rx485_off, rx485_pos, 1
-    substr rx485_tgt, rx485_tgt, rx485_off
-  rx485_start:
+    length rx488_eos, rx488_tgt
+    set rx488_off, 0
+    lt rx488_pos, 2, rx488_start
+    sub rx488_off, rx488_pos, 1
+    substr rx488_tgt, rx488_tgt, rx488_off
+  rx488_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan488_done
-    goto rxscan488_scan
-  rxscan488_loop:
-    ($P10) = rx485_cur."from"()
+    ne $I10, -1, rxscan491_done
+    goto rxscan491_scan
+  rxscan491_loop:
+    ($P10) = rx488_cur."from"()
     inc $P10
-    set rx485_pos, $P10
-    ge rx485_pos, rx485_eos, rxscan488_done
-  rxscan488_scan:
-    set_addr $I10, rxscan488_loop
-    rx485_cur."!mark_push"(0, rx485_pos, $I10)
-  rxscan488_done:
-.annotate "line", 245
+    set rx488_pos, $P10
+    ge rx488_pos, rx488_eos, rxscan491_done
+  rxscan491_scan:
+    set_addr $I10, rxscan491_loop
+    rx488_cur."!mark_push"(0, rx488_pos, $I10)
+  rxscan491_done:
+.annotate "line", 249
   # rx enumcharlist negate=0 
-    ge rx485_pos, rx485_eos, rx485_fail
-    sub $I10, rx485_pos, rx485_off
-    substr $S10, rx485_tgt, $I10, 1
+    ge rx488_pos, rx488_eos, rx488_fail
+    sub $I10, rx488_pos, rx488_off
+    substr $S10, rx488_tgt, $I10, 1
     index $I11, "$@%&", $S10
-    lt $I11, 0, rx485_fail
-    inc rx485_pos
+    lt $I11, 0, rx488_fail
+    inc rx488_pos
   # rx pass
-    rx485_cur."!cursor_pass"(rx485_pos, "sigil")
-    rx485_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx485_pos)
-    .return (rx485_cur)
-  rx485_fail:
+    rx488_cur."!cursor_pass"(rx488_pos, "sigil")
+    rx488_cur."!cursor_debug"("PASS  ", "sigil", " at pos=", rx488_pos)
+    .return (rx488_cur)
+  rx488_fail:
 .annotate "line", 4
-    (rx485_rep, rx485_pos, $I10, $P10) = rx485_cur."!mark_fail"(0)
-    lt rx485_pos, -1, rx485_done
-    eq rx485_pos, -1, rx485_fail
+    (rx488_rep, rx488_pos, $I10, $P10) = rx488_cur."!mark_fail"(0)
+    lt rx488_pos, -1, rx488_done
+    eq rx488_pos, -1, rx488_fail
     jump $I10
-  rx485_done:
-    rx485_cur."!cursor_fail"()
-    rx485_cur."!cursor_debug"("FAIL  ", "sigil")
-    .return (rx485_cur)
+  rx488_done:
+    rx488_cur."!cursor_fail"()
+    rx488_cur."!cursor_debug"("FAIL  ", "sigil")
+    .return (rx488_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("120_1267204702.05125") :method
+.sub "!PREFIX__sigil"  :subid("120_1271336396.90314") :method
 .annotate "line", 4
-    new $P487, "ResizablePMCArray"
-    push $P487, "&"
-    push $P487, "%"
-    push $P487, "@"
-    push $P487, "$"
-    .return ($P487)
+    new $P490, "ResizablePMCArray"
+    push $P490, "&"
+    push $P490, "%"
+    push $P490, "@"
+    push $P490, "$"
+    .return ($P490)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("121_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "twigil"  :subid("121_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx490_tgt
-    .local int rx490_pos
-    .local int rx490_off
-    .local int rx490_eos
-    .local int rx490_rep
-    .local pmc rx490_cur
-    (rx490_cur, rx490_pos, rx490_tgt) = self."!cursor_start"()
-    rx490_cur."!cursor_debug"("START ", "twigil")
-    .lex unicode:"$\x{a2}", rx490_cur
+    .local string rx493_tgt
+    .local int rx493_pos
+    .local int rx493_off
+    .local int rx493_eos
+    .local int rx493_rep
+    .local pmc rx493_cur
+    (rx493_cur, rx493_pos, rx493_tgt) = self."!cursor_start"()
+    rx493_cur."!cursor_debug"("START ", "twigil")
+    .lex unicode:"$\x{a2}", rx493_cur
     .local pmc match
     .lex "$/", match
-    length rx490_eos, rx490_tgt
-    set rx490_off, 0
-    lt rx490_pos, 2, rx490_start
-    sub rx490_off, rx490_pos, 1
-    substr rx490_tgt, rx490_tgt, rx490_off
-  rx490_start:
+    length rx493_eos, rx493_tgt
+    set rx493_off, 0
+    lt rx493_pos, 2, rx493_start
+    sub rx493_off, rx493_pos, 1
+    substr rx493_tgt, rx493_tgt, rx493_off
+  rx493_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan493_done
-    goto rxscan493_scan
-  rxscan493_loop:
-    ($P10) = rx490_cur."from"()
+    ne $I10, -1, rxscan496_done
+    goto rxscan496_scan
+  rxscan496_loop:
+    ($P10) = rx493_cur."from"()
     inc $P10
-    set rx490_pos, $P10
-    ge rx490_pos, rx490_eos, rxscan493_done
-  rxscan493_scan:
-    set_addr $I10, rxscan493_loop
-    rx490_cur."!mark_push"(0, rx490_pos, $I10)
-  rxscan493_done:
-.annotate "line", 247
+    set rx493_pos, $P10
+    ge rx493_pos, rx493_eos, rxscan496_done
+  rxscan496_scan:
+    set_addr $I10, rxscan496_loop
+    rx493_cur."!mark_push"(0, rx493_pos, $I10)
+  rxscan496_done:
+.annotate "line", 251
   # rx enumcharlist negate=0 
-    ge rx490_pos, rx490_eos, rx490_fail
-    sub $I10, rx490_pos, rx490_off
-    substr $S10, rx490_tgt, $I10, 1
+    ge rx493_pos, rx493_eos, rx493_fail
+    sub $I10, rx493_pos, rx493_off
+    substr $S10, rx493_tgt, $I10, 1
     index $I11, "*!?", $S10
-    lt $I11, 0, rx490_fail
-    inc rx490_pos
+    lt $I11, 0, rx493_fail
+    inc rx493_pos
   # rx pass
-    rx490_cur."!cursor_pass"(rx490_pos, "twigil")
-    rx490_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx490_pos)
-    .return (rx490_cur)
-  rx490_fail:
+    rx493_cur."!cursor_pass"(rx493_pos, "twigil")
+    rx493_cur."!cursor_debug"("PASS  ", "twigil", " at pos=", rx493_pos)
+    .return (rx493_cur)
+  rx493_fail:
 .annotate "line", 4
-    (rx490_rep, rx490_pos, $I10, $P10) = rx490_cur."!mark_fail"(0)
-    lt rx490_pos, -1, rx490_done
-    eq rx490_pos, -1, rx490_fail
+    (rx493_rep, rx493_pos, $I10, $P10) = rx493_cur."!mark_fail"(0)
+    lt rx493_pos, -1, rx493_done
+    eq rx493_pos, -1, rx493_fail
     jump $I10
-  rx490_done:
-    rx490_cur."!cursor_fail"()
-    rx490_cur."!cursor_debug"("FAIL  ", "twigil")
-    .return (rx490_cur)
+  rx493_done:
+    rx493_cur."!cursor_fail"()
+    rx493_cur."!cursor_debug"("FAIL  ", "twigil")
+    .return (rx493_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("122_1267204702.05125") :method
+.sub "!PREFIX__twigil"  :subid("122_1271336396.90314") :method
 .annotate "line", 4
-    new $P492, "ResizablePMCArray"
-    push $P492, "?"
-    push $P492, "!"
-    push $P492, "*"
-    .return ($P492)
+    new $P495, "ResizablePMCArray"
+    push $P495, "?"
+    push $P495, "!"
+    push $P495, "*"
+    .return ($P495)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("123_1267204702.05125") :method
-.annotate "line", 249
-    $P495 = self."!protoregex"("package_declarator")
-    .return ($P495)
+.sub "package_declarator"  :subid("123_1271336396.90314") :method
+.annotate "line", 253
+    $P498 = self."!protoregex"("package_declarator")
+    .return ($P498)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("124_1267204702.05125") :method
-.annotate "line", 249
-    $P497 = self."!PREFIX__!protoregex"("package_declarator")
-    .return ($P497)
+.sub "!PREFIX__package_declarator"  :subid("124_1271336396.90314") :method
+.annotate "line", 253
+    $P500 = self."!PREFIX__!protoregex"("package_declarator")
+    .return ($P500)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("125_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_declarator:sym<module>"  :subid("125_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx499_tgt
-    .local int rx499_pos
-    .local int rx499_off
-    .local int rx499_eos
-    .local int rx499_rep
-    .local pmc rx499_cur
-    (rx499_cur, rx499_pos, rx499_tgt) = self."!cursor_start"()
-    rx499_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
-    .lex unicode:"$\x{a2}", rx499_cur
-    .local pmc match
-    .lex "$/", match
-    length rx499_eos, rx499_tgt
-    set rx499_off, 0
-    lt rx499_pos, 2, rx499_start
-    sub rx499_off, rx499_pos, 1
-    substr rx499_tgt, rx499_tgt, rx499_off
-  rx499_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan503_done
-    goto rxscan503_scan
-  rxscan503_loop:
-    ($P10) = rx499_cur."from"()
-    inc $P10
-    set rx499_pos, $P10
-    ge rx499_pos, rx499_eos, rxscan503_done
-  rxscan503_scan:
-    set_addr $I10, rxscan503_loop
-    rx499_cur."!mark_push"(0, rx499_pos, $I10)
-  rxscan503_done:
-.annotate "line", 250
+    .local string rx502_tgt
+    .local int rx502_pos
+    .local int rx502_off
+    .local int rx502_eos
+    .local int rx502_rep
+    .local pmc rx502_cur
+    (rx502_cur, rx502_pos, rx502_tgt) = self."!cursor_start"()
+    rx502_cur."!cursor_debug"("START ", "package_declarator:sym<module>")
+    .lex unicode:"$\x{a2}", rx502_cur
+    .local pmc match
+    .lex "$/", match
+    length rx502_eos, rx502_tgt
+    set rx502_off, 0
+    lt rx502_pos, 2, rx502_start
+    sub rx502_off, rx502_pos, 1
+    substr rx502_tgt, rx502_tgt, rx502_off
+  rx502_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan506_done
+    goto rxscan506_scan
+  rxscan506_loop:
+    ($P10) = rx502_cur."from"()
+    inc $P10
+    set rx502_pos, $P10
+    ge rx502_pos, rx502_eos, rxscan506_done
+  rxscan506_scan:
+    set_addr $I10, rxscan506_loop
+    rx502_cur."!mark_push"(0, rx502_pos, $I10)
+  rxscan506_done:
+.annotate "line", 254
   # rx subcapture "sym"
-    set_addr $I10, rxcap_504_fail
-    rx499_cur."!mark_push"(0, rx499_pos, $I10)
+    set_addr $I10, rxcap_507_fail
+    rx502_cur."!mark_push"(0, rx502_pos, $I10)
   # rx literal  "module"
-    add $I11, rx499_pos, 6
-    gt $I11, rx499_eos, rx499_fail
-    sub $I11, rx499_pos, rx499_off
-    substr $S10, rx499_tgt, $I11, 6
-    ne $S10, "module", rx499_fail
-    add rx499_pos, 6
-    set_addr $I10, rxcap_504_fail
-    ($I12, $I11) = rx499_cur."!mark_peek"($I10)
-    rx499_cur."!cursor_pos"($I11)
-    ($P10) = rx499_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx499_pos, "")
-    rx499_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx502_pos, 6
+    gt $I11, rx502_eos, rx502_fail
+    sub $I11, rx502_pos, rx502_off
+    substr $S10, rx502_tgt, $I11, 6
+    ne $S10, "module", rx502_fail
+    add rx502_pos, 6
+    set_addr $I10, rxcap_507_fail
+    ($I12, $I11) = rx502_cur."!mark_peek"($I10)
+    rx502_cur."!cursor_pos"($I11)
+    ($P10) = rx502_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx502_pos, "")
+    rx502_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_504_done
-  rxcap_504_fail:
-    goto rx499_fail
-  rxcap_504_done:
+    goto rxcap_507_done
+  rxcap_507_fail:
+    goto rx502_fail
+  rxcap_507_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx499_cur."!cursor_pos"(rx499_pos)
-    $P10 = rx499_cur."package_def"()
-    unless $P10, rx499_fail
-    rx499_cur."!mark_push"(0, -1, 0, $P10)
+    rx502_cur."!cursor_pos"(rx502_pos)
+    $P10 = rx502_cur."package_def"()
+    unless $P10, rx502_fail
+    rx502_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx499_pos = $P10."pos"()
+    rx502_pos = $P10."pos"()
   # rx pass
-    rx499_cur."!cursor_pass"(rx499_pos, "package_declarator:sym<module>")
-    rx499_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx499_pos)
-    .return (rx499_cur)
-  rx499_fail:
+    rx502_cur."!cursor_pass"(rx502_pos, "package_declarator:sym<module>")
+    rx502_cur."!cursor_debug"("PASS  ", "package_declarator:sym<module>", " at pos=", rx502_pos)
+    .return (rx502_cur)
+  rx502_fail:
 .annotate "line", 4
-    (rx499_rep, rx499_pos, $I10, $P10) = rx499_cur."!mark_fail"(0)
-    lt rx499_pos, -1, rx499_done
-    eq rx499_pos, -1, rx499_fail
+    (rx502_rep, rx502_pos, $I10, $P10) = rx502_cur."!mark_fail"(0)
+    lt rx502_pos, -1, rx502_done
+    eq rx502_pos, -1, rx502_fail
     jump $I10
-  rx499_done:
-    rx499_cur."!cursor_fail"()
-    rx499_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
-    .return (rx499_cur)
+  rx502_done:
+    rx502_cur."!cursor_fail"()
+    rx502_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<module>")
+    .return (rx502_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1267204702.05125") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1271336396.90314") :method
 .annotate "line", 4
-    $P501 = self."!PREFIX__!subrule"("package_def", "module")
-    new $P502, "ResizablePMCArray"
-    push $P502, $P501
-    .return ($P502)
+    $P504 = self."!PREFIX__!subrule"("package_def", "module")
+    new $P505, "ResizablePMCArray"
+    push $P505, $P504
+    .return ($P505)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("127_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_declarator:sym<class>"  :subid("127_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx506_tgt
-    .local int rx506_pos
-    .local int rx506_off
-    .local int rx506_eos
-    .local int rx506_rep
-    .local pmc rx506_cur
-    (rx506_cur, rx506_pos, rx506_tgt) = self."!cursor_start"()
-    rx506_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
-    .lex unicode:"$\x{a2}", rx506_cur
+    .local string rx509_tgt
+    .local int rx509_pos
+    .local int rx509_off
+    .local int rx509_eos
+    .local int rx509_rep
+    .local pmc rx509_cur
+    (rx509_cur, rx509_pos, rx509_tgt) = self."!cursor_start"()
+    rx509_cur."!cursor_debug"("START ", "package_declarator:sym<class>")
+    .lex unicode:"$\x{a2}", rx509_cur
     .local pmc match
     .lex "$/", match
-    length rx506_eos, rx506_tgt
-    set rx506_off, 0
-    lt rx506_pos, 2, rx506_start
-    sub rx506_off, rx506_pos, 1
-    substr rx506_tgt, rx506_tgt, rx506_off
-  rx506_start:
+    length rx509_eos, rx509_tgt
+    set rx509_off, 0
+    lt rx509_pos, 2, rx509_start
+    sub rx509_off, rx509_pos, 1
+    substr rx509_tgt, rx509_tgt, rx509_off
+  rx509_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan511_done
-    goto rxscan511_scan
-  rxscan511_loop:
-    ($P10) = rx506_cur."from"()
+    ne $I10, -1, rxscan514_done
+    goto rxscan514_scan
+  rxscan514_loop:
+    ($P10) = rx509_cur."from"()
     inc $P10
-    set rx506_pos, $P10
-    ge rx506_pos, rx506_eos, rxscan511_done
-  rxscan511_scan:
-    set_addr $I10, rxscan511_loop
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  rxscan511_done:
-.annotate "line", 251
+    set rx509_pos, $P10
+    ge rx509_pos, rx509_eos, rxscan514_done
+  rxscan514_scan:
+    set_addr $I10, rxscan514_loop
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  rxscan514_done:
+.annotate "line", 255
   # rx subcapture "sym"
-    set_addr $I10, rxcap_513_fail
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
-  alt512_0:
-    set_addr $I10, alt512_1
-    rx506_cur."!mark_push"(0, rx506_pos, $I10)
+    set_addr $I10, rxcap_516_fail
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
+  alt515_0:
+    set_addr $I10, alt515_1
+    rx509_cur."!mark_push"(0, rx509_pos, $I10)
   # rx literal  "class"
-    add $I11, rx506_pos, 5
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 5
-    ne $S10, "class", rx506_fail
-    add rx506_pos, 5
-    goto alt512_end
-  alt512_1:
+    add $I11, rx509_pos, 5
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    substr $S10, rx509_tgt, $I11, 5
+    ne $S10, "class", rx509_fail
+    add rx509_pos, 5
+    goto alt515_end
+  alt515_1:
   # rx literal  "grammar"
-    add $I11, rx506_pos, 7
-    gt $I11, rx506_eos, rx506_fail
-    sub $I11, rx506_pos, rx506_off
-    substr $S10, rx506_tgt, $I11, 7
-    ne $S10, "grammar", rx506_fail
-    add rx506_pos, 7
-  alt512_end:
-    set_addr $I10, rxcap_513_fail
-    ($I12, $I11) = rx506_cur."!mark_peek"($I10)
-    rx506_cur."!cursor_pos"($I11)
-    ($P10) = rx506_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx506_pos, "")
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx509_pos, 7
+    gt $I11, rx509_eos, rx509_fail
+    sub $I11, rx509_pos, rx509_off
+    substr $S10, rx509_tgt, $I11, 7
+    ne $S10, "grammar", rx509_fail
+    add rx509_pos, 7
+  alt515_end:
+    set_addr $I10, rxcap_516_fail
+    ($I12, $I11) = rx509_cur."!mark_peek"($I10)
+    rx509_cur."!cursor_pos"($I11)
+    ($P10) = rx509_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx509_pos, "")
+    rx509_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_513_done
-  rxcap_513_fail:
-    goto rx506_fail
-  rxcap_513_done:
+    goto rxcap_516_done
+  rxcap_516_fail:
+    goto rx509_fail
+  rxcap_516_done:
   # rx subrule "package_def" subtype=capture negate=
-    rx506_cur."!cursor_pos"(rx506_pos)
-    $P10 = rx506_cur."package_def"()
-    unless $P10, rx506_fail
-    rx506_cur."!mark_push"(0, -1, 0, $P10)
+    rx509_cur."!cursor_pos"(rx509_pos)
+    $P10 = rx509_cur."package_def"()
+    unless $P10, rx509_fail
+    rx509_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("package_def")
-    rx506_pos = $P10."pos"()
+    rx509_pos = $P10."pos"()
   # rx pass
-    rx506_cur."!cursor_pass"(rx506_pos, "package_declarator:sym<class>")
-    rx506_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx506_pos)
-    .return (rx506_cur)
-  rx506_fail:
+    rx509_cur."!cursor_pass"(rx509_pos, "package_declarator:sym<class>")
+    rx509_cur."!cursor_debug"("PASS  ", "package_declarator:sym<class>", " at pos=", rx509_pos)
+    .return (rx509_cur)
+  rx509_fail:
 .annotate "line", 4
-    (rx506_rep, rx506_pos, $I10, $P10) = rx506_cur."!mark_fail"(0)
-    lt rx506_pos, -1, rx506_done
-    eq rx506_pos, -1, rx506_fail
+    (rx509_rep, rx509_pos, $I10, $P10) = rx509_cur."!mark_fail"(0)
+    lt rx509_pos, -1, rx509_done
+    eq rx509_pos, -1, rx509_fail
     jump $I10
-  rx506_done:
-    rx506_cur."!cursor_fail"()
-    rx506_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
-    .return (rx506_cur)
+  rx509_done:
+    rx509_cur."!cursor_fail"()
+    rx509_cur."!cursor_debug"("FAIL  ", "package_declarator:sym<class>")
+    .return (rx509_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1267204702.05125") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1271336396.90314") :method
 .annotate "line", 4
-    $P508 = self."!PREFIX__!subrule"("package_def", "grammar")
-    $P509 = self."!PREFIX__!subrule"("package_def", "class")
-    new $P510, "ResizablePMCArray"
-    push $P510, $P508
-    push $P510, $P509
-    .return ($P510)
+    $P511 = self."!PREFIX__!subrule"("package_def", "grammar")
+    $P512 = self."!PREFIX__!subrule"("package_def", "class")
+    new $P513, "ResizablePMCArray"
+    push $P513, $P511
+    push $P513, $P512
+    .return ($P513)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("129_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "package_def"  :subid("129_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx515_tgt
-    .local int rx515_pos
-    .local int rx515_off
-    .local int rx515_eos
-    .local int rx515_rep
-    .local pmc rx515_cur
-    (rx515_cur, rx515_pos, rx515_tgt) = self."!cursor_start"()
-    rx515_cur."!cursor_debug"("START ", "package_def")
-    rx515_cur."!cursor_caparray"("parent")
-    .lex unicode:"$\x{a2}", rx515_cur
+    .local string rx518_tgt
+    .local int rx518_pos
+    .local int rx518_off
+    .local int rx518_eos
+    .local int rx518_rep
+    .local pmc rx518_cur
+    (rx518_cur, rx518_pos, rx518_tgt) = self."!cursor_start"()
+    rx518_cur."!cursor_debug"("START ", "package_def")
+    rx518_cur."!cursor_caparray"("parent")
+    .lex unicode:"$\x{a2}", rx518_cur
     .local pmc match
     .lex "$/", match
-    length rx515_eos, rx515_tgt
-    set rx515_off, 0
-    lt rx515_pos, 2, rx515_start
-    sub rx515_off, rx515_pos, 1
-    substr rx515_tgt, rx515_tgt, rx515_off
-  rx515_start:
+    length rx518_eos, rx518_tgt
+    set rx518_off, 0
+    lt rx518_pos, 2, rx518_start
+    sub rx518_off, rx518_pos, 1
+    substr rx518_tgt, rx518_tgt, rx518_off
+  rx518_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan518_done
-    goto rxscan518_scan
-  rxscan518_loop:
-    ($P10) = rx515_cur."from"()
+    ne $I10, -1, rxscan521_done
+    goto rxscan521_scan
+  rxscan521_loop:
+    ($P10) = rx518_cur."from"()
     inc $P10
-    set rx515_pos, $P10
-    ge rx515_pos, rx515_eos, rxscan518_done
-  rxscan518_scan:
-    set_addr $I10, rxscan518_loop
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-  rxscan518_done:
-.annotate "line", 253
+    set rx518_pos, $P10
+    ge rx518_pos, rx518_eos, rxscan521_done
+  rxscan521_scan:
+    set_addr $I10, rxscan521_loop
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+  rxscan521_done:
+.annotate "line", 257
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 254
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 258
   # rx subrule "name" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."name"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."name"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx515_pos = $P10."pos"()
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 255
-  # rx rxquantr521 ** 0..1
-    set_addr $I525, rxquantr521_done
-    rx515_cur."!mark_push"(0, rx515_pos, $I525)
-  rxquantr521_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 259
+  # rx rxquantr524 ** 0..1
+    set_addr $I528, rxquantr524_done
+    rx518_cur."!mark_push"(0, rx518_pos, $I528)
+  rxquantr524_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx literal  "is"
-    add $I11, rx515_pos, 2
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I11, 2
-    ne $S10, "is", rx515_fail
-    add rx515_pos, 2
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    add $I11, rx518_pos, 2
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I11, 2
+    ne $S10, "is", rx518_fail
+    add rx518_pos, 2
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "name" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."name"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."name"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parent")
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    (rx515_rep) = rx515_cur."!mark_commit"($I525)
-  rxquantr521_done:
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  alt527_0:
-.annotate "line", 256
-    set_addr $I10, alt527_1
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 257
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    (rx518_rep) = rx518_cur."!mark_commit"($I528)
+  rxquantr524_done:
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  alt530_0:
+.annotate "line", 260
+    set_addr $I10, alt530_1
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate "line", 261
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx515_pos, 1
-    gt $I11, rx515_eos, rx515_fail
-    sub $I11, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I11, 1
-    ne $S10, ";", rx515_fail
-    add rx515_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    add $I11, rx518_pos, 1
+    gt $I11, rx518_eos, rx518_fail
+    sub $I11, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I11, 1
+    ne $S10, ";", rx518_fail
+    add rx518_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "comp_unit" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."comp_unit"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."comp_unit"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("comp_unit")
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt527_end
-  alt527_1:
-    set_addr $I10, alt527_2
-    rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 258
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    goto alt530_end
+  alt530_1:
+    set_addr $I10, alt530_2
+    rx518_cur."!mark_push"(0, rx518_pos, $I10)
+.annotate "line", 262
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx515_pos, rx515_eos, rx515_fail
-    sub $I10, rx515_pos, rx515_off
-    substr $S10, rx515_tgt, $I10, 1
+    ge rx518_pos, rx518_eos, rx518_fail
+    sub $I10, rx518_pos, rx518_off
+    substr $S10, rx518_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx515_fail
+    lt $I11, 0, rx518_fail
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "block" subtype=capture negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."block"()
-    unless $P10, rx515_fail
-    rx515_cur."!mark_push"(0, -1, 0, $P10)
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."block"()
+    unless $P10, rx518_fail
+    rx518_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx515_pos = $P10."pos"()
+    rx518_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-    goto alt527_end
-  alt527_2:
-.annotate "line", 259
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+    goto alt530_end
+  alt530_2:
+.annotate "line", 263
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."panic"("Malformed package declaration")
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-  alt527_end:
-.annotate "line", 260
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."panic"("Malformed package declaration")
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+  alt530_end:
+.annotate "line", 264
   # rx subrule "ws" subtype=method negate=
-    rx515_cur."!cursor_pos"(rx515_pos)
-    $P10 = rx515_cur."ws"()
-    unless $P10, rx515_fail
-    rx515_pos = $P10."pos"()
-.annotate "line", 253
+    rx518_cur."!cursor_pos"(rx518_pos)
+    $P10 = rx518_cur."ws"()
+    unless $P10, rx518_fail
+    rx518_pos = $P10."pos"()
+.annotate "line", 257
   # rx pass
-    rx515_cur."!cursor_pass"(rx515_pos, "package_def")
-    rx515_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx515_pos)
-    .return (rx515_cur)
-  rx515_fail:
+    rx518_cur."!cursor_pass"(rx518_pos, "package_def")
+    rx518_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx518_pos)
+    .return (rx518_cur)
+  rx518_fail:
 .annotate "line", 4
-    (rx515_rep, rx515_pos, $I10, $P10) = rx515_cur."!mark_fail"(0)
-    lt rx515_pos, -1, rx515_done
-    eq rx515_pos, -1, rx515_fail
+    (rx518_rep, rx518_pos, $I10, $P10) = rx518_cur."!mark_fail"(0)
+    lt rx518_pos, -1, rx518_done
+    eq rx518_pos, -1, rx518_fail
     jump $I10
-  rx515_done:
-    rx515_cur."!cursor_fail"()
-    rx515_cur."!cursor_debug"("FAIL  ", "package_def")
-    .return (rx515_cur)
+  rx518_done:
+    rx518_cur."!cursor_fail"()
+    rx518_cur."!cursor_debug"("FAIL  ", "package_def")
+    .return (rx518_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("130_1267204702.05125") :method
+.sub "!PREFIX__package_def"  :subid("130_1271336396.90314") :method
 .annotate "line", 4
-    new $P517, "ResizablePMCArray"
-    push $P517, ""
-    .return ($P517)
+    new $P520, "ResizablePMCArray"
+    push $P520, ""
+    .return ($P520)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("131_1267204702.05125") :method
-.annotate "line", 263
-    $P538 = self."!protoregex"("scope_declarator")
-    .return ($P538)
+.sub "scope_declarator"  :subid("131_1271336396.90314") :method
+.annotate "line", 267
+    $P541 = self."!protoregex"("scope_declarator")
+    .return ($P541)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("132_1267204702.05125") :method
-.annotate "line", 263
-    $P540 = self."!PREFIX__!protoregex"("scope_declarator")
-    .return ($P540)
+.sub "!PREFIX__scope_declarator"  :subid("132_1271336396.90314") :method
+.annotate "line", 267
+    $P543 = self."!PREFIX__!protoregex"("scope_declarator")
+    .return ($P543)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("133_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<my>"  :subid("133_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx542_tgt
-    .local int rx542_pos
-    .local int rx542_off
-    .local int rx542_eos
-    .local int rx542_rep
-    .local pmc rx542_cur
-    (rx542_cur, rx542_pos, rx542_tgt) = self."!cursor_start"()
-    rx542_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
-    .lex unicode:"$\x{a2}", rx542_cur
-    .local pmc match
-    .lex "$/", match
-    length rx542_eos, rx542_tgt
-    set rx542_off, 0
-    lt rx542_pos, 2, rx542_start
-    sub rx542_off, rx542_pos, 1
-    substr rx542_tgt, rx542_tgt, rx542_off
-  rx542_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan546_done
-    goto rxscan546_scan
-  rxscan546_loop:
-    ($P10) = rx542_cur."from"()
-    inc $P10
-    set rx542_pos, $P10
-    ge rx542_pos, rx542_eos, rxscan546_done
-  rxscan546_scan:
-    set_addr $I10, rxscan546_loop
-    rx542_cur."!mark_push"(0, rx542_pos, $I10)
-  rxscan546_done:
-.annotate "line", 264
+    .local string rx545_tgt
+    .local int rx545_pos
+    .local int rx545_off
+    .local int rx545_eos
+    .local int rx545_rep
+    .local pmc rx545_cur
+    (rx545_cur, rx545_pos, rx545_tgt) = self."!cursor_start"()
+    rx545_cur."!cursor_debug"("START ", "scope_declarator:sym<my>")
+    .lex unicode:"$\x{a2}", rx545_cur
+    .local pmc match
+    .lex "$/", match
+    length rx545_eos, rx545_tgt
+    set rx545_off, 0
+    lt rx545_pos, 2, rx545_start
+    sub rx545_off, rx545_pos, 1
+    substr rx545_tgt, rx545_tgt, rx545_off
+  rx545_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan549_done
+    goto rxscan549_scan
+  rxscan549_loop:
+    ($P10) = rx545_cur."from"()
+    inc $P10
+    set rx545_pos, $P10
+    ge rx545_pos, rx545_eos, rxscan549_done
+  rxscan549_scan:
+    set_addr $I10, rxscan549_loop
+    rx545_cur."!mark_push"(0, rx545_pos, $I10)
+  rxscan549_done:
+.annotate "line", 268
   # rx subcapture "sym"
-    set_addr $I10, rxcap_547_fail
-    rx542_cur."!mark_push"(0, rx542_pos, $I10)
+    set_addr $I10, rxcap_550_fail
+    rx545_cur."!mark_push"(0, rx545_pos, $I10)
   # rx literal  "my"
-    add $I11, rx542_pos, 2
-    gt $I11, rx542_eos, rx542_fail
-    sub $I11, rx542_pos, rx542_off
-    substr $S10, rx542_tgt, $I11, 2
-    ne $S10, "my", rx542_fail
-    add rx542_pos, 2
-    set_addr $I10, rxcap_547_fail
-    ($I12, $I11) = rx542_cur."!mark_peek"($I10)
-    rx542_cur."!cursor_pos"($I11)
-    ($P10) = rx542_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx542_pos, "")
-    rx542_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx545_pos, 2
+    gt $I11, rx545_eos, rx545_fail
+    sub $I11, rx545_pos, rx545_off
+    substr $S10, rx545_tgt, $I11, 2
+    ne $S10, "my", rx545_fail
+    add rx545_pos, 2
+    set_addr $I10, rxcap_550_fail
+    ($I12, $I11) = rx545_cur."!mark_peek"($I10)
+    rx545_cur."!cursor_pos"($I11)
+    ($P10) = rx545_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx545_pos, "")
+    rx545_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_547_done
-  rxcap_547_fail:
-    goto rx542_fail
-  rxcap_547_done:
+    goto rxcap_550_done
+  rxcap_550_fail:
+    goto rx545_fail
+  rxcap_550_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx542_cur."!cursor_pos"(rx542_pos)
-    $P10 = rx542_cur."scoped"("my")
-    unless $P10, rx542_fail
-    rx542_cur."!mark_push"(0, -1, 0, $P10)
+    rx545_cur."!cursor_pos"(rx545_pos)
+    $P10 = rx545_cur."scoped"("my")
+    unless $P10, rx545_fail
+    rx545_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx542_pos = $P10."pos"()
+    rx545_pos = $P10."pos"()
   # rx pass
-    rx542_cur."!cursor_pass"(rx542_pos, "scope_declarator:sym<my>")
-    rx542_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx542_pos)
-    .return (rx542_cur)
-  rx542_fail:
+    rx545_cur."!cursor_pass"(rx545_pos, "scope_declarator:sym<my>")
+    rx545_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<my>", " at pos=", rx545_pos)
+    .return (rx545_cur)
+  rx545_fail:
 .annotate "line", 4
-    (rx542_rep, rx542_pos, $I10, $P10) = rx542_cur."!mark_fail"(0)
-    lt rx542_pos, -1, rx542_done
-    eq rx542_pos, -1, rx542_fail
+    (rx545_rep, rx545_pos, $I10, $P10) = rx545_cur."!mark_fail"(0)
+    lt rx545_pos, -1, rx545_done
+    eq rx545_pos, -1, rx545_fail
     jump $I10
-  rx542_done:
-    rx542_cur."!cursor_fail"()
-    rx542_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
-    .return (rx542_cur)
+  rx545_done:
+    rx545_cur."!cursor_fail"()
+    rx545_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<my>")
+    .return (rx545_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1271336396.90314") :method
 .annotate "line", 4
-    $P544 = self."!PREFIX__!subrule"("scoped", "my")
-    new $P545, "ResizablePMCArray"
-    push $P545, $P544
-    .return ($P545)
+    $P547 = self."!PREFIX__!subrule"("scoped", "my")
+    new $P548, "ResizablePMCArray"
+    push $P548, $P547
+    .return ($P548)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("135_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<our>"  :subid("135_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx549_tgt
-    .local int rx549_pos
-    .local int rx549_off
-    .local int rx549_eos
-    .local int rx549_rep
-    .local pmc rx549_cur
-    (rx549_cur, rx549_pos, rx549_tgt) = self."!cursor_start"()
-    rx549_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
-    .lex unicode:"$\x{a2}", rx549_cur
+    .local string rx552_tgt
+    .local int rx552_pos
+    .local int rx552_off
+    .local int rx552_eos
+    .local int rx552_rep
+    .local pmc rx552_cur
+    (rx552_cur, rx552_pos, rx552_tgt) = self."!cursor_start"()
+    rx552_cur."!cursor_debug"("START ", "scope_declarator:sym<our>")
+    .lex unicode:"$\x{a2}", rx552_cur
     .local pmc match
     .lex "$/", match
-    length rx549_eos, rx549_tgt
-    set rx549_off, 0
-    lt rx549_pos, 2, rx549_start
-    sub rx549_off, rx549_pos, 1
-    substr rx549_tgt, rx549_tgt, rx549_off
-  rx549_start:
+    length rx552_eos, rx552_tgt
+    set rx552_off, 0
+    lt rx552_pos, 2, rx552_start
+    sub rx552_off, rx552_pos, 1
+    substr rx552_tgt, rx552_tgt, rx552_off
+  rx552_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan553_done
-    goto rxscan553_scan
-  rxscan553_loop:
-    ($P10) = rx549_cur."from"()
+    ne $I10, -1, rxscan556_done
+    goto rxscan556_scan
+  rxscan556_loop:
+    ($P10) = rx552_cur."from"()
     inc $P10
-    set rx549_pos, $P10
-    ge rx549_pos, rx549_eos, rxscan553_done
-  rxscan553_scan:
-    set_addr $I10, rxscan553_loop
-    rx549_cur."!mark_push"(0, rx549_pos, $I10)
-  rxscan553_done:
-.annotate "line", 265
+    set rx552_pos, $P10
+    ge rx552_pos, rx552_eos, rxscan556_done
+  rxscan556_scan:
+    set_addr $I10, rxscan556_loop
+    rx552_cur."!mark_push"(0, rx552_pos, $I10)
+  rxscan556_done:
+.annotate "line", 269
   # rx subcapture "sym"
-    set_addr $I10, rxcap_554_fail
-    rx549_cur."!mark_push"(0, rx549_pos, $I10)
+    set_addr $I10, rxcap_557_fail
+    rx552_cur."!mark_push"(0, rx552_pos, $I10)
   # rx literal  "our"
-    add $I11, rx549_pos, 3
-    gt $I11, rx549_eos, rx549_fail
-    sub $I11, rx549_pos, rx549_off
-    substr $S10, rx549_tgt, $I11, 3
-    ne $S10, "our", rx549_fail
-    add rx549_pos, 3
-    set_addr $I10, rxcap_554_fail
-    ($I12, $I11) = rx549_cur."!mark_peek"($I10)
-    rx549_cur."!cursor_pos"($I11)
-    ($P10) = rx549_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx549_pos, "")
-    rx549_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx552_pos, 3
+    gt $I11, rx552_eos, rx552_fail
+    sub $I11, rx552_pos, rx552_off
+    substr $S10, rx552_tgt, $I11, 3
+    ne $S10, "our", rx552_fail
+    add rx552_pos, 3
+    set_addr $I10, rxcap_557_fail
+    ($I12, $I11) = rx552_cur."!mark_peek"($I10)
+    rx552_cur."!cursor_pos"($I11)
+    ($P10) = rx552_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx552_pos, "")
+    rx552_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_554_done
-  rxcap_554_fail:
-    goto rx549_fail
-  rxcap_554_done:
+    goto rxcap_557_done
+  rxcap_557_fail:
+    goto rx552_fail
+  rxcap_557_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx549_cur."!cursor_pos"(rx549_pos)
-    $P10 = rx549_cur."scoped"("our")
-    unless $P10, rx549_fail
-    rx549_cur."!mark_push"(0, -1, 0, $P10)
+    rx552_cur."!cursor_pos"(rx552_pos)
+    $P10 = rx552_cur."scoped"("our")
+    unless $P10, rx552_fail
+    rx552_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx549_pos = $P10."pos"()
+    rx552_pos = $P10."pos"()
   # rx pass
-    rx549_cur."!cursor_pass"(rx549_pos, "scope_declarator:sym<our>")
-    rx549_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx549_pos)
-    .return (rx549_cur)
-  rx549_fail:
+    rx552_cur."!cursor_pass"(rx552_pos, "scope_declarator:sym<our>")
+    rx552_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<our>", " at pos=", rx552_pos)
+    .return (rx552_cur)
+  rx552_fail:
 .annotate "line", 4
-    (rx549_rep, rx549_pos, $I10, $P10) = rx549_cur."!mark_fail"(0)
-    lt rx549_pos, -1, rx549_done
-    eq rx549_pos, -1, rx549_fail
+    (rx552_rep, rx552_pos, $I10, $P10) = rx552_cur."!mark_fail"(0)
+    lt rx552_pos, -1, rx552_done
+    eq rx552_pos, -1, rx552_fail
     jump $I10
-  rx549_done:
-    rx549_cur."!cursor_fail"()
-    rx549_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
-    .return (rx549_cur)
+  rx552_done:
+    rx552_cur."!cursor_fail"()
+    rx552_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<our>")
+    .return (rx552_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1271336396.90314") :method
 .annotate "line", 4
-    $P551 = self."!PREFIX__!subrule"("scoped", "our")
-    new $P552, "ResizablePMCArray"
-    push $P552, $P551
-    .return ($P552)
+    $P554 = self."!PREFIX__!subrule"("scoped", "our")
+    new $P555, "ResizablePMCArray"
+    push $P555, $P554
+    .return ($P555)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("137_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "scope_declarator:sym<has>"  :subid("137_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx556_tgt
-    .local int rx556_pos
-    .local int rx556_off
-    .local int rx556_eos
-    .local int rx556_rep
-    .local pmc rx556_cur
-    (rx556_cur, rx556_pos, rx556_tgt) = self."!cursor_start"()
-    rx556_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
-    .lex unicode:"$\x{a2}", rx556_cur
+    .local string rx559_tgt
+    .local int rx559_pos
+    .local int rx559_off
+    .local int rx559_eos
+    .local int rx559_rep
+    .local pmc rx559_cur
+    (rx559_cur, rx559_pos, rx559_tgt) = self."!cursor_start"()
+    rx559_cur."!cursor_debug"("START ", "scope_declarator:sym<has>")
+    .lex unicode:"$\x{a2}", rx559_cur
     .local pmc match
     .lex "$/", match
-    length rx556_eos, rx556_tgt
-    set rx556_off, 0
-    lt rx556_pos, 2, rx556_start
-    sub rx556_off, rx556_pos, 1
-    substr rx556_tgt, rx556_tgt, rx556_off
-  rx556_start:
+    length rx559_eos, rx559_tgt
+    set rx559_off, 0
+    lt rx559_pos, 2, rx559_start
+    sub rx559_off, rx559_pos, 1
+    substr rx559_tgt, rx559_tgt, rx559_off
+  rx559_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan560_done
-    goto rxscan560_scan
-  rxscan560_loop:
-    ($P10) = rx556_cur."from"()
+    ne $I10, -1, rxscan563_done
+    goto rxscan563_scan
+  rxscan563_loop:
+    ($P10) = rx559_cur."from"()
     inc $P10
-    set rx556_pos, $P10
-    ge rx556_pos, rx556_eos, rxscan560_done
-  rxscan560_scan:
-    set_addr $I10, rxscan560_loop
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
-  rxscan560_done:
-.annotate "line", 266
+    set rx559_pos, $P10
+    ge rx559_pos, rx559_eos, rxscan563_done
+  rxscan563_scan:
+    set_addr $I10, rxscan563_loop
+    rx559_cur."!mark_push"(0, rx559_pos, $I10)
+  rxscan563_done:
+.annotate "line", 270
   # rx subcapture "sym"
-    set_addr $I10, rxcap_561_fail
-    rx556_cur."!mark_push"(0, rx556_pos, $I10)
+    set_addr $I10, rxcap_564_fail
+    rx559_cur."!mark_push"(0, rx559_pos, $I10)
   # rx literal  "has"
-    add $I11, rx556_pos, 3
-    gt $I11, rx556_eos, rx556_fail
-    sub $I11, rx556_pos, rx556_off
-    substr $S10, rx556_tgt, $I11, 3
-    ne $S10, "has", rx556_fail
-    add rx556_pos, 3
-    set_addr $I10, rxcap_561_fail
-    ($I12, $I11) = rx556_cur."!mark_peek"($I10)
-    rx556_cur."!cursor_pos"($I11)
-    ($P10) = rx556_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx556_pos, "")
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx559_pos, 3
+    gt $I11, rx559_eos, rx559_fail
+    sub $I11, rx559_pos, rx559_off
+    substr $S10, rx559_tgt, $I11, 3
+    ne $S10, "has", rx559_fail
+    add rx559_pos, 3
+    set_addr $I10, rxcap_564_fail
+    ($I12, $I11) = rx559_cur."!mark_peek"($I10)
+    rx559_cur."!cursor_pos"($I11)
+    ($P10) = rx559_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx559_pos, "")
+    rx559_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_561_done
-  rxcap_561_fail:
-    goto rx556_fail
-  rxcap_561_done:
+    goto rxcap_564_done
+  rxcap_564_fail:
+    goto rx559_fail
+  rxcap_564_done:
   # rx subrule "scoped" subtype=capture negate=
-    rx556_cur."!cursor_pos"(rx556_pos)
-    $P10 = rx556_cur."scoped"("has")
-    unless $P10, rx556_fail
-    rx556_cur."!mark_push"(0, -1, 0, $P10)
+    rx559_cur."!cursor_pos"(rx559_pos)
+    $P10 = rx559_cur."scoped"("has")
+    unless $P10, rx559_fail
+    rx559_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("scoped")
-    rx556_pos = $P10."pos"()
+    rx559_pos = $P10."pos"()
   # rx pass
-    rx556_cur."!cursor_pass"(rx556_pos, "scope_declarator:sym<has>")
-    rx556_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx556_pos)
-    .return (rx556_cur)
-  rx556_fail:
+    rx559_cur."!cursor_pass"(rx559_pos, "scope_declarator:sym<has>")
+    rx559_cur."!cursor_debug"("PASS  ", "scope_declarator:sym<has>", " at pos=", rx559_pos)
+    .return (rx559_cur)
+  rx559_fail:
 .annotate "line", 4
-    (rx556_rep, rx556_pos, $I10, $P10) = rx556_cur."!mark_fail"(0)
-    lt rx556_pos, -1, rx556_done
-    eq rx556_pos, -1, rx556_fail
+    (rx559_rep, rx559_pos, $I10, $P10) = rx559_cur."!mark_fail"(0)
+    lt rx559_pos, -1, rx559_done
+    eq rx559_pos, -1, rx559_fail
     jump $I10
-  rx556_done:
-    rx556_cur."!cursor_fail"()
-    rx556_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
-    .return (rx556_cur)
+  rx559_done:
+    rx559_cur."!cursor_fail"()
+    rx559_cur."!cursor_debug"("FAIL  ", "scope_declarator:sym<has>")
+    .return (rx559_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1267204702.05125") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1271336396.90314") :method
 .annotate "line", 4
-    $P558 = self."!PREFIX__!subrule"("scoped", "has")
-    new $P559, "ResizablePMCArray"
-    push $P559, $P558
-    .return ($P559)
+    $P561 = self."!PREFIX__!subrule"("scoped", "has")
+    new $P562, "ResizablePMCArray"
+    push $P562, $P561
+    .return ($P562)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("139_1267204702.05125") :method :outer("11_1267204702.05125")
-    .param pmc param_563
-.annotate "line", 268
-    .lex "$*SCOPE", param_563
+.sub "scoped"  :subid("139_1271336396.90314") :method :outer("11_1271336396.90314")
+    .param pmc param_566
+.annotate "line", 272
+    .lex "$*SCOPE", param_566
 .annotate "line", 4
-    .local string rx564_tgt
-    .local int rx564_pos
-    .local int rx564_off
-    .local int rx564_eos
-    .local int rx564_rep
-    .local pmc rx564_cur
-    (rx564_cur, rx564_pos, rx564_tgt) = self."!cursor_start"()
-    rx564_cur."!cursor_debug"("START ", "scoped")
-    .lex unicode:"$\x{a2}", rx564_cur
-    .local pmc match
-    .lex "$/", match
-    length rx564_eos, rx564_tgt
-    set rx564_off, 0
-    lt rx564_pos, 2, rx564_start
-    sub rx564_off, rx564_pos, 1
-    substr rx564_tgt, rx564_tgt, rx564_off
-  rx564_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan567_done
-    goto rxscan567_scan
-  rxscan567_loop:
-    ($P10) = rx564_cur."from"()
-    inc $P10
-    set rx564_pos, $P10
-    ge rx564_pos, rx564_eos, rxscan567_done
-  rxscan567_scan:
-    set_addr $I10, rxscan567_loop
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-  rxscan567_done:
-  alt568_0:
-.annotate "line", 268
-    set_addr $I10, alt568_1
-    rx564_cur."!mark_push"(0, rx564_pos, $I10)
-.annotate "line", 269
+    .local string rx567_tgt
+    .local int rx567_pos
+    .local int rx567_off
+    .local int rx567_eos
+    .local int rx567_rep
+    .local pmc rx567_cur
+    (rx567_cur, rx567_pos, rx567_tgt) = self."!cursor_start"()
+    rx567_cur."!cursor_debug"("START ", "scoped")
+    .lex unicode:"$\x{a2}", rx567_cur
+    .local pmc match
+    .lex "$/", match
+    length rx567_eos, rx567_tgt
+    set rx567_off, 0
+    lt rx567_pos, 2, rx567_start
+    sub rx567_off, rx567_pos, 1
+    substr rx567_tgt, rx567_tgt, rx567_off
+  rx567_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan570_done
+    goto rxscan570_scan
+  rxscan570_loop:
+    ($P10) = rx567_cur."from"()
+    inc $P10
+    set rx567_pos, $P10
+    ge rx567_pos, rx567_eos, rxscan570_done
+  rxscan570_scan:
+    set_addr $I10, rxscan570_loop
+    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+  rxscan570_done:
+  alt571_0:
+.annotate "line", 272
+    set_addr $I10, alt571_1
+    rx567_cur."!mark_push"(0, rx567_pos, $I10)
+.annotate "line", 273
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
   # rx subrule "variable_declarator" subtype=capture negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."variable_declarator"()
-    unless $P10, rx564_fail
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."variable_declarator"()
+    unless $P10, rx567_fail
+    rx567_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable_declarator")
-    rx564_pos = $P10."pos"()
+    rx567_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
-    goto alt568_end
-  alt568_1:
-.annotate "line", 270
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
+    goto alt571_end
+  alt571_1:
+.annotate "line", 274
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
   # rx subrule "routine_declarator" subtype=capture negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."routine_declarator"()
-    unless $P10, rx564_fail
-    rx564_cur."!mark_push"(0, -1, 0, $P10)
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."routine_declarator"()
+    unless $P10, rx567_fail
+    rx567_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_declarator")
-    rx564_pos = $P10."pos"()
+    rx567_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx564_cur."!cursor_pos"(rx564_pos)
-    $P10 = rx564_cur."ws"()
-    unless $P10, rx564_fail
-    rx564_pos = $P10."pos"()
-  alt568_end:
-.annotate "line", 268
+    rx567_cur."!cursor_pos"(rx567_pos)
+    $P10 = rx567_cur."ws"()
+    unless $P10, rx567_fail
+    rx567_pos = $P10."pos"()
+  alt571_end:
+.annotate "line", 272
   # rx pass
-    rx564_cur."!cursor_pass"(rx564_pos, "scoped")
-    rx564_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx564_pos)
-    .return (rx564_cur)
-  rx564_fail:
+    rx567_cur."!cursor_pass"(rx567_pos, "scoped")
+    rx567_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx567_pos)
+    .return (rx567_cur)
+  rx567_fail:
 .annotate "line", 4
-    (rx564_rep, rx564_pos, $I10, $P10) = rx564_cur."!mark_fail"(0)
-    lt rx564_pos, -1, rx564_done
-    eq rx564_pos, -1, rx564_fail
+    (rx567_rep, rx567_pos, $I10, $P10) = rx567_cur."!mark_fail"(0)
+    lt rx567_pos, -1, rx567_done
+    eq rx567_pos, -1, rx567_fail
     jump $I10
-  rx564_done:
-    rx564_cur."!cursor_fail"()
-    rx564_cur."!cursor_debug"("FAIL  ", "scoped")
-    .return (rx564_cur)
+  rx567_done:
+    rx567_cur."!cursor_fail"()
+    rx567_cur."!cursor_debug"("FAIL  ", "scoped")
+    .return (rx567_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("140_1267204702.05125") :method
+.sub "!PREFIX__scoped"  :subid("140_1271336396.90314") :method
 .annotate "line", 4
-    new $P566, "ResizablePMCArray"
-    push $P566, ""
-    push $P566, ""
-    .return ($P566)
+    new $P569, "ResizablePMCArray"
+    push $P569, ""
+    push $P569, ""
+    .return ($P569)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("141_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "variable_declarator"  :subid("141_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx574_tgt
-    .local int rx574_pos
-    .local int rx574_off
-    .local int rx574_eos
-    .local int rx574_rep
-    .local pmc rx574_cur
-    (rx574_cur, rx574_pos, rx574_tgt) = self."!cursor_start"()
-    rx574_cur."!cursor_debug"("START ", "variable_declarator")
-    .lex unicode:"$\x{a2}", rx574_cur
-    .local pmc match
-    .lex "$/", match
-    length rx574_eos, rx574_tgt
-    set rx574_off, 0
-    lt rx574_pos, 2, rx574_start
-    sub rx574_off, rx574_pos, 1
-    substr rx574_tgt, rx574_tgt, rx574_off
-  rx574_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan578_done
-    goto rxscan578_scan
-  rxscan578_loop:
-    ($P10) = rx574_cur."from"()
-    inc $P10
-    set rx574_pos, $P10
-    ge rx574_pos, rx574_eos, rxscan578_done
-  rxscan578_scan:
-    set_addr $I10, rxscan578_loop
-    rx574_cur."!mark_push"(0, rx574_pos, $I10)
-  rxscan578_done:
-.annotate "line", 273
+    .local string rx577_tgt
+    .local int rx577_pos
+    .local int rx577_off
+    .local int rx577_eos
+    .local int rx577_rep
+    .local pmc rx577_cur
+    (rx577_cur, rx577_pos, rx577_tgt) = self."!cursor_start"()
+    rx577_cur."!cursor_debug"("START ", "variable_declarator")
+    .lex unicode:"$\x{a2}", rx577_cur
+    .local pmc match
+    .lex "$/", match
+    length rx577_eos, rx577_tgt
+    set rx577_off, 0
+    lt rx577_pos, 2, rx577_start
+    sub rx577_off, rx577_pos, 1
+    substr rx577_tgt, rx577_tgt, rx577_off
+  rx577_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan581_done
+    goto rxscan581_scan
+  rxscan581_loop:
+    ($P10) = rx577_cur."from"()
+    inc $P10
+    set rx577_pos, $P10
+    ge rx577_pos, rx577_eos, rxscan581_done
+  rxscan581_scan:
+    set_addr $I10, rxscan581_loop
+    rx577_cur."!mark_push"(0, rx577_pos, $I10)
+  rxscan581_done:
+.annotate "line", 277
   # rx subrule "variable" subtype=capture negate=
-    rx574_cur."!cursor_pos"(rx574_pos)
-    $P10 = rx574_cur."variable"()
-    unless $P10, rx574_fail
-    rx574_cur."!mark_push"(0, -1, 0, $P10)
+    rx577_cur."!cursor_pos"(rx577_pos)
+    $P10 = rx577_cur."variable"()
+    unless $P10, rx577_fail
+    rx577_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx574_pos = $P10."pos"()
+    rx577_pos = $P10."pos"()
   # rx pass
-    rx574_cur."!cursor_pass"(rx574_pos, "variable_declarator")
-    rx574_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx574_pos)
-    .return (rx574_cur)
-  rx574_fail:
+    rx577_cur."!cursor_pass"(rx577_pos, "variable_declarator")
+    rx577_cur."!cursor_debug"("PASS  ", "variable_declarator", " at pos=", rx577_pos)
+    .return (rx577_cur)
+  rx577_fail:
 .annotate "line", 4
-    (rx574_rep, rx574_pos, $I10, $P10) = rx574_cur."!mark_fail"(0)
-    lt rx574_pos, -1, rx574_done
-    eq rx574_pos, -1, rx574_fail
+    (rx577_rep, rx577_pos, $I10, $P10) = rx577_cur."!mark_fail"(0)
+    lt rx577_pos, -1, rx577_done
+    eq rx577_pos, -1, rx577_fail
     jump $I10
-  rx574_done:
-    rx574_cur."!cursor_fail"()
-    rx574_cur."!cursor_debug"("FAIL  ", "variable_declarator")
-    .return (rx574_cur)
+  rx577_done:
+    rx577_cur."!cursor_fail"()
+    rx577_cur."!cursor_debug"("FAIL  ", "variable_declarator")
+    .return (rx577_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("142_1267204702.05125") :method
+.sub "!PREFIX__variable_declarator"  :subid("142_1271336396.90314") :method
 .annotate "line", 4
-    $P576 = self."!PREFIX__!subrule"("variable", "")
-    new $P577, "ResizablePMCArray"
-    push $P577, $P576
-    .return ($P577)
+    $P579 = self."!PREFIX__!subrule"("variable", "")
+    new $P580, "ResizablePMCArray"
+    push $P580, $P579
+    .return ($P580)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("143_1267204702.05125") :method
-.annotate "line", 275
-    $P580 = self."!protoregex"("routine_declarator")
-    .return ($P580)
+.sub "routine_declarator"  :subid("143_1271336396.90314") :method
+.annotate "line", 279
+    $P583 = self."!protoregex"("routine_declarator")
+    .return ($P583)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("144_1267204702.05125") :method
-.annotate "line", 275
-    $P582 = self."!PREFIX__!protoregex"("routine_declarator")
-    .return ($P582)
+.sub "!PREFIX__routine_declarator"  :subid("144_1271336396.90314") :method
+.annotate "line", 279
+    $P585 = self."!PREFIX__!protoregex"("routine_declarator")
+    .return ($P585)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("145_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_declarator:sym<sub>"  :subid("145_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx584_tgt
-    .local int rx584_pos
-    .local int rx584_off
-    .local int rx584_eos
-    .local int rx584_rep
-    .local pmc rx584_cur
-    (rx584_cur, rx584_pos, rx584_tgt) = self."!cursor_start"()
-    rx584_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
-    .lex unicode:"$\x{a2}", rx584_cur
-    .local pmc match
-    .lex "$/", match
-    length rx584_eos, rx584_tgt
-    set rx584_off, 0
-    lt rx584_pos, 2, rx584_start
-    sub rx584_off, rx584_pos, 1
-    substr rx584_tgt, rx584_tgt, rx584_off
-  rx584_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan588_done
-    goto rxscan588_scan
-  rxscan588_loop:
-    ($P10) = rx584_cur."from"()
-    inc $P10
-    set rx584_pos, $P10
-    ge rx584_pos, rx584_eos, rxscan588_done
-  rxscan588_scan:
-    set_addr $I10, rxscan588_loop
-    rx584_cur."!mark_push"(0, rx584_pos, $I10)
-  rxscan588_done:
-.annotate "line", 276
+    .local string rx587_tgt
+    .local int rx587_pos
+    .local int rx587_off
+    .local int rx587_eos
+    .local int rx587_rep
+    .local pmc rx587_cur
+    (rx587_cur, rx587_pos, rx587_tgt) = self."!cursor_start"()
+    rx587_cur."!cursor_debug"("START ", "routine_declarator:sym<sub>")
+    .lex unicode:"$\x{a2}", rx587_cur
+    .local pmc match
+    .lex "$/", match
+    length rx587_eos, rx587_tgt
+    set rx587_off, 0
+    lt rx587_pos, 2, rx587_start
+    sub rx587_off, rx587_pos, 1
+    substr rx587_tgt, rx587_tgt, rx587_off
+  rx587_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan591_done
+    goto rxscan591_scan
+  rxscan591_loop:
+    ($P10) = rx587_cur."from"()
+    inc $P10
+    set rx587_pos, $P10
+    ge rx587_pos, rx587_eos, rxscan591_done
+  rxscan591_scan:
+    set_addr $I10, rxscan591_loop
+    rx587_cur."!mark_push"(0, rx587_pos, $I10)
+  rxscan591_done:
+.annotate "line", 280
   # rx subcapture "sym"
-    set_addr $I10, rxcap_589_fail
-    rx584_cur."!mark_push"(0, rx584_pos, $I10)
+    set_addr $I10, rxcap_592_fail
+    rx587_cur."!mark_push"(0, rx587_pos, $I10)
   # rx literal  "sub"
-    add $I11, rx584_pos, 3
-    gt $I11, rx584_eos, rx584_fail
-    sub $I11, rx584_pos, rx584_off
-    substr $S10, rx584_tgt, $I11, 3
-    ne $S10, "sub", rx584_fail
-    add rx584_pos, 3
-    set_addr $I10, rxcap_589_fail
-    ($I12, $I11) = rx584_cur."!mark_peek"($I10)
-    rx584_cur."!cursor_pos"($I11)
-    ($P10) = rx584_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx584_pos, "")
-    rx584_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx587_pos, 3
+    gt $I11, rx587_eos, rx587_fail
+    sub $I11, rx587_pos, rx587_off
+    substr $S10, rx587_tgt, $I11, 3
+    ne $S10, "sub", rx587_fail
+    add rx587_pos, 3
+    set_addr $I10, rxcap_592_fail
+    ($I12, $I11) = rx587_cur."!mark_peek"($I10)
+    rx587_cur."!cursor_pos"($I11)
+    ($P10) = rx587_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx587_pos, "")
+    rx587_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_589_done
-  rxcap_589_fail:
-    goto rx584_fail
-  rxcap_589_done:
+    goto rxcap_592_done
+  rxcap_592_fail:
+    goto rx587_fail
+  rxcap_592_done:
   # rx subrule "routine_def" subtype=capture negate=
-    rx584_cur."!cursor_pos"(rx584_pos)
-    $P10 = rx584_cur."routine_def"()
-    unless $P10, rx584_fail
-    rx584_cur."!mark_push"(0, -1, 0, $P10)
+    rx587_cur."!cursor_pos"(rx587_pos)
+    $P10 = rx587_cur."routine_def"()
+    unless $P10, rx587_fail
+    rx587_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("routine_def")
-    rx584_pos = $P10."pos"()
+    rx587_pos = $P10."pos"()
   # rx pass
-    rx584_cur."!cursor_pass"(rx584_pos, "routine_declarator:sym<sub>")
-    rx584_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx584_pos)
-    .return (rx584_cur)
-  rx584_fail:
+    rx587_cur."!cursor_pass"(rx587_pos, "routine_declarator:sym<sub>")
+    rx587_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<sub>", " at pos=", rx587_pos)
+    .return (rx587_cur)
+  rx587_fail:
 .annotate "line", 4
-    (rx584_rep, rx584_pos, $I10, $P10) = rx584_cur."!mark_fail"(0)
-    lt rx584_pos, -1, rx584_done
-    eq rx584_pos, -1, rx584_fail
+    (rx587_rep, rx587_pos, $I10, $P10) = rx587_cur."!mark_fail"(0)
+    lt rx587_pos, -1, rx587_done
+    eq rx587_pos, -1, rx587_fail
     jump $I10
-  rx584_done:
-    rx584_cur."!cursor_fail"()
-    rx584_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
-    .return (rx584_cur)
+  rx587_done:
+    rx587_cur."!cursor_fail"()
+    rx587_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<sub>")
+    .return (rx587_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1267204702.05125") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1271336396.90314") :method
 .annotate "line", 4
-    $P586 = self."!PREFIX__!subrule"("routine_def", "sub")
-    new $P587, "ResizablePMCArray"
-    push $P587, $P586
-    .return ($P587)
+    $P589 = self."!PREFIX__!subrule"("routine_def", "sub")
+    new $P590, "ResizablePMCArray"
+    push $P590, $P589
+    .return ($P590)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("147_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_declarator:sym<method>"  :subid("147_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx591_tgt
-    .local int rx591_pos
-    .local int rx591_off
-    .local int rx591_eos
-    .local int rx591_rep
-    .local pmc rx591_cur
-    (rx591_cur, rx591_pos, rx591_tgt) = self."!cursor_start"()
-    rx591_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
-    .lex unicode:"$\x{a2}", rx591_cur
-    .local pmc match
-    .lex "$/", match
-    length rx591_eos, rx591_tgt
-    set rx591_off, 0
-    lt rx591_pos, 2, rx591_start
-    sub rx591_off, rx591_pos, 1
-    substr rx591_tgt, rx591_tgt, rx591_off
-  rx591_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan595_done
-    goto rxscan595_scan
-  rxscan595_loop:
-    ($P10) = rx591_cur."from"()
-    inc $P10
-    set rx591_pos, $P10
-    ge rx591_pos, rx591_eos, rxscan595_done
-  rxscan595_scan:
-    set_addr $I10, rxscan595_loop
-    rx591_cur."!mark_push"(0, rx591_pos, $I10)
-  rxscan595_done:
-.annotate "line", 277
+    .local string rx594_tgt
+    .local int rx594_pos
+    .local int rx594_off
+    .local int rx594_eos
+    .local int rx594_rep
+    .local pmc rx594_cur
+    (rx594_cur, rx594_pos, rx594_tgt) = self."!cursor_start"()
+    rx594_cur."!cursor_debug"("START ", "routine_declarator:sym<method>")
+    .lex unicode:"$\x{a2}", rx594_cur
+    .local pmc match
+    .lex "$/", match
+    length rx594_eos, rx594_tgt
+    set rx594_off, 0
+    lt rx594_pos, 2, rx594_start
+    sub rx594_off, rx594_pos, 1
+    substr rx594_tgt, rx594_tgt, rx594_off
+  rx594_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan598_done
+    goto rxscan598_scan
+  rxscan598_loop:
+    ($P10) = rx594_cur."from"()
+    inc $P10
+    set rx594_pos, $P10
+    ge rx594_pos, rx594_eos, rxscan598_done
+  rxscan598_scan:
+    set_addr $I10, rxscan598_loop
+    rx594_cur."!mark_push"(0, rx594_pos, $I10)
+  rxscan598_done:
+.annotate "line", 281
   # rx subcapture "sym"
-    set_addr $I10, rxcap_596_fail
-    rx591_cur."!mark_push"(0, rx591_pos, $I10)
+    set_addr $I10, rxcap_599_fail
+    rx594_cur."!mark_push"(0, rx594_pos, $I10)
   # rx literal  "method"
-    add $I11, rx591_pos, 6
-    gt $I11, rx591_eos, rx591_fail
-    sub $I11, rx591_pos, rx591_off
-    substr $S10, rx591_tgt, $I11, 6
-    ne $S10, "method", rx591_fail
-    add rx591_pos, 6
-    set_addr $I10, rxcap_596_fail
-    ($I12, $I11) = rx591_cur."!mark_peek"($I10)
-    rx591_cur."!cursor_pos"($I11)
-    ($P10) = rx591_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx591_pos, "")
-    rx591_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx594_pos, 6
+    gt $I11, rx594_eos, rx594_fail
+    sub $I11, rx594_pos, rx594_off
+    substr $S10, rx594_tgt, $I11, 6
+    ne $S10, "method", rx594_fail
+    add rx594_pos, 6
+    set_addr $I10, rxcap_599_fail
+    ($I12, $I11) = rx594_cur."!mark_peek"($I10)
+    rx594_cur."!cursor_pos"($I11)
+    ($P10) = rx594_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx594_pos, "")
+    rx594_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_596_done
-  rxcap_596_fail:
-    goto rx591_fail
-  rxcap_596_done:
+    goto rxcap_599_done
+  rxcap_599_fail:
+    goto rx594_fail
+  rxcap_599_done:
   # rx subrule "method_def" subtype=capture negate=
-    rx591_cur."!cursor_pos"(rx591_pos)
-    $P10 = rx591_cur."method_def"()
-    unless $P10, rx591_fail
-    rx591_cur."!mark_push"(0, -1, 0, $P10)
+    rx594_cur."!cursor_pos"(rx594_pos)
+    $P10 = rx594_cur."method_def"()
+    unless $P10, rx594_fail
+    rx594_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("method_def")
-    rx591_pos = $P10."pos"()
+    rx594_pos = $P10."pos"()
   # rx pass
-    rx591_cur."!cursor_pass"(rx591_pos, "routine_declarator:sym<method>")
-    rx591_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx591_pos)
-    .return (rx591_cur)
-  rx591_fail:
+    rx594_cur."!cursor_pass"(rx594_pos, "routine_declarator:sym<method>")
+    rx594_cur."!cursor_debug"("PASS  ", "routine_declarator:sym<method>", " at pos=", rx594_pos)
+    .return (rx594_cur)
+  rx594_fail:
 .annotate "line", 4
-    (rx591_rep, rx591_pos, $I10, $P10) = rx591_cur."!mark_fail"(0)
-    lt rx591_pos, -1, rx591_done
-    eq rx591_pos, -1, rx591_fail
+    (rx594_rep, rx594_pos, $I10, $P10) = rx594_cur."!mark_fail"(0)
+    lt rx594_pos, -1, rx594_done
+    eq rx594_pos, -1, rx594_fail
     jump $I10
-  rx591_done:
-    rx591_cur."!cursor_fail"()
-    rx591_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
-    .return (rx591_cur)
+  rx594_done:
+    rx594_cur."!cursor_fail"()
+    rx594_cur."!cursor_debug"("FAIL  ", "routine_declarator:sym<method>")
+    .return (rx594_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1267204702.05125") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1271336396.90314") :method
 .annotate "line", 4
-    $P593 = self."!PREFIX__!subrule"("method_def", "method")
-    new $P594, "ResizablePMCArray"
-    push $P594, $P593
-    .return ($P594)
+    $P596 = self."!PREFIX__!subrule"("method_def", "method")
+    new $P597, "ResizablePMCArray"
+    push $P597, $P596
+    .return ($P597)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("149_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "routine_def"  :subid("149_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx598_tgt
-    .local int rx598_pos
-    .local int rx598_off
-    .local int rx598_eos
-    .local int rx598_rep
-    .local pmc rx598_cur
-    (rx598_cur, rx598_pos, rx598_tgt) = self."!cursor_start"()
-    rx598_cur."!cursor_debug"("START ", "routine_def")
-    rx598_cur."!cursor_caparray"("deflongname", "sigil")
-    .lex unicode:"$\x{a2}", rx598_cur
+    .local string rx601_tgt
+    .local int rx601_pos
+    .local int rx601_off
+    .local int rx601_eos
+    .local int rx601_rep
+    .local pmc rx601_cur
+    (rx601_cur, rx601_pos, rx601_tgt) = self."!cursor_start"()
+    rx601_cur."!cursor_debug"("START ", "routine_def")
+    rx601_cur."!cursor_caparray"("sigil", "deflongname")
+    .lex unicode:"$\x{a2}", rx601_cur
     .local pmc match
     .lex "$/", match
-    length rx598_eos, rx598_tgt
-    set rx598_off, 0
-    lt rx598_pos, 2, rx598_start
-    sub rx598_off, rx598_pos, 1
-    substr rx598_tgt, rx598_tgt, rx598_off
-  rx598_start:
+    length rx601_eos, rx601_tgt
+    set rx601_off, 0
+    lt rx601_pos, 2, rx601_start
+    sub rx601_off, rx601_pos, 1
+    substr rx601_tgt, rx601_tgt, rx601_off
+  rx601_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan601_done
-    goto rxscan601_scan
-  rxscan601_loop:
-    ($P10) = rx598_cur."from"()
+    ne $I10, -1, rxscan604_done
+    goto rxscan604_scan
+  rxscan604_loop:
+    ($P10) = rx601_cur."from"()
     inc $P10
-    set rx598_pos, $P10
-    ge rx598_pos, rx598_eos, rxscan601_done
-  rxscan601_scan:
-    set_addr $I10, rxscan601_loop
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  rxscan601_done:
-.annotate "line", 279
+    set rx601_pos, $P10
+    ge rx601_pos, rx601_eos, rxscan604_done
+  rxscan604_scan:
+    set_addr $I10, rxscan604_loop
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  rxscan604_done:
+.annotate "line", 283
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 280
-  # rx rxquantr603 ** 0..1
-    set_addr $I609, rxquantr603_done
-    rx598_cur."!mark_push"(0, rx598_pos, $I609)
-  rxquantr603_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 284
+  # rx rxquantr606 ** 0..1
+    set_addr $I612, rxquantr606_done
+    rx601_cur."!mark_push"(0, rx601_pos, $I612)
+  rxquantr606_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subcapture "sigil"
-    set_addr $I10, rxcap_607_fail
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  # rx rxquantr605 ** 0..1
-    set_addr $I606, rxquantr605_done
-    rx598_cur."!mark_push"(0, rx598_pos, $I606)
-  rxquantr605_loop:
+    set_addr $I10, rxcap_610_fail
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  # rx rxquantr608 ** 0..1
+    set_addr $I609, rxquantr608_done
+    rx601_cur."!mark_push"(0, rx601_pos, $I609)
+  rxquantr608_loop:
   # rx literal  "&"
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, "&", rx598_fail
-    add rx598_pos, 1
-    (rx598_rep) = rx598_cur."!mark_commit"($I606)
-  rxquantr605_done:
-    set_addr $I10, rxcap_607_fail
-    ($I12, $I11) = rx598_cur."!mark_peek"($I10)
-    rx598_cur."!cursor_pos"($I11)
-    ($P10) = rx598_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx598_pos, "")
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, "&", rx601_fail
+    add rx601_pos, 1
+    (rx601_rep) = rx601_cur."!mark_commit"($I609)
+  rxquantr608_done:
+    set_addr $I10, rxcap_610_fail
+    ($I12, $I11) = rx601_cur."!mark_peek"($I10)
+    rx601_cur."!cursor_pos"($I11)
+    ($P10) = rx601_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx601_pos, "")
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    goto rxcap_607_done
-  rxcap_607_fail:
-    goto rx598_fail
-  rxcap_607_done:
+    goto rxcap_610_done
+  rxcap_610_fail:
+    goto rx601_fail
+  rxcap_610_done:
   # rx subrule "deflongname" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."deflongname"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."deflongname"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-    (rx598_rep) = rx598_cur."!mark_commit"($I609)
-  rxquantr603_done:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 281
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+    (rx601_rep) = rx601_cur."!mark_commit"($I612)
+  rxquantr606_done:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 285
   # rx subrule "newpad" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."newpad"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  alt612_0:
-.annotate "line", 282
-    set_addr $I10, alt612_1
-    rx598_cur."!mark_push"(0, rx598_pos, $I10)
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."newpad"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  alt615_0:
+.annotate "line", 286
+    set_addr $I10, alt615_1
+    rx601_cur."!mark_push"(0, rx601_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, "(", rx598_fail
-    add rx598_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, "(", rx601_fail
+    add rx601_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."signature"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."signature"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx598_pos, 1
-    gt $I11, rx598_eos, rx598_fail
-    sub $I11, rx598_pos, rx598_off
-    substr $S10, rx598_tgt, $I11, 1
-    ne $S10, ")", rx598_fail
-    add rx598_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-    goto alt612_end
-  alt612_1:
-.annotate "line", 283
+    add $I11, rx601_pos, 1
+    gt $I11, rx601_eos, rx601_fail
+    sub $I11, rx601_pos, rx601_off
+    substr $S10, rx601_tgt, $I11, 1
+    ne $S10, ")", rx601_fail
+    add rx601_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+    goto alt615_end
+  alt615_1:
+.annotate "line", 287
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-  alt612_end:
-  # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 284
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+  alt615_end:
+  # rx subrule "ws" subtype=method negate=
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 288
   # rx subrule "blockoid" subtype=capture negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."blockoid"()
-    unless $P10, rx598_fail
-    rx598_cur."!mark_push"(0, -1, 0, $P10)
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."blockoid"()
+    unless $P10, rx601_fail
+    rx601_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx598_pos = $P10."pos"()
+    rx601_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx598_cur."!cursor_pos"(rx598_pos)
-    $P10 = rx598_cur."ws"()
-    unless $P10, rx598_fail
-    rx598_pos = $P10."pos"()
-.annotate "line", 279
+    rx601_cur."!cursor_pos"(rx601_pos)
+    $P10 = rx601_cur."ws"()
+    unless $P10, rx601_fail
+    rx601_pos = $P10."pos"()
+.annotate "line", 283
   # rx pass
-    rx598_cur."!cursor_pass"(rx598_pos, "routine_def")
-    rx598_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx598_pos)
-    .return (rx598_cur)
-  rx598_fail:
+    rx601_cur."!cursor_pass"(rx601_pos, "routine_def")
+    rx601_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx601_pos)
+    .return (rx601_cur)
+  rx601_fail:
 .annotate "line", 4
-    (rx598_rep, rx598_pos, $I10, $P10) = rx598_cur."!mark_fail"(0)
-    lt rx598_pos, -1, rx598_done
-    eq rx598_pos, -1, rx598_fail
+    (rx601_rep, rx601_pos, $I10, $P10) = rx601_cur."!mark_fail"(0)
+    lt rx601_pos, -1, rx601_done
+    eq rx601_pos, -1, rx601_fail
     jump $I10
-  rx598_done:
-    rx598_cur."!cursor_fail"()
-    rx598_cur."!cursor_debug"("FAIL  ", "routine_def")
-    .return (rx598_cur)
+  rx601_done:
+    rx601_cur."!cursor_fail"()
+    rx601_cur."!cursor_debug"("FAIL  ", "routine_def")
+    .return (rx601_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("150_1267204702.05125") :method
+.sub "!PREFIX__routine_def"  :subid("150_1271336396.90314") :method
 .annotate "line", 4
-    new $P600, "ResizablePMCArray"
-    push $P600, ""
-    .return ($P600)
+    new $P603, "ResizablePMCArray"
+    push $P603, ""
+    .return ($P603)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("151_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "method_def"  :subid("151_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx622_tgt
-    .local int rx622_pos
-    .local int rx622_off
-    .local int rx622_eos
-    .local int rx622_rep
-    .local pmc rx622_cur
-    (rx622_cur, rx622_pos, rx622_tgt) = self."!cursor_start"()
-    rx622_cur."!cursor_debug"("START ", "method_def")
-    rx622_cur."!cursor_caparray"("deflongname")
-    .lex unicode:"$\x{a2}", rx622_cur
-    .local pmc match
-    .lex "$/", match
-    length rx622_eos, rx622_tgt
-    set rx622_off, 0
-    lt rx622_pos, 2, rx622_start
-    sub rx622_off, rx622_pos, 1
-    substr rx622_tgt, rx622_tgt, rx622_off
-  rx622_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan625_done
-    goto rxscan625_scan
-  rxscan625_loop:
-    ($P10) = rx622_cur."from"()
-    inc $P10
-    set rx622_pos, $P10
-    ge rx622_pos, rx622_eos, rxscan625_done
-  rxscan625_scan:
-    set_addr $I10, rxscan625_loop
-    rx622_cur."!mark_push"(0, rx622_pos, $I10)
-  rxscan625_done:
-.annotate "line", 287
+    .local string rx625_tgt
+    .local int rx625_pos
+    .local int rx625_off
+    .local int rx625_eos
+    .local int rx625_rep
+    .local pmc rx625_cur
+    (rx625_cur, rx625_pos, rx625_tgt) = self."!cursor_start"()
+    rx625_cur."!cursor_debug"("START ", "method_def")
+    rx625_cur."!cursor_caparray"("deflongname")
+    .lex unicode:"$\x{a2}", rx625_cur
+    .local pmc match
+    .lex "$/", match
+    length rx625_eos, rx625_tgt
+    set rx625_off, 0
+    lt rx625_pos, 2, rx625_start
+    sub rx625_off, rx625_pos, 1
+    substr rx625_tgt, rx625_tgt, rx625_off
+  rx625_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan628_done
+    goto rxscan628_scan
+  rxscan628_loop:
+    ($P10) = rx625_cur."from"()
+    inc $P10
+    set rx625_pos, $P10
+    ge rx625_pos, rx625_eos, rxscan628_done
+  rxscan628_scan:
+    set_addr $I10, rxscan628_loop
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  rxscan628_done:
+.annotate "line", 291
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 288
-  # rx rxquantr627 ** 0..1
-    set_addr $I628, rxquantr627_done
-    rx622_cur."!mark_push"(0, rx622_pos, $I628)
-  rxquantr627_loop:
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 292
+  # rx rxquantr630 ** 0..1
+    set_addr $I631, rxquantr630_done
+    rx625_cur."!mark_push"(0, rx625_pos, $I631)
+  rxquantr630_loop:
   # rx subrule "deflongname" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."deflongname"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."deflongname"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx622_pos = $P10."pos"()
-    (rx622_rep) = rx622_cur."!mark_commit"($I628)
-  rxquantr627_done:
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 289
+    rx625_pos = $P10."pos"()
+    (rx625_rep) = rx625_cur."!mark_commit"($I631)
+  rxquantr630_done:
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 293
   # rx subrule "newpad" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."newpad"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  alt631_0:
-.annotate "line", 290
-    set_addr $I10, alt631_1
-    rx622_cur."!mark_push"(0, rx622_pos, $I10)
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."newpad"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  alt634_0:
+.annotate "line", 294
+    set_addr $I10, alt634_1
+    rx625_cur."!mark_push"(0, rx625_pos, $I10)
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx622_pos, 1
-    gt $I11, rx622_eos, rx622_fail
-    sub $I11, rx622_pos, rx622_off
-    substr $S10, rx622_tgt, $I11, 1
-    ne $S10, "(", rx622_fail
-    add rx622_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    add $I11, rx625_pos, 1
+    gt $I11, rx625_eos, rx625_fail
+    sub $I11, rx625_pos, rx625_off
+    substr $S10, rx625_tgt, $I11, 1
+    ne $S10, "(", rx625_fail
+    add rx625_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."signature"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."signature"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx622_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx622_pos, 1
-    gt $I11, rx622_eos, rx622_fail
-    sub $I11, rx622_pos, rx622_off
-    substr $S10, rx622_tgt, $I11, 1
-    ne $S10, ")", rx622_fail
-    add rx622_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-    goto alt631_end
-  alt631_1:
-.annotate "line", 291
+    add $I11, rx625_pos, 1
+    gt $I11, rx625_eos, rx625_fail
+    sub $I11, rx625_pos, rx625_off
+    substr $S10, rx625_tgt, $I11, 1
+    ne $S10, ")", rx625_fail
+    add rx625_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+    goto alt634_end
+  alt634_1:
+.annotate "line", 295
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."panic"("Routine declaration requires a signature")
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-  alt631_end:
-  # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 292
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."panic"("Routine declaration requires a signature")
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+  alt634_end:
+  # rx subrule "ws" subtype=method negate=
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 296
   # rx subrule "blockoid" subtype=capture negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."blockoid"()
-    unless $P10, rx622_fail
-    rx622_cur."!mark_push"(0, -1, 0, $P10)
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."blockoid"()
+    unless $P10, rx625_fail
+    rx625_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
-    rx622_pos = $P10."pos"()
+    rx625_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx622_cur."!cursor_pos"(rx622_pos)
-    $P10 = rx622_cur."ws"()
-    unless $P10, rx622_fail
-    rx622_pos = $P10."pos"()
-.annotate "line", 287
+    rx625_cur."!cursor_pos"(rx625_pos)
+    $P10 = rx625_cur."ws"()
+    unless $P10, rx625_fail
+    rx625_pos = $P10."pos"()
+.annotate "line", 291
   # rx pass
-    rx622_cur."!cursor_pass"(rx622_pos, "method_def")
-    rx622_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx622_pos)
-    .return (rx622_cur)
-  rx622_fail:
+    rx625_cur."!cursor_pass"(rx625_pos, "method_def")
+    rx625_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx625_pos)
+    .return (rx625_cur)
+  rx625_fail:
 .annotate "line", 4
-    (rx622_rep, rx622_pos, $I10, $P10) = rx622_cur."!mark_fail"(0)
-    lt rx622_pos, -1, rx622_done
-    eq rx622_pos, -1, rx622_fail
+    (rx625_rep, rx625_pos, $I10, $P10) = rx625_cur."!mark_fail"(0)
+    lt rx625_pos, -1, rx625_done
+    eq rx625_pos, -1, rx625_fail
     jump $I10
-  rx622_done:
-    rx622_cur."!cursor_fail"()
-    rx622_cur."!cursor_debug"("FAIL  ", "method_def")
-    .return (rx622_cur)
+  rx625_done:
+    rx625_cur."!cursor_fail"()
+    rx625_cur."!cursor_debug"("FAIL  ", "method_def")
+    .return (rx625_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("152_1267204702.05125") :method
+.sub "!PREFIX__method_def"  :subid("152_1271336396.90314") :method
 .annotate "line", 4
-    new $P624, "ResizablePMCArray"
-    push $P624, ""
-    .return ($P624)
+    new $P627, "ResizablePMCArray"
+    push $P627, ""
+    .return ($P627)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("153_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "signature"  :subid("153_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx641_tgt
-    .local int rx641_pos
-    .local int rx641_off
-    .local int rx641_eos
-    .local int rx641_rep
-    .local pmc rx641_cur
-    (rx641_cur, rx641_pos, rx641_tgt) = self."!cursor_start"()
-    rx641_cur."!cursor_debug"("START ", "signature")
-    rx641_cur."!cursor_caparray"("parameter")
-    .lex unicode:"$\x{a2}", rx641_cur
+    .local string rx644_tgt
+    .local int rx644_pos
+    .local int rx644_off
+    .local int rx644_eos
+    .local int rx644_rep
+    .local pmc rx644_cur
+    (rx644_cur, rx644_pos, rx644_tgt) = self."!cursor_start"()
+    rx644_cur."!cursor_debug"("START ", "signature")
+    rx644_cur."!cursor_caparray"("parameter")
+    .lex unicode:"$\x{a2}", rx644_cur
     .local pmc match
     .lex "$/", match
-    length rx641_eos, rx641_tgt
-    set rx641_off, 0
-    lt rx641_pos, 2, rx641_start
-    sub rx641_off, rx641_pos, 1
-    substr rx641_tgt, rx641_tgt, rx641_off
-  rx641_start:
+    length rx644_eos, rx644_tgt
+    set rx644_off, 0
+    lt rx644_pos, 2, rx644_start
+    sub rx644_off, rx644_pos, 1
+    substr rx644_tgt, rx644_tgt, rx644_off
+  rx644_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan644_done
-    goto rxscan644_scan
-  rxscan644_loop:
-    ($P10) = rx641_cur."from"()
+    ne $I10, -1, rxscan647_done
+    goto rxscan647_scan
+  rxscan647_loop:
+    ($P10) = rx644_cur."from"()
     inc $P10
-    set rx641_pos, $P10
-    ge rx641_pos, rx641_eos, rxscan644_done
-  rxscan644_scan:
-    set_addr $I10, rxscan644_loop
-    rx641_cur."!mark_push"(0, rx641_pos, $I10)
-  rxscan644_done:
-.annotate "line", 295
-  # rx rxquantr645 ** 0..1
-    set_addr $I648, rxquantr645_done
-    rx641_cur."!mark_push"(0, rx641_pos, $I648)
-  rxquantr645_loop:
-  # rx rxquantr646 ** 1..*
-    set_addr $I647, rxquantr646_done
-    rx641_cur."!mark_push"(0, -1, $I647)
-  rxquantr646_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."ws"()
-    unless $P10, rx641_fail
-    rx641_pos = $P10."pos"()
+    set rx644_pos, $P10
+    ge rx644_pos, rx644_eos, rxscan647_done
+  rxscan647_scan:
+    set_addr $I10, rxscan647_loop
+    rx644_cur."!mark_push"(0, rx644_pos, $I10)
+  rxscan647_done:
+.annotate "line", 299
+  # rx rxquantr648 ** 0..1
+    set_addr $I651, rxquantr648_done
+    rx644_cur."!mark_push"(0, rx644_pos, $I651)
+  rxquantr648_loop:
+  # rx rxquantr649 ** 1..*
+    set_addr $I650, rxquantr649_done
+    rx644_cur."!mark_push"(0, -1, $I650)
+  rxquantr649_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."ws"()
+    unless $P10, rx644_fail
+    rx644_pos = $P10."pos"()
   # rx subrule "parameter" subtype=capture negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."parameter"()
-    unless $P10, rx641_fail
-    rx641_cur."!mark_push"(0, -1, 0, $P10)
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."parameter"()
+    unless $P10, rx644_fail
+    rx644_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("parameter")
-    rx641_pos = $P10."pos"()
+    rx644_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx641_cur."!cursor_pos"(rx641_pos)
-    $P10 = rx641_cur."ws"()
-    unless $P10, rx641_fail
-    rx641_pos = $P10."pos"()
-    (rx641_rep) = rx641_cur."!mark_commit"($I647)
-    rx641_cur."!mark_push"(rx641_rep, rx641_pos, $I647)
+    rx644_cur."!cursor_pos"(rx644_pos)
+    $P10 = rx644_cur."ws"()
+    unless $P10, rx644_fail
+    rx644_pos = $P10."pos"()
+    (rx644_rep) = rx644_cur."!mark_commit"($I650)
+    rx644_cur."!mark_push"(rx644_rep, rx644_pos, $I650)
   # rx literal  ","
-    add $I11, rx641_pos, 1
-    gt $I11, rx641_eos, rx641_fail
-    sub $I11, rx641_pos, rx641_off
-    substr $S10, rx641_tgt, $I11, 1
-    ne $S10, ",", rx641_fail
-    add rx641_pos, 1
-    goto rxquantr646_loop
-  rxquantr646_done:
-    (rx641_rep) = rx641_cur."!mark_commit"($I648)
-  rxquantr645_done:
+    add $I11, rx644_pos, 1
+    gt $I11, rx644_eos, rx644_fail
+    sub $I11, rx644_pos, rx644_off
+    substr $S10, rx644_tgt, $I11, 1
+    ne $S10, ",", rx644_fail
+    add rx644_pos, 1
+    goto rxquantr649_loop
+  rxquantr649_done:
+    (rx644_rep) = rx644_cur."!mark_commit"($I651)
+  rxquantr648_done:
   # rx pass
-    rx641_cur."!cursor_pass"(rx641_pos, "signature")
-    rx641_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx641_pos)
-    .return (rx641_cur)
-  rx641_fail:
+    rx644_cur."!cursor_pass"(rx644_pos, "signature")
+    rx644_cur."!cursor_debug"("PASS  ", "signature", " at pos=", rx644_pos)
+    .return (rx644_cur)
+  rx644_fail:
 .annotate "line", 4
-    (rx641_rep, rx641_pos, $I10, $P10) = rx641_cur."!mark_fail"(0)
-    lt rx641_pos, -1, rx641_done
-    eq rx641_pos, -1, rx641_fail
+    (rx644_rep, rx644_pos, $I10, $P10) = rx644_cur."!mark_fail"(0)
+    lt rx644_pos, -1, rx644_done
+    eq rx644_pos, -1, rx644_fail
     jump $I10
-  rx641_done:
-    rx641_cur."!cursor_fail"()
-    rx641_cur."!cursor_debug"("FAIL  ", "signature")
-    .return (rx641_cur)
+  rx644_done:
+    rx644_cur."!cursor_fail"()
+    rx644_cur."!cursor_debug"("FAIL  ", "signature")
+    .return (rx644_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("154_1267204702.05125") :method
+.sub "!PREFIX__signature"  :subid("154_1271336396.90314") :method
 .annotate "line", 4
-    new $P643, "ResizablePMCArray"
-    push $P643, ""
-    .return ($P643)
+    new $P646, "ResizablePMCArray"
+    push $P646, ""
+    .return ($P646)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("155_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "parameter"  :subid("155_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx650_tgt
-    .local int rx650_pos
-    .local int rx650_off
-    .local int rx650_eos
-    .local int rx650_rep
-    .local pmc rx650_cur
-    (rx650_cur, rx650_pos, rx650_tgt) = self."!cursor_start"()
-    rx650_cur."!cursor_debug"("START ", "parameter")
-    rx650_cur."!cursor_caparray"("default_value")
-    .lex unicode:"$\x{a2}", rx650_cur
+    .local string rx653_tgt
+    .local int rx653_pos
+    .local int rx653_off
+    .local int rx653_eos
+    .local int rx653_rep
+    .local pmc rx653_cur
+    (rx653_cur, rx653_pos, rx653_tgt) = self."!cursor_start"()
+    rx653_cur."!cursor_debug"("START ", "parameter")
+    rx653_cur."!cursor_caparray"("default_value")
+    .lex unicode:"$\x{a2}", rx653_cur
     .local pmc match
     .lex "$/", match
-    length rx650_eos, rx650_tgt
-    set rx650_off, 0
-    lt rx650_pos, 2, rx650_start
-    sub rx650_off, rx650_pos, 1
-    substr rx650_tgt, rx650_tgt, rx650_off
-  rx650_start:
+    length rx653_eos, rx653_tgt
+    set rx653_off, 0
+    lt rx653_pos, 2, rx653_start
+    sub rx653_off, rx653_pos, 1
+    substr rx653_tgt, rx653_tgt, rx653_off
+  rx653_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan656_done
-    goto rxscan656_scan
-  rxscan656_loop:
-    ($P10) = rx650_cur."from"()
+    ne $I10, -1, rxscan659_done
+    goto rxscan659_scan
+  rxscan659_loop:
+    ($P10) = rx653_cur."from"()
     inc $P10
-    set rx650_pos, $P10
-    ge rx650_pos, rx650_eos, rxscan656_done
-  rxscan656_scan:
-    set_addr $I10, rxscan656_loop
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  rxscan656_done:
-  alt657_0:
-.annotate "line", 298
-    set_addr $I10, alt657_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-.annotate "line", 299
+    set rx653_pos, $P10
+    ge rx653_pos, rx653_eos, rxscan659_done
+  rxscan659_scan:
+    set_addr $I10, rxscan659_loop
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+  rxscan659_done:
+  alt660_0:
+.annotate "line", 302
+    set_addr $I10, alt660_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+.annotate "line", 303
   # rx subcapture "quant"
-    set_addr $I10, rxcap_658_fail
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    set_addr $I10, rxcap_661_fail
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "*"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "*", rx650_fail
-    add rx650_pos, 1
-    set_addr $I10, rxcap_658_fail
-    ($I12, $I11) = rx650_cur."!mark_peek"($I10)
-    rx650_cur."!cursor_pos"($I11)
-    ($P10) = rx650_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx650_pos, "")
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "*", rx653_fail
+    add rx653_pos, 1
+    set_addr $I10, rxcap_661_fail
+    ($I12, $I11) = rx653_cur."!mark_peek"($I10)
+    rx653_cur."!cursor_pos"($I11)
+    ($P10) = rx653_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx653_pos, "")
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_658_done
-  rxcap_658_fail:
-    goto rx650_fail
-  rxcap_658_done:
+    goto rxcap_661_done
+  rxcap_661_fail:
+    goto rx653_fail
+  rxcap_661_done:
   # rx subrule "param_var" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."param_var"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."param_var"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx650_pos = $P10."pos"()
-    goto alt657_end
-  alt657_1:
-  alt659_0:
-.annotate "line", 300
-    set_addr $I10, alt659_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    rx653_pos = $P10."pos"()
+    goto alt660_end
+  alt660_1:
+  alt662_0:
+.annotate "line", 304
+    set_addr $I10, alt662_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx subrule "param_var" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."param_var"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."param_var"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx650_pos = $P10."pos"()
-    goto alt659_end
-  alt659_1:
+    rx653_pos = $P10."pos"()
+    goto alt662_end
+  alt662_1:
   # rx subrule "named_param" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."named_param"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."named_param"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("named_param")
-    rx650_pos = $P10."pos"()
-  alt659_end:
+    rx653_pos = $P10."pos"()
+  alt662_end:
   # rx subcapture "quant"
-    set_addr $I10, rxcap_661_fail
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
-  alt660_0:
-    set_addr $I10, alt660_1
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    set_addr $I10, rxcap_664_fail
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
+  alt663_0:
+    set_addr $I10, alt663_1
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "?"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "?", rx650_fail
-    add rx650_pos, 1
-    goto alt660_end
-  alt660_1:
-    set_addr $I10, alt660_2
-    rx650_cur."!mark_push"(0, rx650_pos, $I10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "?", rx653_fail
+    add rx653_pos, 1
+    goto alt663_end
+  alt663_1:
+    set_addr $I10, alt663_2
+    rx653_cur."!mark_push"(0, rx653_pos, $I10)
   # rx literal  "!"
-    add $I11, rx650_pos, 1
-    gt $I11, rx650_eos, rx650_fail
-    sub $I11, rx650_pos, rx650_off
-    substr $S10, rx650_tgt, $I11, 1
-    ne $S10, "!", rx650_fail
-    add rx650_pos, 1
-    goto alt660_end
-  alt660_2:
-  alt660_end:
-    set_addr $I10, rxcap_661_fail
-    ($I12, $I11) = rx650_cur."!mark_peek"($I10)
-    rx650_cur."!cursor_pos"($I11)
-    ($P10) = rx650_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx650_pos, "")
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx653_pos, 1
+    gt $I11, rx653_eos, rx653_fail
+    sub $I11, rx653_pos, rx653_off
+    substr $S10, rx653_tgt, $I11, 1
+    ne $S10, "!", rx653_fail
+    add rx653_pos, 1
+    goto alt663_end
+  alt663_2:
+  alt663_end:
+    set_addr $I10, rxcap_664_fail
+    ($I12, $I11) = rx653_cur."!mark_peek"($I10)
+    rx653_cur."!cursor_pos"($I11)
+    ($P10) = rx653_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx653_pos, "")
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quant")
-    goto rxcap_661_done
-  rxcap_661_fail:
-    goto rx650_fail
-  rxcap_661_done:
-  alt657_end:
-.annotate "line", 302
-  # rx rxquantr662 ** 0..1
-    set_addr $I663, rxquantr662_done
-    rx650_cur."!mark_push"(0, rx650_pos, $I663)
-  rxquantr662_loop:
+    goto rxcap_664_done
+  rxcap_664_fail:
+    goto rx653_fail
+  rxcap_664_done:
+  alt660_end:
+.annotate "line", 306
+  # rx rxquantr665 ** 0..1
+    set_addr $I666, rxquantr665_done
+    rx653_cur."!mark_push"(0, rx653_pos, $I666)
+  rxquantr665_loop:
   # rx subrule "default_value" subtype=capture negate=
-    rx650_cur."!cursor_pos"(rx650_pos)
-    $P10 = rx650_cur."default_value"()
-    unless $P10, rx650_fail
-    rx650_cur."!mark_push"(0, -1, 0, $P10)
+    rx653_cur."!cursor_pos"(rx653_pos)
+    $P10 = rx653_cur."default_value"()
+    unless $P10, rx653_fail
+    rx653_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("default_value")
-    rx650_pos = $P10."pos"()
-    (rx650_rep) = rx650_cur."!mark_commit"($I663)
-  rxquantr662_done:
-.annotate "line", 297
+    rx653_pos = $P10."pos"()
+    (rx653_rep) = rx653_cur."!mark_commit"($I666)
+  rxquantr665_done:
+.annotate "line", 301
   # rx pass
-    rx650_cur."!cursor_pass"(rx650_pos, "parameter")
-    rx650_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx650_pos)
-    .return (rx650_cur)
-  rx650_fail:
+    rx653_cur."!cursor_pass"(rx653_pos, "parameter")
+    rx653_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx653_pos)
+    .return (rx653_cur)
+  rx653_fail:
 .annotate "line", 4
-    (rx650_rep, rx650_pos, $I10, $P10) = rx650_cur."!mark_fail"(0)
-    lt rx650_pos, -1, rx650_done
-    eq rx650_pos, -1, rx650_fail
+    (rx653_rep, rx653_pos, $I10, $P10) = rx653_cur."!mark_fail"(0)
+    lt rx653_pos, -1, rx653_done
+    eq rx653_pos, -1, rx653_fail
     jump $I10
-  rx650_done:
-    rx650_cur."!cursor_fail"()
-    rx650_cur."!cursor_debug"("FAIL  ", "parameter")
-    .return (rx650_cur)
+  rx653_done:
+    rx653_cur."!cursor_fail"()
+    rx653_cur."!cursor_debug"("FAIL  ", "parameter")
+    .return (rx653_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("156_1267204702.05125") :method
+.sub "!PREFIX__parameter"  :subid("156_1271336396.90314") :method
 .annotate "line", 4
-    $P652 = self."!PREFIX__!subrule"("named_param", "")
-    $P653 = self."!PREFIX__!subrule"("param_var", "")
-    $P654 = self."!PREFIX__!subrule"("param_var", "*")
-    new $P655, "ResizablePMCArray"
-    push $P655, $P652
-    push $P655, $P653
-    push $P655, $P654
-    .return ($P655)
+    $P655 = self."!PREFIX__!subrule"("named_param", "")
+    $P656 = self."!PREFIX__!subrule"("param_var", "")
+    $P657 = self."!PREFIX__!subrule"("param_var", "*")
+    new $P658, "ResizablePMCArray"
+    push $P658, $P655
+    push $P658, $P656
+    push $P658, $P657
+    .return ($P658)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("157_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "param_var"  :subid("157_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx665_tgt
-    .local int rx665_pos
-    .local int rx665_off
-    .local int rx665_eos
-    .local int rx665_rep
-    .local pmc rx665_cur
-    (rx665_cur, rx665_pos, rx665_tgt) = self."!cursor_start"()
-    rx665_cur."!cursor_debug"("START ", "param_var")
-    rx665_cur."!cursor_caparray"("twigil")
-    .lex unicode:"$\x{a2}", rx665_cur
+    .local string rx668_tgt
+    .local int rx668_pos
+    .local int rx668_off
+    .local int rx668_eos
+    .local int rx668_rep
+    .local pmc rx668_cur
+    (rx668_cur, rx668_pos, rx668_tgt) = self."!cursor_start"()
+    rx668_cur."!cursor_debug"("START ", "param_var")
+    rx668_cur."!cursor_caparray"("twigil")
+    .lex unicode:"$\x{a2}", rx668_cur
     .local pmc match
     .lex "$/", match
-    length rx665_eos, rx665_tgt
-    set rx665_off, 0
-    lt rx665_pos, 2, rx665_start
-    sub rx665_off, rx665_pos, 1
-    substr rx665_tgt, rx665_tgt, rx665_off
-  rx665_start:
+    length rx668_eos, rx668_tgt
+    set rx668_off, 0
+    lt rx668_pos, 2, rx668_start
+    sub rx668_off, rx668_pos, 1
+    substr rx668_tgt, rx668_tgt, rx668_off
+  rx668_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan669_done
-    goto rxscan669_scan
-  rxscan669_loop:
-    ($P10) = rx665_cur."from"()
+    ne $I10, -1, rxscan672_done
+    goto rxscan672_scan
+  rxscan672_loop:
+    ($P10) = rx668_cur."from"()
     inc $P10
-    set rx665_pos, $P10
-    ge rx665_pos, rx665_eos, rxscan669_done
-  rxscan669_scan:
-    set_addr $I10, rxscan669_loop
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
-  rxscan669_done:
-.annotate "line", 306
+    set rx668_pos, $P10
+    ge rx668_pos, rx668_eos, rxscan672_done
+  rxscan672_scan:
+    set_addr $I10, rxscan672_loop
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
+  rxscan672_done:
+.annotate "line", 310
   # rx subrule "sigil" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."sigil"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."sigil"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx665_pos = $P10."pos"()
-  # rx rxquantr670 ** 0..1
-    set_addr $I671, rxquantr670_done
-    rx665_cur."!mark_push"(0, rx665_pos, $I671)
-  rxquantr670_loop:
+    rx668_pos = $P10."pos"()
+  # rx rxquantr673 ** 0..1
+    set_addr $I674, rxquantr673_done
+    rx668_cur."!mark_push"(0, rx668_pos, $I674)
+  rxquantr673_loop:
   # rx subrule "twigil" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."twigil"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."twigil"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("twigil")
-    rx665_pos = $P10."pos"()
-    (rx665_rep) = rx665_cur."!mark_commit"($I671)
-  rxquantr670_done:
-  alt672_0:
-.annotate "line", 307
-    set_addr $I10, alt672_1
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
+    rx668_pos = $P10."pos"()
+    (rx668_rep) = rx668_cur."!mark_commit"($I674)
+  rxquantr673_done:
+  alt675_0:
+.annotate "line", 311
+    set_addr $I10, alt675_1
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
   # rx subrule "ident" subtype=capture negate=
-    rx665_cur."!cursor_pos"(rx665_pos)
-    $P10 = rx665_cur."ident"()
-    unless $P10, rx665_fail
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    rx668_cur."!cursor_pos"(rx668_pos)
+    $P10 = rx668_cur."ident"()
+    unless $P10, rx668_fail
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx665_pos = $P10."pos"()
-    goto alt672_end
-  alt672_1:
+    rx668_pos = $P10."pos"()
+    goto alt675_end
+  alt675_1:
   # rx subcapture "name"
-    set_addr $I10, rxcap_673_fail
-    rx665_cur."!mark_push"(0, rx665_pos, $I10)
+    set_addr $I10, rxcap_676_fail
+    rx668_cur."!mark_push"(0, rx668_pos, $I10)
   # rx enumcharlist negate=0 
-    ge rx665_pos, rx665_eos, rx665_fail
-    sub $I10, rx665_pos, rx665_off
-    substr $S10, rx665_tgt, $I10, 1
+    ge rx668_pos, rx668_eos, rx668_fail
+    sub $I10, rx668_pos, rx668_off
+    substr $S10, rx668_tgt, $I10, 1
     index $I11, "/!", $S10
-    lt $I11, 0, rx665_fail
-    inc rx665_pos
-    set_addr $I10, rxcap_673_fail
-    ($I12, $I11) = rx665_cur."!mark_peek"($I10)
-    rx665_cur."!cursor_pos"($I11)
-    ($P10) = rx665_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx665_pos, "")
-    rx665_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx668_fail
+    inc rx668_pos
+    set_addr $I10, rxcap_676_fail
+    ($I12, $I11) = rx668_cur."!mark_peek"($I10)
+    rx668_cur."!cursor_pos"($I11)
+    ($P10) = rx668_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx668_pos, "")
+    rx668_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    goto rxcap_673_done
-  rxcap_673_fail:
-    goto rx665_fail
-  rxcap_673_done:
-  alt672_end:
-.annotate "line", 305
+    goto rxcap_676_done
+  rxcap_676_fail:
+    goto rx668_fail
+  rxcap_676_done:
+  alt675_end:
+.annotate "line", 309
   # rx pass
-    rx665_cur."!cursor_pass"(rx665_pos, "param_var")
-    rx665_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx665_pos)
-    .return (rx665_cur)
-  rx665_fail:
+    rx668_cur."!cursor_pass"(rx668_pos, "param_var")
+    rx668_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx668_pos)
+    .return (rx668_cur)
+  rx668_fail:
 .annotate "line", 4
-    (rx665_rep, rx665_pos, $I10, $P10) = rx665_cur."!mark_fail"(0)
-    lt rx665_pos, -1, rx665_done
-    eq rx665_pos, -1, rx665_fail
+    (rx668_rep, rx668_pos, $I10, $P10) = rx668_cur."!mark_fail"(0)
+    lt rx668_pos, -1, rx668_done
+    eq rx668_pos, -1, rx668_fail
     jump $I10
-  rx665_done:
-    rx665_cur."!cursor_fail"()
-    rx665_cur."!cursor_debug"("FAIL  ", "param_var")
-    .return (rx665_cur)
+  rx668_done:
+    rx668_cur."!cursor_fail"()
+    rx668_cur."!cursor_debug"("FAIL  ", "param_var")
+    .return (rx668_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("158_1267204702.05125") :method
+.sub "!PREFIX__param_var"  :subid("158_1271336396.90314") :method
 .annotate "line", 4
-    $P667 = self."!PREFIX__!subrule"("sigil", "")
-    new $P668, "ResizablePMCArray"
-    push $P668, $P667
-    .return ($P668)
+    $P670 = self."!PREFIX__!subrule"("sigil", "")
+    new $P671, "ResizablePMCArray"
+    push $P671, $P670
+    .return ($P671)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("159_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "named_param"  :subid("159_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx675_tgt
-    .local int rx675_pos
-    .local int rx675_off
-    .local int rx675_eos
-    .local int rx675_rep
-    .local pmc rx675_cur
-    (rx675_cur, rx675_pos, rx675_tgt) = self."!cursor_start"()
-    rx675_cur."!cursor_debug"("START ", "named_param")
-    .lex unicode:"$\x{a2}", rx675_cur
+    .local string rx678_tgt
+    .local int rx678_pos
+    .local int rx678_off
+    .local int rx678_eos
+    .local int rx678_rep
+    .local pmc rx678_cur
+    (rx678_cur, rx678_pos, rx678_tgt) = self."!cursor_start"()
+    rx678_cur."!cursor_debug"("START ", "named_param")
+    .lex unicode:"$\x{a2}", rx678_cur
     .local pmc match
     .lex "$/", match
-    length rx675_eos, rx675_tgt
-    set rx675_off, 0
-    lt rx675_pos, 2, rx675_start
-    sub rx675_off, rx675_pos, 1
-    substr rx675_tgt, rx675_tgt, rx675_off
-  rx675_start:
+    length rx678_eos, rx678_tgt
+    set rx678_off, 0
+    lt rx678_pos, 2, rx678_start
+    sub rx678_off, rx678_pos, 1
+    substr rx678_tgt, rx678_tgt, rx678_off
+  rx678_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan679_done
-    goto rxscan679_scan
-  rxscan679_loop:
-    ($P10) = rx675_cur."from"()
+    ne $I10, -1, rxscan682_done
+    goto rxscan682_scan
+  rxscan682_loop:
+    ($P10) = rx678_cur."from"()
     inc $P10
-    set rx675_pos, $P10
-    ge rx675_pos, rx675_eos, rxscan679_done
-  rxscan679_scan:
-    set_addr $I10, rxscan679_loop
-    rx675_cur."!mark_push"(0, rx675_pos, $I10)
-  rxscan679_done:
-.annotate "line", 311
+    set rx678_pos, $P10
+    ge rx678_pos, rx678_eos, rxscan682_done
+  rxscan682_scan:
+    set_addr $I10, rxscan682_loop
+    rx678_cur."!mark_push"(0, rx678_pos, $I10)
+  rxscan682_done:
+.annotate "line", 315
   # rx literal  ":"
-    add $I11, rx675_pos, 1
-    gt $I11, rx675_eos, rx675_fail
-    sub $I11, rx675_pos, rx675_off
-    substr $S10, rx675_tgt, $I11, 1
-    ne $S10, ":", rx675_fail
-    add rx675_pos, 1
+    add $I11, rx678_pos, 1
+    gt $I11, rx678_eos, rx678_fail
+    sub $I11, rx678_pos, rx678_off
+    substr $S10, rx678_tgt, $I11, 1
+    ne $S10, ":", rx678_fail
+    add rx678_pos, 1
   # rx subrule "param_var" subtype=capture negate=
-    rx675_cur."!cursor_pos"(rx675_pos)
-    $P10 = rx675_cur."param_var"()
-    unless $P10, rx675_fail
-    rx675_cur."!mark_push"(0, -1, 0, $P10)
+    rx678_cur."!cursor_pos"(rx678_pos)
+    $P10 = rx678_cur."param_var"()
+    unless $P10, rx678_fail
+    rx678_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
-    rx675_pos = $P10."pos"()
-.annotate "line", 310
+    rx678_pos = $P10."pos"()
+.annotate "line", 314
   # rx pass
-    rx675_cur."!cursor_pass"(rx675_pos, "named_param")
-    rx675_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx675_pos)
-    .return (rx675_cur)
-  rx675_fail:
+    rx678_cur."!cursor_pass"(rx678_pos, "named_param")
+    rx678_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx678_pos)
+    .return (rx678_cur)
+  rx678_fail:
 .annotate "line", 4
-    (rx675_rep, rx675_pos, $I10, $P10) = rx675_cur."!mark_fail"(0)
-    lt rx675_pos, -1, rx675_done
-    eq rx675_pos, -1, rx675_fail
+    (rx678_rep, rx678_pos, $I10, $P10) = rx678_cur."!mark_fail"(0)
+    lt rx678_pos, -1, rx678_done
+    eq rx678_pos, -1, rx678_fail
     jump $I10
-  rx675_done:
-    rx675_cur."!cursor_fail"()
-    rx675_cur."!cursor_debug"("FAIL  ", "named_param")
-    .return (rx675_cur)
+  rx678_done:
+    rx678_cur."!cursor_fail"()
+    rx678_cur."!cursor_debug"("FAIL  ", "named_param")
+    .return (rx678_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("160_1267204702.05125") :method
+.sub "!PREFIX__named_param"  :subid("160_1271336396.90314") :method
 .annotate "line", 4
-    $P677 = self."!PREFIX__!subrule"("param_var", ":")
-    new $P678, "ResizablePMCArray"
-    push $P678, $P677
-    .return ($P678)
+    $P680 = self."!PREFIX__!subrule"("param_var", ":")
+    new $P681, "ResizablePMCArray"
+    push $P681, $P680
+    .return ($P681)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("161_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "default_value"  :subid("161_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx681_tgt
-    .local int rx681_pos
-    .local int rx681_off
-    .local int rx681_eos
-    .local int rx681_rep
-    .local pmc rx681_cur
-    (rx681_cur, rx681_pos, rx681_tgt) = self."!cursor_start"()
-    rx681_cur."!cursor_debug"("START ", "default_value")
-    .lex unicode:"$\x{a2}", rx681_cur
+    .local string rx684_tgt
+    .local int rx684_pos
+    .local int rx684_off
+    .local int rx684_eos
+    .local int rx684_rep
+    .local pmc rx684_cur
+    (rx684_cur, rx684_pos, rx684_tgt) = self."!cursor_start"()
+    rx684_cur."!cursor_debug"("START ", "default_value")
+    .lex unicode:"$\x{a2}", rx684_cur
     .local pmc match
     .lex "$/", match
-    length rx681_eos, rx681_tgt
-    set rx681_off, 0
-    lt rx681_pos, 2, rx681_start
-    sub rx681_off, rx681_pos, 1
-    substr rx681_tgt, rx681_tgt, rx681_off
-  rx681_start:
+    length rx684_eos, rx684_tgt
+    set rx684_off, 0
+    lt rx684_pos, 2, rx684_start
+    sub rx684_off, rx684_pos, 1
+    substr rx684_tgt, rx684_tgt, rx684_off
+  rx684_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan684_done
-    goto rxscan684_scan
-  rxscan684_loop:
-    ($P10) = rx681_cur."from"()
+    ne $I10, -1, rxscan687_done
+    goto rxscan687_scan
+  rxscan687_loop:
+    ($P10) = rx684_cur."from"()
     inc $P10
-    set rx681_pos, $P10
-    ge rx681_pos, rx681_eos, rxscan684_done
-  rxscan684_scan:
-    set_addr $I10, rxscan684_loop
-    rx681_cur."!mark_push"(0, rx681_pos, $I10)
-  rxscan684_done:
-.annotate "line", 314
+    set rx684_pos, $P10
+    ge rx684_pos, rx684_eos, rxscan687_done
+  rxscan687_scan:
+    set_addr $I10, rxscan687_loop
+    rx684_cur."!mark_push"(0, rx684_pos, $I10)
+  rxscan687_done:
+.annotate "line", 318
   # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx literal  "="
-    add $I11, rx681_pos, 1
-    gt $I11, rx681_eos, rx681_fail
-    sub $I11, rx681_pos, rx681_off
-    substr $S10, rx681_tgt, $I11, 1
-    ne $S10, "=", rx681_fail
-    add rx681_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    add $I11, rx684_pos, 1
+    gt $I11, rx684_eos, rx684_fail
+    sub $I11, rx684_pos, rx684_off
+    substr $S10, rx684_tgt, $I11, 1
+    ne $S10, "=", rx684_fail
+    add rx684_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."EXPR"("i=")
-    unless $P10, rx681_fail
-    rx681_cur."!mark_push"(0, -1, 0, $P10)
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."EXPR"("i=")
+    unless $P10, rx684_fail
+    rx684_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx681_pos = $P10."pos"()
+    rx684_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx681_cur."!cursor_pos"(rx681_pos)
-    $P10 = rx681_cur."ws"()
-    unless $P10, rx681_fail
-    rx681_pos = $P10."pos"()
+    rx684_cur."!cursor_pos"(rx684_pos)
+    $P10 = rx684_cur."ws"()
+    unless $P10, rx684_fail
+    rx684_pos = $P10."pos"()
   # rx pass
-    rx681_cur."!cursor_pass"(rx681_pos, "default_value")
-    rx681_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx681_pos)
-    .return (rx681_cur)
-  rx681_fail:
+    rx684_cur."!cursor_pass"(rx684_pos, "default_value")
+    rx684_cur."!cursor_debug"("PASS  ", "default_value", " at pos=", rx684_pos)
+    .return (rx684_cur)
+  rx684_fail:
 .annotate "line", 4
-    (rx681_rep, rx681_pos, $I10, $P10) = rx681_cur."!mark_fail"(0)
-    lt rx681_pos, -1, rx681_done
-    eq rx681_pos, -1, rx681_fail
+    (rx684_rep, rx684_pos, $I10, $P10) = rx684_cur."!mark_fail"(0)
+    lt rx684_pos, -1, rx684_done
+    eq rx684_pos, -1, rx684_fail
     jump $I10
-  rx681_done:
-    rx681_cur."!cursor_fail"()
-    rx681_cur."!cursor_debug"("FAIL  ", "default_value")
-    .return (rx681_cur)
+  rx684_done:
+    rx684_cur."!cursor_fail"()
+    rx684_cur."!cursor_debug"("FAIL  ", "default_value")
+    .return (rx684_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("162_1267204702.05125") :method
+.sub "!PREFIX__default_value"  :subid("162_1271336396.90314") :method
 .annotate "line", 4
-    new $P683, "ResizablePMCArray"
-    push $P683, ""
-    .return ($P683)
+    new $P686, "ResizablePMCArray"
+    push $P686, ""
+    .return ($P686)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("163_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "regex_declarator"  :subid("163_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx689_tgt
-    .local int rx689_pos
-    .local int rx689_off
-    .local int rx689_eos
-    .local int rx689_rep
-    .local pmc rx689_cur
-    (rx689_cur, rx689_pos, rx689_tgt) = self."!cursor_start"()
-    rx689_cur."!cursor_debug"("START ", "regex_declarator")
-    rx689_cur."!cursor_caparray"("signature")
-    .lex unicode:"$\x{a2}", rx689_cur
-    .local pmc match
-    .lex "$/", match
-    length rx689_eos, rx689_tgt
-    set rx689_off, 0
-    lt rx689_pos, 2, rx689_start
-    sub rx689_off, rx689_pos, 1
-    substr rx689_tgt, rx689_tgt, rx689_off
-  rx689_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan692_done
-    goto rxscan692_scan
-  rxscan692_loop:
-    ($P10) = rx689_cur."from"()
-    inc $P10
-    set rx689_pos, $P10
-    ge rx689_pos, rx689_eos, rxscan692_done
-  rxscan692_scan:
-    set_addr $I10, rxscan692_loop
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  rxscan692_done:
-.annotate "line", 316
+    .local string rx692_tgt
+    .local int rx692_pos
+    .local int rx692_off
+    .local int rx692_eos
+    .local int rx692_rep
+    .local pmc rx692_cur
+    (rx692_cur, rx692_pos, rx692_tgt) = self."!cursor_start"()
+    rx692_cur."!cursor_debug"("START ", "regex_declarator")
+    rx692_cur."!cursor_caparray"("signature")
+    .lex unicode:"$\x{a2}", rx692_cur
+    .local pmc match
+    .lex "$/", match
+    length rx692_eos, rx692_tgt
+    set rx692_off, 0
+    lt rx692_pos, 2, rx692_start
+    sub rx692_off, rx692_pos, 1
+    substr rx692_tgt, rx692_tgt, rx692_off
+  rx692_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan695_done
+    goto rxscan695_scan
+  rxscan695_loop:
+    ($P10) = rx692_cur."from"()
+    inc $P10
+    set rx692_pos, $P10
+    ge rx692_pos, rx692_eos, rxscan695_done
+  rxscan695_scan:
+    set_addr $I10, rxscan695_loop
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+  rxscan695_done:
+.annotate "line", 320
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt694_0:
-.annotate "line", 317
-    set_addr $I10, alt694_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 318
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt697_0:
+.annotate "line", 321
+    set_addr $I10, alt697_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+.annotate "line", 322
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subcapture "proto"
-    set_addr $I10, rxcap_696_fail
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    set_addr $I10, rxcap_699_fail
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "proto"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "proto", rx689_fail
-    add rx689_pos, 5
-    set_addr $I10, rxcap_696_fail
-    ($I12, $I11) = rx689_cur."!mark_peek"($I10)
-    rx689_cur."!cursor_pos"($I11)
-    ($P10) = rx689_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx689_pos, "")
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "proto", rx692_fail
+    add rx692_pos, 5
+    set_addr $I10, rxcap_699_fail
+    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
+    rx692_cur."!cursor_pos"($I11)
+    ($P10) = rx692_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx692_pos, "")
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("proto")
-    goto rxcap_696_done
-  rxcap_696_fail:
-    goto rx689_fail
-  rxcap_696_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt698_0:
-    set_addr $I10, alt698_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    goto rxcap_699_done
+  rxcap_699_fail:
+    goto rx692_fail
+  rxcap_699_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt701_0:
+    set_addr $I10, alt701_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "regex", rx689_fail
-    add rx689_pos, 5
-    goto alt698_end
-  alt698_1:
-    set_addr $I10, alt698_2
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "regex", rx692_fail
+    add rx692_pos, 5
+    goto alt701_end
+  alt701_1:
+    set_addr $I10, alt701_2
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "token"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "token", rx689_fail
-    add rx689_pos, 5
-    goto alt698_end
-  alt698_2:
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "token", rx692_fail
+    add rx692_pos, 5
+    goto alt701_end
+  alt701_2:
   # rx literal  "rule"
-    add $I11, rx689_pos, 4
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 4
-    ne $S10, "rule", rx689_fail
-    add rx689_pos, 4
-  alt698_end:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 319
+    add $I11, rx692_pos, 4
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 4
+    ne $S10, "rule", rx692_fail
+    add rx692_pos, 4
+  alt701_end:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 323
   # rx subrule "deflongname" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."deflongname"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."deflongname"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt701_0:
-.annotate "line", 320
-    set_addr $I10, alt701_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 321
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt704_0:
+.annotate "line", 324
+    set_addr $I10, alt704_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+.annotate "line", 325
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "{"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "{", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "{", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "<...>"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "<...>", rx689_fail
-    add rx689_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "<...>", rx692_fail
+    add rx692_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "}", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "}", rx692_fail
+    add rx692_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ENDSTMT"()
-    unless $P10, rx689_fail
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-    goto alt701_end
-  alt701_1:
-.annotate "line", 322
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ENDSTMT"()
+    unless $P10, rx692_fail
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+    goto alt704_end
+  alt704_1:
+.annotate "line", 326
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subrule "panic" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."panic"("Proto regex body must be <...>")
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt701_end:
-.annotate "line", 323
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."panic"("Proto regex body must be <...>")
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt704_end:
+.annotate "line", 327
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 318
-    goto alt694_end
-  alt694_1:
-.annotate "line", 324
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 322
+    goto alt697_end
+  alt697_1:
+.annotate "line", 328
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subcapture "sym"
-    set_addr $I10, rxcap_711_fail
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  alt710_0:
-    set_addr $I10, alt710_1
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    set_addr $I10, rxcap_714_fail
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
+  alt713_0:
+    set_addr $I10, alt713_1
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "regex"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "regex", rx689_fail
-    add rx689_pos, 5
-    goto alt710_end
-  alt710_1:
-    set_addr $I10, alt710_2
-    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "regex", rx692_fail
+    add rx692_pos, 5
+    goto alt713_end
+  alt713_1:
+    set_addr $I10, alt713_2
+    rx692_cur."!mark_push"(0, rx692_pos, $I10)
   # rx literal  "token"
-    add $I11, rx689_pos, 5
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 5
-    ne $S10, "token", rx689_fail
-    add rx689_pos, 5
-    goto alt710_end
-  alt710_2:
+    add $I11, rx692_pos, 5
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 5
+    ne $S10, "token", rx692_fail
+    add rx692_pos, 5
+    goto alt713_end
+  alt713_2:
   # rx literal  "rule"
-    add $I11, rx689_pos, 4
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 4
-    ne $S10, "rule", rx689_fail
-    add rx689_pos, 4
-  alt710_end:
-    set_addr $I10, rxcap_711_fail
-    ($I12, $I11) = rx689_cur."!mark_peek"($I10)
-    rx689_cur."!cursor_pos"($I11)
-    ($P10) = rx689_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx689_pos, "")
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx692_pos, 4
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 4
+    ne $S10, "rule", rx692_fail
+    add rx692_pos, 4
+  alt713_end:
+    set_addr $I10, rxcap_714_fail
+    ($I12, $I11) = rx692_cur."!mark_peek"($I10)
+    rx692_cur."!cursor_pos"($I11)
+    ($P10) = rx692_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx692_pos, "")
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_711_done
-  rxcap_711_fail:
-    goto rx689_fail
-  rxcap_711_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 325
+    goto rxcap_714_done
+  rxcap_714_fail:
+    goto rx692_fail
+  rxcap_714_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 329
   # rx subrule "deflongname" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."deflongname"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."deflongname"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("deflongname")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 326
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 330
   # rx subrule "newpad" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."newpad"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 327
-  # rx rxquantr715 ** 0..1
-    set_addr $I720, rxquantr715_done
-    rx689_cur."!mark_push"(0, rx689_pos, $I720)
-  rxquantr715_loop:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."newpad"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 331
+  # rx rxquantr718 ** 0..1
+    set_addr $I723, rxquantr718_done
+    rx692_cur."!mark_push"(0, rx692_pos, $I723)
+  rxquantr718_loop:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "(", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "(", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx subrule "signature" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."signature"()
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."signature"()
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, ")", rx689_fail
-    add rx689_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-    (rx689_rep) = rx689_cur."!mark_commit"($I720)
-  rxquantr715_done:
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 328
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, ")", rx692_fail
+    add rx692_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+    (rx692_rep) = rx692_cur."!mark_commit"($I723)
+  rxquantr718_done:
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 332
   # rx reduce name="regex_declarator" key="open"
-    rx689_cur."!cursor_pos"(rx689_pos)
-    rx689_cur."!reduce"("regex_declarator", "open")
+    rx692_cur."!cursor_pos"(rx692_pos)
+    rx692_cur."!reduce"("regex_declarator", "open")
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 329
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 333
   # rx literal  "{"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "{", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "{", rx692_fail
+    add rx692_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx689_fail
-    rx689_cur."!mark_push"(0, -1, 0, $P10)
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx692_fail
+    rx692_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx689_pos = $P10."pos"()
+    rx692_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx689_pos, 1
-    gt $I11, rx689_eos, rx689_fail
-    sub $I11, rx689_pos, rx689_off
-    substr $S10, rx689_tgt, $I11, 1
-    ne $S10, "}", rx689_fail
-    add rx689_pos, 1
+    add $I11, rx692_pos, 1
+    gt $I11, rx692_eos, rx692_fail
+    sub $I11, rx692_pos, rx692_off
+    substr $S10, rx692_tgt, $I11, 1
+    ne $S10, "}", rx692_fail
+    add rx692_pos, 1
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ENDSTMT"()
-    unless $P10, rx689_fail
-  # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-  alt694_end:
-.annotate "line", 330
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ENDSTMT"()
+    unless $P10, rx692_fail
+  # rx subrule "ws" subtype=method negate=
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+  alt697_end:
+.annotate "line", 334
   # rx subrule "ws" subtype=method negate=
-    rx689_cur."!cursor_pos"(rx689_pos)
-    $P10 = rx689_cur."ws"()
-    unless $P10, rx689_fail
-    rx689_pos = $P10."pos"()
-.annotate "line", 316
+    rx692_cur."!cursor_pos"(rx692_pos)
+    $P10 = rx692_cur."ws"()
+    unless $P10, rx692_fail
+    rx692_pos = $P10."pos"()
+.annotate "line", 320
   # rx pass
-    rx689_cur."!cursor_pass"(rx689_pos, "regex_declarator")
-    rx689_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx689_pos)
-    .return (rx689_cur)
-  rx689_fail:
+    rx692_cur."!cursor_pass"(rx692_pos, "regex_declarator")
+    rx692_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx692_pos)
+    .return (rx692_cur)
+  rx692_fail:
 .annotate "line", 4
-    (rx689_rep, rx689_pos, $I10, $P10) = rx689_cur."!mark_fail"(0)
-    lt rx689_pos, -1, rx689_done
-    eq rx689_pos, -1, rx689_fail
+    (rx692_rep, rx692_pos, $I10, $P10) = rx692_cur."!mark_fail"(0)
+    lt rx692_pos, -1, rx692_done
+    eq rx692_pos, -1, rx692_fail
     jump $I10
-  rx689_done:
-    rx689_cur."!cursor_fail"()
-    rx689_cur."!cursor_debug"("FAIL  ", "regex_declarator")
-    .return (rx689_cur)
+  rx692_done:
+    rx692_cur."!cursor_fail"()
+    rx692_cur."!cursor_debug"("FAIL  ", "regex_declarator")
+    .return (rx692_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("164_1267204702.05125") :method
+.sub "!PREFIX__regex_declarator"  :subid("164_1271336396.90314") :method
 .annotate "line", 4
-    new $P691, "ResizablePMCArray"
-    push $P691, ""
-    .return ($P691)
+    new $P694, "ResizablePMCArray"
+    push $P694, ""
+    .return ($P694)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("165_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "dotty"  :subid("165_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx726_tgt
-    .local int rx726_pos
-    .local int rx726_off
-    .local int rx726_eos
-    .local int rx726_rep
-    .local pmc rx726_cur
-    (rx726_cur, rx726_pos, rx726_tgt) = self."!cursor_start"()
-    rx726_cur."!cursor_debug"("START ", "dotty")
-    rx726_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx726_cur
+    .local string rx729_tgt
+    .local int rx729_pos
+    .local int rx729_off
+    .local int rx729_eos
+    .local int rx729_rep
+    .local pmc rx729_cur
+    (rx729_cur, rx729_pos, rx729_tgt) = self."!cursor_start"()
+    rx729_cur."!cursor_debug"("START ", "dotty")
+    rx729_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx729_cur
     .local pmc match
     .lex "$/", match
-    length rx726_eos, rx726_tgt
-    set rx726_off, 0
-    lt rx726_pos, 2, rx726_start
-    sub rx726_off, rx726_pos, 1
-    substr rx726_tgt, rx726_tgt, rx726_off
-  rx726_start:
+    length rx729_eos, rx729_tgt
+    set rx729_off, 0
+    lt rx729_pos, 2, rx729_start
+    sub rx729_off, rx729_pos, 1
+    substr rx729_tgt, rx729_tgt, rx729_off
+  rx729_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan730_done
-    goto rxscan730_scan
-  rxscan730_loop:
-    ($P10) = rx726_cur."from"()
+    ne $I10, -1, rxscan733_done
+    goto rxscan733_scan
+  rxscan733_loop:
+    ($P10) = rx729_cur."from"()
     inc $P10
-    set rx726_pos, $P10
-    ge rx726_pos, rx726_eos, rxscan730_done
-  rxscan730_scan:
-    set_addr $I10, rxscan730_loop
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
-  rxscan730_done:
-.annotate "line", 334
+    set rx729_pos, $P10
+    ge rx729_pos, rx729_eos, rxscan733_done
+  rxscan733_scan:
+    set_addr $I10, rxscan733_loop
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
+  rxscan733_done:
+.annotate "line", 338
   # rx literal  "."
-    add $I11, rx726_pos, 1
-    gt $I11, rx726_eos, rx726_fail
-    sub $I11, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I11, 1
-    ne $S10, ".", rx726_fail
-    add rx726_pos, 1
-  alt731_0:
-.annotate "line", 335
-    set_addr $I10, alt731_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+    add $I11, rx729_pos, 1
+    gt $I11, rx729_eos, rx729_fail
+    sub $I11, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I11, 1
+    ne $S10, ".", rx729_fail
+    add rx729_pos, 1
+  alt734_0:
+.annotate "line", 339
+    set_addr $I10, alt734_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
   # rx subrule "identifier" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."identifier"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."identifier"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname=identifier")
-    rx726_pos = $P10."pos"()
-    goto alt731_end
-  alt731_1:
-.annotate "line", 336
+    rx729_pos = $P10."pos"()
+    goto alt734_end
+  alt734_1:
+.annotate "line", 340
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "'\"", $S10
-    lt $I11, 0, rx726_fail
+    lt $I11, 0, rx729_fail
   # rx subrule "quote" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."quote"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."quote"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx726_pos = $P10."pos"()
-  alt732_0:
-.annotate "line", 337
-    set_addr $I10, alt732_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+    rx729_pos = $P10."pos"()
+  alt735_0:
+.annotate "line", 341
+    set_addr $I10, alt735_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx726_fail
-    goto alt732_end
-  alt732_1:
+    lt $I11, 0, rx729_fail
+    goto alt735_end
+  alt735_1:
   # rx subrule "panic" subtype=method negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."panic"("Quoted method name requires parenthesized arguments")
-    unless $P10, rx726_fail
-    rx726_pos = $P10."pos"()
-  alt732_end:
-  alt731_end:
-.annotate "line", 343
-  # rx rxquantr733 ** 0..1
-    set_addr $I735, rxquantr733_done
-    rx726_cur."!mark_push"(0, rx726_pos, $I735)
-  rxquantr733_loop:
-  alt734_0:
-.annotate "line", 340
-    set_addr $I10, alt734_1
-    rx726_cur."!mark_push"(0, rx726_pos, $I10)
-.annotate "line", 341
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."panic"("Quoted method name requires parenthesized arguments")
+    unless $P10, rx729_fail
+    rx729_pos = $P10."pos"()
+  alt735_end:
+  alt734_end:
+.annotate "line", 347
+  # rx rxquantr736 ** 0..1
+    set_addr $I738, rxquantr736_done
+    rx729_cur."!mark_push"(0, rx729_pos, $I738)
+  rxquantr736_loop:
+  alt737_0:
+.annotate "line", 344
+    set_addr $I10, alt737_1
+    rx729_cur."!mark_push"(0, rx729_pos, $I10)
+.annotate "line", 345
   # rx enumcharlist negate=0 zerowidth
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I10, 1
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx726_fail
+    lt $I11, 0, rx729_fail
   # rx subrule "args" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."args"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."args"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx726_pos = $P10."pos"()
-    goto alt734_end
-  alt734_1:
-.annotate "line", 342
+    rx729_pos = $P10."pos"()
+    goto alt737_end
+  alt737_1:
+.annotate "line", 346
   # rx literal  ":"
-    add $I11, rx726_pos, 1
-    gt $I11, rx726_eos, rx726_fail
-    sub $I11, rx726_pos, rx726_off
-    substr $S10, rx726_tgt, $I11, 1
-    ne $S10, ":", rx726_fail
-    add rx726_pos, 1
+    add $I11, rx729_pos, 1
+    gt $I11, rx729_eos, rx729_fail
+    sub $I11, rx729_pos, rx729_off
+    substr $S10, rx729_tgt, $I11, 1
+    ne $S10, ":", rx729_fail
+    add rx729_pos, 1
   # rx charclass s
-    ge rx726_pos, rx726_eos, rx726_fail
-    sub $I10, rx726_pos, rx726_off
-    is_cclass $I11, 32, rx726_tgt, $I10
-    unless $I11, rx726_fail
-    inc rx726_pos
+    ge rx729_pos, rx729_eos, rx729_fail
+    sub $I10, rx729_pos, rx729_off
+    is_cclass $I11, 32, rx729_tgt, $I10
+    unless $I11, rx729_fail
+    inc rx729_pos
   # rx subrule "arglist" subtype=capture negate=
-    rx726_cur."!cursor_pos"(rx726_pos)
-    $P10 = rx726_cur."arglist"()
-    unless $P10, rx726_fail
-    rx726_cur."!mark_push"(0, -1, 0, $P10)
+    rx729_cur."!cursor_pos"(rx729_pos)
+    $P10 = rx729_cur."arglist"()
+    unless $P10, rx729_fail
+    rx729_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx726_pos = $P10."pos"()
-  alt734_end:
-.annotate "line", 343
-    (rx726_rep) = rx726_cur."!mark_commit"($I735)
-  rxquantr733_done:
-.annotate "line", 333
+    rx729_pos = $P10."pos"()
+  alt737_end:
+.annotate "line", 347
+    (rx729_rep) = rx729_cur."!mark_commit"($I738)
+  rxquantr736_done:
+.annotate "line", 337
   # rx pass
-    rx726_cur."!cursor_pass"(rx726_pos, "dotty")
-    rx726_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx726_pos)
-    .return (rx726_cur)
-  rx726_fail:
+    rx729_cur."!cursor_pass"(rx729_pos, "dotty")
+    rx729_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx729_pos)
+    .return (rx729_cur)
+  rx729_fail:
 .annotate "line", 4
-    (rx726_rep, rx726_pos, $I10, $P10) = rx726_cur."!mark_fail"(0)
-    lt rx726_pos, -1, rx726_done
-    eq rx726_pos, -1, rx726_fail
+    (rx729_rep, rx729_pos, $I10, $P10) = rx729_cur."!mark_fail"(0)
+    lt rx729_pos, -1, rx729_done
+    eq rx729_pos, -1, rx729_fail
     jump $I10
-  rx726_done:
-    rx726_cur."!cursor_fail"()
-    rx726_cur."!cursor_debug"("FAIL  ", "dotty")
-    .return (rx726_cur)
+  rx729_done:
+    rx729_cur."!cursor_fail"()
+    rx729_cur."!cursor_debug"("FAIL  ", "dotty")
+    .return (rx729_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("166_1267204702.05125") :method
+.sub "!PREFIX__dotty"  :subid("166_1271336396.90314") :method
 .annotate "line", 4
-    $P728 = self."!PREFIX__!subrule"("longname=identifier", ".")
-    new $P729, "ResizablePMCArray"
-    push $P729, "'"
-    push $P729, "\""
-    push $P729, $P728
-    .return ($P729)
+    $P731 = self."!PREFIX__!subrule"("longname=identifier", ".")
+    new $P732, "ResizablePMCArray"
+    push $P732, "'"
+    push $P732, "\""
+    push $P732, $P731
+    .return ($P732)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term"  :subid("167_1267204702.05125") :method
-.annotate "line", 347
-    $P737 = self."!protoregex"("term")
-    .return ($P737)
+.sub "term"  :subid("167_1271336396.90314") :method
+.annotate "line", 351
+    $P740 = self."!protoregex"("term")
+    .return ($P740)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("168_1267204702.05125") :method
-.annotate "line", 347
-    $P739 = self."!PREFIX__!protoregex"("term")
-    .return ($P739)
+.sub "!PREFIX__term"  :subid("168_1271336396.90314") :method
+.annotate "line", 351
+    $P742 = self."!PREFIX__!protoregex"("term")
+    .return ($P742)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("169_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<self>"  :subid("169_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx741_tgt
-    .local int rx741_pos
-    .local int rx741_off
-    .local int rx741_eos
-    .local int rx741_rep
-    .local pmc rx741_cur
-    (rx741_cur, rx741_pos, rx741_tgt) = self."!cursor_start"()
-    rx741_cur."!cursor_debug"("START ", "term:sym<self>")
-    .lex unicode:"$\x{a2}", rx741_cur
-    .local pmc match
-    .lex "$/", match
-    length rx741_eos, rx741_tgt
-    set rx741_off, 0
-    lt rx741_pos, 2, rx741_start
-    sub rx741_off, rx741_pos, 1
-    substr rx741_tgt, rx741_tgt, rx741_off
-  rx741_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan744_done
-    goto rxscan744_scan
-  rxscan744_loop:
-    ($P10) = rx741_cur."from"()
-    inc $P10
-    set rx741_pos, $P10
-    ge rx741_pos, rx741_eos, rxscan744_done
-  rxscan744_scan:
-    set_addr $I10, rxscan744_loop
-    rx741_cur."!mark_push"(0, rx741_pos, $I10)
-  rxscan744_done:
-.annotate "line", 349
+    .local string rx744_tgt
+    .local int rx744_pos
+    .local int rx744_off
+    .local int rx744_eos
+    .local int rx744_rep
+    .local pmc rx744_cur
+    (rx744_cur, rx744_pos, rx744_tgt) = self."!cursor_start"()
+    rx744_cur."!cursor_debug"("START ", "term:sym<self>")
+    .lex unicode:"$\x{a2}", rx744_cur
+    .local pmc match
+    .lex "$/", match
+    length rx744_eos, rx744_tgt
+    set rx744_off, 0
+    lt rx744_pos, 2, rx744_start
+    sub rx744_off, rx744_pos, 1
+    substr rx744_tgt, rx744_tgt, rx744_off
+  rx744_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan747_done
+    goto rxscan747_scan
+  rxscan747_loop:
+    ($P10) = rx744_cur."from"()
+    inc $P10
+    set rx744_pos, $P10
+    ge rx744_pos, rx744_eos, rxscan747_done
+  rxscan747_scan:
+    set_addr $I10, rxscan747_loop
+    rx744_cur."!mark_push"(0, rx744_pos, $I10)
+  rxscan747_done:
+.annotate "line", 353
   # rx subcapture "sym"
-    set_addr $I10, rxcap_745_fail
-    rx741_cur."!mark_push"(0, rx741_pos, $I10)
+    set_addr $I10, rxcap_748_fail
+    rx744_cur."!mark_push"(0, rx744_pos, $I10)
   # rx literal  "self"
-    add $I11, rx741_pos, 4
-    gt $I11, rx741_eos, rx741_fail
-    sub $I11, rx741_pos, rx741_off
-    substr $S10, rx741_tgt, $I11, 4
-    ne $S10, "self", rx741_fail
-    add rx741_pos, 4
-    set_addr $I10, rxcap_745_fail
-    ($I12, $I11) = rx741_cur."!mark_peek"($I10)
-    rx741_cur."!cursor_pos"($I11)
-    ($P10) = rx741_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx741_pos, "")
-    rx741_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx744_pos, 4
+    gt $I11, rx744_eos, rx744_fail
+    sub $I11, rx744_pos, rx744_off
+    substr $S10, rx744_tgt, $I11, 4
+    ne $S10, "self", rx744_fail
+    add rx744_pos, 4
+    set_addr $I10, rxcap_748_fail
+    ($I12, $I11) = rx744_cur."!mark_peek"($I10)
+    rx744_cur."!cursor_pos"($I11)
+    ($P10) = rx744_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx744_pos, "")
+    rx744_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_745_done
-  rxcap_745_fail:
-    goto rx741_fail
-  rxcap_745_done:
+    goto rxcap_748_done
+  rxcap_748_fail:
+    goto rx744_fail
+  rxcap_748_done:
   # rxanchor rwb
-    le rx741_pos, 0, rx741_fail
-    sub $I10, rx741_pos, rx741_off
-    is_cclass $I11, 8192, rx741_tgt, $I10
-    if $I11, rx741_fail
+    le rx744_pos, 0, rx744_fail
+    sub $I10, rx744_pos, rx744_off
+    is_cclass $I11, 8192, rx744_tgt, $I10
+    if $I11, rx744_fail
     dec $I10
-    is_cclass $I11, 8192, rx741_tgt, $I10
-    unless $I11, rx741_fail
+    is_cclass $I11, 8192, rx744_tgt, $I10
+    unless $I11, rx744_fail
   # rx pass
-    rx741_cur."!cursor_pass"(rx741_pos, "term:sym<self>")
-    rx741_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx741_pos)
-    .return (rx741_cur)
-  rx741_fail:
+    rx744_cur."!cursor_pass"(rx744_pos, "term:sym<self>")
+    rx744_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx744_pos)
+    .return (rx744_cur)
+  rx744_fail:
 .annotate "line", 4
-    (rx741_rep, rx741_pos, $I10, $P10) = rx741_cur."!mark_fail"(0)
-    lt rx741_pos, -1, rx741_done
-    eq rx741_pos, -1, rx741_fail
+    (rx744_rep, rx744_pos, $I10, $P10) = rx744_cur."!mark_fail"(0)
+    lt rx744_pos, -1, rx744_done
+    eq rx744_pos, -1, rx744_fail
     jump $I10
-  rx741_done:
-    rx741_cur."!cursor_fail"()
-    rx741_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
-    .return (rx741_cur)
+  rx744_done:
+    rx744_cur."!cursor_fail"()
+    rx744_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
+    .return (rx744_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("170_1267204702.05125") :method
+.sub "!PREFIX__term:sym<self>"  :subid("170_1271336396.90314") :method
 .annotate "line", 4
-    new $P743, "ResizablePMCArray"
-    push $P743, "self"
-    .return ($P743)
+    new $P746, "ResizablePMCArray"
+    push $P746, "self"
+    .return ($P746)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("171_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<identifier>"  :subid("171_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx747_tgt
-    .local int rx747_pos
-    .local int rx747_off
-    .local int rx747_eos
-    .local int rx747_rep
-    .local pmc rx747_cur
-    (rx747_cur, rx747_pos, rx747_tgt) = self."!cursor_start"()
-    rx747_cur."!cursor_debug"("START ", "term:sym<identifier>")
-    .lex unicode:"$\x{a2}", rx747_cur
-    .local pmc match
-    .lex "$/", match
-    length rx747_eos, rx747_tgt
-    set rx747_off, 0
-    lt rx747_pos, 2, rx747_start
-    sub rx747_off, rx747_pos, 1
-    substr rx747_tgt, rx747_tgt, rx747_off
-  rx747_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan751_done
-    goto rxscan751_scan
-  rxscan751_loop:
-    ($P10) = rx747_cur."from"()
-    inc $P10
-    set rx747_pos, $P10
-    ge rx747_pos, rx747_eos, rxscan751_done
-  rxscan751_scan:
-    set_addr $I10, rxscan751_loop
-    rx747_cur."!mark_push"(0, rx747_pos, $I10)
-  rxscan751_done:
-.annotate "line", 352
+    .local string rx750_tgt
+    .local int rx750_pos
+    .local int rx750_off
+    .local int rx750_eos
+    .local int rx750_rep
+    .local pmc rx750_cur
+    (rx750_cur, rx750_pos, rx750_tgt) = self."!cursor_start"()
+    rx750_cur."!cursor_debug"("START ", "term:sym<identifier>")
+    .lex unicode:"$\x{a2}", rx750_cur
+    .local pmc match
+    .lex "$/", match
+    length rx750_eos, rx750_tgt
+    set rx750_off, 0
+    lt rx750_pos, 2, rx750_start
+    sub rx750_off, rx750_pos, 1
+    substr rx750_tgt, rx750_tgt, rx750_off
+  rx750_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan754_done
+    goto rxscan754_scan
+  rxscan754_loop:
+    ($P10) = rx750_cur."from"()
+    inc $P10
+    set rx750_pos, $P10
+    ge rx750_pos, rx750_eos, rxscan754_done
+  rxscan754_scan:
+    set_addr $I10, rxscan754_loop
+    rx750_cur."!mark_push"(0, rx750_pos, $I10)
+  rxscan754_done:
+.annotate "line", 356
   # rx subrule "identifier" subtype=capture negate=
-    rx747_cur."!cursor_pos"(rx747_pos)
-    $P10 = rx747_cur."identifier"()
-    unless $P10, rx747_fail
-    rx747_cur."!mark_push"(0, -1, 0, $P10)
+    rx750_cur."!cursor_pos"(rx750_pos)
+    $P10 = rx750_cur."identifier"()
+    unless $P10, rx750_fail
+    rx750_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx747_pos = $P10."pos"()
+    rx750_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx747_pos, rx747_eos, rx747_fail
-    sub $I10, rx747_pos, rx747_off
-    substr $S10, rx747_tgt, $I10, 1
+    ge rx750_pos, rx750_eos, rx750_fail
+    sub $I10, rx750_pos, rx750_off
+    substr $S10, rx750_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx747_fail
+    lt $I11, 0, rx750_fail
   # rx subrule "args" subtype=capture negate=
-    rx747_cur."!cursor_pos"(rx747_pos)
-    $P10 = rx747_cur."args"()
-    unless $P10, rx747_fail
-    rx747_cur."!mark_push"(0, -1, 0, $P10)
+    rx750_cur."!cursor_pos"(rx750_pos)
+    $P10 = rx750_cur."args"()
+    unless $P10, rx750_fail
+    rx750_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx747_pos = $P10."pos"()
-.annotate "line", 351
+    rx750_pos = $P10."pos"()
+.annotate "line", 355
   # rx pass
-    rx747_cur."!cursor_pass"(rx747_pos, "term:sym<identifier>")
-    rx747_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx747_pos)
-    .return (rx747_cur)
-  rx747_fail:
+    rx750_cur."!cursor_pass"(rx750_pos, "term:sym<identifier>")
+    rx750_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx750_pos)
+    .return (rx750_cur)
+  rx750_fail:
 .annotate "line", 4
-    (rx747_rep, rx747_pos, $I10, $P10) = rx747_cur."!mark_fail"(0)
-    lt rx747_pos, -1, rx747_done
-    eq rx747_pos, -1, rx747_fail
+    (rx750_rep, rx750_pos, $I10, $P10) = rx750_cur."!mark_fail"(0)
+    lt rx750_pos, -1, rx750_done
+    eq rx750_pos, -1, rx750_fail
     jump $I10
-  rx747_done:
-    rx747_cur."!cursor_fail"()
-    rx747_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
-    .return (rx747_cur)
+  rx750_done:
+    rx750_cur."!cursor_fail"()
+    rx750_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
+    .return (rx750_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("172_1267204702.05125") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("172_1271336396.90314") :method
 .annotate "line", 4
-    $P749 = self."!PREFIX__!subrule"("identifier", "")
-    new $P750, "ResizablePMCArray"
-    push $P750, $P749
-    .return ($P750)
+    $P752 = self."!PREFIX__!subrule"("identifier", "")
+    new $P753, "ResizablePMCArray"
+    push $P753, $P752
+    .return ($P753)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("173_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<name>"  :subid("173_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx753_tgt
-    .local int rx753_pos
-    .local int rx753_off
-    .local int rx753_eos
-    .local int rx753_rep
-    .local pmc rx753_cur
-    (rx753_cur, rx753_pos, rx753_tgt) = self."!cursor_start"()
-    rx753_cur."!cursor_debug"("START ", "term:sym<name>")
-    rx753_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx753_cur
+    .local string rx756_tgt
+    .local int rx756_pos
+    .local int rx756_off
+    .local int rx756_eos
+    .local int rx756_rep
+    .local pmc rx756_cur
+    (rx756_cur, rx756_pos, rx756_tgt) = self."!cursor_start"()
+    rx756_cur."!cursor_debug"("START ", "term:sym<name>")
+    rx756_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx756_cur
     .local pmc match
     .lex "$/", match
-    length rx753_eos, rx753_tgt
-    set rx753_off, 0
-    lt rx753_pos, 2, rx753_start
-    sub rx753_off, rx753_pos, 1
-    substr rx753_tgt, rx753_tgt, rx753_off
-  rx753_start:
+    length rx756_eos, rx756_tgt
+    set rx756_off, 0
+    lt rx756_pos, 2, rx756_start
+    sub rx756_off, rx756_pos, 1
+    substr rx756_tgt, rx756_tgt, rx756_off
+  rx756_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan757_done
-    goto rxscan757_scan
-  rxscan757_loop:
-    ($P10) = rx753_cur."from"()
+    ne $I10, -1, rxscan760_done
+    goto rxscan760_scan
+  rxscan760_loop:
+    ($P10) = rx756_cur."from"()
     inc $P10
-    set rx753_pos, $P10
-    ge rx753_pos, rx753_eos, rxscan757_done
-  rxscan757_scan:
-    set_addr $I10, rxscan757_loop
-    rx753_cur."!mark_push"(0, rx753_pos, $I10)
-  rxscan757_done:
-.annotate "line", 356
+    set rx756_pos, $P10
+    ge rx756_pos, rx756_eos, rxscan760_done
+  rxscan760_scan:
+    set_addr $I10, rxscan760_loop
+    rx756_cur."!mark_push"(0, rx756_pos, $I10)
+  rxscan760_done:
+.annotate "line", 360
   # rx subrule "name" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."name"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
+    rx756_cur."!cursor_pos"(rx756_pos)
+    $P10 = rx756_cur."name"()
+    unless $P10, rx756_fail
+    rx756_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx753_pos = $P10."pos"()
-  # rx rxquantr758 ** 0..1
-    set_addr $I759, rxquantr758_done
-    rx753_cur."!mark_push"(0, rx753_pos, $I759)
-  rxquantr758_loop:
+    rx756_pos = $P10."pos"()
+  # rx rxquantr761 ** 0..1
+    set_addr $I762, rxquantr761_done
+    rx756_cur."!mark_push"(0, rx756_pos, $I762)
+  rxquantr761_loop:
   # rx subrule "args" subtype=capture negate=
-    rx753_cur."!cursor_pos"(rx753_pos)
-    $P10 = rx753_cur."args"()
-    unless $P10, rx753_fail
-    rx753_cur."!mark_push"(0, -1, 0, $P10)
+    rx756_cur."!cursor_pos"(rx756_pos)
+    $P10 = rx756_cur."args"()
+    unless $P10, rx756_fail
+    rx756_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx753_pos = $P10."pos"()
-    (rx753_rep) = rx753_cur."!mark_commit"($I759)
-  rxquantr758_done:
-.annotate "line", 355
+    rx756_pos = $P10."pos"()
+    (rx756_rep) = rx756_cur."!mark_commit"($I762)
+  rxquantr761_done:
+.annotate "line", 359
   # rx pass
-    rx753_cur."!cursor_pass"(rx753_pos, "term:sym<name>")
-    rx753_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx753_pos)
-    .return (rx753_cur)
-  rx753_fail:
+    rx756_cur."!cursor_pass"(rx756_pos, "term:sym<name>")
+    rx756_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx756_pos)
+    .return (rx756_cur)
+  rx756_fail:
 .annotate "line", 4
-    (rx753_rep, rx753_pos, $I10, $P10) = rx753_cur."!mark_fail"(0)
-    lt rx753_pos, -1, rx753_done
-    eq rx753_pos, -1, rx753_fail
+    (rx756_rep, rx756_pos, $I10, $P10) = rx756_cur."!mark_fail"(0)
+    lt rx756_pos, -1, rx756_done
+    eq rx756_pos, -1, rx756_fail
     jump $I10
-  rx753_done:
-    rx753_cur."!cursor_fail"()
-    rx753_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
-    .return (rx753_cur)
+  rx756_done:
+    rx756_cur."!cursor_fail"()
+    rx756_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
+    .return (rx756_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("174_1267204702.05125") :method
+.sub "!PREFIX__term:sym<name>"  :subid("174_1271336396.90314") :method
 .annotate "line", 4
-    $P755 = self."!PREFIX__!subrule"("name", "")
-    new $P756, "ResizablePMCArray"
-    push $P756, $P755
-    .return ($P756)
+    $P758 = self."!PREFIX__!subrule"("name", "")
+    new $P759, "ResizablePMCArray"
+    push $P759, $P758
+    .return ($P759)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("175_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<pir::op>"  :subid("175_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx761_tgt
-    .local int rx761_pos
-    .local int rx761_off
-    .local int rx761_eos
-    .local int rx761_rep
-    .local pmc rx761_cur
-    (rx761_cur, rx761_pos, rx761_tgt) = self."!cursor_start"()
-    rx761_cur."!cursor_debug"("START ", "term:sym<pir::op>")
-    rx761_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx761_cur
-    .local pmc match
-    .lex "$/", match
-    length rx761_eos, rx761_tgt
-    set rx761_off, 0
-    lt rx761_pos, 2, rx761_start
-    sub rx761_off, rx761_pos, 1
-    substr rx761_tgt, rx761_tgt, rx761_off
-  rx761_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan764_done
-    goto rxscan764_scan
-  rxscan764_loop:
-    ($P10) = rx761_cur."from"()
-    inc $P10
-    set rx761_pos, $P10
-    ge rx761_pos, rx761_eos, rxscan764_done
-  rxscan764_scan:
-    set_addr $I10, rxscan764_loop
-    rx761_cur."!mark_push"(0, rx761_pos, $I10)
-  rxscan764_done:
-.annotate "line", 360
+    .local string rx764_tgt
+    .local int rx764_pos
+    .local int rx764_off
+    .local int rx764_eos
+    .local int rx764_rep
+    .local pmc rx764_cur
+    (rx764_cur, rx764_pos, rx764_tgt) = self."!cursor_start"()
+    rx764_cur."!cursor_debug"("START ", "term:sym<pir::op>")
+    rx764_cur."!cursor_caparray"("args")
+    .lex unicode:"$\x{a2}", rx764_cur
+    .local pmc match
+    .lex "$/", match
+    length rx764_eos, rx764_tgt
+    set rx764_off, 0
+    lt rx764_pos, 2, rx764_start
+    sub rx764_off, rx764_pos, 1
+    substr rx764_tgt, rx764_tgt, rx764_off
+  rx764_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan767_done
+    goto rxscan767_scan
+  rxscan767_loop:
+    ($P10) = rx764_cur."from"()
+    inc $P10
+    set rx764_pos, $P10
+    ge rx764_pos, rx764_eos, rxscan767_done
+  rxscan767_scan:
+    set_addr $I10, rxscan767_loop
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
+  rxscan767_done:
+.annotate "line", 364
   # rx literal  "pir::"
-    add $I11, rx761_pos, 5
-    gt $I11, rx761_eos, rx761_fail
-    sub $I11, rx761_pos, rx761_off
-    substr $S10, rx761_tgt, $I11, 5
-    ne $S10, "pir::", rx761_fail
-    add rx761_pos, 5
+    add $I11, rx764_pos, 5
+    gt $I11, rx764_eos, rx764_fail
+    sub $I11, rx764_pos, rx764_off
+    substr $S10, rx764_tgt, $I11, 5
+    ne $S10, "pir::", rx764_fail
+    add rx764_pos, 5
   # rx subcapture "op"
-    set_addr $I10, rxcap_765_fail
-    rx761_cur."!mark_push"(0, rx761_pos, $I10)
+    set_addr $I10, rxcap_768_fail
+    rx764_cur."!mark_push"(0, rx764_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx761_pos, rx761_off
-    find_not_cclass $I11, 8192, rx761_tgt, $I10, rx761_eos
+    sub $I10, rx764_pos, rx764_off
+    find_not_cclass $I11, 8192, rx764_tgt, $I10, rx764_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx761_fail
-    add rx761_pos, rx761_off, $I11
-    set_addr $I10, rxcap_765_fail
-    ($I12, $I11) = rx761_cur."!mark_peek"($I10)
-    rx761_cur."!cursor_pos"($I11)
-    ($P10) = rx761_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx761_pos, "")
-    rx761_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx764_fail
+    add rx764_pos, rx764_off, $I11
+    set_addr $I10, rxcap_768_fail
+    ($I12, $I11) = rx764_cur."!mark_peek"($I10)
+    rx764_cur."!cursor_pos"($I11)
+    ($P10) = rx764_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx764_pos, "")
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("op")
-    goto rxcap_765_done
-  rxcap_765_fail:
-    goto rx761_fail
-  rxcap_765_done:
-  # rx rxquantr766 ** 0..1
-    set_addr $I767, rxquantr766_done
-    rx761_cur."!mark_push"(0, rx761_pos, $I767)
-  rxquantr766_loop:
+    goto rxcap_768_done
+  rxcap_768_fail:
+    goto rx764_fail
+  rxcap_768_done:
+  # rx rxquantr769 ** 0..1
+    set_addr $I770, rxquantr769_done
+    rx764_cur."!mark_push"(0, rx764_pos, $I770)
+  rxquantr769_loop:
   # rx subrule "args" subtype=capture negate=
-    rx761_cur."!cursor_pos"(rx761_pos)
-    $P10 = rx761_cur."args"()
-    unless $P10, rx761_fail
-    rx761_cur."!mark_push"(0, -1, 0, $P10)
+    rx764_cur."!cursor_pos"(rx764_pos)
+    $P10 = rx764_cur."args"()
+    unless $P10, rx764_fail
+    rx764_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx761_pos = $P10."pos"()
-    (rx761_rep) = rx761_cur."!mark_commit"($I767)
-  rxquantr766_done:
-.annotate "line", 359
+    rx764_pos = $P10."pos"()
+    (rx764_rep) = rx764_cur."!mark_commit"($I770)
+  rxquantr769_done:
+.annotate "line", 363
   # rx pass
-    rx761_cur."!cursor_pass"(rx761_pos, "term:sym<pir::op>")
-    rx761_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx761_pos)
-    .return (rx761_cur)
-  rx761_fail:
+    rx764_cur."!cursor_pass"(rx764_pos, "term:sym<pir::op>")
+    rx764_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx764_pos)
+    .return (rx764_cur)
+  rx764_fail:
 .annotate "line", 4
-    (rx761_rep, rx761_pos, $I10, $P10) = rx761_cur."!mark_fail"(0)
-    lt rx761_pos, -1, rx761_done
-    eq rx761_pos, -1, rx761_fail
+    (rx764_rep, rx764_pos, $I10, $P10) = rx764_cur."!mark_fail"(0)
+    lt rx764_pos, -1, rx764_done
+    eq rx764_pos, -1, rx764_fail
     jump $I10
-  rx761_done:
-    rx761_cur."!cursor_fail"()
-    rx761_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
-    .return (rx761_cur)
+  rx764_done:
+    rx764_cur."!cursor_fail"()
+    rx764_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
+    .return (rx764_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1267204702.05125") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1271336396.90314") :method
 .annotate "line", 4
-    new $P763, "ResizablePMCArray"
-    push $P763, "pir::"
-    .return ($P763)
+    new $P766, "ResizablePMCArray"
+    push $P766, "pir::"
+    .return ($P766)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("177_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "args"  :subid("177_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx769_tgt
-    .local int rx769_pos
-    .local int rx769_off
-    .local int rx769_eos
-    .local int rx769_rep
-    .local pmc rx769_cur
-    (rx769_cur, rx769_pos, rx769_tgt) = self."!cursor_start"()
-    rx769_cur."!cursor_debug"("START ", "args")
-    .lex unicode:"$\x{a2}", rx769_cur
-    .local pmc match
-    .lex "$/", match
-    length rx769_eos, rx769_tgt
-    set rx769_off, 0
-    lt rx769_pos, 2, rx769_start
-    sub rx769_off, rx769_pos, 1
-    substr rx769_tgt, rx769_tgt, rx769_off
-  rx769_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan773_done
-    goto rxscan773_scan
-  rxscan773_loop:
-    ($P10) = rx769_cur."from"()
-    inc $P10
-    set rx769_pos, $P10
-    ge rx769_pos, rx769_eos, rxscan773_done
-  rxscan773_scan:
-    set_addr $I10, rxscan773_loop
-    rx769_cur."!mark_push"(0, rx769_pos, $I10)
-  rxscan773_done:
-.annotate "line", 364
+    .local string rx772_tgt
+    .local int rx772_pos
+    .local int rx772_off
+    .local int rx772_eos
+    .local int rx772_rep
+    .local pmc rx772_cur
+    (rx772_cur, rx772_pos, rx772_tgt) = self."!cursor_start"()
+    rx772_cur."!cursor_debug"("START ", "args")
+    .lex unicode:"$\x{a2}", rx772_cur
+    .local pmc match
+    .lex "$/", match
+    length rx772_eos, rx772_tgt
+    set rx772_off, 0
+    lt rx772_pos, 2, rx772_start
+    sub rx772_off, rx772_pos, 1
+    substr rx772_tgt, rx772_tgt, rx772_off
+  rx772_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan776_done
+    goto rxscan776_scan
+  rxscan776_loop:
+    ($P10) = rx772_cur."from"()
+    inc $P10
+    set rx772_pos, $P10
+    ge rx772_pos, rx772_eos, rxscan776_done
+  rxscan776_scan:
+    set_addr $I10, rxscan776_loop
+    rx772_cur."!mark_push"(0, rx772_pos, $I10)
+  rxscan776_done:
+.annotate "line", 368
   # rx literal  "("
-    add $I11, rx769_pos, 1
-    gt $I11, rx769_eos, rx769_fail
-    sub $I11, rx769_pos, rx769_off
-    substr $S10, rx769_tgt, $I11, 1
-    ne $S10, "(", rx769_fail
-    add rx769_pos, 1
+    add $I11, rx772_pos, 1
+    gt $I11, rx772_eos, rx772_fail
+    sub $I11, rx772_pos, rx772_off
+    substr $S10, rx772_tgt, $I11, 1
+    ne $S10, "(", rx772_fail
+    add rx772_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx769_cur."!cursor_pos"(rx769_pos)
-    $P10 = rx769_cur."arglist"()
-    unless $P10, rx769_fail
-    rx769_cur."!mark_push"(0, -1, 0, $P10)
+    rx772_cur."!cursor_pos"(rx772_pos)
+    $P10 = rx772_cur."arglist"()
+    unless $P10, rx772_fail
+    rx772_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx769_pos = $P10."pos"()
+    rx772_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx769_pos, 1
-    gt $I11, rx769_eos, rx769_fail
-    sub $I11, rx769_pos, rx769_off
-    substr $S10, rx769_tgt, $I11, 1
-    ne $S10, ")", rx769_fail
-    add rx769_pos, 1
-  # rx pass
-    rx769_cur."!cursor_pass"(rx769_pos, "args")
-    rx769_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx769_pos)
-    .return (rx769_cur)
-  rx769_fail:
-.annotate "line", 4
-    (rx769_rep, rx769_pos, $I10, $P10) = rx769_cur."!mark_fail"(0)
-    lt rx769_pos, -1, rx769_done
-    eq rx769_pos, -1, rx769_fail
-    jump $I10
-  rx769_done:
-    rx769_cur."!cursor_fail"()
-    rx769_cur."!cursor_debug"("FAIL  ", "args")
-    .return (rx769_cur)
+    add $I11, rx772_pos, 1
+    gt $I11, rx772_eos, rx772_fail
+    sub $I11, rx772_pos, rx772_off
+    substr $S10, rx772_tgt, $I11, 1
+    ne $S10, ")", rx772_fail
+    add rx772_pos, 1
+  # rx pass
+    rx772_cur."!cursor_pass"(rx772_pos, "args")
+    rx772_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx772_pos)
+    .return (rx772_cur)
+  rx772_fail:
+.annotate "line", 4
+    (rx772_rep, rx772_pos, $I10, $P10) = rx772_cur."!mark_fail"(0)
+    lt rx772_pos, -1, rx772_done
+    eq rx772_pos, -1, rx772_fail
+    jump $I10
+  rx772_done:
+    rx772_cur."!cursor_fail"()
+    rx772_cur."!cursor_debug"("FAIL  ", "args")
+    .return (rx772_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("178_1267204702.05125") :method
-.annotate "line", 4
-    $P771 = self."!PREFIX__!subrule"("arglist", "(")
-    new $P772, "ResizablePMCArray"
-    push $P772, $P771
-    .return ($P772)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("179_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 4
-    .local string rx775_tgt
-    .local int rx775_pos
-    .local int rx775_off
-    .local int rx775_eos
-    .local int rx775_rep
-    .local pmc rx775_cur
-    (rx775_cur, rx775_pos, rx775_tgt) = self."!cursor_start"()
-    rx775_cur."!cursor_debug"("START ", "arglist")
-    .lex unicode:"$\x{a2}", rx775_cur
-    .local pmc match
-    .lex "$/", match
-    length rx775_eos, rx775_tgt
-    set rx775_off, 0
-    lt rx775_pos, 2, rx775_start
-    sub rx775_off, rx775_pos, 1
-    substr rx775_tgt, rx775_tgt, rx775_off
-  rx775_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan779_done
-    goto rxscan779_scan
-  rxscan779_loop:
-    ($P10) = rx775_cur."from"()
-    inc $P10
-    set rx775_pos, $P10
-    ge rx775_pos, rx775_eos, rxscan779_done
-  rxscan779_scan:
-    set_addr $I10, rxscan779_loop
-    rx775_cur."!mark_push"(0, rx775_pos, $I10)
-  rxscan779_done:
-.annotate "line", 368
-  # rx subrule "ws" subtype=method negate=
-    rx775_cur."!cursor_pos"(rx775_pos)
-    $P10 = rx775_cur."ws"()
-    unless $P10, rx775_fail
-    rx775_pos = $P10."pos"()
-  alt780_0:
-.annotate "line", 369
-    set_addr $I10, alt780_1
-    rx775_cur."!mark_push"(0, rx775_pos, $I10)
-.annotate "line", 370
+.sub "!PREFIX__args"  :subid("178_1271336396.90314") :method
+.annotate "line", 4
+    $P774 = self."!PREFIX__!subrule"("arglist", "(")
+    new $P775, "ResizablePMCArray"
+    push $P775, $P774
+    .return ($P775)
+.end
+
+
+.namespace ["NQP";"Grammar"]
+.sub "arglist"  :subid("179_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 4
+    .local string rx778_tgt
+    .local int rx778_pos
+    .local int rx778_off
+    .local int rx778_eos
+    .local int rx778_rep
+    .local pmc rx778_cur
+    (rx778_cur, rx778_pos, rx778_tgt) = self."!cursor_start"()
+    rx778_cur."!cursor_debug"("START ", "arglist")
+    .lex unicode:"$\x{a2}", rx778_cur
+    .local pmc match
+    .lex "$/", match
+    length rx778_eos, rx778_tgt
+    set rx778_off, 0
+    lt rx778_pos, 2, rx778_start
+    sub rx778_off, rx778_pos, 1
+    substr rx778_tgt, rx778_tgt, rx778_off
+  rx778_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan782_done
+    goto rxscan782_scan
+  rxscan782_loop:
+    ($P10) = rx778_cur."from"()
+    inc $P10
+    set rx778_pos, $P10
+    ge rx778_pos, rx778_eos, rxscan782_done
+  rxscan782_scan:
+    set_addr $I10, rxscan782_loop
+    rx778_cur."!mark_push"(0, rx778_pos, $I10)
+  rxscan782_done:
+.annotate "line", 372
+  # rx subrule "ws" subtype=method negate=
+    rx778_cur."!cursor_pos"(rx778_pos)
+    $P10 = rx778_cur."ws"()
+    unless $P10, rx778_fail
+    rx778_pos = $P10."pos"()
+  alt783_0:
+.annotate "line", 373
+    set_addr $I10, alt783_1
+    rx778_cur."!mark_push"(0, rx778_pos, $I10)
+.annotate "line", 374
   # rx subrule "EXPR" subtype=capture negate=
-    rx775_cur."!cursor_pos"(rx775_pos)
-    $P10 = rx775_cur."EXPR"("f=")
-    unless $P10, rx775_fail
-    rx775_cur."!mark_push"(0, -1, 0, $P10)
+    rx778_cur."!cursor_pos"(rx778_pos)
+    $P10 = rx778_cur."EXPR"("f=")
+    unless $P10, rx778_fail
+    rx778_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx775_pos = $P10."pos"()
-    goto alt780_end
-  alt780_1:
-  alt780_end:
-.annotate "line", 367
+    rx778_pos = $P10."pos"()
+    goto alt783_end
+  alt783_1:
+  alt783_end:
+.annotate "line", 371
   # rx pass
-    rx775_cur."!cursor_pass"(rx775_pos, "arglist")
-    rx775_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx775_pos)
-    .return (rx775_cur)
-  rx775_fail:
+    rx778_cur."!cursor_pass"(rx778_pos, "arglist")
+    rx778_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx778_pos)
+    .return (rx778_cur)
+  rx778_fail:
 .annotate "line", 4
-    (rx775_rep, rx775_pos, $I10, $P10) = rx775_cur."!mark_fail"(0)
-    lt rx775_pos, -1, rx775_done
-    eq rx775_pos, -1, rx775_fail
+    (rx778_rep, rx778_pos, $I10, $P10) = rx778_cur."!mark_fail"(0)
+    lt rx778_pos, -1, rx778_done
+    eq rx778_pos, -1, rx778_fail
     jump $I10
-  rx775_done:
-    rx775_cur."!cursor_fail"()
-    rx775_cur."!cursor_debug"("FAIL  ", "arglist")
-    .return (rx775_cur)
+  rx778_done:
+    rx778_cur."!cursor_fail"()
+    rx778_cur."!cursor_debug"("FAIL  ", "arglist")
+    .return (rx778_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("180_1267204702.05125") :method
+.sub "!PREFIX__arglist"  :subid("180_1271336396.90314") :method
 .annotate "line", 4
-    $P777 = self."!PREFIX__!subrule"("", "")
-    new $P778, "ResizablePMCArray"
-    push $P778, $P777
-    .return ($P778)
+    $P780 = self."!PREFIX__!subrule"("", "")
+    new $P781, "ResizablePMCArray"
+    push $P781, $P780
+    .return ($P781)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("181_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "term:sym<value>"  :subid("181_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx782_tgt
-    .local int rx782_pos
-    .local int rx782_off
-    .local int rx782_eos
-    .local int rx782_rep
-    .local pmc rx782_cur
-    (rx782_cur, rx782_pos, rx782_tgt) = self."!cursor_start"()
-    rx782_cur."!cursor_debug"("START ", "term:sym<value>")
-    .lex unicode:"$\x{a2}", rx782_cur
+    .local string rx785_tgt
+    .local int rx785_pos
+    .local int rx785_off
+    .local int rx785_eos
+    .local int rx785_rep
+    .local pmc rx785_cur
+    (rx785_cur, rx785_pos, rx785_tgt) = self."!cursor_start"()
+    rx785_cur."!cursor_debug"("START ", "term:sym<value>")
+    .lex unicode:"$\x{a2}", rx785_cur
     .local pmc match
     .lex "$/", match
-    length rx782_eos, rx782_tgt
-    set rx782_off, 0
-    lt rx782_pos, 2, rx782_start
-    sub rx782_off, rx782_pos, 1
-    substr rx782_tgt, rx782_tgt, rx782_off
-  rx782_start:
+    length rx785_eos, rx785_tgt
+    set rx785_off, 0
+    lt rx785_pos, 2, rx785_start
+    sub rx785_off, rx785_pos, 1
+    substr rx785_tgt, rx785_tgt, rx785_off
+  rx785_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan786_done
-    goto rxscan786_scan
-  rxscan786_loop:
-    ($P10) = rx782_cur."from"()
+    ne $I10, -1, rxscan789_done
+    goto rxscan789_scan
+  rxscan789_loop:
+    ($P10) = rx785_cur."from"()
     inc $P10
-    set rx782_pos, $P10
-    ge rx782_pos, rx782_eos, rxscan786_done
-  rxscan786_scan:
-    set_addr $I10, rxscan786_loop
-    rx782_cur."!mark_push"(0, rx782_pos, $I10)
-  rxscan786_done:
-.annotate "line", 376
+    set rx785_pos, $P10
+    ge rx785_pos, rx785_eos, rxscan789_done
+  rxscan789_scan:
+    set_addr $I10, rxscan789_loop
+    rx785_cur."!mark_push"(0, rx785_pos, $I10)
+  rxscan789_done:
+.annotate "line", 380
   # rx subrule "value" subtype=capture negate=
-    rx782_cur."!cursor_pos"(rx782_pos)
-    $P10 = rx782_cur."value"()
-    unless $P10, rx782_fail
-    rx782_cur."!mark_push"(0, -1, 0, $P10)
+    rx785_cur."!cursor_pos"(rx785_pos)
+    $P10 = rx785_cur."value"()
+    unless $P10, rx785_fail
+    rx785_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("value")
-    rx782_pos = $P10."pos"()
+    rx785_pos = $P10."pos"()
   # rx pass
-    rx782_cur."!cursor_pass"(rx782_pos, "term:sym<value>")
-    rx782_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx782_pos)
-    .return (rx782_cur)
-  rx782_fail:
+    rx785_cur."!cursor_pass"(rx785_pos, "term:sym<value>")
+    rx785_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx785_pos)
+    .return (rx785_cur)
+  rx785_fail:
 .annotate "line", 4
-    (rx782_rep, rx782_pos, $I10, $P10) = rx782_cur."!mark_fail"(0)
-    lt rx782_pos, -1, rx782_done
-    eq rx782_pos, -1, rx782_fail
+    (rx785_rep, rx785_pos, $I10, $P10) = rx785_cur."!mark_fail"(0)
+    lt rx785_pos, -1, rx785_done
+    eq rx785_pos, -1, rx785_fail
     jump $I10
-  rx782_done:
-    rx782_cur."!cursor_fail"()
-    rx782_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
-    .return (rx782_cur)
+  rx785_done:
+    rx785_cur."!cursor_fail"()
+    rx785_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
+    .return (rx785_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("182_1267204702.05125") :method
+.sub "!PREFIX__term:sym<value>"  :subid("182_1271336396.90314") :method
 .annotate "line", 4
-    $P784 = self."!PREFIX__!subrule"("value", "")
-    new $P785, "ResizablePMCArray"
-    push $P785, $P784
-    .return ($P785)
+    $P787 = self."!PREFIX__!subrule"("value", "")
+    new $P788, "ResizablePMCArray"
+    push $P788, $P787
+    .return ($P788)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("183_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "value"  :subid("183_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx788_tgt
-    .local int rx788_pos
-    .local int rx788_off
-    .local int rx788_eos
-    .local int rx788_rep
-    .local pmc rx788_cur
-    (rx788_cur, rx788_pos, rx788_tgt) = self."!cursor_start"()
-    rx788_cur."!cursor_debug"("START ", "value")
-    .lex unicode:"$\x{a2}", rx788_cur
+    .local string rx791_tgt
+    .local int rx791_pos
+    .local int rx791_off
+    .local int rx791_eos
+    .local int rx791_rep
+    .local pmc rx791_cur
+    (rx791_cur, rx791_pos, rx791_tgt) = self."!cursor_start"()
+    rx791_cur."!cursor_debug"("START ", "value")
+    .lex unicode:"$\x{a2}", rx791_cur
     .local pmc match
     .lex "$/", match
-    length rx788_eos, rx788_tgt
-    set rx788_off, 0
-    lt rx788_pos, 2, rx788_start
-    sub rx788_off, rx788_pos, 1
-    substr rx788_tgt, rx788_tgt, rx788_off
-  rx788_start:
+    length rx791_eos, rx791_tgt
+    set rx791_off, 0
+    lt rx791_pos, 2, rx791_start
+    sub rx791_off, rx791_pos, 1
+    substr rx791_tgt, rx791_tgt, rx791_off
+  rx791_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan793_done
-    goto rxscan793_scan
-  rxscan793_loop:
-    ($P10) = rx788_cur."from"()
+    ne $I10, -1, rxscan796_done
+    goto rxscan796_scan
+  rxscan796_loop:
+    ($P10) = rx791_cur."from"()
     inc $P10
-    set rx788_pos, $P10
-    ge rx788_pos, rx788_eos, rxscan793_done
-  rxscan793_scan:
-    set_addr $I10, rxscan793_loop
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-  rxscan793_done:
-  alt794_0:
-.annotate "line", 378
-    set_addr $I10, alt794_1
-    rx788_cur."!mark_push"(0, rx788_pos, $I10)
-.annotate "line", 379
+    set rx791_pos, $P10
+    ge rx791_pos, rx791_eos, rxscan796_done
+  rxscan796_scan:
+    set_addr $I10, rxscan796_loop
+    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+  rxscan796_done:
+  alt797_0:
+.annotate "line", 382
+    set_addr $I10, alt797_1
+    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+.annotate "line", 383
   # rx subrule "quote" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."quote"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
+    rx791_cur."!cursor_pos"(rx791_pos)
+    $P10 = rx791_cur."quote"()
+    unless $P10, rx791_fail
+    rx791_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx788_pos = $P10."pos"()
-    goto alt794_end
-  alt794_1:
-.annotate "line", 380
+    rx791_pos = $P10."pos"()
+    goto alt797_end
+  alt797_1:
+.annotate "line", 384
   # rx subrule "number" subtype=capture negate=
-    rx788_cur."!cursor_pos"(rx788_pos)
-    $P10 = rx788_cur."number"()
-    unless $P10, rx788_fail
-    rx788_cur."!mark_push"(0, -1, 0, $P10)
+    rx791_cur."!cursor_pos"(rx791_pos)
+    $P10 = rx791_cur."number"()
+    unless $P10, rx791_fail
+    rx791_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("number")
-    rx788_pos = $P10."pos"()
-  alt794_end:
-.annotate "line", 378
+    rx791_pos = $P10."pos"()
+  alt797_end:
+.annotate "line", 382
   # rx pass
-    rx788_cur."!cursor_pass"(rx788_pos, "value")
-    rx788_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx788_pos)
-    .return (rx788_cur)
-  rx788_fail:
+    rx791_cur."!cursor_pass"(rx791_pos, "value")
+    rx791_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx791_pos)
+    .return (rx791_cur)
+  rx791_fail:
 .annotate "line", 4
-    (rx788_rep, rx788_pos, $I10, $P10) = rx788_cur."!mark_fail"(0)
-    lt rx788_pos, -1, rx788_done
-    eq rx788_pos, -1, rx788_fail
+    (rx791_rep, rx791_pos, $I10, $P10) = rx791_cur."!mark_fail"(0)
+    lt rx791_pos, -1, rx791_done
+    eq rx791_pos, -1, rx791_fail
     jump $I10
-  rx788_done:
-    rx788_cur."!cursor_fail"()
-    rx788_cur."!cursor_debug"("FAIL  ", "value")
-    .return (rx788_cur)
+  rx791_done:
+    rx791_cur."!cursor_fail"()
+    rx791_cur."!cursor_debug"("FAIL  ", "value")
+    .return (rx791_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("184_1267204702.05125") :method
+.sub "!PREFIX__value"  :subid("184_1271336396.90314") :method
 .annotate "line", 4
-    $P790 = self."!PREFIX__!subrule"("number", "")
-    $P791 = self."!PREFIX__!subrule"("quote", "")
-    new $P792, "ResizablePMCArray"
-    push $P792, $P790
-    push $P792, $P791
-    .return ($P792)
+    $P793 = self."!PREFIX__!subrule"("number", "")
+    $P794 = self."!PREFIX__!subrule"("quote", "")
+    new $P795, "ResizablePMCArray"
+    push $P795, $P793
+    push $P795, $P794
+    .return ($P795)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("185_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "number"  :subid("185_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx796_tgt
-    .local int rx796_pos
-    .local int rx796_off
-    .local int rx796_eos
-    .local int rx796_rep
-    .local pmc rx796_cur
-    (rx796_cur, rx796_pos, rx796_tgt) = self."!cursor_start"()
-    rx796_cur."!cursor_debug"("START ", "number")
-    .lex unicode:"$\x{a2}", rx796_cur
+    .local string rx799_tgt
+    .local int rx799_pos
+    .local int rx799_off
+    .local int rx799_eos
+    .local int rx799_rep
+    .local pmc rx799_cur
+    (rx799_cur, rx799_pos, rx799_tgt) = self."!cursor_start"()
+    rx799_cur."!cursor_debug"("START ", "number")
+    .lex unicode:"$\x{a2}", rx799_cur
     .local pmc match
     .lex "$/", match
-    length rx796_eos, rx796_tgt
-    set rx796_off, 0
-    lt rx796_pos, 2, rx796_start
-    sub rx796_off, rx796_pos, 1
-    substr rx796_tgt, rx796_tgt, rx796_off
-  rx796_start:
+    length rx799_eos, rx799_tgt
+    set rx799_off, 0
+    lt rx799_pos, 2, rx799_start
+    sub rx799_off, rx799_pos, 1
+    substr rx799_tgt, rx799_tgt, rx799_off
+  rx799_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan799_done
-    goto rxscan799_scan
-  rxscan799_loop:
-    ($P10) = rx796_cur."from"()
+    ne $I10, -1, rxscan802_done
+    goto rxscan802_scan
+  rxscan802_loop:
+    ($P10) = rx799_cur."from"()
     inc $P10
-    set rx796_pos, $P10
-    ge rx796_pos, rx796_eos, rxscan799_done
-  rxscan799_scan:
-    set_addr $I10, rxscan799_loop
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  rxscan799_done:
-.annotate "line", 384
+    set rx799_pos, $P10
+    ge rx799_pos, rx799_eos, rxscan802_done
+  rxscan802_scan:
+    set_addr $I10, rxscan802_loop
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
+  rxscan802_done:
+.annotate "line", 388
   # rx subcapture "sign"
-    set_addr $I10, rxcap_802_fail
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
-  # rx rxquantr800 ** 0..1
-    set_addr $I801, rxquantr800_done
-    rx796_cur."!mark_push"(0, rx796_pos, $I801)
-  rxquantr800_loop:
+    set_addr $I10, rxcap_805_fail
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
+  # rx rxquantr803 ** 0..1
+    set_addr $I804, rxquantr803_done
+    rx799_cur."!mark_push"(0, rx799_pos, $I804)
+  rxquantr803_loop:
   # rx enumcharlist negate=0 
-    ge rx796_pos, rx796_eos, rx796_fail
-    sub $I10, rx796_pos, rx796_off
-    substr $S10, rx796_tgt, $I10, 1
+    ge rx799_pos, rx799_eos, rx799_fail
+    sub $I10, rx799_pos, rx799_off
+    substr $S10, rx799_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rx796_fail
-    inc rx796_pos
-    (rx796_rep) = rx796_cur."!mark_commit"($I801)
-  rxquantr800_done:
-    set_addr $I10, rxcap_802_fail
-    ($I12, $I11) = rx796_cur."!mark_peek"($I10)
-    rx796_cur."!cursor_pos"($I11)
-    ($P10) = rx796_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx796_pos, "")
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, 0, rx799_fail
+    inc rx799_pos
+    (rx799_rep) = rx799_cur."!mark_commit"($I804)
+  rxquantr803_done:
+    set_addr $I10, rxcap_805_fail
+    ($I12, $I11) = rx799_cur."!mark_peek"($I10)
+    rx799_cur."!cursor_pos"($I11)
+    ($P10) = rx799_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx799_pos, "")
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sign")
-    goto rxcap_802_done
-  rxcap_802_fail:
-    goto rx796_fail
-  rxcap_802_done:
-  alt803_0:
-.annotate "line", 385
-    set_addr $I10, alt803_1
-    rx796_cur."!mark_push"(0, rx796_pos, $I10)
+    goto rxcap_805_done
+  rxcap_805_fail:
+    goto rx799_fail
+  rxcap_805_done:
+  alt806_0:
+.annotate "line", 389
+    set_addr $I10, alt806_1
+    rx799_cur."!mark_push"(0, rx799_pos, $I10)
   # rx subrule "dec_number" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."dec_number"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    rx799_cur."!cursor_pos"(rx799_pos)
+    $P10 = rx799_cur."dec_number"()
+    unless $P10, rx799_fail
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dec_number")
-    rx796_pos = $P10."pos"()
-    goto alt803_end
-  alt803_1:
+    rx799_pos = $P10."pos"()
+    goto alt806_end
+  alt806_1:
   # rx subrule "integer" subtype=capture negate=
-    rx796_cur."!cursor_pos"(rx796_pos)
-    $P10 = rx796_cur."integer"()
-    unless $P10, rx796_fail
-    rx796_cur."!mark_push"(0, -1, 0, $P10)
+    rx799_cur."!cursor_pos"(rx799_pos)
+    $P10 = rx799_cur."integer"()
+    unless $P10, rx799_fail
+    rx799_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("integer")
-    rx796_pos = $P10."pos"()
-  alt803_end:
-.annotate "line", 383
+    rx799_pos = $P10."pos"()
+  alt806_end:
+.annotate "line", 387
   # rx pass
-    rx796_cur."!cursor_pass"(rx796_pos, "number")
-    rx796_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx796_pos)
-    .return (rx796_cur)
-  rx796_fail:
+    rx799_cur."!cursor_pass"(rx799_pos, "number")
+    rx799_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx799_pos)
+    .return (rx799_cur)
+  rx799_fail:
 .annotate "line", 4
-    (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
-    lt rx796_pos, -1, rx796_done
-    eq rx796_pos, -1, rx796_fail
+    (rx799_rep, rx799_pos, $I10, $P10) = rx799_cur."!mark_fail"(0)
+    lt rx799_pos, -1, rx799_done
+    eq rx799_pos, -1, rx799_fail
     jump $I10
-  rx796_done:
-    rx796_cur."!cursor_fail"()
-    rx796_cur."!cursor_debug"("FAIL  ", "number")
-    .return (rx796_cur)
+  rx799_done:
+    rx799_cur."!cursor_fail"()
+    rx799_cur."!cursor_debug"("FAIL  ", "number")
+    .return (rx799_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("186_1267204702.05125") :method
+.sub "!PREFIX__number"  :subid("186_1271336396.90314") :method
 .annotate "line", 4
-    new $P798, "ResizablePMCArray"
-    push $P798, ""
-    .return ($P798)
+    new $P801, "ResizablePMCArray"
+    push $P801, ""
+    .return ($P801)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("187_1267204702.05125") :method
-.annotate "line", 388
-    $P805 = self."!protoregex"("quote")
-    .return ($P805)
+.sub "quote"  :subid("187_1271336396.90314") :method
+.annotate "line", 392
+    $P808 = self."!protoregex"("quote")
+    .return ($P808)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("188_1267204702.05125") :method
-.annotate "line", 388
-    $P807 = self."!PREFIX__!protoregex"("quote")
-    .return ($P807)
+.sub "!PREFIX__quote"  :subid("188_1271336396.90314") :method
+.annotate "line", 392
+    $P810 = self."!PREFIX__!protoregex"("quote")
+    .return ($P810)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("189_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<apos>"  :subid("189_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx809_tgt
-    .local int rx809_pos
-    .local int rx809_off
-    .local int rx809_eos
-    .local int rx809_rep
-    .local pmc rx809_cur
-    (rx809_cur, rx809_pos, rx809_tgt) = self."!cursor_start"()
-    rx809_cur."!cursor_debug"("START ", "quote:sym<apos>")
-    .lex unicode:"$\x{a2}", rx809_cur
-    .local pmc match
-    .lex "$/", match
-    length rx809_eos, rx809_tgt
-    set rx809_off, 0
-    lt rx809_pos, 2, rx809_start
-    sub rx809_off, rx809_pos, 1
-    substr rx809_tgt, rx809_tgt, rx809_off
-  rx809_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan812_done
-    goto rxscan812_scan
-  rxscan812_loop:
-    ($P10) = rx809_cur."from"()
-    inc $P10
-    set rx809_pos, $P10
-    ge rx809_pos, rx809_eos, rxscan812_done
-  rxscan812_scan:
-    set_addr $I10, rxscan812_loop
-    rx809_cur."!mark_push"(0, rx809_pos, $I10)
-  rxscan812_done:
-.annotate "line", 389
+    .local string rx812_tgt
+    .local int rx812_pos
+    .local int rx812_off
+    .local int rx812_eos
+    .local int rx812_rep
+    .local pmc rx812_cur
+    (rx812_cur, rx812_pos, rx812_tgt) = self."!cursor_start"()
+    rx812_cur."!cursor_debug"("START ", "quote:sym<apos>")
+    .lex unicode:"$\x{a2}", rx812_cur
+    .local pmc match
+    .lex "$/", match
+    length rx812_eos, rx812_tgt
+    set rx812_off, 0
+    lt rx812_pos, 2, rx812_start
+    sub rx812_off, rx812_pos, 1
+    substr rx812_tgt, rx812_tgt, rx812_off
+  rx812_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan815_done
+    goto rxscan815_scan
+  rxscan815_loop:
+    ($P10) = rx812_cur."from"()
+    inc $P10
+    set rx812_pos, $P10
+    ge rx812_pos, rx812_eos, rxscan815_done
+  rxscan815_scan:
+    set_addr $I10, rxscan815_loop
+    rx812_cur."!mark_push"(0, rx812_pos, $I10)
+  rxscan815_done:
+.annotate "line", 393
   # rx enumcharlist negate=0 zerowidth
-    ge rx809_pos, rx809_eos, rx809_fail
-    sub $I10, rx809_pos, rx809_off
-    substr $S10, rx809_tgt, $I10, 1
+    ge rx812_pos, rx812_eos, rx812_fail
+    sub $I10, rx812_pos, rx812_off
+    substr $S10, rx812_tgt, $I10, 1
     index $I11, "'", $S10
-    lt $I11, 0, rx809_fail
+    lt $I11, 0, rx812_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx809_cur."!cursor_pos"(rx809_pos)
-    $P10 = rx809_cur."quote_EXPR"(":q")
-    unless $P10, rx809_fail
-    rx809_cur."!mark_push"(0, -1, 0, $P10)
+    rx812_cur."!cursor_pos"(rx812_pos)
+    $P10 = rx812_cur."quote_EXPR"(":q")
+    unless $P10, rx812_fail
+    rx812_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx809_pos = $P10."pos"()
+    rx812_pos = $P10."pos"()
   # rx pass
-    rx809_cur."!cursor_pass"(rx809_pos, "quote:sym<apos>")
-    rx809_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx809_pos)
-    .return (rx809_cur)
-  rx809_fail:
+    rx812_cur."!cursor_pass"(rx812_pos, "quote:sym<apos>")
+    rx812_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx812_pos)
+    .return (rx812_cur)
+  rx812_fail:
 .annotate "line", 4
-    (rx809_rep, rx809_pos, $I10, $P10) = rx809_cur."!mark_fail"(0)
-    lt rx809_pos, -1, rx809_done
-    eq rx809_pos, -1, rx809_fail
+    (rx812_rep, rx812_pos, $I10, $P10) = rx812_cur."!mark_fail"(0)
+    lt rx812_pos, -1, rx812_done
+    eq rx812_pos, -1, rx812_fail
     jump $I10
-  rx809_done:
-    rx809_cur."!cursor_fail"()
-    rx809_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
-    .return (rx809_cur)
+  rx812_done:
+    rx812_cur."!cursor_fail"()
+    rx812_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
+    .return (rx812_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("190_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("190_1271336396.90314") :method
 .annotate "line", 4
-    new $P811, "ResizablePMCArray"
-    push $P811, "'"
-    .return ($P811)
+    new $P814, "ResizablePMCArray"
+    push $P814, "'"
+    .return ($P814)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("191_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<dblq>"  :subid("191_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx814_tgt
-    .local int rx814_pos
-    .local int rx814_off
-    .local int rx814_eos
-    .local int rx814_rep
-    .local pmc rx814_cur
-    (rx814_cur, rx814_pos, rx814_tgt) = self."!cursor_start"()
-    rx814_cur."!cursor_debug"("START ", "quote:sym<dblq>")
-    .lex unicode:"$\x{a2}", rx814_cur
+    .local string rx817_tgt
+    .local int rx817_pos
+    .local int rx817_off
+    .local int rx817_eos
+    .local int rx817_rep
+    .local pmc rx817_cur
+    (rx817_cur, rx817_pos, rx817_tgt) = self."!cursor_start"()
+    rx817_cur."!cursor_debug"("START ", "quote:sym<dblq>")
+    .lex unicode:"$\x{a2}", rx817_cur
     .local pmc match
     .lex "$/", match
-    length rx814_eos, rx814_tgt
-    set rx814_off, 0
-    lt rx814_pos, 2, rx814_start
-    sub rx814_off, rx814_pos, 1
-    substr rx814_tgt, rx814_tgt, rx814_off
-  rx814_start:
+    length rx817_eos, rx817_tgt
+    set rx817_off, 0
+    lt rx817_pos, 2, rx817_start
+    sub rx817_off, rx817_pos, 1
+    substr rx817_tgt, rx817_tgt, rx817_off
+  rx817_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan817_done
-    goto rxscan817_scan
-  rxscan817_loop:
-    ($P10) = rx814_cur."from"()
+    ne $I10, -1, rxscan820_done
+    goto rxscan820_scan
+  rxscan820_loop:
+    ($P10) = rx817_cur."from"()
     inc $P10
-    set rx814_pos, $P10
-    ge rx814_pos, rx814_eos, rxscan817_done
-  rxscan817_scan:
-    set_addr $I10, rxscan817_loop
-    rx814_cur."!mark_push"(0, rx814_pos, $I10)
-  rxscan817_done:
-.annotate "line", 390
+    set rx817_pos, $P10
+    ge rx817_pos, rx817_eos, rxscan820_done
+  rxscan820_scan:
+    set_addr $I10, rxscan820_loop
+    rx817_cur."!mark_push"(0, rx817_pos, $I10)
+  rxscan820_done:
+.annotate "line", 394
   # rx enumcharlist negate=0 zerowidth
-    ge rx814_pos, rx814_eos, rx814_fail
-    sub $I10, rx814_pos, rx814_off
-    substr $S10, rx814_tgt, $I10, 1
+    ge rx817_pos, rx817_eos, rx817_fail
+    sub $I10, rx817_pos, rx817_off
+    substr $S10, rx817_tgt, $I10, 1
     index $I11, "\"", $S10
-    lt $I11, 0, rx814_fail
+    lt $I11, 0, rx817_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx814_cur."!cursor_pos"(rx814_pos)
-    $P10 = rx814_cur."quote_EXPR"(":qq")
-    unless $P10, rx814_fail
-    rx814_cur."!mark_push"(0, -1, 0, $P10)
+    rx817_cur."!cursor_pos"(rx817_pos)
+    $P10 = rx817_cur."quote_EXPR"(":qq")
+    unless $P10, rx817_fail
+    rx817_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx814_pos = $P10."pos"()
+    rx817_pos = $P10."pos"()
   # rx pass
-    rx814_cur."!cursor_pass"(rx814_pos, "quote:sym<dblq>")
-    rx814_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx814_pos)
-    .return (rx814_cur)
-  rx814_fail:
+    rx817_cur."!cursor_pass"(rx817_pos, "quote:sym<dblq>")
+    rx817_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx817_pos)
+    .return (rx817_cur)
+  rx817_fail:
 .annotate "line", 4
-    (rx814_rep, rx814_pos, $I10, $P10) = rx814_cur."!mark_fail"(0)
-    lt rx814_pos, -1, rx814_done
-    eq rx814_pos, -1, rx814_fail
+    (rx817_rep, rx817_pos, $I10, $P10) = rx817_cur."!mark_fail"(0)
+    lt rx817_pos, -1, rx817_done
+    eq rx817_pos, -1, rx817_fail
     jump $I10
-  rx814_done:
-    rx814_cur."!cursor_fail"()
-    rx814_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
-    .return (rx814_cur)
+  rx817_done:
+    rx817_cur."!cursor_fail"()
+    rx817_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
+    .return (rx817_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1271336396.90314") :method
 .annotate "line", 4
-    new $P816, "ResizablePMCArray"
-    push $P816, "\""
-    .return ($P816)
+    new $P819, "ResizablePMCArray"
+    push $P819, "\""
+    .return ($P819)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("193_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<q>"  :subid("193_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx819_tgt
-    .local int rx819_pos
-    .local int rx819_off
-    .local int rx819_eos
-    .local int rx819_rep
-    .local pmc rx819_cur
-    (rx819_cur, rx819_pos, rx819_tgt) = self."!cursor_start"()
-    rx819_cur."!cursor_debug"("START ", "quote:sym<q>")
-    .lex unicode:"$\x{a2}", rx819_cur
+    .local string rx822_tgt
+    .local int rx822_pos
+    .local int rx822_off
+    .local int rx822_eos
+    .local int rx822_rep
+    .local pmc rx822_cur
+    (rx822_cur, rx822_pos, rx822_tgt) = self."!cursor_start"()
+    rx822_cur."!cursor_debug"("START ", "quote:sym<q>")
+    .lex unicode:"$\x{a2}", rx822_cur
     .local pmc match
     .lex "$/", match
-    length rx819_eos, rx819_tgt
-    set rx819_off, 0
-    lt rx819_pos, 2, rx819_start
-    sub rx819_off, rx819_pos, 1
-    substr rx819_tgt, rx819_tgt, rx819_off
-  rx819_start:
+    length rx822_eos, rx822_tgt
+    set rx822_off, 0
+    lt rx822_pos, 2, rx822_start
+    sub rx822_off, rx822_pos, 1
+    substr rx822_tgt, rx822_tgt, rx822_off
+  rx822_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan823_done
-    goto rxscan823_scan
-  rxscan823_loop:
-    ($P10) = rx819_cur."from"()
+    ne $I10, -1, rxscan826_done
+    goto rxscan826_scan
+  rxscan826_loop:
+    ($P10) = rx822_cur."from"()
     inc $P10
-    set rx819_pos, $P10
-    ge rx819_pos, rx819_eos, rxscan823_done
-  rxscan823_scan:
-    set_addr $I10, rxscan823_loop
-    rx819_cur."!mark_push"(0, rx819_pos, $I10)
-  rxscan823_done:
-.annotate "line", 391
+    set rx822_pos, $P10
+    ge rx822_pos, rx822_eos, rxscan826_done
+  rxscan826_scan:
+    set_addr $I10, rxscan826_loop
+    rx822_cur."!mark_push"(0, rx822_pos, $I10)
+  rxscan826_done:
+.annotate "line", 395
   # rx literal  "q"
-    add $I11, rx819_pos, 1
-    gt $I11, rx819_eos, rx819_fail
-    sub $I11, rx819_pos, rx819_off
-    substr $S10, rx819_tgt, $I11, 1
-    ne $S10, "q", rx819_fail
-    add rx819_pos, 1
+    add $I11, rx822_pos, 1
+    gt $I11, rx822_eos, rx822_fail
+    sub $I11, rx822_pos, rx822_off
+    substr $S10, rx822_tgt, $I11, 1
+    ne $S10, "q", rx822_fail
+    add rx822_pos, 1
   # rx enumcharlist negate=1 zerowidth
-    ge rx819_pos, rx819_eos, rx819_fail
-    sub $I10, rx819_pos, rx819_off
-    substr $S10, rx819_tgt, $I10, 1
+    ge rx822_pos, rx822_eos, rx822_fail
+    sub $I10, rx822_pos, rx822_off
+    substr $S10, rx822_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx819_fail
+    ge $I11, 0, rx822_fail
   # rx subrule "ws" subtype=method negate=
-    rx819_cur."!cursor_pos"(rx819_pos)
-    $P10 = rx819_cur."ws"()
-    unless $P10, rx819_fail
-    rx819_pos = $P10."pos"()
+    rx822_cur."!cursor_pos"(rx822_pos)
+    $P10 = rx822_cur."ws"()
+    unless $P10, rx822_fail
+    rx822_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx819_cur."!cursor_pos"(rx819_pos)
-    $P10 = rx819_cur."quote_EXPR"(":q")
-    unless $P10, rx819_fail
-    rx819_cur."!mark_push"(0, -1, 0, $P10)
+    rx822_cur."!cursor_pos"(rx822_pos)
+    $P10 = rx822_cur."quote_EXPR"(":q")
+    unless $P10, rx822_fail
+    rx822_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx819_pos = $P10."pos"()
+    rx822_pos = $P10."pos"()
   # rx pass
-    rx819_cur."!cursor_pass"(rx819_pos, "quote:sym<q>")
-    rx819_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx819_pos)
-    .return (rx819_cur)
-  rx819_fail:
+    rx822_cur."!cursor_pass"(rx822_pos, "quote:sym<q>")
+    rx822_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx822_pos)
+    .return (rx822_cur)
+  rx822_fail:
 .annotate "line", 4
-    (rx819_rep, rx819_pos, $I10, $P10) = rx819_cur."!mark_fail"(0)
-    lt rx819_pos, -1, rx819_done
-    eq rx819_pos, -1, rx819_fail
+    (rx822_rep, rx822_pos, $I10, $P10) = rx822_cur."!mark_fail"(0)
+    lt rx822_pos, -1, rx822_done
+    eq rx822_pos, -1, rx822_fail
     jump $I10
-  rx819_done:
-    rx819_cur."!cursor_fail"()
-    rx819_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
-    .return (rx819_cur)
+  rx822_done:
+    rx822_cur."!cursor_fail"()
+    rx822_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    .return (rx822_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("194_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("194_1271336396.90314") :method
 .annotate "line", 4
-    $P821 = self."!PREFIX__!subrule"("", "q")
-    new $P822, "ResizablePMCArray"
-    push $P822, $P821
-    .return ($P822)
+    $P824 = self."!PREFIX__!subrule"("", "q")
+    new $P825, "ResizablePMCArray"
+    push $P825, $P824
+    .return ($P825)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("195_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<qq>"  :subid("195_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx825_tgt
-    .local int rx825_pos
-    .local int rx825_off
-    .local int rx825_eos
-    .local int rx825_rep
-    .local pmc rx825_cur
-    (rx825_cur, rx825_pos, rx825_tgt) = self."!cursor_start"()
-    rx825_cur."!cursor_debug"("START ", "quote:sym<qq>")
-    .lex unicode:"$\x{a2}", rx825_cur
+    .local string rx828_tgt
+    .local int rx828_pos
+    .local int rx828_off
+    .local int rx828_eos
+    .local int rx828_rep
+    .local pmc rx828_cur
+    (rx828_cur, rx828_pos, rx828_tgt) = self."!cursor_start"()
+    rx828_cur."!cursor_debug"("START ", "quote:sym<qq>")
+    .lex unicode:"$\x{a2}", rx828_cur
     .local pmc match
     .lex "$/", match
-    length rx825_eos, rx825_tgt
-    set rx825_off, 0
-    lt rx825_pos, 2, rx825_start
-    sub rx825_off, rx825_pos, 1
-    substr rx825_tgt, rx825_tgt, rx825_off
-  rx825_start:
+    length rx828_eos, rx828_tgt
+    set rx828_off, 0
+    lt rx828_pos, 2, rx828_start
+    sub rx828_off, rx828_pos, 1
+    substr rx828_tgt, rx828_tgt, rx828_off
+  rx828_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan829_done
-    goto rxscan829_scan
-  rxscan829_loop:
-    ($P10) = rx825_cur."from"()
+    ne $I10, -1, rxscan832_done
+    goto rxscan832_scan
+  rxscan832_loop:
+    ($P10) = rx828_cur."from"()
     inc $P10
-    set rx825_pos, $P10
-    ge rx825_pos, rx825_eos, rxscan829_done
-  rxscan829_scan:
-    set_addr $I10, rxscan829_loop
-    rx825_cur."!mark_push"(0, rx825_pos, $I10)
-  rxscan829_done:
-.annotate "line", 392
+    set rx828_pos, $P10
+    ge rx828_pos, rx828_eos, rxscan832_done
+  rxscan832_scan:
+    set_addr $I10, rxscan832_loop
+    rx828_cur."!mark_push"(0, rx828_pos, $I10)
+  rxscan832_done:
+.annotate "line", 396
   # rx literal  "qq"
-    add $I11, rx825_pos, 2
-    gt $I11, rx825_eos, rx825_fail
-    sub $I11, rx825_pos, rx825_off
-    substr $S10, rx825_tgt, $I11, 2
-    ne $S10, "qq", rx825_fail
-    add rx825_pos, 2
+    add $I11, rx828_pos, 2
+    gt $I11, rx828_eos, rx828_fail
+    sub $I11, rx828_pos, rx828_off
+    substr $S10, rx828_tgt, $I11, 2
+    ne $S10, "qq", rx828_fail
+    add rx828_pos, 2
   # rx enumcharlist negate=1 zerowidth
-    ge rx825_pos, rx825_eos, rx825_fail
-    sub $I10, rx825_pos, rx825_off
-    substr $S10, rx825_tgt, $I10, 1
+    ge rx828_pos, rx828_eos, rx828_fail
+    sub $I10, rx828_pos, rx828_off
+    substr $S10, rx828_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx825_fail
+    ge $I11, 0, rx828_fail
   # rx subrule "ws" subtype=method negate=
-    rx825_cur."!cursor_pos"(rx825_pos)
-    $P10 = rx825_cur."ws"()
-    unless $P10, rx825_fail
-    rx825_pos = $P10."pos"()
+    rx828_cur."!cursor_pos"(rx828_pos)
+    $P10 = rx828_cur."ws"()
+    unless $P10, rx828_fail
+    rx828_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx825_cur."!cursor_pos"(rx825_pos)
-    $P10 = rx825_cur."quote_EXPR"(":qq")
-    unless $P10, rx825_fail
-    rx825_cur."!mark_push"(0, -1, 0, $P10)
+    rx828_cur."!cursor_pos"(rx828_pos)
+    $P10 = rx828_cur."quote_EXPR"(":qq")
+    unless $P10, rx828_fail
+    rx828_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx825_pos = $P10."pos"()
+    rx828_pos = $P10."pos"()
   # rx pass
-    rx825_cur."!cursor_pass"(rx825_pos, "quote:sym<qq>")
-    rx825_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx825_pos)
-    .return (rx825_cur)
-  rx825_fail:
+    rx828_cur."!cursor_pass"(rx828_pos, "quote:sym<qq>")
+    rx828_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx828_pos)
+    .return (rx828_cur)
+  rx828_fail:
 .annotate "line", 4
-    (rx825_rep, rx825_pos, $I10, $P10) = rx825_cur."!mark_fail"(0)
-    lt rx825_pos, -1, rx825_done
-    eq rx825_pos, -1, rx825_fail
+    (rx828_rep, rx828_pos, $I10, $P10) = rx828_cur."!mark_fail"(0)
+    lt rx828_pos, -1, rx828_done
+    eq rx828_pos, -1, rx828_fail
     jump $I10
-  rx825_done:
-    rx825_cur."!cursor_fail"()
-    rx825_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
-    .return (rx825_cur)
+  rx828_done:
+    rx828_cur."!cursor_fail"()
+    rx828_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
+    .return (rx828_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("196_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("196_1271336396.90314") :method
 .annotate "line", 4
-    $P827 = self."!PREFIX__!subrule"("", "qq")
-    new $P828, "ResizablePMCArray"
-    push $P828, $P827
-    .return ($P828)
+    $P830 = self."!PREFIX__!subrule"("", "qq")
+    new $P831, "ResizablePMCArray"
+    push $P831, $P830
+    .return ($P831)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("197_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<Q>"  :subid("197_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx831_tgt
-    .local int rx831_pos
-    .local int rx831_off
-    .local int rx831_eos
-    .local int rx831_rep
-    .local pmc rx831_cur
-    (rx831_cur, rx831_pos, rx831_tgt) = self."!cursor_start"()
-    rx831_cur."!cursor_debug"("START ", "quote:sym<Q>")
-    .lex unicode:"$\x{a2}", rx831_cur
-    .local pmc match
-    .lex "$/", match
-    length rx831_eos, rx831_tgt
-    set rx831_off, 0
-    lt rx831_pos, 2, rx831_start
-    sub rx831_off, rx831_pos, 1
-    substr rx831_tgt, rx831_tgt, rx831_off
-  rx831_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan835_done
-    goto rxscan835_scan
-  rxscan835_loop:
-    ($P10) = rx831_cur."from"()
-    inc $P10
-    set rx831_pos, $P10
-    ge rx831_pos, rx831_eos, rxscan835_done
-  rxscan835_scan:
-    set_addr $I10, rxscan835_loop
-    rx831_cur."!mark_push"(0, rx831_pos, $I10)
-  rxscan835_done:
-.annotate "line", 393
+    .local string rx834_tgt
+    .local int rx834_pos
+    .local int rx834_off
+    .local int rx834_eos
+    .local int rx834_rep
+    .local pmc rx834_cur
+    (rx834_cur, rx834_pos, rx834_tgt) = self."!cursor_start"()
+    rx834_cur."!cursor_debug"("START ", "quote:sym<Q>")
+    .lex unicode:"$\x{a2}", rx834_cur
+    .local pmc match
+    .lex "$/", match
+    length rx834_eos, rx834_tgt
+    set rx834_off, 0
+    lt rx834_pos, 2, rx834_start
+    sub rx834_off, rx834_pos, 1
+    substr rx834_tgt, rx834_tgt, rx834_off
+  rx834_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan838_done
+    goto rxscan838_scan
+  rxscan838_loop:
+    ($P10) = rx834_cur."from"()
+    inc $P10
+    set rx834_pos, $P10
+    ge rx834_pos, rx834_eos, rxscan838_done
+  rxscan838_scan:
+    set_addr $I10, rxscan838_loop
+    rx834_cur."!mark_push"(0, rx834_pos, $I10)
+  rxscan838_done:
+.annotate "line", 397
   # rx literal  "Q"
-    add $I11, rx831_pos, 1
-    gt $I11, rx831_eos, rx831_fail
-    sub $I11, rx831_pos, rx831_off
-    substr $S10, rx831_tgt, $I11, 1
-    ne $S10, "Q", rx831_fail
-    add rx831_pos, 1
+    add $I11, rx834_pos, 1
+    gt $I11, rx834_eos, rx834_fail
+    sub $I11, rx834_pos, rx834_off
+    substr $S10, rx834_tgt, $I11, 1
+    ne $S10, "Q", rx834_fail
+    add rx834_pos, 1
   # rx enumcharlist negate=1 zerowidth
-    ge rx831_pos, rx831_eos, rx831_fail
-    sub $I10, rx831_pos, rx831_off
-    substr $S10, rx831_tgt, $I10, 1
+    ge rx834_pos, rx834_eos, rx834_fail
+    sub $I10, rx834_pos, rx834_off
+    substr $S10, rx834_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx831_fail
+    ge $I11, 0, rx834_fail
   # rx subrule "ws" subtype=method negate=
-    rx831_cur."!cursor_pos"(rx831_pos)
-    $P10 = rx831_cur."ws"()
-    unless $P10, rx831_fail
-    rx831_pos = $P10."pos"()
+    rx834_cur."!cursor_pos"(rx834_pos)
+    $P10 = rx834_cur."ws"()
+    unless $P10, rx834_fail
+    rx834_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx831_cur."!cursor_pos"(rx831_pos)
-    $P10 = rx831_cur."quote_EXPR"()
-    unless $P10, rx831_fail
-    rx831_cur."!mark_push"(0, -1, 0, $P10)
+    rx834_cur."!cursor_pos"(rx834_pos)
+    $P10 = rx834_cur."quote_EXPR"()
+    unless $P10, rx834_fail
+    rx834_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx831_pos = $P10."pos"()
+    rx834_pos = $P10."pos"()
   # rx pass
-    rx831_cur."!cursor_pass"(rx831_pos, "quote:sym<Q>")
-    rx831_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx831_pos)
-    .return (rx831_cur)
-  rx831_fail:
+    rx834_cur."!cursor_pass"(rx834_pos, "quote:sym<Q>")
+    rx834_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx834_pos)
+    .return (rx834_cur)
+  rx834_fail:
 .annotate "line", 4
-    (rx831_rep, rx831_pos, $I10, $P10) = rx831_cur."!mark_fail"(0)
-    lt rx831_pos, -1, rx831_done
-    eq rx831_pos, -1, rx831_fail
+    (rx834_rep, rx834_pos, $I10, $P10) = rx834_cur."!mark_fail"(0)
+    lt rx834_pos, -1, rx834_done
+    eq rx834_pos, -1, rx834_fail
     jump $I10
-  rx831_done:
-    rx831_cur."!cursor_fail"()
-    rx831_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
-    .return (rx831_cur)
+  rx834_done:
+    rx834_cur."!cursor_fail"()
+    rx834_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
+    .return (rx834_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("198_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("198_1271336396.90314") :method
 .annotate "line", 4
-    $P833 = self."!PREFIX__!subrule"("", "Q")
-    new $P834, "ResizablePMCArray"
-    push $P834, $P833
-    .return ($P834)
+    $P836 = self."!PREFIX__!subrule"("", "Q")
+    new $P837, "ResizablePMCArray"
+    push $P837, $P836
+    .return ($P837)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("199_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym<Q:PIR>"  :subid("199_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx837_tgt
-    .local int rx837_pos
-    .local int rx837_off
-    .local int rx837_eos
-    .local int rx837_rep
-    .local pmc rx837_cur
-    (rx837_cur, rx837_pos, rx837_tgt) = self."!cursor_start"()
-    rx837_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
-    .lex unicode:"$\x{a2}", rx837_cur
+    .local string rx840_tgt
+    .local int rx840_pos
+    .local int rx840_off
+    .local int rx840_eos
+    .local int rx840_rep
+    .local pmc rx840_cur
+    (rx840_cur, rx840_pos, rx840_tgt) = self."!cursor_start"()
+    rx840_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
+    .lex unicode:"$\x{a2}", rx840_cur
     .local pmc match
     .lex "$/", match
-    length rx837_eos, rx837_tgt
-    set rx837_off, 0
-    lt rx837_pos, 2, rx837_start
-    sub rx837_off, rx837_pos, 1
-    substr rx837_tgt, rx837_tgt, rx837_off
-  rx837_start:
+    length rx840_eos, rx840_tgt
+    set rx840_off, 0
+    lt rx840_pos, 2, rx840_start
+    sub rx840_off, rx840_pos, 1
+    substr rx840_tgt, rx840_tgt, rx840_off
+  rx840_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan841_done
-    goto rxscan841_scan
-  rxscan841_loop:
-    ($P10) = rx837_cur."from"()
+    ne $I10, -1, rxscan844_done
+    goto rxscan844_scan
+  rxscan844_loop:
+    ($P10) = rx840_cur."from"()
     inc $P10
-    set rx837_pos, $P10
-    ge rx837_pos, rx837_eos, rxscan841_done
-  rxscan841_scan:
-    set_addr $I10, rxscan841_loop
-    rx837_cur."!mark_push"(0, rx837_pos, $I10)
-  rxscan841_done:
-.annotate "line", 394
+    set rx840_pos, $P10
+    ge rx840_pos, rx840_eos, rxscan844_done
+  rxscan844_scan:
+    set_addr $I10, rxscan844_loop
+    rx840_cur."!mark_push"(0, rx840_pos, $I10)
+  rxscan844_done:
+.annotate "line", 398
   # rx literal  "Q:PIR"
-    add $I11, rx837_pos, 5
-    gt $I11, rx837_eos, rx837_fail
-    sub $I11, rx837_pos, rx837_off
-    substr $S10, rx837_tgt, $I11, 5
-    ne $S10, "Q:PIR", rx837_fail
-    add rx837_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."ws"()
-    unless $P10, rx837_fail
-    rx837_pos = $P10."pos"()
+    add $I11, rx840_pos, 5
+    gt $I11, rx840_eos, rx840_fail
+    sub $I11, rx840_pos, rx840_off
+    substr $S10, rx840_tgt, $I11, 5
+    ne $S10, "Q:PIR", rx840_fail
+    add rx840_pos, 5
+  # rx subrule "ws" subtype=method negate=
+    rx840_cur."!cursor_pos"(rx840_pos)
+    $P10 = rx840_cur."ws"()
+    unless $P10, rx840_fail
+    rx840_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx837_cur."!cursor_pos"(rx837_pos)
-    $P10 = rx837_cur."quote_EXPR"()
-    unless $P10, rx837_fail
-    rx837_cur."!mark_push"(0, -1, 0, $P10)
+    rx840_cur."!cursor_pos"(rx840_pos)
+    $P10 = rx840_cur."quote_EXPR"()
+    unless $P10, rx840_fail
+    rx840_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx837_pos = $P10."pos"()
+    rx840_pos = $P10."pos"()
   # rx pass
-    rx837_cur."!cursor_pass"(rx837_pos, "quote:sym<Q:PIR>")
-    rx837_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx837_pos)
-    .return (rx837_cur)
-  rx837_fail:
+    rx840_cur."!cursor_pass"(rx840_pos, "quote:sym<Q:PIR>")
+    rx840_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx840_pos)
+    .return (rx840_cur)
+  rx840_fail:
 .annotate "line", 4
-    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
-    lt rx837_pos, -1, rx837_done
-    eq rx837_pos, -1, rx837_fail
+    (rx840_rep, rx840_pos, $I10, $P10) = rx840_cur."!mark_fail"(0)
+    lt rx840_pos, -1, rx840_done
+    eq rx840_pos, -1, rx840_fail
     jump $I10
-  rx837_done:
-    rx837_cur."!cursor_fail"()
-    rx837_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
-    .return (rx837_cur)
+  rx840_done:
+    rx840_cur."!cursor_fail"()
+    rx840_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    .return (rx840_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1267204702.05125") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1271336396.90314") :method
 .annotate "line", 4
-    $P839 = self."!PREFIX__!subrule"("", "Q:PIR")
-    new $P840, "ResizablePMCArray"
-    push $P840, $P839
-    .return ($P840)
+    $P842 = self."!PREFIX__!subrule"("", "Q:PIR")
+    new $P843, "ResizablePMCArray"
+    push $P843, $P842
+    .return ($P843)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("201_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote:sym</ />"  :subid("201_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx843_tgt
-    .local int rx843_pos
-    .local int rx843_off
-    .local int rx843_eos
-    .local int rx843_rep
-    .local pmc rx843_cur
-    (rx843_cur, rx843_pos, rx843_tgt) = self."!cursor_start"()
-    rx843_cur."!cursor_debug"("START ", "quote:sym</ />")
-    .lex unicode:"$\x{a2}", rx843_cur
+    .local string rx846_tgt
+    .local int rx846_pos
+    .local int rx846_off
+    .local int rx846_eos
+    .local int rx846_rep
+    .local pmc rx846_cur
+    (rx846_cur, rx846_pos, rx846_tgt) = self."!cursor_start"()
+    rx846_cur."!cursor_debug"("START ", "quote:sym</ />")
+    .lex unicode:"$\x{a2}", rx846_cur
     .local pmc match
     .lex "$/", match
-    length rx843_eos, rx843_tgt
-    set rx843_off, 0
-    lt rx843_pos, 2, rx843_start
-    sub rx843_off, rx843_pos, 1
-    substr rx843_tgt, rx843_tgt, rx843_off
-  rx843_start:
+    length rx846_eos, rx846_tgt
+    set rx846_off, 0
+    lt rx846_pos, 2, rx846_start
+    sub rx846_off, rx846_pos, 1
+    substr rx846_tgt, rx846_tgt, rx846_off
+  rx846_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan847_done
-    goto rxscan847_scan
-  rxscan847_loop:
-    ($P10) = rx843_cur."from"()
+    ne $I10, -1, rxscan850_done
+    goto rxscan850_scan
+  rxscan850_loop:
+    ($P10) = rx846_cur."from"()
     inc $P10
-    set rx843_pos, $P10
-    ge rx843_pos, rx843_eos, rxscan847_done
-  rxscan847_scan:
-    set_addr $I10, rxscan847_loop
-    rx843_cur."!mark_push"(0, rx843_pos, $I10)
-  rxscan847_done:
-.annotate "line", 396
+    set rx846_pos, $P10
+    ge rx846_pos, rx846_eos, rxscan850_done
+  rxscan850_scan:
+    set_addr $I10, rxscan850_loop
+    rx846_cur."!mark_push"(0, rx846_pos, $I10)
+  rxscan850_done:
+.annotate "line", 400
   # rx literal  "/"
-    add $I11, rx843_pos, 1
-    gt $I11, rx843_eos, rx843_fail
-    sub $I11, rx843_pos, rx843_off
-    substr $S10, rx843_tgt, $I11, 1
-    ne $S10, "/", rx843_fail
-    add rx843_pos, 1
-.annotate "line", 397
+    add $I11, rx846_pos, 1
+    gt $I11, rx846_eos, rx846_fail
+    sub $I11, rx846_pos, rx846_off
+    substr $S10, rx846_tgt, $I11, 1
+    ne $S10, "/", rx846_fail
+    add rx846_pos, 1
+.annotate "line", 401
   # rx subrule "newpad" subtype=method negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."newpad"()
-    unless $P10, rx843_fail
-    rx843_pos = $P10."pos"()
-.annotate "line", 398
+    rx846_cur."!cursor_pos"(rx846_pos)
+    $P10 = rx846_cur."newpad"()
+    unless $P10, rx846_fail
+    rx846_pos = $P10."pos"()
+.annotate "line", 402
   # rx reduce name="quote:sym</ />" key="open"
-    rx843_cur."!cursor_pos"(rx843_pos)
-    rx843_cur."!reduce"("quote:sym</ />", "open")
-.annotate "line", 399
+    rx846_cur."!cursor_pos"(rx846_pos)
+    rx846_cur."!reduce"("quote:sym</ />", "open")
+.annotate "line", 403
   # rx subrule "LANG" subtype=capture negate=
-    rx843_cur."!cursor_pos"(rx843_pos)
-    $P10 = rx843_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx843_fail
-    rx843_cur."!mark_push"(0, -1, 0, $P10)
+    rx846_cur."!cursor_pos"(rx846_pos)
+    $P10 = rx846_cur."LANG"("Regex", "nibbler")
+    unless $P10, rx846_fail
+    rx846_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("p6regex")
-    rx843_pos = $P10."pos"()
-.annotate "line", 400
+    rx846_pos = $P10."pos"()
+.annotate "line", 404
   # rx literal  "/"
-    add $I11, rx843_pos, 1
-    gt $I11, rx843_eos, rx843_fail
-    sub $I11, rx843_pos, rx843_off
-    substr $S10, rx843_tgt, $I11, 1
-    ne $S10, "/", rx843_fail
-    add rx843_pos, 1
-.annotate "line", 395
+    add $I11, rx846_pos, 1
+    gt $I11, rx846_eos, rx846_fail
+    sub $I11, rx846_pos, rx846_off
+    substr $S10, rx846_tgt, $I11, 1
+    ne $S10, "/", rx846_fail
+    add rx846_pos, 1
+.annotate "line", 399
   # rx pass
-    rx843_cur."!cursor_pass"(rx843_pos, "quote:sym</ />")
-    rx843_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx843_pos)
-    .return (rx843_cur)
-  rx843_fail:
+    rx846_cur."!cursor_pass"(rx846_pos, "quote:sym</ />")
+    rx846_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx846_pos)
+    .return (rx846_cur)
+  rx846_fail:
 .annotate "line", 4
-    (rx843_rep, rx843_pos, $I10, $P10) = rx843_cur."!mark_fail"(0)
-    lt rx843_pos, -1, rx843_done
-    eq rx843_pos, -1, rx843_fail
+    (rx846_rep, rx846_pos, $I10, $P10) = rx846_cur."!mark_fail"(0)
+    lt rx846_pos, -1, rx846_done
+    eq rx846_pos, -1, rx846_fail
     jump $I10
-  rx843_done:
-    rx843_cur."!cursor_fail"()
-    rx843_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
-    .return (rx843_cur)
+  rx846_done:
+    rx846_cur."!cursor_fail"()
+    rx846_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
+    .return (rx846_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("202_1267204702.05125") :method
+.sub "!PREFIX__quote:sym</ />"  :subid("202_1271336396.90314") :method
 .annotate "line", 4
-    $P845 = self."!PREFIX__!subrule"("", "/")
-    new $P846, "ResizablePMCArray"
-    push $P846, $P845
-    .return ($P846)
+    $P848 = self."!PREFIX__!subrule"("", "/")
+    new $P849, "ResizablePMCArray"
+    push $P849, $P848
+    .return ($P849)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("203_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<$>"  :subid("203_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx849_tgt
-    .local int rx849_pos
-    .local int rx849_off
-    .local int rx849_eos
-    .local int rx849_rep
-    .local pmc rx849_cur
-    (rx849_cur, rx849_pos, rx849_tgt) = self."!cursor_start"()
-    rx849_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
-    .lex unicode:"$\x{a2}", rx849_cur
+    .local string rx852_tgt
+    .local int rx852_pos
+    .local int rx852_off
+    .local int rx852_eos
+    .local int rx852_rep
+    .local pmc rx852_cur
+    (rx852_cur, rx852_pos, rx852_tgt) = self."!cursor_start"()
+    rx852_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
+    .lex unicode:"$\x{a2}", rx852_cur
     .local pmc match
     .lex "$/", match
-    length rx849_eos, rx849_tgt
-    set rx849_off, 0
-    lt rx849_pos, 2, rx849_start
-    sub rx849_off, rx849_pos, 1
-    substr rx849_tgt, rx849_tgt, rx849_off
-  rx849_start:
+    length rx852_eos, rx852_tgt
+    set rx852_off, 0
+    lt rx852_pos, 2, rx852_start
+    sub rx852_off, rx852_pos, 1
+    substr rx852_tgt, rx852_tgt, rx852_off
+  rx852_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan852_done
-    goto rxscan852_scan
-  rxscan852_loop:
-    ($P10) = rx849_cur."from"()
+    ne $I10, -1, rxscan855_done
+    goto rxscan855_scan
+  rxscan855_loop:
+    ($P10) = rx852_cur."from"()
     inc $P10
-    set rx849_pos, $P10
-    ge rx849_pos, rx849_eos, rxscan852_done
-  rxscan852_scan:
-    set_addr $I10, rxscan852_loop
-    rx849_cur."!mark_push"(0, rx849_pos, $I10)
-  rxscan852_done:
-.annotate "line", 403
+    set rx852_pos, $P10
+    ge rx852_pos, rx852_eos, rxscan855_done
+  rxscan855_scan:
+    set_addr $I10, rxscan855_loop
+    rx852_cur."!mark_push"(0, rx852_pos, $I10)
+  rxscan855_done:
+.annotate "line", 407
   # rx enumcharlist negate=0 zerowidth
-    ge rx849_pos, rx849_eos, rx849_fail
-    sub $I10, rx849_pos, rx849_off
-    substr $S10, rx849_tgt, $I10, 1
+    ge rx852_pos, rx852_eos, rx852_fail
+    sub $I10, rx852_pos, rx852_off
+    substr $S10, rx852_tgt, $I10, 1
     index $I11, "$", $S10
-    lt $I11, 0, rx849_fail
+    lt $I11, 0, rx852_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."quotemod_check"("s")
-    unless $P10, rx849_fail
+    rx852_cur."!cursor_pos"(rx852_pos)
+    $P10 = rx852_cur."quotemod_check"("s")
+    unless $P10, rx852_fail
   # rx subrule "variable" subtype=capture negate=
-    rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."variable"()
-    unless $P10, rx849_fail
-    rx849_cur."!mark_push"(0, -1, 0, $P10)
+    rx852_cur."!cursor_pos"(rx852_pos)
+    $P10 = rx852_cur."variable"()
+    unless $P10, rx852_fail
+    rx852_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("variable")
-    rx849_pos = $P10."pos"()
+    rx852_pos = $P10."pos"()
   # rx pass
-    rx849_cur."!cursor_pass"(rx849_pos, "quote_escape:sym<$>")
-    rx849_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx849_pos)
-    .return (rx849_cur)
-  rx849_fail:
+    rx852_cur."!cursor_pass"(rx852_pos, "quote_escape:sym<$>")
+    rx852_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx852_pos)
+    .return (rx852_cur)
+  rx852_fail:
 .annotate "line", 4
-    (rx849_rep, rx849_pos, $I10, $P10) = rx849_cur."!mark_fail"(0)
-    lt rx849_pos, -1, rx849_done
-    eq rx849_pos, -1, rx849_fail
+    (rx852_rep, rx852_pos, $I10, $P10) = rx852_cur."!mark_fail"(0)
+    lt rx852_pos, -1, rx852_done
+    eq rx852_pos, -1, rx852_fail
     jump $I10
-  rx849_done:
-    rx849_cur."!cursor_fail"()
-    rx849_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
-    .return (rx849_cur)
+  rx852_done:
+    rx852_cur."!cursor_fail"()
+    rx852_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
+    .return (rx852_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1271336396.90314") :method
 .annotate "line", 4
-    new $P851, "ResizablePMCArray"
-    push $P851, "$"
-    .return ($P851)
+    new $P854, "ResizablePMCArray"
+    push $P854, "$"
+    .return ($P854)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("205_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "quote_escape:sym<{ }>"  :subid("205_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx854_tgt
-    .local int rx854_pos
-    .local int rx854_off
-    .local int rx854_eos
-    .local int rx854_rep
-    .local pmc rx854_cur
-    (rx854_cur, rx854_pos, rx854_tgt) = self."!cursor_start"()
-    rx854_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx854_cur
+    .local string rx857_tgt
+    .local int rx857_pos
+    .local int rx857_off
+    .local int rx857_eos
+    .local int rx857_rep
+    .local pmc rx857_cur
+    (rx857_cur, rx857_pos, rx857_tgt) = self."!cursor_start"()
+    rx857_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx857_cur
     .local pmc match
     .lex "$/", match
-    length rx854_eos, rx854_tgt
-    set rx854_off, 0
-    lt rx854_pos, 2, rx854_start
-    sub rx854_off, rx854_pos, 1
-    substr rx854_tgt, rx854_tgt, rx854_off
-  rx854_start:
+    length rx857_eos, rx857_tgt
+    set rx857_off, 0
+    lt rx857_pos, 2, rx857_start
+    sub rx857_off, rx857_pos, 1
+    substr rx857_tgt, rx857_tgt, rx857_off
+  rx857_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan857_done
-    goto rxscan857_scan
-  rxscan857_loop:
-    ($P10) = rx854_cur."from"()
+    ne $I10, -1, rxscan860_done
+    goto rxscan860_scan
+  rxscan860_loop:
+    ($P10) = rx857_cur."from"()
     inc $P10
-    set rx854_pos, $P10
-    ge rx854_pos, rx854_eos, rxscan857_done
-  rxscan857_scan:
-    set_addr $I10, rxscan857_loop
-    rx854_cur."!mark_push"(0, rx854_pos, $I10)
-  rxscan857_done:
-.annotate "line", 404
+    set rx857_pos, $P10
+    ge rx857_pos, rx857_eos, rxscan860_done
+  rxscan860_scan:
+    set_addr $I10, rxscan860_loop
+    rx857_cur."!mark_push"(0, rx857_pos, $I10)
+  rxscan860_done:
+.annotate "line", 408
   # rx enumcharlist negate=0 zerowidth
-    ge rx854_pos, rx854_eos, rx854_fail
-    sub $I10, rx854_pos, rx854_off
-    substr $S10, rx854_tgt, $I10, 1
+    ge rx857_pos, rx857_eos, rx857_fail
+    sub $I10, rx857_pos, rx857_off
+    substr $S10, rx857_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx854_fail
+    lt $I11, 0, rx857_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."quotemod_check"("c")
-    unless $P10, rx854_fail
+    rx857_cur."!cursor_pos"(rx857_pos)
+    $P10 = rx857_cur."quotemod_check"("c")
+    unless $P10, rx857_fail
   # rx subrule "block" subtype=capture negate=
-    rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."block"()
-    unless $P10, rx854_fail
-    rx854_cur."!mark_push"(0, -1, 0, $P10)
+    rx857_cur."!cursor_pos"(rx857_pos)
+    $P10 = rx857_cur."block"()
+    unless $P10, rx857_fail
+    rx857_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx854_pos = $P10."pos"()
+    rx857_pos = $P10."pos"()
   # rx pass
-    rx854_cur."!cursor_pass"(rx854_pos, "quote_escape:sym<{ }>")
-    rx854_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx854_pos)
-    .return (rx854_cur)
-  rx854_fail:
+    rx857_cur."!cursor_pass"(rx857_pos, "quote_escape:sym<{ }>")
+    rx857_cur."!cursor_debug"("PASS  ", "quote_escape:sym<{ }>", " at pos=", rx857_pos)
+    .return (rx857_cur)
+  rx857_fail:
 .annotate "line", 4
-    (rx854_rep, rx854_pos, $I10, $P10) = rx854_cur."!mark_fail"(0)
-    lt rx854_pos, -1, rx854_done
-    eq rx854_pos, -1, rx854_fail
+    (rx857_rep, rx857_pos, $I10, $P10) = rx857_cur."!mark_fail"(0)
+    lt rx857_pos, -1, rx857_done
+    eq rx857_pos, -1, rx857_fail
     jump $I10
-  rx854_done:
-    rx854_cur."!cursor_fail"()
-    rx854_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
-    .return (rx854_cur)
+  rx857_done:
+    rx857_cur."!cursor_fail"()
+    rx857_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
+    .return (rx857_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1267204702.05125") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1271336396.90314") :method
 .annotate "line", 4
-    new $P856, "ResizablePMCArray"
-    push $P856, "{"
-    .return ($P856)
+    new $P859, "ResizablePMCArray"
+    push $P859, "{"
+    .return ($P859)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("207_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<( )>"  :subid("207_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx859_tgt
-    .local int rx859_pos
-    .local int rx859_off
-    .local int rx859_eos
-    .local int rx859_rep
-    .local pmc rx859_cur
-    (rx859_cur, rx859_pos, rx859_tgt) = self."!cursor_start"()
-    rx859_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
-    rx859_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx859_cur
+    .local string rx862_tgt
+    .local int rx862_pos
+    .local int rx862_off
+    .local int rx862_eos
+    .local int rx862_rep
+    .local pmc rx862_cur
+    (rx862_cur, rx862_pos, rx862_tgt) = self."!cursor_start"()
+    rx862_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
+    rx862_cur."!cursor_caparray"("EXPR")
+    .lex unicode:"$\x{a2}", rx862_cur
     .local pmc match
     .lex "$/", match
-    length rx859_eos, rx859_tgt
-    set rx859_off, 0
-    lt rx859_pos, 2, rx859_start
-    sub rx859_off, rx859_pos, 1
-    substr rx859_tgt, rx859_tgt, rx859_off
-  rx859_start:
+    length rx862_eos, rx862_tgt
+    set rx862_off, 0
+    lt rx862_pos, 2, rx862_start
+    sub rx862_off, rx862_pos, 1
+    substr rx862_tgt, rx862_tgt, rx862_off
+  rx862_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan863_done
-    goto rxscan863_scan
-  rxscan863_loop:
-    ($P10) = rx859_cur."from"()
+    ne $I10, -1, rxscan866_done
+    goto rxscan866_scan
+  rxscan866_loop:
+    ($P10) = rx862_cur."from"()
     inc $P10
-    set rx859_pos, $P10
-    ge rx859_pos, rx859_eos, rxscan863_done
-  rxscan863_scan:
-    set_addr $I10, rxscan863_loop
-    rx859_cur."!mark_push"(0, rx859_pos, $I10)
-  rxscan863_done:
-.annotate "line", 406
+    set rx862_pos, $P10
+    ge rx862_pos, rx862_eos, rxscan866_done
+  rxscan866_scan:
+    set_addr $I10, rxscan866_loop
+    rx862_cur."!mark_push"(0, rx862_pos, $I10)
+  rxscan866_done:
+.annotate "line", 410
   # rx literal  "("
-    add $I11, rx859_pos, 1
-    gt $I11, rx859_eos, rx859_fail
-    sub $I11, rx859_pos, rx859_off
-    substr $S10, rx859_tgt, $I11, 1
-    ne $S10, "(", rx859_fail
-    add rx859_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx859_cur."!cursor_pos"(rx859_pos)
-    $P10 = rx859_cur."ws"()
-    unless $P10, rx859_fail
-    rx859_pos = $P10."pos"()
-  # rx rxquantr864 ** 0..1
-    set_addr $I865, rxquantr864_done
-    rx859_cur."!mark_push"(0, rx859_pos, $I865)
-  rxquantr864_loop:
+    add $I11, rx862_pos, 1
+    gt $I11, rx862_eos, rx862_fail
+    sub $I11, rx862_pos, rx862_off
+    substr $S10, rx862_tgt, $I11, 1
+    ne $S10, "(", rx862_fail
+    add rx862_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx862_cur."!cursor_pos"(rx862_pos)
+    $P10 = rx862_cur."ws"()
+    unless $P10, rx862_fail
+    rx862_pos = $P10."pos"()
+  # rx rxquantr867 ** 0..1
+    set_addr $I868, rxquantr867_done
+    rx862_cur."!mark_push"(0, rx862_pos, $I868)
+  rxquantr867_loop:
   # rx subrule "EXPR" subtype=capture negate=
-    rx859_cur."!cursor_pos"(rx859_pos)
-    $P10 = rx859_cur."EXPR"()
-    unless $P10, rx859_fail
-    rx859_cur."!mark_push"(0, -1, 0, $P10)
+    rx862_cur."!cursor_pos"(rx862_pos)
+    $P10 = rx862_cur."EXPR"()
+    unless $P10, rx862_fail
+    rx862_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx859_pos = $P10."pos"()
-    (rx859_rep) = rx859_cur."!mark_commit"($I865)
-  rxquantr864_done:
+    rx862_pos = $P10."pos"()
+    (rx862_rep) = rx862_cur."!mark_commit"($I868)
+  rxquantr867_done:
   # rx literal  ")"
-    add $I11, rx859_pos, 1
-    gt $I11, rx859_eos, rx859_fail
-    sub $I11, rx859_pos, rx859_off
-    substr $S10, rx859_tgt, $I11, 1
-    ne $S10, ")", rx859_fail
-    add rx859_pos, 1
+    add $I11, rx862_pos, 1
+    gt $I11, rx862_eos, rx862_fail
+    sub $I11, rx862_pos, rx862_off
+    substr $S10, rx862_tgt, $I11, 1
+    ne $S10, ")", rx862_fail
+    add rx862_pos, 1
   # rx pass
-    rx859_cur."!cursor_pass"(rx859_pos, "circumfix:sym<( )>")
-    rx859_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx859_pos)
-    .return (rx859_cur)
-  rx859_fail:
+    rx862_cur."!cursor_pass"(rx862_pos, "circumfix:sym<( )>")
+    rx862_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx862_pos)
+    .return (rx862_cur)
+  rx862_fail:
 .annotate "line", 4
-    (rx859_rep, rx859_pos, $I10, $P10) = rx859_cur."!mark_fail"(0)
-    lt rx859_pos, -1, rx859_done
-    eq rx859_pos, -1, rx859_fail
+    (rx862_rep, rx862_pos, $I10, $P10) = rx862_cur."!mark_fail"(0)
+    lt rx862_pos, -1, rx862_done
+    eq rx862_pos, -1, rx862_fail
     jump $I10
-  rx859_done:
-    rx859_cur."!cursor_fail"()
-    rx859_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
-    .return (rx859_cur)
+  rx862_done:
+    rx862_cur."!cursor_fail"()
+    rx862_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
+    .return (rx862_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1271336396.90314") :method
 .annotate "line", 4
-    $P861 = self."!PREFIX__!subrule"("", "(")
-    new $P862, "ResizablePMCArray"
-    push $P862, $P861
-    .return ($P862)
+    $P864 = self."!PREFIX__!subrule"("", "(")
+    new $P865, "ResizablePMCArray"
+    push $P865, $P864
+    .return ($P865)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("209_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<[ ]>"  :subid("209_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx867_tgt
-    .local int rx867_pos
-    .local int rx867_off
-    .local int rx867_eos
-    .local int rx867_rep
-    .local pmc rx867_cur
-    (rx867_cur, rx867_pos, rx867_tgt) = self."!cursor_start"()
-    rx867_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
-    rx867_cur."!cursor_caparray"("EXPR")
-    .lex unicode:"$\x{a2}", rx867_cur
+    .local string rx870_tgt
+    .local int rx870_pos
+    .local int rx870_off
+    .local int rx870_eos
+    .local int rx870_rep
+    .local pmc rx870_cur
+    (rx870_cur, rx870_pos, rx870_tgt) = self."!cursor_start"()
+    rx870_cur."!cursor_debug"("START ", "circumfix:sym<[ ]>")
+    rx870_cur."!cursor_caparray"("EXPR")
+    .lex unicode:"$\x{a2}", rx870_cur
     .local pmc match
     .lex "$/", match
-    length rx867_eos, rx867_tgt
-    set rx867_off, 0
-    lt rx867_pos, 2, rx867_start
-    sub rx867_off, rx867_pos, 1
-    substr rx867_tgt, rx867_tgt, rx867_off
-  rx867_start:
+    length rx870_eos, rx870_tgt
+    set rx870_off, 0
+    lt rx870_pos, 2, rx870_start
+    sub rx870_off, rx870_pos, 1
+    substr rx870_tgt, rx870_tgt, rx870_off
+  rx870_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan871_done
-    goto rxscan871_scan
-  rxscan871_loop:
-    ($P10) = rx867_cur."from"()
+    ne $I10, -1, rxscan874_done
+    goto rxscan874_scan
+  rxscan874_loop:
+    ($P10) = rx870_cur."from"()
     inc $P10
-    set rx867_pos, $P10
-    ge rx867_pos, rx867_eos, rxscan871_done
-  rxscan871_scan:
-    set_addr $I10, rxscan871_loop
-    rx867_cur."!mark_push"(0, rx867_pos, $I10)
-  rxscan871_done:
-.annotate "line", 407
+    set rx870_pos, $P10
+    ge rx870_pos, rx870_eos, rxscan874_done
+  rxscan874_scan:
+    set_addr $I10, rxscan874_loop
+    rx870_cur."!mark_push"(0, rx870_pos, $I10)
+  rxscan874_done:
+.annotate "line", 411
   # rx literal  "["
-    add $I11, rx867_pos, 1
-    gt $I11, rx867_eos, rx867_fail
-    sub $I11, rx867_pos, rx867_off
-    substr $S10, rx867_tgt, $I11, 1
-    ne $S10, "[", rx867_fail
-    add rx867_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx867_cur."!cursor_pos"(rx867_pos)
-    $P10 = rx867_cur."ws"()
-    unless $P10, rx867_fail
-    rx867_pos = $P10."pos"()
-  # rx rxquantr872 ** 0..1
-    set_addr $I873, rxquantr872_done
-    rx867_cur."!mark_push"(0, rx867_pos, $I873)
-  rxquantr872_loop:
+    add $I11, rx870_pos, 1
+    gt $I11, rx870_eos, rx870_fail
+    sub $I11, rx870_pos, rx870_off
+    substr $S10, rx870_tgt, $I11, 1
+    ne $S10, "[", rx870_fail
+    add rx870_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx870_cur."!cursor_pos"(rx870_pos)
+    $P10 = rx870_cur."ws"()
+    unless $P10, rx870_fail
+    rx870_pos = $P10."pos"()
+  # rx rxquantr875 ** 0..1
+    set_addr $I876, rxquantr875_done
+    rx870_cur."!mark_push"(0, rx870_pos, $I876)
+  rxquantr875_loop:
   # rx subrule "EXPR" subtype=capture negate=
-    rx867_cur."!cursor_pos"(rx867_pos)
-    $P10 = rx867_cur."EXPR"()
-    unless $P10, rx867_fail
-    rx867_cur."!mark_push"(0, -1, 0, $P10)
+    rx870_cur."!cursor_pos"(rx870_pos)
+    $P10 = rx870_cur."EXPR"()
+    unless $P10, rx870_fail
+    rx870_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx867_pos = $P10."pos"()
-    (rx867_rep) = rx867_cur."!mark_commit"($I873)
-  rxquantr872_done:
+    rx870_pos = $P10."pos"()
+    (rx870_rep) = rx870_cur."!mark_commit"($I876)
+  rxquantr875_done:
   # rx literal  "]"
-    add $I11, rx867_pos, 1
-    gt $I11, rx867_eos, rx867_fail
-    sub $I11, rx867_pos, rx867_off
-    substr $S10, rx867_tgt, $I11, 1
-    ne $S10, "]", rx867_fail
-    add rx867_pos, 1
+    add $I11, rx870_pos, 1
+    gt $I11, rx870_eos, rx870_fail
+    sub $I11, rx870_pos, rx870_off
+    substr $S10, rx870_tgt, $I11, 1
+    ne $S10, "]", rx870_fail
+    add rx870_pos, 1
   # rx pass
-    rx867_cur."!cursor_pass"(rx867_pos, "circumfix:sym<[ ]>")
-    rx867_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx867_pos)
-    .return (rx867_cur)
-  rx867_fail:
+    rx870_cur."!cursor_pass"(rx870_pos, "circumfix:sym<[ ]>")
+    rx870_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx870_pos)
+    .return (rx870_cur)
+  rx870_fail:
 .annotate "line", 4
-    (rx867_rep, rx867_pos, $I10, $P10) = rx867_cur."!mark_fail"(0)
-    lt rx867_pos, -1, rx867_done
-    eq rx867_pos, -1, rx867_fail
+    (rx870_rep, rx870_pos, $I10, $P10) = rx870_cur."!mark_fail"(0)
+    lt rx870_pos, -1, rx870_done
+    eq rx870_pos, -1, rx870_fail
     jump $I10
-  rx867_done:
-    rx867_cur."!cursor_fail"()
-    rx867_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
-    .return (rx867_cur)
+  rx870_done:
+    rx870_cur."!cursor_fail"()
+    rx870_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
+    .return (rx870_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("210_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("210_1271336396.90314") :method
 .annotate "line", 4
-    $P869 = self."!PREFIX__!subrule"("", "[")
-    new $P870, "ResizablePMCArray"
-    push $P870, $P869
-    .return ($P870)
+    $P872 = self."!PREFIX__!subrule"("", "[")
+    new $P873, "ResizablePMCArray"
+    push $P873, $P872
+    .return ($P873)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<ang>"  :subid("211_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<ang>"  :subid("211_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx875_tgt
-    .local int rx875_pos
-    .local int rx875_off
-    .local int rx875_eos
-    .local int rx875_rep
-    .local pmc rx875_cur
-    (rx875_cur, rx875_pos, rx875_tgt) = self."!cursor_start"()
-    rx875_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
-    .lex unicode:"$\x{a2}", rx875_cur
-    .local pmc match
-    .lex "$/", match
-    length rx875_eos, rx875_tgt
-    set rx875_off, 0
-    lt rx875_pos, 2, rx875_start
-    sub rx875_off, rx875_pos, 1
-    substr rx875_tgt, rx875_tgt, rx875_off
-  rx875_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan878_done
-    goto rxscan878_scan
-  rxscan878_loop:
-    ($P10) = rx875_cur."from"()
-    inc $P10
-    set rx875_pos, $P10
-    ge rx875_pos, rx875_eos, rxscan878_done
-  rxscan878_scan:
-    set_addr $I10, rxscan878_loop
-    rx875_cur."!mark_push"(0, rx875_pos, $I10)
-  rxscan878_done:
-.annotate "line", 408
+    .local string rx878_tgt
+    .local int rx878_pos
+    .local int rx878_off
+    .local int rx878_eos
+    .local int rx878_rep
+    .local pmc rx878_cur
+    (rx878_cur, rx878_pos, rx878_tgt) = self."!cursor_start"()
+    rx878_cur."!cursor_debug"("START ", "circumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx878_cur
+    .local pmc match
+    .lex "$/", match
+    length rx878_eos, rx878_tgt
+    set rx878_off, 0
+    lt rx878_pos, 2, rx878_start
+    sub rx878_off, rx878_pos, 1
+    substr rx878_tgt, rx878_tgt, rx878_off
+  rx878_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan881_done
+    goto rxscan881_scan
+  rxscan881_loop:
+    ($P10) = rx878_cur."from"()
+    inc $P10
+    set rx878_pos, $P10
+    ge rx878_pos, rx878_eos, rxscan881_done
+  rxscan881_scan:
+    set_addr $I10, rxscan881_loop
+    rx878_cur."!mark_push"(0, rx878_pos, $I10)
+  rxscan881_done:
+.annotate "line", 412
   # rx enumcharlist negate=0 zerowidth
-    ge rx875_pos, rx875_eos, rx875_fail
-    sub $I10, rx875_pos, rx875_off
-    substr $S10, rx875_tgt, $I10, 1
+    ge rx878_pos, rx878_eos, rx878_fail
+    sub $I10, rx878_pos, rx878_off
+    substr $S10, rx878_tgt, $I10, 1
     index $I11, "<", $S10
-    lt $I11, 0, rx875_fail
+    lt $I11, 0, rx878_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx875_cur."!cursor_pos"(rx875_pos)
-    $P10 = rx875_cur."quote_EXPR"(":q", ":w")
-    unless $P10, rx875_fail
-    rx875_cur."!mark_push"(0, -1, 0, $P10)
+    rx878_cur."!cursor_pos"(rx878_pos)
+    $P10 = rx878_cur."quote_EXPR"(":q", ":w")
+    unless $P10, rx878_fail
+    rx878_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx875_pos = $P10."pos"()
+    rx878_pos = $P10."pos"()
   # rx pass
-    rx875_cur."!cursor_pass"(rx875_pos, "circumfix:sym<ang>")
-    rx875_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx875_pos)
-    .return (rx875_cur)
-  rx875_fail:
+    rx878_cur."!cursor_pass"(rx878_pos, "circumfix:sym<ang>")
+    rx878_cur."!cursor_debug"("PASS  ", "circumfix:sym<ang>", " at pos=", rx878_pos)
+    .return (rx878_cur)
+  rx878_fail:
 .annotate "line", 4
-    (rx875_rep, rx875_pos, $I10, $P10) = rx875_cur."!mark_fail"(0)
-    lt rx875_pos, -1, rx875_done
-    eq rx875_pos, -1, rx875_fail
+    (rx878_rep, rx878_pos, $I10, $P10) = rx878_cur."!mark_fail"(0)
+    lt rx878_pos, -1, rx878_done
+    eq rx878_pos, -1, rx878_fail
     jump $I10
-  rx875_done:
-    rx875_cur."!cursor_fail"()
-    rx875_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
-    .return (rx875_cur)
+  rx878_done:
+    rx878_cur."!cursor_fail"()
+    rx878_cur."!cursor_debug"("FAIL  ", "circumfix:sym<ang>")
+    .return (rx878_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<ang>"  :subid("212_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<ang>"  :subid("212_1271336396.90314") :method
 .annotate "line", 4
-    new $P877, "ResizablePMCArray"
-    push $P877, "<"
-    .return ($P877)
+    new $P880, "ResizablePMCArray"
+    push $P880, "<"
+    .return ($P880)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("213_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("213_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx880_tgt
-    .local int rx880_pos
-    .local int rx880_off
-    .local int rx880_eos
-    .local int rx880_rep
-    .local pmc rx880_cur
-    (rx880_cur, rx880_pos, rx880_tgt) = self."!cursor_start"()
-    rx880_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .lex unicode:"$\x{a2}", rx880_cur
+    .local string rx883_tgt
+    .local int rx883_pos
+    .local int rx883_off
+    .local int rx883_eos
+    .local int rx883_rep
+    .local pmc rx883_cur
+    (rx883_cur, rx883_pos, rx883_tgt) = self."!cursor_start"()
+    rx883_cur."!cursor_debug"("START ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .lex unicode:"$\x{a2}", rx883_cur
     .local pmc match
     .lex "$/", match
-    length rx880_eos, rx880_tgt
-    set rx880_off, 0
-    lt rx880_pos, 2, rx880_start
-    sub rx880_off, rx880_pos, 1
-    substr rx880_tgt, rx880_tgt, rx880_off
-  rx880_start:
+    length rx883_eos, rx883_tgt
+    set rx883_off, 0
+    lt rx883_pos, 2, rx883_start
+    sub rx883_off, rx883_pos, 1
+    substr rx883_tgt, rx883_tgt, rx883_off
+  rx883_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan883_done
-    goto rxscan883_scan
-  rxscan883_loop:
-    ($P10) = rx880_cur."from"()
+    ne $I10, -1, rxscan886_done
+    goto rxscan886_scan
+  rxscan886_loop:
+    ($P10) = rx883_cur."from"()
     inc $P10
-    set rx880_pos, $P10
-    ge rx880_pos, rx880_eos, rxscan883_done
-  rxscan883_scan:
-    set_addr $I10, rxscan883_loop
-    rx880_cur."!mark_push"(0, rx880_pos, $I10)
-  rxscan883_done:
-.annotate "line", 409
+    set rx883_pos, $P10
+    ge rx883_pos, rx883_eos, rxscan886_done
+  rxscan886_scan:
+    set_addr $I10, rxscan886_loop
+    rx883_cur."!mark_push"(0, rx883_pos, $I10)
+  rxscan886_done:
+.annotate "line", 413
   # rx enumcharlist negate=0 zerowidth
-    ge rx880_pos, rx880_eos, rx880_fail
-    sub $I10, rx880_pos, rx880_off
-    substr $S10, rx880_tgt, $I10, 1
+    ge rx883_pos, rx883_eos, rx883_fail
+    sub $I10, rx883_pos, rx883_off
+    substr $S10, rx883_tgt, $I10, 1
     index $I11, unicode:"\x{ab}", $S10
-    lt $I11, 0, rx880_fail
+    lt $I11, 0, rx883_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx880_cur."!cursor_pos"(rx880_pos)
-    $P10 = rx880_cur."quote_EXPR"(":qq", ":w")
-    unless $P10, rx880_fail
-    rx880_cur."!mark_push"(0, -1, 0, $P10)
+    rx883_cur."!cursor_pos"(rx883_pos)
+    $P10 = rx883_cur."quote_EXPR"(":qq", ":w")
+    unless $P10, rx883_fail
+    rx883_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx880_pos = $P10."pos"()
+    rx883_pos = $P10."pos"()
   # rx pass
-    rx880_cur."!cursor_pass"(rx880_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    rx880_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx880_pos)
-    .return (rx880_cur)
-  rx880_fail:
+    rx883_cur."!cursor_pass"(rx883_pos, unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    rx883_cur."!cursor_debug"("PASS  ", unicode:"circumfix:sym<\x{ab} \x{bb}>", " at pos=", rx883_pos)
+    .return (rx883_cur)
+  rx883_fail:
 .annotate "line", 4
-    (rx880_rep, rx880_pos, $I10, $P10) = rx880_cur."!mark_fail"(0)
-    lt rx880_pos, -1, rx880_done
-    eq rx880_pos, -1, rx880_fail
+    (rx883_rep, rx883_pos, $I10, $P10) = rx883_cur."!mark_fail"(0)
+    lt rx883_pos, -1, rx883_done
+    eq rx883_pos, -1, rx883_fail
     jump $I10
-  rx880_done:
-    rx880_cur."!cursor_fail"()
-    rx880_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
-    .return (rx880_cur)
+  rx883_done:
+    rx883_cur."!cursor_fail"()
+    rx883_cur."!cursor_debug"("FAIL  ", unicode:"circumfix:sym<\x{ab} \x{bb}>")
+    .return (rx883_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("214_1267204702.05125") :method
+.sub unicode:"!PREFIX__circumfix:sym<\x{ab} \x{bb}>"  :subid("214_1271336396.90314") :method
 .annotate "line", 4
-    new $P882, "ResizablePMCArray"
-    push $P882, unicode:"\x{ab}"
-    .return ($P882)
+    new $P885, "ResizablePMCArray"
+    push $P885, unicode:"\x{ab}"
+    .return ($P885)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<{ }>"  :subid("215_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<{ }>"  :subid("215_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx885_tgt
-    .local int rx885_pos
-    .local int rx885_off
-    .local int rx885_eos
-    .local int rx885_rep
-    .local pmc rx885_cur
-    (rx885_cur, rx885_pos, rx885_tgt) = self."!cursor_start"()
-    rx885_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx885_cur
+    .local string rx888_tgt
+    .local int rx888_pos
+    .local int rx888_off
+    .local int rx888_eos
+    .local int rx888_rep
+    .local pmc rx888_cur
+    (rx888_cur, rx888_pos, rx888_tgt) = self."!cursor_start"()
+    rx888_cur."!cursor_debug"("START ", "circumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx888_cur
     .local pmc match
     .lex "$/", match
-    length rx885_eos, rx885_tgt
-    set rx885_off, 0
-    lt rx885_pos, 2, rx885_start
-    sub rx885_off, rx885_pos, 1
-    substr rx885_tgt, rx885_tgt, rx885_off
-  rx885_start:
+    length rx888_eos, rx888_tgt
+    set rx888_off, 0
+    lt rx888_pos, 2, rx888_start
+    sub rx888_off, rx888_pos, 1
+    substr rx888_tgt, rx888_tgt, rx888_off
+  rx888_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan888_done
-    goto rxscan888_scan
-  rxscan888_loop:
-    ($P10) = rx885_cur."from"()
+    ne $I10, -1, rxscan891_done
+    goto rxscan891_scan
+  rxscan891_loop:
+    ($P10) = rx888_cur."from"()
     inc $P10
-    set rx885_pos, $P10
-    ge rx885_pos, rx885_eos, rxscan888_done
-  rxscan888_scan:
-    set_addr $I10, rxscan888_loop
-    rx885_cur."!mark_push"(0, rx885_pos, $I10)
-  rxscan888_done:
-.annotate "line", 410
+    set rx888_pos, $P10
+    ge rx888_pos, rx888_eos, rxscan891_done
+  rxscan891_scan:
+    set_addr $I10, rxscan891_loop
+    rx888_cur."!mark_push"(0, rx888_pos, $I10)
+  rxscan891_done:
+.annotate "line", 414
   # rx enumcharlist negate=0 zerowidth
-    ge rx885_pos, rx885_eos, rx885_fail
-    sub $I10, rx885_pos, rx885_off
-    substr $S10, rx885_tgt, $I10, 1
+    ge rx888_pos, rx888_eos, rx888_fail
+    sub $I10, rx888_pos, rx888_off
+    substr $S10, rx888_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx885_fail
+    lt $I11, 0, rx888_fail
   # rx subrule "pblock" subtype=capture negate=
-    rx885_cur."!cursor_pos"(rx885_pos)
-    $P10 = rx885_cur."pblock"()
-    unless $P10, rx885_fail
-    rx885_cur."!mark_push"(0, -1, 0, $P10)
+    rx888_cur."!cursor_pos"(rx888_pos)
+    $P10 = rx888_cur."pblock"()
+    unless $P10, rx888_fail
+    rx888_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
-    rx885_pos = $P10."pos"()
+    rx888_pos = $P10."pos"()
   # rx pass
-    rx885_cur."!cursor_pass"(rx885_pos, "circumfix:sym<{ }>")
-    rx885_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx885_pos)
-    .return (rx885_cur)
-  rx885_fail:
+    rx888_cur."!cursor_pass"(rx888_pos, "circumfix:sym<{ }>")
+    rx888_cur."!cursor_debug"("PASS  ", "circumfix:sym<{ }>", " at pos=", rx888_pos)
+    .return (rx888_cur)
+  rx888_fail:
 .annotate "line", 4
-    (rx885_rep, rx885_pos, $I10, $P10) = rx885_cur."!mark_fail"(0)
-    lt rx885_pos, -1, rx885_done
-    eq rx885_pos, -1, rx885_fail
+    (rx888_rep, rx888_pos, $I10, $P10) = rx888_cur."!mark_fail"(0)
+    lt rx888_pos, -1, rx888_done
+    eq rx888_pos, -1, rx888_fail
     jump $I10
-  rx885_done:
-    rx885_cur."!cursor_fail"()
-    rx885_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
-    .return (rx885_cur)
+  rx888_done:
+    rx888_cur."!cursor_fail"()
+    rx888_cur."!cursor_debug"("FAIL  ", "circumfix:sym<{ }>")
+    .return (rx888_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<{ }>"  :subid("216_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<{ }>"  :subid("216_1271336396.90314") :method
 .annotate "line", 4
-    new $P887, "ResizablePMCArray"
-    push $P887, "{"
-    .return ($P887)
+    new $P890, "ResizablePMCArray"
+    push $P890, "{"
+    .return ($P890)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<sigil>"  :subid("217_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "circumfix:sym<sigil>"  :subid("217_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx890_tgt
-    .local int rx890_pos
-    .local int rx890_off
-    .local int rx890_eos
-    .local int rx890_rep
-    .local pmc rx890_cur
-    (rx890_cur, rx890_pos, rx890_tgt) = self."!cursor_start"()
-    rx890_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
-    .lex unicode:"$\x{a2}", rx890_cur
+    .local string rx893_tgt
+    .local int rx893_pos
+    .local int rx893_off
+    .local int rx893_eos
+    .local int rx893_rep
+    .local pmc rx893_cur
+    (rx893_cur, rx893_pos, rx893_tgt) = self."!cursor_start"()
+    rx893_cur."!cursor_debug"("START ", "circumfix:sym<sigil>")
+    .lex unicode:"$\x{a2}", rx893_cur
     .local pmc match
     .lex "$/", match
-    length rx890_eos, rx890_tgt
-    set rx890_off, 0
-    lt rx890_pos, 2, rx890_start
-    sub rx890_off, rx890_pos, 1
-    substr rx890_tgt, rx890_tgt, rx890_off
-  rx890_start:
+    length rx893_eos, rx893_tgt
+    set rx893_off, 0
+    lt rx893_pos, 2, rx893_start
+    sub rx893_off, rx893_pos, 1
+    substr rx893_tgt, rx893_tgt, rx893_off
+  rx893_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan894_done
-    goto rxscan894_scan
-  rxscan894_loop:
-    ($P10) = rx890_cur."from"()
+    ne $I10, -1, rxscan897_done
+    goto rxscan897_scan
+  rxscan897_loop:
+    ($P10) = rx893_cur."from"()
     inc $P10
-    set rx890_pos, $P10
-    ge rx890_pos, rx890_eos, rxscan894_done
-  rxscan894_scan:
-    set_addr $I10, rxscan894_loop
-    rx890_cur."!mark_push"(0, rx890_pos, $I10)
-  rxscan894_done:
-.annotate "line", 411
+    set rx893_pos, $P10
+    ge rx893_pos, rx893_eos, rxscan897_done
+  rxscan897_scan:
+    set_addr $I10, rxscan897_loop
+    rx893_cur."!mark_push"(0, rx893_pos, $I10)
+  rxscan897_done:
+.annotate "line", 415
   # rx subrule "sigil" subtype=capture negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."sigil"()
-    unless $P10, rx890_fail
-    rx890_cur."!mark_push"(0, -1, 0, $P10)
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."sigil"()
+    unless $P10, rx893_fail
+    rx893_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sigil")
-    rx890_pos = $P10."pos"()
+    rx893_pos = $P10."pos"()
   # rx literal  "("
-    add $I11, rx890_pos, 1
-    gt $I11, rx890_eos, rx890_fail
-    sub $I11, rx890_pos, rx890_off
-    substr $S10, rx890_tgt, $I11, 1
-    ne $S10, "(", rx890_fail
-    add rx890_pos, 1
+    add $I11, rx893_pos, 1
+    gt $I11, rx893_eos, rx893_fail
+    sub $I11, rx893_pos, rx893_off
+    substr $S10, rx893_tgt, $I11, 1
+    ne $S10, "(", rx893_fail
+    add rx893_pos, 1
   # rx subrule "semilist" subtype=capture negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."semilist"()
-    unless $P10, rx890_fail
-    rx890_cur."!mark_push"(0, -1, 0, $P10)
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."semilist"()
+    unless $P10, rx893_fail
+    rx893_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("semilist")
-    rx890_pos = $P10."pos"()
-  alt895_0:
-    set_addr $I10, alt895_1
-    rx890_cur."!mark_push"(0, rx890_pos, $I10)
+    rx893_pos = $P10."pos"()
+  alt898_0:
+    set_addr $I10, alt898_1
+    rx893_cur."!mark_push"(0, rx893_pos, $I10)
   # rx literal  ")"
-    add $I11, rx890_pos, 1
-    gt $I11, rx890_eos, rx890_fail
-    sub $I11, rx890_pos, rx890_off
-    substr $S10, rx890_tgt, $I11, 1
-    ne $S10, ")", rx890_fail
-    add rx890_pos, 1
-    goto alt895_end
-  alt895_1:
+    add $I11, rx893_pos, 1
+    gt $I11, rx893_eos, rx893_fail
+    sub $I11, rx893_pos, rx893_off
+    substr $S10, rx893_tgt, $I11, 1
+    ne $S10, ")", rx893_fail
+    add rx893_pos, 1
+    goto alt898_end
+  alt898_1:
   # rx subrule "FAILGOAL" subtype=method negate=
-    rx890_cur."!cursor_pos"(rx890_pos)
-    $P10 = rx890_cur."FAILGOAL"("')'")
-    unless $P10, rx890_fail
-    rx890_pos = $P10."pos"()
-  alt895_end:
+    rx893_cur."!cursor_pos"(rx893_pos)
+    $P10 = rx893_cur."FAILGOAL"("')'")
+    unless $P10, rx893_fail
+    rx893_pos = $P10."pos"()
+  alt898_end:
   # rx pass
-    rx890_cur."!cursor_pass"(rx890_pos, "circumfix:sym<sigil>")
-    rx890_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx890_pos)
-    .return (rx890_cur)
-  rx890_fail:
+    rx893_cur."!cursor_pass"(rx893_pos, "circumfix:sym<sigil>")
+    rx893_cur."!cursor_debug"("PASS  ", "circumfix:sym<sigil>", " at pos=", rx893_pos)
+    .return (rx893_cur)
+  rx893_fail:
 .annotate "line", 4
-    (rx890_rep, rx890_pos, $I10, $P10) = rx890_cur."!mark_fail"(0)
-    lt rx890_pos, -1, rx890_done
-    eq rx890_pos, -1, rx890_fail
+    (rx893_rep, rx893_pos, $I10, $P10) = rx893_cur."!mark_fail"(0)
+    lt rx893_pos, -1, rx893_done
+    eq rx893_pos, -1, rx893_fail
     jump $I10
-  rx890_done:
-    rx890_cur."!cursor_fail"()
-    rx890_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
-    .return (rx890_cur)
+  rx893_done:
+    rx893_cur."!cursor_fail"()
+    rx893_cur."!cursor_debug"("FAIL  ", "circumfix:sym<sigil>")
+    .return (rx893_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<sigil>"  :subid("218_1267204702.05125") :method
+.sub "!PREFIX__circumfix:sym<sigil>"  :subid("218_1271336396.90314") :method
 .annotate "line", 4
-    $P892 = self."!PREFIX__!subrule"("sigil", "")
-    new $P893, "ResizablePMCArray"
-    push $P893, $P892
-    .return ($P893)
+    $P895 = self."!PREFIX__!subrule"("sigil", "")
+    new $P896, "ResizablePMCArray"
+    push $P896, $P895
+    .return ($P896)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "semilist"  :subid("219_1267204702.05125") :method :outer("11_1267204702.05125")
+.sub "semilist"  :subid("219_1271336396.90314") :method :outer("11_1271336396.90314")
 .annotate "line", 4
-    .local string rx898_tgt
-    .local int rx898_pos
-    .local int rx898_off
-    .local int rx898_eos
-    .local int rx898_rep
-    .local pmc rx898_cur
-    (rx898_cur, rx898_pos, rx898_tgt) = self."!cursor_start"()
-    rx898_cur."!cursor_debug"("START ", "semilist")
-    .lex unicode:"$\x{a2}", rx898_cur
+    .local string rx901_tgt
+    .local int rx901_pos
+    .local int rx901_off
+    .local int rx901_eos
+    .local int rx901_rep
+    .local pmc rx901_cur
+    (rx901_cur, rx901_pos, rx901_tgt) = self."!cursor_start"()
+    rx901_cur."!cursor_debug"("START ", "semilist")
+    .lex unicode:"$\x{a2}", rx901_cur
     .local pmc match
     .lex "$/", match
-    length rx898_eos, rx898_tgt
-    set rx898_off, 0
-    lt rx898_pos, 2, rx898_start
-    sub rx898_off, rx898_pos, 1
-    substr rx898_tgt, rx898_tgt, rx898_off
-  rx898_start:
+    length rx901_eos, rx901_tgt
+    set rx901_off, 0
+    lt rx901_pos, 2, rx901_start
+    sub rx901_off, rx901_pos, 1
+    substr rx901_tgt, rx901_tgt, rx901_off
+  rx901_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan901_done
-    goto rxscan901_scan
-  rxscan901_loop:
-    ($P10) = rx898_cur."from"()
+    ne $I10, -1, rxscan904_done
+    goto rxscan904_scan
+  rxscan904_loop:
+    ($P10) = rx901_cur."from"()
     inc $P10
-    set rx898_pos, $P10
-    ge rx898_pos, rx898_eos, rxscan901_done
-  rxscan901_scan:
-    set_addr $I10, rxscan901_loop
-    rx898_cur."!mark_push"(0, rx898_pos, $I10)
-  rxscan901_done:
-.annotate "line", 413
+    set rx901_pos, $P10
+    ge rx901_pos, rx901_eos, rxscan904_done
+  rxscan904_scan:
+    set_addr $I10, rxscan904_loop
+    rx901_cur."!mark_push"(0, rx901_pos, $I10)
+  rxscan904_done:
+.annotate "line", 417
   # rx subrule "ws" subtype=method negate=
-    rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."ws"()
-    unless $P10, rx898_fail
-    rx898_pos = $P10."pos"()
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."ws"()
+    unless $P10, rx901_fail
+    rx901_pos = $P10."pos"()
   # rx subrule "statement" subtype=capture negate=
-    rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."statement"()
-    unless $P10, rx898_fail
-    rx898_cur."!mark_push"(0, -1, 0, $P10)
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."statement"()
+    unless $P10, rx901_fail
+    rx901_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx898_pos = $P10."pos"()
+    rx901_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx898_cur."!cursor_pos"(rx898_pos)
-    $P10 = rx898_cur."ws"()
-    unless $P10, rx898_fail
-    rx898_pos = $P10."pos"()
+    rx901_cur."!cursor_pos"(rx901_pos)
+    $P10 = rx901_cur."ws"()
+    unless $P10, rx901_fail
+    rx901_pos = $P10."pos"()
   # rx pass
-    rx898_cur."!cursor_pass"(rx898_pos, "semilist")
-    rx898_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx898_pos)
-    .return (rx898_cur)
-  rx898_fail:
+    rx901_cur."!cursor_pass"(rx901_pos, "semilist")
+    rx901_cur."!cursor_debug"("PASS  ", "semilist", " at pos=", rx901_pos)
+    .return (rx901_cur)
+  rx901_fail:
 .annotate "line", 4
-    (rx898_rep, rx898_pos, $I10, $P10) = rx898_cur."!mark_fail"(0)
-    lt rx898_pos, -1, rx898_done
-    eq rx898_pos, -1, rx898_fail
+    (rx901_rep, rx901_pos, $I10, $P10) = rx901_cur."!mark_fail"(0)
+    lt rx901_pos, -1, rx901_done
+    eq rx901_pos, -1, rx901_fail
     jump $I10
-  rx898_done:
-    rx898_cur."!cursor_fail"()
-    rx898_cur."!cursor_debug"("FAIL  ", "semilist")
-    .return (rx898_cur)
+  rx901_done:
+    rx901_cur."!cursor_fail"()
+    rx901_cur."!cursor_debug"("FAIL  ", "semilist")
+    .return (rx901_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__semilist"  :subid("220_1267204702.05125") :method
+.sub "!PREFIX__semilist"  :subid("220_1271336396.90314") :method
 .annotate "line", 4
-    new $P900, "ResizablePMCArray"
-    push $P900, ""
-    .return ($P900)
+    new $P903, "ResizablePMCArray"
+    push $P903, ""
+    .return ($P903)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixish"  :subid("221_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx905_tgt
-    .local int rx905_pos
-    .local int rx905_off
-    .local int rx905_eos
-    .local int rx905_rep
-    .local pmc rx905_cur
-    (rx905_cur, rx905_pos, rx905_tgt) = self."!cursor_start"()
-    rx905_cur."!cursor_debug"("START ", "infixish")
-    .lex unicode:"$\x{a2}", rx905_cur
-    .local pmc match
-    .lex "$/", match
-    length rx905_eos, rx905_tgt
-    set rx905_off, 0
-    lt rx905_pos, 2, rx905_start
-    sub rx905_off, rx905_pos, 1
-    substr rx905_tgt, rx905_tgt, rx905_off
-  rx905_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan908_done
-    goto rxscan908_scan
-  rxscan908_loop:
-    ($P10) = rx905_cur."from"()
-    inc $P10
-    set rx905_pos, $P10
-    ge rx905_pos, rx905_eos, rxscan908_done
-  rxscan908_scan:
-    set_addr $I10, rxscan908_loop
-    rx905_cur."!mark_push"(0, rx905_pos, $I10)
-  rxscan908_done:
-.annotate "line", 436
+.sub "infixish"  :subid("221_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx908_tgt
+    .local int rx908_pos
+    .local int rx908_off
+    .local int rx908_eos
+    .local int rx908_rep
+    .local pmc rx908_cur
+    (rx908_cur, rx908_pos, rx908_tgt) = self."!cursor_start"()
+    rx908_cur."!cursor_debug"("START ", "infixish")
+    .lex unicode:"$\x{a2}", rx908_cur
+    .local pmc match
+    .lex "$/", match
+    length rx908_eos, rx908_tgt
+    set rx908_off, 0
+    lt rx908_pos, 2, rx908_start
+    sub rx908_off, rx908_pos, 1
+    substr rx908_tgt, rx908_tgt, rx908_off
+  rx908_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan911_done
+    goto rxscan911_scan
+  rxscan911_loop:
+    ($P10) = rx908_cur."from"()
+    inc $P10
+    set rx908_pos, $P10
+    ge rx908_pos, rx908_eos, rxscan911_done
+  rxscan911_scan:
+    set_addr $I10, rxscan911_loop
+    rx908_cur."!mark_push"(0, rx908_pos, $I10)
+  rxscan911_done:
+.annotate "line", 440
   # rx subrule "infixstopper" subtype=zerowidth negate=1
-    rx905_cur."!cursor_pos"(rx905_pos)
-    $P10 = rx905_cur."infixstopper"()
-    if $P10, rx905_fail
+    rx908_cur."!cursor_pos"(rx908_pos)
+    $P10 = rx908_cur."infixstopper"()
+    if $P10, rx908_fail
   # rx subrule "infix" subtype=capture negate=
-    rx905_cur."!cursor_pos"(rx905_pos)
-    $P10 = rx905_cur."infix"()
-    unless $P10, rx905_fail
-    rx905_cur."!mark_push"(0, -1, 0, $P10)
+    rx908_cur."!cursor_pos"(rx908_pos)
+    $P10 = rx908_cur."infix"()
+    unless $P10, rx908_fail
+    rx908_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("OPER=infix")
-    rx905_pos = $P10."pos"()
+    rx908_pos = $P10."pos"()
   # rx pass
-    rx905_cur."!cursor_pass"(rx905_pos, "infixish")
-    rx905_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx905_pos)
-    .return (rx905_cur)
-  rx905_fail:
-.annotate "line", 417
-    (rx905_rep, rx905_pos, $I10, $P10) = rx905_cur."!mark_fail"(0)
-    lt rx905_pos, -1, rx905_done
-    eq rx905_pos, -1, rx905_fail
+    rx908_cur."!cursor_pass"(rx908_pos, "infixish")
+    rx908_cur."!cursor_debug"("PASS  ", "infixish", " at pos=", rx908_pos)
+    .return (rx908_cur)
+  rx908_fail:
+.annotate "line", 421
+    (rx908_rep, rx908_pos, $I10, $P10) = rx908_cur."!mark_fail"(0)
+    lt rx908_pos, -1, rx908_done
+    eq rx908_pos, -1, rx908_fail
     jump $I10
-  rx905_done:
-    rx905_cur."!cursor_fail"()
-    rx905_cur."!cursor_debug"("FAIL  ", "infixish")
-    .return (rx905_cur)
+  rx908_done:
+    rx908_cur."!cursor_fail"()
+    rx908_cur."!cursor_debug"("FAIL  ", "infixish")
+    .return (rx908_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("222_1267204702.05125") :method
-.annotate "line", 417
-    new $P907, "ResizablePMCArray"
-    push $P907, ""
-    .return ($P907)
+.sub "!PREFIX__infixish"  :subid("222_1271336396.90314") :method
+.annotate "line", 421
+    new $P910, "ResizablePMCArray"
+    push $P910, ""
+    .return ($P910)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infixstopper"  :subid("223_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx910_tgt
-    .local int rx910_pos
-    .local int rx910_off
-    .local int rx910_eos
-    .local int rx910_rep
-    .local pmc rx910_cur
-    (rx910_cur, rx910_pos, rx910_tgt) = self."!cursor_start"()
-    rx910_cur."!cursor_debug"("START ", "infixstopper")
-    .lex unicode:"$\x{a2}", rx910_cur
-    .local pmc match
-    .lex "$/", match
-    length rx910_eos, rx910_tgt
-    set rx910_off, 0
-    lt rx910_pos, 2, rx910_start
-    sub rx910_off, rx910_pos, 1
-    substr rx910_tgt, rx910_tgt, rx910_off
-  rx910_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan913_done
-    goto rxscan913_scan
-  rxscan913_loop:
-    ($P10) = rx910_cur."from"()
-    inc $P10
-    set rx910_pos, $P10
-    ge rx910_pos, rx910_eos, rxscan913_done
-  rxscan913_scan:
-    set_addr $I10, rxscan913_loop
-    rx910_cur."!mark_push"(0, rx910_pos, $I10)
-  rxscan913_done:
-.annotate "line", 437
+.sub "infixstopper"  :subid("223_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx913_tgt
+    .local int rx913_pos
+    .local int rx913_off
+    .local int rx913_eos
+    .local int rx913_rep
+    .local pmc rx913_cur
+    (rx913_cur, rx913_pos, rx913_tgt) = self."!cursor_start"()
+    rx913_cur."!cursor_debug"("START ", "infixstopper")
+    .lex unicode:"$\x{a2}", rx913_cur
+    .local pmc match
+    .lex "$/", match
+    length rx913_eos, rx913_tgt
+    set rx913_off, 0
+    lt rx913_pos, 2, rx913_start
+    sub rx913_off, rx913_pos, 1
+    substr rx913_tgt, rx913_tgt, rx913_off
+  rx913_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan916_done
+    goto rxscan916_scan
+  rxscan916_loop:
+    ($P10) = rx913_cur."from"()
+    inc $P10
+    set rx913_pos, $P10
+    ge rx913_pos, rx913_eos, rxscan916_done
+  rxscan916_scan:
+    set_addr $I10, rxscan916_loop
+    rx913_cur."!mark_push"(0, rx913_pos, $I10)
+  rxscan916_done:
+.annotate "line", 441
   # rx subrule "lambda" subtype=zerowidth negate=
-    rx910_cur."!cursor_pos"(rx910_pos)
-    $P10 = rx910_cur."lambda"()
-    unless $P10, rx910_fail
-  # rx pass
-    rx910_cur."!cursor_pass"(rx910_pos, "infixstopper")
-    rx910_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx910_pos)
-    .return (rx910_cur)
-  rx910_fail:
-.annotate "line", 417
-    (rx910_rep, rx910_pos, $I10, $P10) = rx910_cur."!mark_fail"(0)
-    lt rx910_pos, -1, rx910_done
-    eq rx910_pos, -1, rx910_fail
+    rx913_cur."!cursor_pos"(rx913_pos)
+    $P10 = rx913_cur."lambda"()
+    unless $P10, rx913_fail
+  # rx pass
+    rx913_cur."!cursor_pass"(rx913_pos, "infixstopper")
+    rx913_cur."!cursor_debug"("PASS  ", "infixstopper", " at pos=", rx913_pos)
+    .return (rx913_cur)
+  rx913_fail:
+.annotate "line", 421
+    (rx913_rep, rx913_pos, $I10, $P10) = rx913_cur."!mark_fail"(0)
+    lt rx913_pos, -1, rx913_done
+    eq rx913_pos, -1, rx913_fail
     jump $I10
-  rx910_done:
-    rx910_cur."!cursor_fail"()
-    rx910_cur."!cursor_debug"("FAIL  ", "infixstopper")
-    .return (rx910_cur)
+  rx913_done:
+    rx913_cur."!cursor_fail"()
+    rx913_cur."!cursor_debug"("FAIL  ", "infixstopper")
+    .return (rx913_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infixstopper"  :subid("224_1267204702.05125") :method
-.annotate "line", 417
-    new $P912, "ResizablePMCArray"
-    push $P912, ""
-    .return ($P912)
+.sub "!PREFIX__infixstopper"  :subid("224_1271336396.90314") :method
+.annotate "line", 421
+    new $P915, "ResizablePMCArray"
+    push $P915, ""
+    .return ($P915)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<[ ]>"  :subid("225_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx915_tgt
-    .local int rx915_pos
-    .local int rx915_off
-    .local int rx915_eos
-    .local int rx915_rep
-    .local pmc rx915_cur
-    (rx915_cur, rx915_pos, rx915_tgt) = self."!cursor_start"()
-    rx915_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
-    .lex unicode:"$\x{a2}", rx915_cur
-    .local pmc match
-    .lex "$/", match
-    length rx915_eos, rx915_tgt
-    set rx915_off, 0
-    lt rx915_pos, 2, rx915_start
-    sub rx915_off, rx915_pos, 1
-    substr rx915_tgt, rx915_tgt, rx915_off
-  rx915_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan919_done
-    goto rxscan919_scan
-  rxscan919_loop:
-    ($P10) = rx915_cur."from"()
-    inc $P10
-    set rx915_pos, $P10
-    ge rx915_pos, rx915_eos, rxscan919_done
-  rxscan919_scan:
-    set_addr $I10, rxscan919_loop
-    rx915_cur."!mark_push"(0, rx915_pos, $I10)
-  rxscan919_done:
-.annotate "line", 440
+.sub "postcircumfix:sym<[ ]>"  :subid("225_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx918_tgt
+    .local int rx918_pos
+    .local int rx918_off
+    .local int rx918_eos
+    .local int rx918_rep
+    .local pmc rx918_cur
+    (rx918_cur, rx918_pos, rx918_tgt) = self."!cursor_start"()
+    rx918_cur."!cursor_debug"("START ", "postcircumfix:sym<[ ]>")
+    .lex unicode:"$\x{a2}", rx918_cur
+    .local pmc match
+    .lex "$/", match
+    length rx918_eos, rx918_tgt
+    set rx918_off, 0
+    lt rx918_pos, 2, rx918_start
+    sub rx918_off, rx918_pos, 1
+    substr rx918_tgt, rx918_tgt, rx918_off
+  rx918_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan922_done
+    goto rxscan922_scan
+  rxscan922_loop:
+    ($P10) = rx918_cur."from"()
+    inc $P10
+    set rx918_pos, $P10
+    ge rx918_pos, rx918_eos, rxscan922_done
+  rxscan922_scan:
+    set_addr $I10, rxscan922_loop
+    rx918_cur."!mark_push"(0, rx918_pos, $I10)
+  rxscan922_done:
+.annotate "line", 444
   # rx literal  "["
-    add $I11, rx915_pos, 1
-    gt $I11, rx915_eos, rx915_fail
-    sub $I11, rx915_pos, rx915_off
-    substr $S10, rx915_tgt, $I11, 1
-    ne $S10, "[", rx915_fail
-    add rx915_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."ws"()
-    unless $P10, rx915_fail
-    rx915_pos = $P10."pos"()
+    add $I11, rx918_pos, 1
+    gt $I11, rx918_eos, rx918_fail
+    sub $I11, rx918_pos, rx918_off
+    substr $S10, rx918_tgt, $I11, 1
+    ne $S10, "[", rx918_fail
+    add rx918_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."ws"()
+    unless $P10, rx918_fail
+    rx918_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."EXPR"()
-    unless $P10, rx915_fail
-    rx915_cur."!mark_push"(0, -1, 0, $P10)
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."EXPR"()
+    unless $P10, rx918_fail
+    rx918_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx915_pos = $P10."pos"()
+    rx918_pos = $P10."pos"()
   # rx literal  "]"
-    add $I11, rx915_pos, 1
-    gt $I11, rx915_eos, rx915_fail
-    sub $I11, rx915_pos, rx915_off
-    substr $S10, rx915_tgt, $I11, 1
-    ne $S10, "]", rx915_fail
-    add rx915_pos, 1
-.annotate "line", 441
+    add $I11, rx918_pos, 1
+    gt $I11, rx918_eos, rx918_fail
+    sub $I11, rx918_pos, rx918_off
+    substr $S10, rx918_tgt, $I11, 1
+    ne $S10, "]", rx918_fail
+    add rx918_pos, 1
+.annotate "line", 445
   # rx subrule "O" subtype=capture negate=
-    rx915_cur."!cursor_pos"(rx915_pos)
-    $P10 = rx915_cur."O"("%methodop")
-    unless $P10, rx915_fail
-    rx915_cur."!mark_push"(0, -1, 0, $P10)
+    rx918_cur."!cursor_pos"(rx918_pos)
+    $P10 = rx918_cur."O"("%methodop")
+    unless $P10, rx918_fail
+    rx918_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx915_pos = $P10."pos"()
-.annotate "line", 439
+    rx918_pos = $P10."pos"()
+.annotate "line", 443
   # rx pass
-    rx915_cur."!cursor_pass"(rx915_pos, "postcircumfix:sym<[ ]>")
-    rx915_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx915_pos)
-    .return (rx915_cur)
-  rx915_fail:
-.annotate "line", 417
-    (rx915_rep, rx915_pos, $I10, $P10) = rx915_cur."!mark_fail"(0)
-    lt rx915_pos, -1, rx915_done
-    eq rx915_pos, -1, rx915_fail
+    rx918_cur."!cursor_pass"(rx918_pos, "postcircumfix:sym<[ ]>")
+    rx918_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<[ ]>", " at pos=", rx918_pos)
+    .return (rx918_cur)
+  rx918_fail:
+.annotate "line", 421
+    (rx918_rep, rx918_pos, $I10, $P10) = rx918_cur."!mark_fail"(0)
+    lt rx918_pos, -1, rx918_done
+    eq rx918_pos, -1, rx918_fail
     jump $I10
-  rx915_done:
-    rx915_cur."!cursor_fail"()
-    rx915_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
-    .return (rx915_cur)
+  rx918_done:
+    rx918_cur."!cursor_fail"()
+    rx918_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<[ ]>")
+    .return (rx918_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("226_1267204702.05125") :method
-.annotate "line", 417
-    $P917 = self."!PREFIX__!subrule"("", "[")
-    new $P918, "ResizablePMCArray"
-    push $P918, $P917
-    .return ($P918)
+.sub "!PREFIX__postcircumfix:sym<[ ]>"  :subid("226_1271336396.90314") :method
+.annotate "line", 421
+    $P920 = self."!PREFIX__!subrule"("", "[")
+    new $P921, "ResizablePMCArray"
+    push $P921, $P920
+    .return ($P921)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<{ }>"  :subid("227_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx921_tgt
-    .local int rx921_pos
-    .local int rx921_off
-    .local int rx921_eos
-    .local int rx921_rep
-    .local pmc rx921_cur
-    (rx921_cur, rx921_pos, rx921_tgt) = self."!cursor_start"()
-    rx921_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx921_cur
-    .local pmc match
-    .lex "$/", match
-    length rx921_eos, rx921_tgt
-    set rx921_off, 0
-    lt rx921_pos, 2, rx921_start
-    sub rx921_off, rx921_pos, 1
-    substr rx921_tgt, rx921_tgt, rx921_off
-  rx921_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan925_done
-    goto rxscan925_scan
-  rxscan925_loop:
-    ($P10) = rx921_cur."from"()
-    inc $P10
-    set rx921_pos, $P10
-    ge rx921_pos, rx921_eos, rxscan925_done
-  rxscan925_scan:
-    set_addr $I10, rxscan925_loop
-    rx921_cur."!mark_push"(0, rx921_pos, $I10)
-  rxscan925_done:
-.annotate "line", 445
+.sub "postcircumfix:sym<{ }>"  :subid("227_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx924_tgt
+    .local int rx924_pos
+    .local int rx924_off
+    .local int rx924_eos
+    .local int rx924_rep
+    .local pmc rx924_cur
+    (rx924_cur, rx924_pos, rx924_tgt) = self."!cursor_start"()
+    rx924_cur."!cursor_debug"("START ", "postcircumfix:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx924_cur
+    .local pmc match
+    .lex "$/", match
+    length rx924_eos, rx924_tgt
+    set rx924_off, 0
+    lt rx924_pos, 2, rx924_start
+    sub rx924_off, rx924_pos, 1
+    substr rx924_tgt, rx924_tgt, rx924_off
+  rx924_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan928_done
+    goto rxscan928_scan
+  rxscan928_loop:
+    ($P10) = rx924_cur."from"()
+    inc $P10
+    set rx924_pos, $P10
+    ge rx924_pos, rx924_eos, rxscan928_done
+  rxscan928_scan:
+    set_addr $I10, rxscan928_loop
+    rx924_cur."!mark_push"(0, rx924_pos, $I10)
+  rxscan928_done:
+.annotate "line", 449
   # rx literal  "{"
-    add $I11, rx921_pos, 1
-    gt $I11, rx921_eos, rx921_fail
-    sub $I11, rx921_pos, rx921_off
-    substr $S10, rx921_tgt, $I11, 1
-    ne $S10, "{", rx921_fail
-    add rx921_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."ws"()
-    unless $P10, rx921_fail
-    rx921_pos = $P10."pos"()
+    add $I11, rx924_pos, 1
+    gt $I11, rx924_eos, rx924_fail
+    sub $I11, rx924_pos, rx924_off
+    substr $S10, rx924_tgt, $I11, 1
+    ne $S10, "{", rx924_fail
+    add rx924_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx924_cur."!cursor_pos"(rx924_pos)
+    $P10 = rx924_cur."ws"()
+    unless $P10, rx924_fail
+    rx924_pos = $P10."pos"()
   # rx subrule "EXPR" subtype=capture negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."EXPR"()
-    unless $P10, rx921_fail
-    rx921_cur."!mark_push"(0, -1, 0, $P10)
+    rx924_cur."!cursor_pos"(rx924_pos)
+    $P10 = rx924_cur."EXPR"()
+    unless $P10, rx924_fail
+    rx924_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx921_pos = $P10."pos"()
+    rx924_pos = $P10."pos"()
   # rx literal  "}"
-    add $I11, rx921_pos, 1
-    gt $I11, rx921_eos, rx921_fail
-    sub $I11, rx921_pos, rx921_off
-    substr $S10, rx921_tgt, $I11, 1
-    ne $S10, "}", rx921_fail
-    add rx921_pos, 1
-.annotate "line", 446
+    add $I11, rx924_pos, 1
+    gt $I11, rx924_eos, rx924_fail
+    sub $I11, rx924_pos, rx924_off
+    substr $S10, rx924_tgt, $I11, 1
+    ne $S10, "}", rx924_fail
+    add rx924_pos, 1
+.annotate "line", 450
   # rx subrule "O" subtype=capture negate=
-    rx921_cur."!cursor_pos"(rx921_pos)
-    $P10 = rx921_cur."O"("%methodop")
-    unless $P10, rx921_fail
-    rx921_cur."!mark_push"(0, -1, 0, $P10)
+    rx924_cur."!cursor_pos"(rx924_pos)
+    $P10 = rx924_cur."O"("%methodop")
+    unless $P10, rx924_fail
+    rx924_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx921_pos = $P10."pos"()
-.annotate "line", 444
+    rx924_pos = $P10."pos"()
+.annotate "line", 448
   # rx pass
-    rx921_cur."!cursor_pass"(rx921_pos, "postcircumfix:sym<{ }>")
-    rx921_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx921_pos)
-    .return (rx921_cur)
-  rx921_fail:
-.annotate "line", 417
-    (rx921_rep, rx921_pos, $I10, $P10) = rx921_cur."!mark_fail"(0)
-    lt rx921_pos, -1, rx921_done
-    eq rx921_pos, -1, rx921_fail
+    rx924_cur."!cursor_pass"(rx924_pos, "postcircumfix:sym<{ }>")
+    rx924_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<{ }>", " at pos=", rx924_pos)
+    .return (rx924_cur)
+  rx924_fail:
+.annotate "line", 421
+    (rx924_rep, rx924_pos, $I10, $P10) = rx924_cur."!mark_fail"(0)
+    lt rx924_pos, -1, rx924_done
+    eq rx924_pos, -1, rx924_fail
     jump $I10
-  rx921_done:
-    rx921_cur."!cursor_fail"()
-    rx921_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
-    .return (rx921_cur)
+  rx924_done:
+    rx924_cur."!cursor_fail"()
+    rx924_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<{ }>")
+    .return (rx924_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("228_1267204702.05125") :method
-.annotate "line", 417
-    $P923 = self."!PREFIX__!subrule"("", "{")
-    new $P924, "ResizablePMCArray"
-    push $P924, $P923
-    .return ($P924)
+.sub "!PREFIX__postcircumfix:sym<{ }>"  :subid("228_1271336396.90314") :method
+.annotate "line", 421
+    $P926 = self."!PREFIX__!subrule"("", "{")
+    new $P927, "ResizablePMCArray"
+    push $P927, $P926
+    .return ($P927)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<ang>"  :subid("229_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx927_tgt
-    .local int rx927_pos
-    .local int rx927_off
-    .local int rx927_eos
-    .local int rx927_rep
-    .local pmc rx927_cur
-    (rx927_cur, rx927_pos, rx927_tgt) = self."!cursor_start"()
-    rx927_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
-    .lex unicode:"$\x{a2}", rx927_cur
-    .local pmc match
-    .lex "$/", match
-    length rx927_eos, rx927_tgt
-    set rx927_off, 0
-    lt rx927_pos, 2, rx927_start
-    sub rx927_off, rx927_pos, 1
-    substr rx927_tgt, rx927_tgt, rx927_off
-  rx927_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan930_done
-    goto rxscan930_scan
-  rxscan930_loop:
-    ($P10) = rx927_cur."from"()
-    inc $P10
-    set rx927_pos, $P10
-    ge rx927_pos, rx927_eos, rxscan930_done
-  rxscan930_scan:
-    set_addr $I10, rxscan930_loop
-    rx927_cur."!mark_push"(0, rx927_pos, $I10)
-  rxscan930_done:
-.annotate "line", 450
+.sub "postcircumfix:sym<ang>"  :subid("229_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx930_tgt
+    .local int rx930_pos
+    .local int rx930_off
+    .local int rx930_eos
+    .local int rx930_rep
+    .local pmc rx930_cur
+    (rx930_cur, rx930_pos, rx930_tgt) = self."!cursor_start"()
+    rx930_cur."!cursor_debug"("START ", "postcircumfix:sym<ang>")
+    .lex unicode:"$\x{a2}", rx930_cur
+    .local pmc match
+    .lex "$/", match
+    length rx930_eos, rx930_tgt
+    set rx930_off, 0
+    lt rx930_pos, 2, rx930_start
+    sub rx930_off, rx930_pos, 1
+    substr rx930_tgt, rx930_tgt, rx930_off
+  rx930_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan933_done
+    goto rxscan933_scan
+  rxscan933_loop:
+    ($P10) = rx930_cur."from"()
+    inc $P10
+    set rx930_pos, $P10
+    ge rx930_pos, rx930_eos, rxscan933_done
+  rxscan933_scan:
+    set_addr $I10, rxscan933_loop
+    rx930_cur."!mark_push"(0, rx930_pos, $I10)
+  rxscan933_done:
+.annotate "line", 454
   # rx enumcharlist negate=0 zerowidth
-    ge rx927_pos, rx927_eos, rx927_fail
-    sub $I10, rx927_pos, rx927_off
-    substr $S10, rx927_tgt, $I10, 1
+    ge rx930_pos, rx930_eos, rx930_fail
+    sub $I10, rx930_pos, rx930_off
+    substr $S10, rx930_tgt, $I10, 1
     index $I11, "<", $S10
-    lt $I11, 0, rx927_fail
+    lt $I11, 0, rx930_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx927_cur."!cursor_pos"(rx927_pos)
-    $P10 = rx927_cur."quote_EXPR"(":q")
-    unless $P10, rx927_fail
-    rx927_cur."!mark_push"(0, -1, 0, $P10)
+    rx930_cur."!cursor_pos"(rx930_pos)
+    $P10 = rx930_cur."quote_EXPR"(":q")
+    unless $P10, rx930_fail
+    rx930_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx927_pos = $P10."pos"()
-.annotate "line", 451
+    rx930_pos = $P10."pos"()
+.annotate "line", 455
   # rx subrule "O" subtype=capture negate=
-    rx927_cur."!cursor_pos"(rx927_pos)
-    $P10 = rx927_cur."O"("%methodop")
-    unless $P10, rx927_fail
-    rx927_cur."!mark_push"(0, -1, 0, $P10)
+    rx930_cur."!cursor_pos"(rx930_pos)
+    $P10 = rx930_cur."O"("%methodop")
+    unless $P10, rx930_fail
+    rx930_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx927_pos = $P10."pos"()
-.annotate "line", 449
+    rx930_pos = $P10."pos"()
+.annotate "line", 453
   # rx pass
-    rx927_cur."!cursor_pass"(rx927_pos, "postcircumfix:sym<ang>")
-    rx927_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx927_pos)
-    .return (rx927_cur)
-  rx927_fail:
-.annotate "line", 417
-    (rx927_rep, rx927_pos, $I10, $P10) = rx927_cur."!mark_fail"(0)
-    lt rx927_pos, -1, rx927_done
-    eq rx927_pos, -1, rx927_fail
+    rx930_cur."!cursor_pass"(rx930_pos, "postcircumfix:sym<ang>")
+    rx930_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<ang>", " at pos=", rx930_pos)
+    .return (rx930_cur)
+  rx930_fail:
+.annotate "line", 421
+    (rx930_rep, rx930_pos, $I10, $P10) = rx930_cur."!mark_fail"(0)
+    lt rx930_pos, -1, rx930_done
+    eq rx930_pos, -1, rx930_fail
     jump $I10
-  rx927_done:
-    rx927_cur."!cursor_fail"()
-    rx927_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
-    .return (rx927_cur)
+  rx930_done:
+    rx930_cur."!cursor_fail"()
+    rx930_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<ang>")
+    .return (rx930_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("230_1267204702.05125") :method
-.annotate "line", 417
-    new $P929, "ResizablePMCArray"
-    push $P929, "<"
-    .return ($P929)
+.sub "!PREFIX__postcircumfix:sym<ang>"  :subid("230_1271336396.90314") :method
+.annotate "line", 421
+    new $P932, "ResizablePMCArray"
+    push $P932, "<"
+    .return ($P932)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postcircumfix:sym<( )>"  :subid("231_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx932_tgt
-    .local int rx932_pos
-    .local int rx932_off
-    .local int rx932_eos
-    .local int rx932_rep
-    .local pmc rx932_cur
-    (rx932_cur, rx932_pos, rx932_tgt) = self."!cursor_start"()
-    rx932_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
-    .lex unicode:"$\x{a2}", rx932_cur
-    .local pmc match
-    .lex "$/", match
-    length rx932_eos, rx932_tgt
-    set rx932_off, 0
-    lt rx932_pos, 2, rx932_start
-    sub rx932_off, rx932_pos, 1
-    substr rx932_tgt, rx932_tgt, rx932_off
-  rx932_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan936_done
-    goto rxscan936_scan
-  rxscan936_loop:
-    ($P10) = rx932_cur."from"()
-    inc $P10
-    set rx932_pos, $P10
-    ge rx932_pos, rx932_eos, rxscan936_done
-  rxscan936_scan:
-    set_addr $I10, rxscan936_loop
-    rx932_cur."!mark_push"(0, rx932_pos, $I10)
-  rxscan936_done:
-.annotate "line", 455
+.sub "postcircumfix:sym<( )>"  :subid("231_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx935_tgt
+    .local int rx935_pos
+    .local int rx935_off
+    .local int rx935_eos
+    .local int rx935_rep
+    .local pmc rx935_cur
+    (rx935_cur, rx935_pos, rx935_tgt) = self."!cursor_start"()
+    rx935_cur."!cursor_debug"("START ", "postcircumfix:sym<( )>")
+    .lex unicode:"$\x{a2}", rx935_cur
+    .local pmc match
+    .lex "$/", match
+    length rx935_eos, rx935_tgt
+    set rx935_off, 0
+    lt rx935_pos, 2, rx935_start
+    sub rx935_off, rx935_pos, 1
+    substr rx935_tgt, rx935_tgt, rx935_off
+  rx935_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan939_done
+    goto rxscan939_scan
+  rxscan939_loop:
+    ($P10) = rx935_cur."from"()
+    inc $P10
+    set rx935_pos, $P10
+    ge rx935_pos, rx935_eos, rxscan939_done
+  rxscan939_scan:
+    set_addr $I10, rxscan939_loop
+    rx935_cur."!mark_push"(0, rx935_pos, $I10)
+  rxscan939_done:
+.annotate "line", 459
   # rx literal  "("
-    add $I11, rx932_pos, 1
-    gt $I11, rx932_eos, rx932_fail
-    sub $I11, rx932_pos, rx932_off
-    substr $S10, rx932_tgt, $I11, 1
-    ne $S10, "(", rx932_fail
-    add rx932_pos, 1
-  # rx subrule "ws" subtype=method negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."ws"()
-    unless $P10, rx932_fail
-    rx932_pos = $P10."pos"()
+    add $I11, rx935_pos, 1
+    gt $I11, rx935_eos, rx935_fail
+    sub $I11, rx935_pos, rx935_off
+    substr $S10, rx935_tgt, $I11, 1
+    ne $S10, "(", rx935_fail
+    add rx935_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."ws"()
+    unless $P10, rx935_fail
+    rx935_pos = $P10."pos"()
   # rx subrule "arglist" subtype=capture negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."arglist"()
-    unless $P10, rx932_fail
-    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."arglist"()
+    unless $P10, rx935_fail
+    rx935_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx932_pos = $P10."pos"()
+    rx935_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx932_pos, 1
-    gt $I11, rx932_eos, rx932_fail
-    sub $I11, rx932_pos, rx932_off
-    substr $S10, rx932_tgt, $I11, 1
-    ne $S10, ")", rx932_fail
-    add rx932_pos, 1
-.annotate "line", 456
+    add $I11, rx935_pos, 1
+    gt $I11, rx935_eos, rx935_fail
+    sub $I11, rx935_pos, rx935_off
+    substr $S10, rx935_tgt, $I11, 1
+    ne $S10, ")", rx935_fail
+    add rx935_pos, 1
+.annotate "line", 460
   # rx subrule "O" subtype=capture negate=
-    rx932_cur."!cursor_pos"(rx932_pos)
-    $P10 = rx932_cur."O"("%methodop")
-    unless $P10, rx932_fail
-    rx932_cur."!mark_push"(0, -1, 0, $P10)
+    rx935_cur."!cursor_pos"(rx935_pos)
+    $P10 = rx935_cur."O"("%methodop")
+    unless $P10, rx935_fail
+    rx935_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx932_pos = $P10."pos"()
-.annotate "line", 454
+    rx935_pos = $P10."pos"()
+.annotate "line", 458
   # rx pass
-    rx932_cur."!cursor_pass"(rx932_pos, "postcircumfix:sym<( )>")
-    rx932_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx932_pos)
-    .return (rx932_cur)
-  rx932_fail:
-.annotate "line", 417
-    (rx932_rep, rx932_pos, $I10, $P10) = rx932_cur."!mark_fail"(0)
-    lt rx932_pos, -1, rx932_done
-    eq rx932_pos, -1, rx932_fail
+    rx935_cur."!cursor_pass"(rx935_pos, "postcircumfix:sym<( )>")
+    rx935_cur."!cursor_debug"("PASS  ", "postcircumfix:sym<( )>", " at pos=", rx935_pos)
+    .return (rx935_cur)
+  rx935_fail:
+.annotate "line", 421
+    (rx935_rep, rx935_pos, $I10, $P10) = rx935_cur."!mark_fail"(0)
+    lt rx935_pos, -1, rx935_done
+    eq rx935_pos, -1, rx935_fail
     jump $I10
-  rx932_done:
-    rx932_cur."!cursor_fail"()
-    rx932_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
-    .return (rx932_cur)
+  rx935_done:
+    rx935_cur."!cursor_fail"()
+    rx935_cur."!cursor_debug"("FAIL  ", "postcircumfix:sym<( )>")
+    .return (rx935_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("232_1267204702.05125") :method
-.annotate "line", 417
-    $P934 = self."!PREFIX__!subrule"("", "(")
-    new $P935, "ResizablePMCArray"
-    push $P935, $P934
-    .return ($P935)
+.sub "!PREFIX__postcircumfix:sym<( )>"  :subid("232_1271336396.90314") :method
+.annotate "line", 421
+    $P937 = self."!PREFIX__!subrule"("", "(")
+    new $P938, "ResizablePMCArray"
+    push $P938, $P937
+    .return ($P938)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<.>"  :subid("233_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx938_tgt
-    .local int rx938_pos
-    .local int rx938_off
-    .local int rx938_eos
-    .local int rx938_rep
-    .local pmc rx938_cur
-    (rx938_cur, rx938_pos, rx938_tgt) = self."!cursor_start"()
-    rx938_cur."!cursor_debug"("START ", "postfix:sym<.>")
-    .lex unicode:"$\x{a2}", rx938_cur
-    .local pmc match
-    .lex "$/", match
-    length rx938_eos, rx938_tgt
-    set rx938_off, 0
-    lt rx938_pos, 2, rx938_start
-    sub rx938_off, rx938_pos, 1
-    substr rx938_tgt, rx938_tgt, rx938_off
-  rx938_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan942_done
-    goto rxscan942_scan
-  rxscan942_loop:
-    ($P10) = rx938_cur."from"()
-    inc $P10
-    set rx938_pos, $P10
-    ge rx938_pos, rx938_eos, rxscan942_done
-  rxscan942_scan:
-    set_addr $I10, rxscan942_loop
-    rx938_cur."!mark_push"(0, rx938_pos, $I10)
-  rxscan942_done:
-.annotate "line", 459
+.sub "postfix:sym<.>"  :subid("233_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx941_tgt
+    .local int rx941_pos
+    .local int rx941_off
+    .local int rx941_eos
+    .local int rx941_rep
+    .local pmc rx941_cur
+    (rx941_cur, rx941_pos, rx941_tgt) = self."!cursor_start"()
+    rx941_cur."!cursor_debug"("START ", "postfix:sym<.>")
+    .lex unicode:"$\x{a2}", rx941_cur
+    .local pmc match
+    .lex "$/", match
+    length rx941_eos, rx941_tgt
+    set rx941_off, 0
+    lt rx941_pos, 2, rx941_start
+    sub rx941_off, rx941_pos, 1
+    substr rx941_tgt, rx941_tgt, rx941_off
+  rx941_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan945_done
+    goto rxscan945_scan
+  rxscan945_loop:
+    ($P10) = rx941_cur."from"()
+    inc $P10
+    set rx941_pos, $P10
+    ge rx941_pos, rx941_eos, rxscan945_done
+  rxscan945_scan:
+    set_addr $I10, rxscan945_loop
+    rx941_cur."!mark_push"(0, rx941_pos, $I10)
+  rxscan945_done:
+.annotate "line", 463
   # rx subrule "dotty" subtype=capture negate=
-    rx938_cur."!cursor_pos"(rx938_pos)
-    $P10 = rx938_cur."dotty"()
-    unless $P10, rx938_fail
-    rx938_cur."!mark_push"(0, -1, 0, $P10)
+    rx941_cur."!cursor_pos"(rx941_pos)
+    $P10 = rx941_cur."dotty"()
+    unless $P10, rx941_fail
+    rx941_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dotty")
-    rx938_pos = $P10."pos"()
+    rx941_pos = $P10."pos"()
   # rx subrule "O" subtype=capture negate=
-    rx938_cur."!cursor_pos"(rx938_pos)
-    $P10 = rx938_cur."O"("%methodop")
-    unless $P10, rx938_fail
-    rx938_cur."!mark_push"(0, -1, 0, $P10)
+    rx941_cur."!cursor_pos"(rx941_pos)
+    $P10 = rx941_cur."O"("%methodop")
+    unless $P10, rx941_fail
+    rx941_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx938_pos = $P10."pos"()
+    rx941_pos = $P10."pos"()
   # rx pass
-    rx938_cur."!cursor_pass"(rx938_pos, "postfix:sym<.>")
-    rx938_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx938_pos)
-    .return (rx938_cur)
-  rx938_fail:
-.annotate "line", 417
-    (rx938_rep, rx938_pos, $I10, $P10) = rx938_cur."!mark_fail"(0)
-    lt rx938_pos, -1, rx938_done
-    eq rx938_pos, -1, rx938_fail
+    rx941_cur."!cursor_pass"(rx941_pos, "postfix:sym<.>")
+    rx941_cur."!cursor_debug"("PASS  ", "postfix:sym<.>", " at pos=", rx941_pos)
+    .return (rx941_cur)
+  rx941_fail:
+.annotate "line", 421
+    (rx941_rep, rx941_pos, $I10, $P10) = rx941_cur."!mark_fail"(0)
+    lt rx941_pos, -1, rx941_done
+    eq rx941_pos, -1, rx941_fail
     jump $I10
-  rx938_done:
-    rx938_cur."!cursor_fail"()
-    rx938_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
-    .return (rx938_cur)
+  rx941_done:
+    rx941_cur."!cursor_fail"()
+    rx941_cur."!cursor_debug"("FAIL  ", "postfix:sym<.>")
+    .return (rx941_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<.>"  :subid("234_1267204702.05125") :method
-.annotate "line", 417
-    $P940 = self."!PREFIX__!subrule"("dotty", "")
-    new $P941, "ResizablePMCArray"
-    push $P941, $P940
-    .return ($P941)
+.sub "!PREFIX__postfix:sym<.>"  :subid("234_1271336396.90314") :method
+.annotate "line", 421
+    $P943 = self."!PREFIX__!subrule"("dotty", "")
+    new $P944, "ResizablePMCArray"
+    push $P944, $P943
+    .return ($P944)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<++>"  :subid("235_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx944_tgt
-    .local int rx944_pos
-    .local int rx944_off
-    .local int rx944_eos
-    .local int rx944_rep
-    .local pmc rx944_cur
-    (rx944_cur, rx944_pos, rx944_tgt) = self."!cursor_start"()
-    rx944_cur."!cursor_debug"("START ", "prefix:sym<++>")
-    .lex unicode:"$\x{a2}", rx944_cur
-    .local pmc match
-    .lex "$/", match
-    length rx944_eos, rx944_tgt
-    set rx944_off, 0
-    lt rx944_pos, 2, rx944_start
-    sub rx944_off, rx944_pos, 1
-    substr rx944_tgt, rx944_tgt, rx944_off
-  rx944_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan948_done
-    goto rxscan948_scan
-  rxscan948_loop:
-    ($P10) = rx944_cur."from"()
-    inc $P10
-    set rx944_pos, $P10
-    ge rx944_pos, rx944_eos, rxscan948_done
-  rxscan948_scan:
-    set_addr $I10, rxscan948_loop
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
-  rxscan948_done:
-.annotate "line", 461
+.sub "prefix:sym<++>"  :subid("235_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx947_tgt
+    .local int rx947_pos
+    .local int rx947_off
+    .local int rx947_eos
+    .local int rx947_rep
+    .local pmc rx947_cur
+    (rx947_cur, rx947_pos, rx947_tgt) = self."!cursor_start"()
+    rx947_cur."!cursor_debug"("START ", "prefix:sym<++>")
+    .lex unicode:"$\x{a2}", rx947_cur
+    .local pmc match
+    .lex "$/", match
+    length rx947_eos, rx947_tgt
+    set rx947_off, 0
+    lt rx947_pos, 2, rx947_start
+    sub rx947_off, rx947_pos, 1
+    substr rx947_tgt, rx947_tgt, rx947_off
+  rx947_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan951_done
+    goto rxscan951_scan
+  rxscan951_loop:
+    ($P10) = rx947_cur."from"()
+    inc $P10
+    set rx947_pos, $P10
+    ge rx947_pos, rx947_eos, rxscan951_done
+  rxscan951_scan:
+    set_addr $I10, rxscan951_loop
+    rx947_cur."!mark_push"(0, rx947_pos, $I10)
+  rxscan951_done:
+.annotate "line", 465
   # rx subcapture "sym"
-    set_addr $I10, rxcap_949_fail
-    rx944_cur."!mark_push"(0, rx944_pos, $I10)
+    set_addr $I10, rxcap_952_fail
+    rx947_cur."!mark_push"(0, rx947_pos, $I10)
   # rx literal  "++"
-    add $I11, rx944_pos, 2
-    gt $I11, rx944_eos, rx944_fail
-    sub $I11, rx944_pos, rx944_off
-    substr $S10, rx944_tgt, $I11, 2
-    ne $S10, "++", rx944_fail
-    add rx944_pos, 2
-    set_addr $I10, rxcap_949_fail
-    ($I12, $I11) = rx944_cur."!mark_peek"($I10)
-    rx944_cur."!cursor_pos"($I11)
-    ($P10) = rx944_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx944_pos, "")
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx947_pos, 2
+    gt $I11, rx947_eos, rx947_fail
+    sub $I11, rx947_pos, rx947_off
+    substr $S10, rx947_tgt, $I11, 2
+    ne $S10, "++", rx947_fail
+    add rx947_pos, 2
+    set_addr $I10, rxcap_952_fail
+    ($I12, $I11) = rx947_cur."!mark_peek"($I10)
+    rx947_cur."!cursor_pos"($I11)
+    ($P10) = rx947_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx947_pos, "")
+    rx947_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_949_done
-  rxcap_949_fail:
-    goto rx944_fail
-  rxcap_949_done:
+    goto rxcap_952_done
+  rxcap_952_fail:
+    goto rx947_fail
+  rxcap_952_done:
   # rx subrule "O" subtype=capture negate=
-    rx944_cur."!cursor_pos"(rx944_pos)
-    $P10 = rx944_cur."O"("%autoincrement, :pirop<inc>")
-    unless $P10, rx944_fail
-    rx944_cur."!mark_push"(0, -1, 0, $P10)
+    rx947_cur."!cursor_pos"(rx947_pos)
+    $P10 = rx947_cur."O"("%autoincrement, :pirop<inc>")
+    unless $P10, rx947_fail
+    rx947_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx944_pos = $P10."pos"()
+    rx947_pos = $P10."pos"()
   # rx pass
-    rx944_cur."!cursor_pass"(rx944_pos, "prefix:sym<++>")
-    rx944_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx944_pos)
-    .return (rx944_cur)
-  rx944_fail:
-.annotate "line", 417
-    (rx944_rep, rx944_pos, $I10, $P10) = rx944_cur."!mark_fail"(0)
-    lt rx944_pos, -1, rx944_done
-    eq rx944_pos, -1, rx944_fail
+    rx947_cur."!cursor_pass"(rx947_pos, "prefix:sym<++>")
+    rx947_cur."!cursor_debug"("PASS  ", "prefix:sym<++>", " at pos=", rx947_pos)
+    .return (rx947_cur)
+  rx947_fail:
+.annotate "line", 421
+    (rx947_rep, rx947_pos, $I10, $P10) = rx947_cur."!mark_fail"(0)
+    lt rx947_pos, -1, rx947_done
+    eq rx947_pos, -1, rx947_fail
     jump $I10
-  rx944_done:
-    rx944_cur."!cursor_fail"()
-    rx944_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
-    .return (rx944_cur)
+  rx947_done:
+    rx947_cur."!cursor_fail"()
+    rx947_cur."!cursor_debug"("FAIL  ", "prefix:sym<++>")
+    .return (rx947_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<++>"  :subid("236_1267204702.05125") :method
-.annotate "line", 417
-    $P946 = self."!PREFIX__!subrule"("O", "++")
-    new $P947, "ResizablePMCArray"
-    push $P947, $P946
-    .return ($P947)
+.sub "!PREFIX__prefix:sym<++>"  :subid("236_1271336396.90314") :method
+.annotate "line", 421
+    $P949 = self."!PREFIX__!subrule"("O", "++")
+    new $P950, "ResizablePMCArray"
+    push $P950, $P949
+    .return ($P950)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<-->"  :subid("237_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx951_tgt
-    .local int rx951_pos
-    .local int rx951_off
-    .local int rx951_eos
-    .local int rx951_rep
-    .local pmc rx951_cur
-    (rx951_cur, rx951_pos, rx951_tgt) = self."!cursor_start"()
-    rx951_cur."!cursor_debug"("START ", "prefix:sym<-->")
-    .lex unicode:"$\x{a2}", rx951_cur
-    .local pmc match
-    .lex "$/", match
-    length rx951_eos, rx951_tgt
-    set rx951_off, 0
-    lt rx951_pos, 2, rx951_start
-    sub rx951_off, rx951_pos, 1
-    substr rx951_tgt, rx951_tgt, rx951_off
-  rx951_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan955_done
-    goto rxscan955_scan
-  rxscan955_loop:
-    ($P10) = rx951_cur."from"()
-    inc $P10
-    set rx951_pos, $P10
-    ge rx951_pos, rx951_eos, rxscan955_done
-  rxscan955_scan:
-    set_addr $I10, rxscan955_loop
-    rx951_cur."!mark_push"(0, rx951_pos, $I10)
-  rxscan955_done:
-.annotate "line", 462
+.sub "prefix:sym<-->"  :subid("237_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx954_tgt
+    .local int rx954_pos
+    .local int rx954_off
+    .local int rx954_eos
+    .local int rx954_rep
+    .local pmc rx954_cur
+    (rx954_cur, rx954_pos, rx954_tgt) = self."!cursor_start"()
+    rx954_cur."!cursor_debug"("START ", "prefix:sym<-->")
+    .lex unicode:"$\x{a2}", rx954_cur
+    .local pmc match
+    .lex "$/", match
+    length rx954_eos, rx954_tgt
+    set rx954_off, 0
+    lt rx954_pos, 2, rx954_start
+    sub rx954_off, rx954_pos, 1
+    substr rx954_tgt, rx954_tgt, rx954_off
+  rx954_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan958_done
+    goto rxscan958_scan
+  rxscan958_loop:
+    ($P10) = rx954_cur."from"()
+    inc $P10
+    set rx954_pos, $P10
+    ge rx954_pos, rx954_eos, rxscan958_done
+  rxscan958_scan:
+    set_addr $I10, rxscan958_loop
+    rx954_cur."!mark_push"(0, rx954_pos, $I10)
+  rxscan958_done:
+.annotate "line", 466
   # rx subcapture "sym"
-    set_addr $I10, rxcap_956_fail
-    rx951_cur."!mark_push"(0, rx951_pos, $I10)
+    set_addr $I10, rxcap_959_fail
+    rx954_cur."!mark_push"(0, rx954_pos, $I10)
   # rx literal  "--"
-    add $I11, rx951_pos, 2
-    gt $I11, rx951_eos, rx951_fail
-    sub $I11, rx951_pos, rx951_off
-    substr $S10, rx951_tgt, $I11, 2
-    ne $S10, "--", rx951_fail
-    add rx951_pos, 2
-    set_addr $I10, rxcap_956_fail
-    ($I12, $I11) = rx951_cur."!mark_peek"($I10)
-    rx951_cur."!cursor_pos"($I11)
-    ($P10) = rx951_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx951_pos, "")
-    rx951_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx954_pos, 2
+    gt $I11, rx954_eos, rx954_fail
+    sub $I11, rx954_pos, rx954_off
+    substr $S10, rx954_tgt, $I11, 2
+    ne $S10, "--", rx954_fail
+    add rx954_pos, 2
+    set_addr $I10, rxcap_959_fail
+    ($I12, $I11) = rx954_cur."!mark_peek"($I10)
+    rx954_cur."!cursor_pos"($I11)
+    ($P10) = rx954_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx954_pos, "")
+    rx954_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_956_done
-  rxcap_956_fail:
-    goto rx951_fail
-  rxcap_956_done:
+    goto rxcap_959_done
+  rxcap_959_fail:
+    goto rx954_fail
+  rxcap_959_done:
   # rx subrule "O" subtype=capture negate=
-    rx951_cur."!cursor_pos"(rx951_pos)
-    $P10 = rx951_cur."O"("%autoincrement, :pirop<dec>")
-    unless $P10, rx951_fail
-    rx951_cur."!mark_push"(0, -1, 0, $P10)
+    rx954_cur."!cursor_pos"(rx954_pos)
+    $P10 = rx954_cur."O"("%autoincrement, :pirop<dec>")
+    unless $P10, rx954_fail
+    rx954_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx951_pos = $P10."pos"()
+    rx954_pos = $P10."pos"()
   # rx pass
-    rx951_cur."!cursor_pass"(rx951_pos, "prefix:sym<-->")
-    rx951_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx951_pos)
-    .return (rx951_cur)
-  rx951_fail:
-.annotate "line", 417
-    (rx951_rep, rx951_pos, $I10, $P10) = rx951_cur."!mark_fail"(0)
-    lt rx951_pos, -1, rx951_done
-    eq rx951_pos, -1, rx951_fail
+    rx954_cur."!cursor_pass"(rx954_pos, "prefix:sym<-->")
+    rx954_cur."!cursor_debug"("PASS  ", "prefix:sym<-->", " at pos=", rx954_pos)
+    .return (rx954_cur)
+  rx954_fail:
+.annotate "line", 421
+    (rx954_rep, rx954_pos, $I10, $P10) = rx954_cur."!mark_fail"(0)
+    lt rx954_pos, -1, rx954_done
+    eq rx954_pos, -1, rx954_fail
     jump $I10
-  rx951_done:
-    rx951_cur."!cursor_fail"()
-    rx951_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
-    .return (rx951_cur)
+  rx954_done:
+    rx954_cur."!cursor_fail"()
+    rx954_cur."!cursor_debug"("FAIL  ", "prefix:sym<-->")
+    .return (rx954_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<-->"  :subid("238_1267204702.05125") :method
-.annotate "line", 417
-    $P953 = self."!PREFIX__!subrule"("O", "--")
-    new $P954, "ResizablePMCArray"
-    push $P954, $P953
-    .return ($P954)
+.sub "!PREFIX__prefix:sym<-->"  :subid("238_1271336396.90314") :method
+.annotate "line", 421
+    $P956 = self."!PREFIX__!subrule"("O", "--")
+    new $P957, "ResizablePMCArray"
+    push $P957, $P956
+    .return ($P957)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<++>"  :subid("239_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx958_tgt
-    .local int rx958_pos
-    .local int rx958_off
-    .local int rx958_eos
-    .local int rx958_rep
-    .local pmc rx958_cur
-    (rx958_cur, rx958_pos, rx958_tgt) = self."!cursor_start"()
-    rx958_cur."!cursor_debug"("START ", "postfix:sym<++>")
-    .lex unicode:"$\x{a2}", rx958_cur
-    .local pmc match
-    .lex "$/", match
-    length rx958_eos, rx958_tgt
-    set rx958_off, 0
-    lt rx958_pos, 2, rx958_start
-    sub rx958_off, rx958_pos, 1
-    substr rx958_tgt, rx958_tgt, rx958_off
-  rx958_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan962_done
-    goto rxscan962_scan
-  rxscan962_loop:
-    ($P10) = rx958_cur."from"()
-    inc $P10
-    set rx958_pos, $P10
-    ge rx958_pos, rx958_eos, rxscan962_done
-  rxscan962_scan:
-    set_addr $I10, rxscan962_loop
-    rx958_cur."!mark_push"(0, rx958_pos, $I10)
-  rxscan962_done:
-.annotate "line", 465
+.sub "postfix:sym<++>"  :subid("239_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx961_tgt
+    .local int rx961_pos
+    .local int rx961_off
+    .local int rx961_eos
+    .local int rx961_rep
+    .local pmc rx961_cur
+    (rx961_cur, rx961_pos, rx961_tgt) = self."!cursor_start"()
+    rx961_cur."!cursor_debug"("START ", "postfix:sym<++>")
+    .lex unicode:"$\x{a2}", rx961_cur
+    .local pmc match
+    .lex "$/", match
+    length rx961_eos, rx961_tgt
+    set rx961_off, 0
+    lt rx961_pos, 2, rx961_start
+    sub rx961_off, rx961_pos, 1
+    substr rx961_tgt, rx961_tgt, rx961_off
+  rx961_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan965_done
+    goto rxscan965_scan
+  rxscan965_loop:
+    ($P10) = rx961_cur."from"()
+    inc $P10
+    set rx961_pos, $P10
+    ge rx961_pos, rx961_eos, rxscan965_done
+  rxscan965_scan:
+    set_addr $I10, rxscan965_loop
+    rx961_cur."!mark_push"(0, rx961_pos, $I10)
+  rxscan965_done:
+.annotate "line", 469
   # rx subcapture "sym"
-    set_addr $I10, rxcap_963_fail
-    rx958_cur."!mark_push"(0, rx958_pos, $I10)
+    set_addr $I10, rxcap_966_fail
+    rx961_cur."!mark_push"(0, rx961_pos, $I10)
   # rx literal  "++"
-    add $I11, rx958_pos, 2
-    gt $I11, rx958_eos, rx958_fail
-    sub $I11, rx958_pos, rx958_off
-    substr $S10, rx958_tgt, $I11, 2
-    ne $S10, "++", rx958_fail
-    add rx958_pos, 2
-    set_addr $I10, rxcap_963_fail
-    ($I12, $I11) = rx958_cur."!mark_peek"($I10)
-    rx958_cur."!cursor_pos"($I11)
-    ($P10) = rx958_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx958_pos, "")
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx961_pos, 2
+    gt $I11, rx961_eos, rx961_fail
+    sub $I11, rx961_pos, rx961_off
+    substr $S10, rx961_tgt, $I11, 2
+    ne $S10, "++", rx961_fail
+    add rx961_pos, 2
+    set_addr $I10, rxcap_966_fail
+    ($I12, $I11) = rx961_cur."!mark_peek"($I10)
+    rx961_cur."!cursor_pos"($I11)
+    ($P10) = rx961_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx961_pos, "")
+    rx961_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_963_done
-  rxcap_963_fail:
-    goto rx958_fail
-  rxcap_963_done:
+    goto rxcap_966_done
+  rxcap_966_fail:
+    goto rx961_fail
+  rxcap_966_done:
   # rx subrule "O" subtype=capture negate=
-    rx958_cur."!cursor_pos"(rx958_pos)
-    $P10 = rx958_cur."O"("%autoincrement")
-    unless $P10, rx958_fail
-    rx958_cur."!mark_push"(0, -1, 0, $P10)
+    rx961_cur."!cursor_pos"(rx961_pos)
+    $P10 = rx961_cur."O"("%autoincrement")
+    unless $P10, rx961_fail
+    rx961_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx958_pos = $P10."pos"()
+    rx961_pos = $P10."pos"()
   # rx pass
-    rx958_cur."!cursor_pass"(rx958_pos, "postfix:sym<++>")
-    rx958_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx958_pos)
-    .return (rx958_cur)
-  rx958_fail:
-.annotate "line", 417
-    (rx958_rep, rx958_pos, $I10, $P10) = rx958_cur."!mark_fail"(0)
-    lt rx958_pos, -1, rx958_done
-    eq rx958_pos, -1, rx958_fail
+    rx961_cur."!cursor_pass"(rx961_pos, "postfix:sym<++>")
+    rx961_cur."!cursor_debug"("PASS  ", "postfix:sym<++>", " at pos=", rx961_pos)
+    .return (rx961_cur)
+  rx961_fail:
+.annotate "line", 421
+    (rx961_rep, rx961_pos, $I10, $P10) = rx961_cur."!mark_fail"(0)
+    lt rx961_pos, -1, rx961_done
+    eq rx961_pos, -1, rx961_fail
     jump $I10
-  rx958_done:
-    rx958_cur."!cursor_fail"()
-    rx958_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
-    .return (rx958_cur)
+  rx961_done:
+    rx961_cur."!cursor_fail"()
+    rx961_cur."!cursor_debug"("FAIL  ", "postfix:sym<++>")
+    .return (rx961_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<++>"  :subid("240_1267204702.05125") :method
-.annotate "line", 417
-    $P960 = self."!PREFIX__!subrule"("O", "++")
-    new $P961, "ResizablePMCArray"
-    push $P961, $P960
-    .return ($P961)
+.sub "!PREFIX__postfix:sym<++>"  :subid("240_1271336396.90314") :method
+.annotate "line", 421
+    $P963 = self."!PREFIX__!subrule"("O", "++")
+    new $P964, "ResizablePMCArray"
+    push $P964, $P963
+    .return ($P964)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "postfix:sym<-->"  :subid("241_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx965_tgt
-    .local int rx965_pos
-    .local int rx965_off
-    .local int rx965_eos
-    .local int rx965_rep
-    .local pmc rx965_cur
-    (rx965_cur, rx965_pos, rx965_tgt) = self."!cursor_start"()
-    rx965_cur."!cursor_debug"("START ", "postfix:sym<-->")
-    .lex unicode:"$\x{a2}", rx965_cur
-    .local pmc match
-    .lex "$/", match
-    length rx965_eos, rx965_tgt
-    set rx965_off, 0
-    lt rx965_pos, 2, rx965_start
-    sub rx965_off, rx965_pos, 1
-    substr rx965_tgt, rx965_tgt, rx965_off
-  rx965_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan969_done
-    goto rxscan969_scan
-  rxscan969_loop:
-    ($P10) = rx965_cur."from"()
-    inc $P10
-    set rx965_pos, $P10
-    ge rx965_pos, rx965_eos, rxscan969_done
-  rxscan969_scan:
-    set_addr $I10, rxscan969_loop
-    rx965_cur."!mark_push"(0, rx965_pos, $I10)
-  rxscan969_done:
-.annotate "line", 466
+.sub "postfix:sym<-->"  :subid("241_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx968_tgt
+    .local int rx968_pos
+    .local int rx968_off
+    .local int rx968_eos
+    .local int rx968_rep
+    .local pmc rx968_cur
+    (rx968_cur, rx968_pos, rx968_tgt) = self."!cursor_start"()
+    rx968_cur."!cursor_debug"("START ", "postfix:sym<-->")
+    .lex unicode:"$\x{a2}", rx968_cur
+    .local pmc match
+    .lex "$/", match
+    length rx968_eos, rx968_tgt
+    set rx968_off, 0
+    lt rx968_pos, 2, rx968_start
+    sub rx968_off, rx968_pos, 1
+    substr rx968_tgt, rx968_tgt, rx968_off
+  rx968_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan972_done
+    goto rxscan972_scan
+  rxscan972_loop:
+    ($P10) = rx968_cur."from"()
+    inc $P10
+    set rx968_pos, $P10
+    ge rx968_pos, rx968_eos, rxscan972_done
+  rxscan972_scan:
+    set_addr $I10, rxscan972_loop
+    rx968_cur."!mark_push"(0, rx968_pos, $I10)
+  rxscan972_done:
+.annotate "line", 470
   # rx subcapture "sym"
-    set_addr $I10, rxcap_970_fail
-    rx965_cur."!mark_push"(0, rx965_pos, $I10)
+    set_addr $I10, rxcap_973_fail
+    rx968_cur."!mark_push"(0, rx968_pos, $I10)
   # rx literal  "--"
-    add $I11, rx965_pos, 2
-    gt $I11, rx965_eos, rx965_fail
-    sub $I11, rx965_pos, rx965_off
-    substr $S10, rx965_tgt, $I11, 2
-    ne $S10, "--", rx965_fail
-    add rx965_pos, 2
-    set_addr $I10, rxcap_970_fail
-    ($I12, $I11) = rx965_cur."!mark_peek"($I10)
-    rx965_cur."!cursor_pos"($I11)
-    ($P10) = rx965_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx965_pos, "")
-    rx965_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx968_pos, 2
+    gt $I11, rx968_eos, rx968_fail
+    sub $I11, rx968_pos, rx968_off
+    substr $S10, rx968_tgt, $I11, 2
+    ne $S10, "--", rx968_fail
+    add rx968_pos, 2
+    set_addr $I10, rxcap_973_fail
+    ($I12, $I11) = rx968_cur."!mark_peek"($I10)
+    rx968_cur."!cursor_pos"($I11)
+    ($P10) = rx968_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx968_pos, "")
+    rx968_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_970_done
-  rxcap_970_fail:
-    goto rx965_fail
-  rxcap_970_done:
+    goto rxcap_973_done
+  rxcap_973_fail:
+    goto rx968_fail
+  rxcap_973_done:
   # rx subrule "O" subtype=capture negate=
-    rx965_cur."!cursor_pos"(rx965_pos)
-    $P10 = rx965_cur."O"("%autoincrement")
-    unless $P10, rx965_fail
-    rx965_cur."!mark_push"(0, -1, 0, $P10)
+    rx968_cur."!cursor_pos"(rx968_pos)
+    $P10 = rx968_cur."O"("%autoincrement")
+    unless $P10, rx968_fail
+    rx968_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx965_pos = $P10."pos"()
+    rx968_pos = $P10."pos"()
   # rx pass
-    rx965_cur."!cursor_pass"(rx965_pos, "postfix:sym<-->")
-    rx965_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx965_pos)
-    .return (rx965_cur)
-  rx965_fail:
-.annotate "line", 417
-    (rx965_rep, rx965_pos, $I10, $P10) = rx965_cur."!mark_fail"(0)
-    lt rx965_pos, -1, rx965_done
-    eq rx965_pos, -1, rx965_fail
+    rx968_cur."!cursor_pass"(rx968_pos, "postfix:sym<-->")
+    rx968_cur."!cursor_debug"("PASS  ", "postfix:sym<-->", " at pos=", rx968_pos)
+    .return (rx968_cur)
+  rx968_fail:
+.annotate "line", 421
+    (rx968_rep, rx968_pos, $I10, $P10) = rx968_cur."!mark_fail"(0)
+    lt rx968_pos, -1, rx968_done
+    eq rx968_pos, -1, rx968_fail
     jump $I10
-  rx965_done:
-    rx965_cur."!cursor_fail"()
-    rx965_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
-    .return (rx965_cur)
+  rx968_done:
+    rx968_cur."!cursor_fail"()
+    rx968_cur."!cursor_debug"("FAIL  ", "postfix:sym<-->")
+    .return (rx968_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__postfix:sym<-->"  :subid("242_1267204702.05125") :method
-.annotate "line", 417
-    $P967 = self."!PREFIX__!subrule"("O", "--")
-    new $P968, "ResizablePMCArray"
-    push $P968, $P967
-    .return ($P968)
+.sub "!PREFIX__postfix:sym<-->"  :subid("242_1271336396.90314") :method
+.annotate "line", 421
+    $P970 = self."!PREFIX__!subrule"("O", "--")
+    new $P971, "ResizablePMCArray"
+    push $P971, $P970
+    .return ($P971)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<**>"  :subid("243_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx972_tgt
-    .local int rx972_pos
-    .local int rx972_off
-    .local int rx972_eos
-    .local int rx972_rep
-    .local pmc rx972_cur
-    (rx972_cur, rx972_pos, rx972_tgt) = self."!cursor_start"()
-    rx972_cur."!cursor_debug"("START ", "infix:sym<**>")
-    .lex unicode:"$\x{a2}", rx972_cur
-    .local pmc match
-    .lex "$/", match
-    length rx972_eos, rx972_tgt
-    set rx972_off, 0
-    lt rx972_pos, 2, rx972_start
-    sub rx972_off, rx972_pos, 1
-    substr rx972_tgt, rx972_tgt, rx972_off
-  rx972_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan976_done
-    goto rxscan976_scan
-  rxscan976_loop:
-    ($P10) = rx972_cur."from"()
-    inc $P10
-    set rx972_pos, $P10
-    ge rx972_pos, rx972_eos, rxscan976_done
-  rxscan976_scan:
-    set_addr $I10, rxscan976_loop
-    rx972_cur."!mark_push"(0, rx972_pos, $I10)
-  rxscan976_done:
-.annotate "line", 468
+.sub "infix:sym<**>"  :subid("243_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx975_tgt
+    .local int rx975_pos
+    .local int rx975_off
+    .local int rx975_eos
+    .local int rx975_rep
+    .local pmc rx975_cur
+    (rx975_cur, rx975_pos, rx975_tgt) = self."!cursor_start"()
+    rx975_cur."!cursor_debug"("START ", "infix:sym<**>")
+    .lex unicode:"$\x{a2}", rx975_cur
+    .local pmc match
+    .lex "$/", match
+    length rx975_eos, rx975_tgt
+    set rx975_off, 0
+    lt rx975_pos, 2, rx975_start
+    sub rx975_off, rx975_pos, 1
+    substr rx975_tgt, rx975_tgt, rx975_off
+  rx975_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan979_done
+    goto rxscan979_scan
+  rxscan979_loop:
+    ($P10) = rx975_cur."from"()
+    inc $P10
+    set rx975_pos, $P10
+    ge rx975_pos, rx975_eos, rxscan979_done
+  rxscan979_scan:
+    set_addr $I10, rxscan979_loop
+    rx975_cur."!mark_push"(0, rx975_pos, $I10)
+  rxscan979_done:
+.annotate "line", 472
   # rx subcapture "sym"
-    set_addr $I10, rxcap_977_fail
-    rx972_cur."!mark_push"(0, rx972_pos, $I10)
+    set_addr $I10, rxcap_980_fail
+    rx975_cur."!mark_push"(0, rx975_pos, $I10)
   # rx literal  "**"
-    add $I11, rx972_pos, 2
-    gt $I11, rx972_eos, rx972_fail
-    sub $I11, rx972_pos, rx972_off
-    substr $S10, rx972_tgt, $I11, 2
-    ne $S10, "**", rx972_fail
-    add rx972_pos, 2
-    set_addr $I10, rxcap_977_fail
-    ($I12, $I11) = rx972_cur."!mark_peek"($I10)
-    rx972_cur."!cursor_pos"($I11)
-    ($P10) = rx972_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx972_pos, "")
-    rx972_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx975_pos, 2
+    gt $I11, rx975_eos, rx975_fail
+    sub $I11, rx975_pos, rx975_off
+    substr $S10, rx975_tgt, $I11, 2
+    ne $S10, "**", rx975_fail
+    add rx975_pos, 2
+    set_addr $I10, rxcap_980_fail
+    ($I12, $I11) = rx975_cur."!mark_peek"($I10)
+    rx975_cur."!cursor_pos"($I11)
+    ($P10) = rx975_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx975_pos, "")
+    rx975_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_977_done
-  rxcap_977_fail:
-    goto rx972_fail
-  rxcap_977_done:
+    goto rxcap_980_done
+  rxcap_980_fail:
+    goto rx975_fail
+  rxcap_980_done:
   # rx subrule "O" subtype=capture negate=
-    rx972_cur."!cursor_pos"(rx972_pos)
-    $P10 = rx972_cur."O"("%exponentiation, :pirop<pow>")
-    unless $P10, rx972_fail
-    rx972_cur."!mark_push"(0, -1, 0, $P10)
+    rx975_cur."!cursor_pos"(rx975_pos)
+    $P10 = rx975_cur."O"("%exponentiation, :pirop<pow>")
+    unless $P10, rx975_fail
+    rx975_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx972_pos = $P10."pos"()
+    rx975_pos = $P10."pos"()
   # rx pass
-    rx972_cur."!cursor_pass"(rx972_pos, "infix:sym<**>")
-    rx972_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx972_pos)
-    .return (rx972_cur)
-  rx972_fail:
-.annotate "line", 417
-    (rx972_rep, rx972_pos, $I10, $P10) = rx972_cur."!mark_fail"(0)
-    lt rx972_pos, -1, rx972_done
-    eq rx972_pos, -1, rx972_fail
+    rx975_cur."!cursor_pass"(rx975_pos, "infix:sym<**>")
+    rx975_cur."!cursor_debug"("PASS  ", "infix:sym<**>", " at pos=", rx975_pos)
+    .return (rx975_cur)
+  rx975_fail:
+.annotate "line", 421
+    (rx975_rep, rx975_pos, $I10, $P10) = rx975_cur."!mark_fail"(0)
+    lt rx975_pos, -1, rx975_done
+    eq rx975_pos, -1, rx975_fail
     jump $I10
-  rx972_done:
-    rx972_cur."!cursor_fail"()
-    rx972_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
-    .return (rx972_cur)
+  rx975_done:
+    rx975_cur."!cursor_fail"()
+    rx975_cur."!cursor_debug"("FAIL  ", "infix:sym<**>")
+    .return (rx975_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<**>"  :subid("244_1267204702.05125") :method
-.annotate "line", 417
-    $P974 = self."!PREFIX__!subrule"("O", "**")
-    new $P975, "ResizablePMCArray"
-    push $P975, $P974
-    .return ($P975)
+.sub "!PREFIX__infix:sym<**>"  :subid("244_1271336396.90314") :method
+.annotate "line", 421
+    $P977 = self."!PREFIX__!subrule"("O", "**")
+    new $P978, "ResizablePMCArray"
+    push $P978, $P977
+    .return ($P978)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<+>"  :subid("245_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx979_tgt
-    .local int rx979_pos
-    .local int rx979_off
-    .local int rx979_eos
-    .local int rx979_rep
-    .local pmc rx979_cur
-    (rx979_cur, rx979_pos, rx979_tgt) = self."!cursor_start"()
-    rx979_cur."!cursor_debug"("START ", "prefix:sym<+>")
-    .lex unicode:"$\x{a2}", rx979_cur
-    .local pmc match
-    .lex "$/", match
-    length rx979_eos, rx979_tgt
-    set rx979_off, 0
-    lt rx979_pos, 2, rx979_start
-    sub rx979_off, rx979_pos, 1
-    substr rx979_tgt, rx979_tgt, rx979_off
-  rx979_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan983_done
-    goto rxscan983_scan
-  rxscan983_loop:
-    ($P10) = rx979_cur."from"()
-    inc $P10
-    set rx979_pos, $P10
-    ge rx979_pos, rx979_eos, rxscan983_done
-  rxscan983_scan:
-    set_addr $I10, rxscan983_loop
-    rx979_cur."!mark_push"(0, rx979_pos, $I10)
-  rxscan983_done:
-.annotate "line", 470
+.sub "prefix:sym<+>"  :subid("245_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx982_tgt
+    .local int rx982_pos
+    .local int rx982_off
+    .local int rx982_eos
+    .local int rx982_rep
+    .local pmc rx982_cur
+    (rx982_cur, rx982_pos, rx982_tgt) = self."!cursor_start"()
+    rx982_cur."!cursor_debug"("START ", "prefix:sym<+>")
+    .lex unicode:"$\x{a2}", rx982_cur
+    .local pmc match
+    .lex "$/", match
+    length rx982_eos, rx982_tgt
+    set rx982_off, 0
+    lt rx982_pos, 2, rx982_start
+    sub rx982_off, rx982_pos, 1
+    substr rx982_tgt, rx982_tgt, rx982_off
+  rx982_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan986_done
+    goto rxscan986_scan
+  rxscan986_loop:
+    ($P10) = rx982_cur."from"()
+    inc $P10
+    set rx982_pos, $P10
+    ge rx982_pos, rx982_eos, rxscan986_done
+  rxscan986_scan:
+    set_addr $I10, rxscan986_loop
+    rx982_cur."!mark_push"(0, rx982_pos, $I10)
+  rxscan986_done:
+.annotate "line", 474
   # rx subcapture "sym"
-    set_addr $I10, rxcap_984_fail
-    rx979_cur."!mark_push"(0, rx979_pos, $I10)
+    set_addr $I10, rxcap_987_fail
+    rx982_cur."!mark_push"(0, rx982_pos, $I10)
   # rx literal  "+"
-    add $I11, rx979_pos, 1
-    gt $I11, rx979_eos, rx979_fail
-    sub $I11, rx979_pos, rx979_off
-    substr $S10, rx979_tgt, $I11, 1
-    ne $S10, "+", rx979_fail
-    add rx979_pos, 1
-    set_addr $I10, rxcap_984_fail
-    ($I12, $I11) = rx979_cur."!mark_peek"($I10)
-    rx979_cur."!cursor_pos"($I11)
-    ($P10) = rx979_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx979_pos, "")
-    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx982_pos, 1
+    gt $I11, rx982_eos, rx982_fail
+    sub $I11, rx982_pos, rx982_off
+    substr $S10, rx982_tgt, $I11, 1
+    ne $S10, "+", rx982_fail
+    add rx982_pos, 1
+    set_addr $I10, rxcap_987_fail
+    ($I12, $I11) = rx982_cur."!mark_peek"($I10)
+    rx982_cur."!cursor_pos"($I11)
+    ($P10) = rx982_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx982_pos, "")
+    rx982_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_984_done
-  rxcap_984_fail:
-    goto rx979_fail
-  rxcap_984_done:
+    goto rxcap_987_done
+  rxcap_987_fail:
+    goto rx982_fail
+  rxcap_987_done:
   # rx subrule "O" subtype=capture negate=
-    rx979_cur."!cursor_pos"(rx979_pos)
-    $P10 = rx979_cur."O"("%symbolic_unary, :pirop<set N*>")
-    unless $P10, rx979_fail
-    rx979_cur."!mark_push"(0, -1, 0, $P10)
+    rx982_cur."!cursor_pos"(rx982_pos)
+    $P10 = rx982_cur."O"("%symbolic_unary, :pirop<set N*>")
+    unless $P10, rx982_fail
+    rx982_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx979_pos = $P10."pos"()
+    rx982_pos = $P10."pos"()
   # rx pass
-    rx979_cur."!cursor_pass"(rx979_pos, "prefix:sym<+>")
-    rx979_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx979_pos)
-    .return (rx979_cur)
-  rx979_fail:
-.annotate "line", 417
-    (rx979_rep, rx979_pos, $I10, $P10) = rx979_cur."!mark_fail"(0)
-    lt rx979_pos, -1, rx979_done
-    eq rx979_pos, -1, rx979_fail
+    rx982_cur."!cursor_pass"(rx982_pos, "prefix:sym<+>")
+    rx982_cur."!cursor_debug"("PASS  ", "prefix:sym<+>", " at pos=", rx982_pos)
+    .return (rx982_cur)
+  rx982_fail:
+.annotate "line", 421
+    (rx982_rep, rx982_pos, $I10, $P10) = rx982_cur."!mark_fail"(0)
+    lt rx982_pos, -1, rx982_done
+    eq rx982_pos, -1, rx982_fail
     jump $I10
-  rx979_done:
-    rx979_cur."!cursor_fail"()
-    rx979_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
-    .return (rx979_cur)
+  rx982_done:
+    rx982_cur."!cursor_fail"()
+    rx982_cur."!cursor_debug"("FAIL  ", "prefix:sym<+>")
+    .return (rx982_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<+>"  :subid("246_1267204702.05125") :method
-.annotate "line", 417
-    $P981 = self."!PREFIX__!subrule"("O", "+")
-    new $P982, "ResizablePMCArray"
-    push $P982, $P981
-    .return ($P982)
+.sub "!PREFIX__prefix:sym<+>"  :subid("246_1271336396.90314") :method
+.annotate "line", 421
+    $P984 = self."!PREFIX__!subrule"("O", "+")
+    new $P985, "ResizablePMCArray"
+    push $P985, $P984
+    .return ($P985)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<~>"  :subid("247_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx986_tgt
-    .local int rx986_pos
-    .local int rx986_off
-    .local int rx986_eos
-    .local int rx986_rep
-    .local pmc rx986_cur
-    (rx986_cur, rx986_pos, rx986_tgt) = self."!cursor_start"()
-    rx986_cur."!cursor_debug"("START ", "prefix:sym<~>")
-    .lex unicode:"$\x{a2}", rx986_cur
-    .local pmc match
-    .lex "$/", match
-    length rx986_eos, rx986_tgt
-    set rx986_off, 0
-    lt rx986_pos, 2, rx986_start
-    sub rx986_off, rx986_pos, 1
-    substr rx986_tgt, rx986_tgt, rx986_off
-  rx986_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan990_done
-    goto rxscan990_scan
-  rxscan990_loop:
-    ($P10) = rx986_cur."from"()
-    inc $P10
-    set rx986_pos, $P10
-    ge rx986_pos, rx986_eos, rxscan990_done
-  rxscan990_scan:
-    set_addr $I10, rxscan990_loop
-    rx986_cur."!mark_push"(0, rx986_pos, $I10)
-  rxscan990_done:
-.annotate "line", 471
+.sub "prefix:sym<~>"  :subid("247_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx989_tgt
+    .local int rx989_pos
+    .local int rx989_off
+    .local int rx989_eos
+    .local int rx989_rep
+    .local pmc rx989_cur
+    (rx989_cur, rx989_pos, rx989_tgt) = self."!cursor_start"()
+    rx989_cur."!cursor_debug"("START ", "prefix:sym<~>")
+    .lex unicode:"$\x{a2}", rx989_cur
+    .local pmc match
+    .lex "$/", match
+    length rx989_eos, rx989_tgt
+    set rx989_off, 0
+    lt rx989_pos, 2, rx989_start
+    sub rx989_off, rx989_pos, 1
+    substr rx989_tgt, rx989_tgt, rx989_off
+  rx989_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan993_done
+    goto rxscan993_scan
+  rxscan993_loop:
+    ($P10) = rx989_cur."from"()
+    inc $P10
+    set rx989_pos, $P10
+    ge rx989_pos, rx989_eos, rxscan993_done
+  rxscan993_scan:
+    set_addr $I10, rxscan993_loop
+    rx989_cur."!mark_push"(0, rx989_pos, $I10)
+  rxscan993_done:
+.annotate "line", 475
   # rx subcapture "sym"
-    set_addr $I10, rxcap_991_fail
-    rx986_cur."!mark_push"(0, rx986_pos, $I10)
+    set_addr $I10, rxcap_994_fail
+    rx989_cur."!mark_push"(0, rx989_pos, $I10)
   # rx literal  "~"
-    add $I11, rx986_pos, 1
-    gt $I11, rx986_eos, rx986_fail
-    sub $I11, rx986_pos, rx986_off
-    substr $S10, rx986_tgt, $I11, 1
-    ne $S10, "~", rx986_fail
-    add rx986_pos, 1
-    set_addr $I10, rxcap_991_fail
-    ($I12, $I11) = rx986_cur."!mark_peek"($I10)
-    rx986_cur."!cursor_pos"($I11)
-    ($P10) = rx986_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx986_pos, "")
-    rx986_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx989_pos, 1
+    gt $I11, rx989_eos, rx989_fail
+    sub $I11, rx989_pos, rx989_off
+    substr $S10, rx989_tgt, $I11, 1
+    ne $S10, "~", rx989_fail
+    add rx989_pos, 1
+    set_addr $I10, rxcap_994_fail
+    ($I12, $I11) = rx989_cur."!mark_peek"($I10)
+    rx989_cur."!cursor_pos"($I11)
+    ($P10) = rx989_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx989_pos, "")
+    rx989_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_991_done
-  rxcap_991_fail:
-    goto rx986_fail
-  rxcap_991_done:
+    goto rxcap_994_done
+  rxcap_994_fail:
+    goto rx989_fail
+  rxcap_994_done:
   # rx subrule "O" subtype=capture negate=
-    rx986_cur."!cursor_pos"(rx986_pos)
-    $P10 = rx986_cur."O"("%symbolic_unary, :pirop<set S*>")
-    unless $P10, rx986_fail
-    rx986_cur."!mark_push"(0, -1, 0, $P10)
+    rx989_cur."!cursor_pos"(rx989_pos)
+    $P10 = rx989_cur."O"("%symbolic_unary, :pirop<set S*>")
+    unless $P10, rx989_fail
+    rx989_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx986_pos = $P10."pos"()
+    rx989_pos = $P10."pos"()
   # rx pass
-    rx986_cur."!cursor_pass"(rx986_pos, "prefix:sym<~>")
-    rx986_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx986_pos)
-    .return (rx986_cur)
-  rx986_fail:
-.annotate "line", 417
-    (rx986_rep, rx986_pos, $I10, $P10) = rx986_cur."!mark_fail"(0)
-    lt rx986_pos, -1, rx986_done
-    eq rx986_pos, -1, rx986_fail
+    rx989_cur."!cursor_pass"(rx989_pos, "prefix:sym<~>")
+    rx989_cur."!cursor_debug"("PASS  ", "prefix:sym<~>", " at pos=", rx989_pos)
+    .return (rx989_cur)
+  rx989_fail:
+.annotate "line", 421
+    (rx989_rep, rx989_pos, $I10, $P10) = rx989_cur."!mark_fail"(0)
+    lt rx989_pos, -1, rx989_done
+    eq rx989_pos, -1, rx989_fail
     jump $I10
-  rx986_done:
-    rx986_cur."!cursor_fail"()
-    rx986_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
-    .return (rx986_cur)
+  rx989_done:
+    rx989_cur."!cursor_fail"()
+    rx989_cur."!cursor_debug"("FAIL  ", "prefix:sym<~>")
+    .return (rx989_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<~>"  :subid("248_1267204702.05125") :method
-.annotate "line", 417
-    $P988 = self."!PREFIX__!subrule"("O", "~")
-    new $P989, "ResizablePMCArray"
-    push $P989, $P988
-    .return ($P989)
+.sub "!PREFIX__prefix:sym<~>"  :subid("248_1271336396.90314") :method
+.annotate "line", 421
+    $P991 = self."!PREFIX__!subrule"("O", "~")
+    new $P992, "ResizablePMCArray"
+    push $P992, $P991
+    .return ($P992)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<->"  :subid("249_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx993_tgt
-    .local int rx993_pos
-    .local int rx993_off
-    .local int rx993_eos
-    .local int rx993_rep
-    .local pmc rx993_cur
-    (rx993_cur, rx993_pos, rx993_tgt) = self."!cursor_start"()
-    rx993_cur."!cursor_debug"("START ", "prefix:sym<->")
-    .lex unicode:"$\x{a2}", rx993_cur
-    .local pmc match
-    .lex "$/", match
-    length rx993_eos, rx993_tgt
-    set rx993_off, 0
-    lt rx993_pos, 2, rx993_start
-    sub rx993_off, rx993_pos, 1
-    substr rx993_tgt, rx993_tgt, rx993_off
-  rx993_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan996_done
-    goto rxscan996_scan
-  rxscan996_loop:
-    ($P10) = rx993_cur."from"()
-    inc $P10
-    set rx993_pos, $P10
-    ge rx993_pos, rx993_eos, rxscan996_done
-  rxscan996_scan:
-    set_addr $I10, rxscan996_loop
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
-  rxscan996_done:
-.annotate "line", 472
+.sub "prefix:sym<->"  :subid("249_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx996_tgt
+    .local int rx996_pos
+    .local int rx996_off
+    .local int rx996_eos
+    .local int rx996_rep
+    .local pmc rx996_cur
+    (rx996_cur, rx996_pos, rx996_tgt) = self."!cursor_start"()
+    rx996_cur."!cursor_debug"("START ", "prefix:sym<->")
+    .lex unicode:"$\x{a2}", rx996_cur
+    .local pmc match
+    .lex "$/", match
+    length rx996_eos, rx996_tgt
+    set rx996_off, 0
+    lt rx996_pos, 2, rx996_start
+    sub rx996_off, rx996_pos, 1
+    substr rx996_tgt, rx996_tgt, rx996_off
+  rx996_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan999_done
+    goto rxscan999_scan
+  rxscan999_loop:
+    ($P10) = rx996_cur."from"()
+    inc $P10
+    set rx996_pos, $P10
+    ge rx996_pos, rx996_eos, rxscan999_done
+  rxscan999_scan:
+    set_addr $I10, rxscan999_loop
+    rx996_cur."!mark_push"(0, rx996_pos, $I10)
+  rxscan999_done:
+.annotate "line", 476
   # rx subcapture "sym"
-    set_addr $I10, rxcap_997_fail
-    rx993_cur."!mark_push"(0, rx993_pos, $I10)
+    set_addr $I10, rxcap_1000_fail
+    rx996_cur."!mark_push"(0, rx996_pos, $I10)
   # rx literal  "-"
-    add $I11, rx993_pos, 1
-    gt $I11, rx993_eos, rx993_fail
-    sub $I11, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I11, 1
-    ne $S10, "-", rx993_fail
-    add rx993_pos, 1
-    set_addr $I10, rxcap_997_fail
-    ($I12, $I11) = rx993_cur."!mark_peek"($I10)
-    rx993_cur."!cursor_pos"($I11)
-    ($P10) = rx993_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx993_pos, "")
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx996_pos, 1
+    gt $I11, rx996_eos, rx996_fail
+    sub $I11, rx996_pos, rx996_off
+    substr $S10, rx996_tgt, $I11, 1
+    ne $S10, "-", rx996_fail
+    add rx996_pos, 1
+    set_addr $I10, rxcap_1000_fail
+    ($I12, $I11) = rx996_cur."!mark_peek"($I10)
+    rx996_cur."!cursor_pos"($I11)
+    ($P10) = rx996_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx996_pos, "")
+    rx996_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_997_done
-  rxcap_997_fail:
-    goto rx993_fail
-  rxcap_997_done:
+    goto rxcap_1000_done
+  rxcap_1000_fail:
+    goto rx996_fail
+  rxcap_1000_done:
   # rx enumcharlist negate=1 zerowidth
-    ge rx993_pos, rx993_eos, rx993_fail
-    sub $I10, rx993_pos, rx993_off
-    substr $S10, rx993_tgt, $I10, 1
+    ge rx996_pos, rx996_eos, rx996_fail
+    sub $I10, rx996_pos, rx996_off
+    substr $S10, rx996_tgt, $I10, 1
     index $I11, ">", $S10
-    ge $I11, 0, rx993_fail
+    ge $I11, 0, rx996_fail
   # rx subrule "number" subtype=zerowidth negate=1
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."number"()
-    if $P10, rx993_fail
+    rx996_cur."!cursor_pos"(rx996_pos)
+    $P10 = rx996_cur."number"()
+    if $P10, rx996_fail
   # rx subrule "O" subtype=capture negate=
-    rx993_cur."!cursor_pos"(rx993_pos)
-    $P10 = rx993_cur."O"("%symbolic_unary, :pirop<neg>")
-    unless $P10, rx993_fail
-    rx993_cur."!mark_push"(0, -1, 0, $P10)
+    rx996_cur."!cursor_pos"(rx996_pos)
+    $P10 = rx996_cur."O"("%symbolic_unary, :pirop<neg>")
+    unless $P10, rx996_fail
+    rx996_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx993_pos = $P10."pos"()
+    rx996_pos = $P10."pos"()
   # rx pass
-    rx993_cur."!cursor_pass"(rx993_pos, "prefix:sym<->")
-    rx993_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx993_pos)
-    .return (rx993_cur)
-  rx993_fail:
-.annotate "line", 417
-    (rx993_rep, rx993_pos, $I10, $P10) = rx993_cur."!mark_fail"(0)
-    lt rx993_pos, -1, rx993_done
-    eq rx993_pos, -1, rx993_fail
+    rx996_cur."!cursor_pass"(rx996_pos, "prefix:sym<->")
+    rx996_cur."!cursor_debug"("PASS  ", "prefix:sym<->", " at pos=", rx996_pos)
+    .return (rx996_cur)
+  rx996_fail:
+.annotate "line", 421
+    (rx996_rep, rx996_pos, $I10, $P10) = rx996_cur."!mark_fail"(0)
+    lt rx996_pos, -1, rx996_done
+    eq rx996_pos, -1, rx996_fail
     jump $I10
-  rx993_done:
-    rx993_cur."!cursor_fail"()
-    rx993_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
-    .return (rx993_cur)
+  rx996_done:
+    rx996_cur."!cursor_fail"()
+    rx996_cur."!cursor_debug"("FAIL  ", "prefix:sym<->")
+    .return (rx996_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<->"  :subid("250_1267204702.05125") :method
-.annotate "line", 417
-    new $P995, "ResizablePMCArray"
-    push $P995, "-"
-    .return ($P995)
+.sub "!PREFIX__prefix:sym<->"  :subid("250_1271336396.90314") :method
+.annotate "line", 421
+    new $P998, "ResizablePMCArray"
+    push $P998, "-"
+    .return ($P998)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<?>"  :subid("251_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx999_tgt
-    .local int rx999_pos
-    .local int rx999_off
-    .local int rx999_eos
-    .local int rx999_rep
-    .local pmc rx999_cur
-    (rx999_cur, rx999_pos, rx999_tgt) = self."!cursor_start"()
-    rx999_cur."!cursor_debug"("START ", "prefix:sym<?>")
-    .lex unicode:"$\x{a2}", rx999_cur
-    .local pmc match
-    .lex "$/", match
-    length rx999_eos, rx999_tgt
-    set rx999_off, 0
-    lt rx999_pos, 2, rx999_start
-    sub rx999_off, rx999_pos, 1
-    substr rx999_tgt, rx999_tgt, rx999_off
-  rx999_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1003_done
-    goto rxscan1003_scan
-  rxscan1003_loop:
-    ($P10) = rx999_cur."from"()
-    inc $P10
-    set rx999_pos, $P10
-    ge rx999_pos, rx999_eos, rxscan1003_done
-  rxscan1003_scan:
-    set_addr $I10, rxscan1003_loop
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
-  rxscan1003_done:
-.annotate "line", 473
+.sub "prefix:sym<?>"  :subid("251_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1002_tgt
+    .local int rx1002_pos
+    .local int rx1002_off
+    .local int rx1002_eos
+    .local int rx1002_rep
+    .local pmc rx1002_cur
+    (rx1002_cur, rx1002_pos, rx1002_tgt) = self."!cursor_start"()
+    rx1002_cur."!cursor_debug"("START ", "prefix:sym<?>")
+    .lex unicode:"$\x{a2}", rx1002_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1002_eos, rx1002_tgt
+    set rx1002_off, 0
+    lt rx1002_pos, 2, rx1002_start
+    sub rx1002_off, rx1002_pos, 1
+    substr rx1002_tgt, rx1002_tgt, rx1002_off
+  rx1002_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1006_done
+    goto rxscan1006_scan
+  rxscan1006_loop:
+    ($P10) = rx1002_cur."from"()
+    inc $P10
+    set rx1002_pos, $P10
+    ge rx1002_pos, rx1002_eos, rxscan1006_done
+  rxscan1006_scan:
+    set_addr $I10, rxscan1006_loop
+    rx1002_cur."!mark_push"(0, rx1002_pos, $I10)
+  rxscan1006_done:
+.annotate "line", 477
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1004_fail
-    rx999_cur."!mark_push"(0, rx999_pos, $I10)
+    set_addr $I10, rxcap_1007_fail
+    rx1002_cur."!mark_push"(0, rx1002_pos, $I10)
   # rx literal  "?"
-    add $I11, rx999_pos, 1
-    gt $I11, rx999_eos, rx999_fail
-    sub $I11, rx999_pos, rx999_off
-    substr $S10, rx999_tgt, $I11, 1
-    ne $S10, "?", rx999_fail
-    add rx999_pos, 1
-    set_addr $I10, rxcap_1004_fail
-    ($I12, $I11) = rx999_cur."!mark_peek"($I10)
-    rx999_cur."!cursor_pos"($I11)
-    ($P10) = rx999_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx999_pos, "")
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1002_pos, 1
+    gt $I11, rx1002_eos, rx1002_fail
+    sub $I11, rx1002_pos, rx1002_off
+    substr $S10, rx1002_tgt, $I11, 1
+    ne $S10, "?", rx1002_fail
+    add rx1002_pos, 1
+    set_addr $I10, rxcap_1007_fail
+    ($I12, $I11) = rx1002_cur."!mark_peek"($I10)
+    rx1002_cur."!cursor_pos"($I11)
+    ($P10) = rx1002_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1002_pos, "")
+    rx1002_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1004_done
-  rxcap_1004_fail:
-    goto rx999_fail
-  rxcap_1004_done:
+    goto rxcap_1007_done
+  rxcap_1007_fail:
+    goto rx1002_fail
+  rxcap_1007_done:
   # rx subrule "O" subtype=capture negate=
-    rx999_cur."!cursor_pos"(rx999_pos)
-    $P10 = rx999_cur."O"("%symbolic_unary, :pirop<istrue>")
-    unless $P10, rx999_fail
-    rx999_cur."!mark_push"(0, -1, 0, $P10)
+    rx1002_cur."!cursor_pos"(rx1002_pos)
+    $P10 = rx1002_cur."O"("%symbolic_unary, :pirop<istrue>")
+    unless $P10, rx1002_fail
+    rx1002_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx999_pos = $P10."pos"()
+    rx1002_pos = $P10."pos"()
   # rx pass
-    rx999_cur."!cursor_pass"(rx999_pos, "prefix:sym<?>")
-    rx999_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx999_pos)
-    .return (rx999_cur)
-  rx999_fail:
-.annotate "line", 417
-    (rx999_rep, rx999_pos, $I10, $P10) = rx999_cur."!mark_fail"(0)
-    lt rx999_pos, -1, rx999_done
-    eq rx999_pos, -1, rx999_fail
+    rx1002_cur."!cursor_pass"(rx1002_pos, "prefix:sym<?>")
+    rx1002_cur."!cursor_debug"("PASS  ", "prefix:sym<?>", " at pos=", rx1002_pos)
+    .return (rx1002_cur)
+  rx1002_fail:
+.annotate "line", 421
+    (rx1002_rep, rx1002_pos, $I10, $P10) = rx1002_cur."!mark_fail"(0)
+    lt rx1002_pos, -1, rx1002_done
+    eq rx1002_pos, -1, rx1002_fail
     jump $I10
-  rx999_done:
-    rx999_cur."!cursor_fail"()
-    rx999_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
-    .return (rx999_cur)
+  rx1002_done:
+    rx1002_cur."!cursor_fail"()
+    rx1002_cur."!cursor_debug"("FAIL  ", "prefix:sym<?>")
+    .return (rx1002_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<?>"  :subid("252_1267204702.05125") :method
-.annotate "line", 417
-    $P1001 = self."!PREFIX__!subrule"("O", "?")
-    new $P1002, "ResizablePMCArray"
-    push $P1002, $P1001
-    .return ($P1002)
+.sub "!PREFIX__prefix:sym<?>"  :subid("252_1271336396.90314") :method
+.annotate "line", 421
+    $P1004 = self."!PREFIX__!subrule"("O", "?")
+    new $P1005, "ResizablePMCArray"
+    push $P1005, $P1004
+    .return ($P1005)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<!>"  :subid("253_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1006_tgt
-    .local int rx1006_pos
-    .local int rx1006_off
-    .local int rx1006_eos
-    .local int rx1006_rep
-    .local pmc rx1006_cur
-    (rx1006_cur, rx1006_pos, rx1006_tgt) = self."!cursor_start"()
-    rx1006_cur."!cursor_debug"("START ", "prefix:sym<!>")
-    .lex unicode:"$\x{a2}", rx1006_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1006_eos, rx1006_tgt
-    set rx1006_off, 0
-    lt rx1006_pos, 2, rx1006_start
-    sub rx1006_off, rx1006_pos, 1
-    substr rx1006_tgt, rx1006_tgt, rx1006_off
-  rx1006_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1010_done
-    goto rxscan1010_scan
-  rxscan1010_loop:
-    ($P10) = rx1006_cur."from"()
-    inc $P10
-    set rx1006_pos, $P10
-    ge rx1006_pos, rx1006_eos, rxscan1010_done
-  rxscan1010_scan:
-    set_addr $I10, rxscan1010_loop
-    rx1006_cur."!mark_push"(0, rx1006_pos, $I10)
-  rxscan1010_done:
-.annotate "line", 474
+.sub "prefix:sym<!>"  :subid("253_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1009_tgt
+    .local int rx1009_pos
+    .local int rx1009_off
+    .local int rx1009_eos
+    .local int rx1009_rep
+    .local pmc rx1009_cur
+    (rx1009_cur, rx1009_pos, rx1009_tgt) = self."!cursor_start"()
+    rx1009_cur."!cursor_debug"("START ", "prefix:sym<!>")
+    .lex unicode:"$\x{a2}", rx1009_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1009_eos, rx1009_tgt
+    set rx1009_off, 0
+    lt rx1009_pos, 2, rx1009_start
+    sub rx1009_off, rx1009_pos, 1
+    substr rx1009_tgt, rx1009_tgt, rx1009_off
+  rx1009_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1013_done
+    goto rxscan1013_scan
+  rxscan1013_loop:
+    ($P10) = rx1009_cur."from"()
+    inc $P10
+    set rx1009_pos, $P10
+    ge rx1009_pos, rx1009_eos, rxscan1013_done
+  rxscan1013_scan:
+    set_addr $I10, rxscan1013_loop
+    rx1009_cur."!mark_push"(0, rx1009_pos, $I10)
+  rxscan1013_done:
+.annotate "line", 478
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1011_fail
-    rx1006_cur."!mark_push"(0, rx1006_pos, $I10)
+    set_addr $I10, rxcap_1014_fail
+    rx1009_cur."!mark_push"(0, rx1009_pos, $I10)
   # rx literal  "!"
-    add $I11, rx1006_pos, 1
-    gt $I11, rx1006_eos, rx1006_fail
-    sub $I11, rx1006_pos, rx1006_off
-    substr $S10, rx1006_tgt, $I11, 1
-    ne $S10, "!", rx1006_fail
-    add rx1006_pos, 1
-    set_addr $I10, rxcap_1011_fail
-    ($I12, $I11) = rx1006_cur."!mark_peek"($I10)
-    rx1006_cur."!cursor_pos"($I11)
-    ($P10) = rx1006_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1006_pos, "")
-    rx1006_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1009_pos, 1
+    gt $I11, rx1009_eos, rx1009_fail
+    sub $I11, rx1009_pos, rx1009_off
+    substr $S10, rx1009_tgt, $I11, 1
+    ne $S10, "!", rx1009_fail
+    add rx1009_pos, 1
+    set_addr $I10, rxcap_1014_fail
+    ($I12, $I11) = rx1009_cur."!mark_peek"($I10)
+    rx1009_cur."!cursor_pos"($I11)
+    ($P10) = rx1009_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1009_pos, "")
+    rx1009_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1011_done
-  rxcap_1011_fail:
-    goto rx1006_fail
-  rxcap_1011_done:
+    goto rxcap_1014_done
+  rxcap_1014_fail:
+    goto rx1009_fail
+  rxcap_1014_done:
   # rx subrule "O" subtype=capture negate=
-    rx1006_cur."!cursor_pos"(rx1006_pos)
-    $P10 = rx1006_cur."O"("%symbolic_unary, :pirop<isfalse>")
-    unless $P10, rx1006_fail
-    rx1006_cur."!mark_push"(0, -1, 0, $P10)
+    rx1009_cur."!cursor_pos"(rx1009_pos)
+    $P10 = rx1009_cur."O"("%symbolic_unary, :pirop<isfalse>")
+    unless $P10, rx1009_fail
+    rx1009_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1006_pos = $P10."pos"()
+    rx1009_pos = $P10."pos"()
   # rx pass
-    rx1006_cur."!cursor_pass"(rx1006_pos, "prefix:sym<!>")
-    rx1006_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1006_pos)
-    .return (rx1006_cur)
-  rx1006_fail:
-.annotate "line", 417
-    (rx1006_rep, rx1006_pos, $I10, $P10) = rx1006_cur."!mark_fail"(0)
-    lt rx1006_pos, -1, rx1006_done
-    eq rx1006_pos, -1, rx1006_fail
+    rx1009_cur."!cursor_pass"(rx1009_pos, "prefix:sym<!>")
+    rx1009_cur."!cursor_debug"("PASS  ", "prefix:sym<!>", " at pos=", rx1009_pos)
+    .return (rx1009_cur)
+  rx1009_fail:
+.annotate "line", 421
+    (rx1009_rep, rx1009_pos, $I10, $P10) = rx1009_cur."!mark_fail"(0)
+    lt rx1009_pos, -1, rx1009_done
+    eq rx1009_pos, -1, rx1009_fail
     jump $I10
-  rx1006_done:
-    rx1006_cur."!cursor_fail"()
-    rx1006_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
-    .return (rx1006_cur)
+  rx1009_done:
+    rx1009_cur."!cursor_fail"()
+    rx1009_cur."!cursor_debug"("FAIL  ", "prefix:sym<!>")
+    .return (rx1009_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<!>"  :subid("254_1267204702.05125") :method
-.annotate "line", 417
-    $P1008 = self."!PREFIX__!subrule"("O", "!")
-    new $P1009, "ResizablePMCArray"
-    push $P1009, $P1008
-    .return ($P1009)
+.sub "!PREFIX__prefix:sym<!>"  :subid("254_1271336396.90314") :method
+.annotate "line", 421
+    $P1011 = self."!PREFIX__!subrule"("O", "!")
+    new $P1012, "ResizablePMCArray"
+    push $P1012, $P1011
+    .return ($P1012)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<|>"  :subid("255_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1013_tgt
-    .local int rx1013_pos
-    .local int rx1013_off
-    .local int rx1013_eos
-    .local int rx1013_rep
-    .local pmc rx1013_cur
-    (rx1013_cur, rx1013_pos, rx1013_tgt) = self."!cursor_start"()
-    rx1013_cur."!cursor_debug"("START ", "prefix:sym<|>")
-    .lex unicode:"$\x{a2}", rx1013_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1013_eos, rx1013_tgt
-    set rx1013_off, 0
-    lt rx1013_pos, 2, rx1013_start
-    sub rx1013_off, rx1013_pos, 1
-    substr rx1013_tgt, rx1013_tgt, rx1013_off
-  rx1013_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1017_done
-    goto rxscan1017_scan
-  rxscan1017_loop:
-    ($P10) = rx1013_cur."from"()
-    inc $P10
-    set rx1013_pos, $P10
-    ge rx1013_pos, rx1013_eos, rxscan1017_done
-  rxscan1017_scan:
-    set_addr $I10, rxscan1017_loop
-    rx1013_cur."!mark_push"(0, rx1013_pos, $I10)
-  rxscan1017_done:
-.annotate "line", 475
+.sub "prefix:sym<|>"  :subid("255_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1016_tgt
+    .local int rx1016_pos
+    .local int rx1016_off
+    .local int rx1016_eos
+    .local int rx1016_rep
+    .local pmc rx1016_cur
+    (rx1016_cur, rx1016_pos, rx1016_tgt) = self."!cursor_start"()
+    rx1016_cur."!cursor_debug"("START ", "prefix:sym<|>")
+    .lex unicode:"$\x{a2}", rx1016_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1016_eos, rx1016_tgt
+    set rx1016_off, 0
+    lt rx1016_pos, 2, rx1016_start
+    sub rx1016_off, rx1016_pos, 1
+    substr rx1016_tgt, rx1016_tgt, rx1016_off
+  rx1016_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1020_done
+    goto rxscan1020_scan
+  rxscan1020_loop:
+    ($P10) = rx1016_cur."from"()
+    inc $P10
+    set rx1016_pos, $P10
+    ge rx1016_pos, rx1016_eos, rxscan1020_done
+  rxscan1020_scan:
+    set_addr $I10, rxscan1020_loop
+    rx1016_cur."!mark_push"(0, rx1016_pos, $I10)
+  rxscan1020_done:
+.annotate "line", 479
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1018_fail
-    rx1013_cur."!mark_push"(0, rx1013_pos, $I10)
+    set_addr $I10, rxcap_1021_fail
+    rx1016_cur."!mark_push"(0, rx1016_pos, $I10)
   # rx literal  "|"
-    add $I11, rx1013_pos, 1
-    gt $I11, rx1013_eos, rx1013_fail
-    sub $I11, rx1013_pos, rx1013_off
-    substr $S10, rx1013_tgt, $I11, 1
-    ne $S10, "|", rx1013_fail
-    add rx1013_pos, 1
-    set_addr $I10, rxcap_1018_fail
-    ($I12, $I11) = rx1013_cur."!mark_peek"($I10)
-    rx1013_cur."!cursor_pos"($I11)
-    ($P10) = rx1013_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1013_pos, "")
-    rx1013_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1016_pos, 1
+    gt $I11, rx1016_eos, rx1016_fail
+    sub $I11, rx1016_pos, rx1016_off
+    substr $S10, rx1016_tgt, $I11, 1
+    ne $S10, "|", rx1016_fail
+    add rx1016_pos, 1
+    set_addr $I10, rxcap_1021_fail
+    ($I12, $I11) = rx1016_cur."!mark_peek"($I10)
+    rx1016_cur."!cursor_pos"($I11)
+    ($P10) = rx1016_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1016_pos, "")
+    rx1016_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1018_done
-  rxcap_1018_fail:
-    goto rx1013_fail
-  rxcap_1018_done:
+    goto rxcap_1021_done
+  rxcap_1021_fail:
+    goto rx1016_fail
+  rxcap_1021_done:
   # rx subrule "O" subtype=capture negate=
-    rx1013_cur."!cursor_pos"(rx1013_pos)
-    $P10 = rx1013_cur."O"("%symbolic_unary")
-    unless $P10, rx1013_fail
-    rx1013_cur."!mark_push"(0, -1, 0, $P10)
+    rx1016_cur."!cursor_pos"(rx1016_pos)
+    $P10 = rx1016_cur."O"("%symbolic_unary")
+    unless $P10, rx1016_fail
+    rx1016_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1013_pos = $P10."pos"()
+    rx1016_pos = $P10."pos"()
   # rx pass
-    rx1013_cur."!cursor_pass"(rx1013_pos, "prefix:sym<|>")
-    rx1013_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1013_pos)
-    .return (rx1013_cur)
-  rx1013_fail:
-.annotate "line", 417
-    (rx1013_rep, rx1013_pos, $I10, $P10) = rx1013_cur."!mark_fail"(0)
-    lt rx1013_pos, -1, rx1013_done
-    eq rx1013_pos, -1, rx1013_fail
+    rx1016_cur."!cursor_pass"(rx1016_pos, "prefix:sym<|>")
+    rx1016_cur."!cursor_debug"("PASS  ", "prefix:sym<|>", " at pos=", rx1016_pos)
+    .return (rx1016_cur)
+  rx1016_fail:
+.annotate "line", 421
+    (rx1016_rep, rx1016_pos, $I10, $P10) = rx1016_cur."!mark_fail"(0)
+    lt rx1016_pos, -1, rx1016_done
+    eq rx1016_pos, -1, rx1016_fail
     jump $I10
-  rx1013_done:
-    rx1013_cur."!cursor_fail"()
-    rx1013_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
-    .return (rx1013_cur)
+  rx1016_done:
+    rx1016_cur."!cursor_fail"()
+    rx1016_cur."!cursor_debug"("FAIL  ", "prefix:sym<|>")
+    .return (rx1016_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<|>"  :subid("256_1267204702.05125") :method
-.annotate "line", 417
-    $P1015 = self."!PREFIX__!subrule"("O", "|")
-    new $P1016, "ResizablePMCArray"
-    push $P1016, $P1015
-    .return ($P1016)
+.sub "!PREFIX__prefix:sym<|>"  :subid("256_1271336396.90314") :method
+.annotate "line", 421
+    $P1018 = self."!PREFIX__!subrule"("O", "|")
+    new $P1019, "ResizablePMCArray"
+    push $P1019, $P1018
+    .return ($P1019)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<*>"  :subid("257_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1020_tgt
-    .local int rx1020_pos
-    .local int rx1020_off
-    .local int rx1020_eos
-    .local int rx1020_rep
-    .local pmc rx1020_cur
-    (rx1020_cur, rx1020_pos, rx1020_tgt) = self."!cursor_start"()
-    rx1020_cur."!cursor_debug"("START ", "infix:sym<*>")
-    .lex unicode:"$\x{a2}", rx1020_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1020_eos, rx1020_tgt
-    set rx1020_off, 0
-    lt rx1020_pos, 2, rx1020_start
-    sub rx1020_off, rx1020_pos, 1
-    substr rx1020_tgt, rx1020_tgt, rx1020_off
-  rx1020_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1024_done
-    goto rxscan1024_scan
-  rxscan1024_loop:
-    ($P10) = rx1020_cur."from"()
-    inc $P10
-    set rx1020_pos, $P10
-    ge rx1020_pos, rx1020_eos, rxscan1024_done
-  rxscan1024_scan:
-    set_addr $I10, rxscan1024_loop
-    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
-  rxscan1024_done:
-.annotate "line", 477
+.sub "infix:sym<*>"  :subid("257_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1023_tgt
+    .local int rx1023_pos
+    .local int rx1023_off
+    .local int rx1023_eos
+    .local int rx1023_rep
+    .local pmc rx1023_cur
+    (rx1023_cur, rx1023_pos, rx1023_tgt) = self."!cursor_start"()
+    rx1023_cur."!cursor_debug"("START ", "infix:sym<*>")
+    .lex unicode:"$\x{a2}", rx1023_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1023_eos, rx1023_tgt
+    set rx1023_off, 0
+    lt rx1023_pos, 2, rx1023_start
+    sub rx1023_off, rx1023_pos, 1
+    substr rx1023_tgt, rx1023_tgt, rx1023_off
+  rx1023_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1027_done
+    goto rxscan1027_scan
+  rxscan1027_loop:
+    ($P10) = rx1023_cur."from"()
+    inc $P10
+    set rx1023_pos, $P10
+    ge rx1023_pos, rx1023_eos, rxscan1027_done
+  rxscan1027_scan:
+    set_addr $I10, rxscan1027_loop
+    rx1023_cur."!mark_push"(0, rx1023_pos, $I10)
+  rxscan1027_done:
+.annotate "line", 481
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1025_fail
-    rx1020_cur."!mark_push"(0, rx1020_pos, $I10)
+    set_addr $I10, rxcap_1028_fail
+    rx1023_cur."!mark_push"(0, rx1023_pos, $I10)
   # rx literal  "*"
-    add $I11, rx1020_pos, 1
-    gt $I11, rx1020_eos, rx1020_fail
-    sub $I11, rx1020_pos, rx1020_off
-    substr $S10, rx1020_tgt, $I11, 1
-    ne $S10, "*", rx1020_fail
-    add rx1020_pos, 1
-    set_addr $I10, rxcap_1025_fail
-    ($I12, $I11) = rx1020_cur."!mark_peek"($I10)
-    rx1020_cur."!cursor_pos"($I11)
-    ($P10) = rx1020_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1020_pos, "")
-    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1023_pos, 1
+    gt $I11, rx1023_eos, rx1023_fail
+    sub $I11, rx1023_pos, rx1023_off
+    substr $S10, rx1023_tgt, $I11, 1
+    ne $S10, "*", rx1023_fail
+    add rx1023_pos, 1
+    set_addr $I10, rxcap_1028_fail
+    ($I12, $I11) = rx1023_cur."!mark_peek"($I10)
+    rx1023_cur."!cursor_pos"($I11)
+    ($P10) = rx1023_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1023_pos, "")
+    rx1023_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1025_done
-  rxcap_1025_fail:
-    goto rx1020_fail
-  rxcap_1025_done:
+    goto rxcap_1028_done
+  rxcap_1028_fail:
+    goto rx1023_fail
+  rxcap_1028_done:
   # rx subrule "O" subtype=capture negate=
-    rx1020_cur."!cursor_pos"(rx1020_pos)
-    $P10 = rx1020_cur."O"("%multiplicative, :pirop<mul>")
-    unless $P10, rx1020_fail
-    rx1020_cur."!mark_push"(0, -1, 0, $P10)
+    rx1023_cur."!cursor_pos"(rx1023_pos)
+    $P10 = rx1023_cur."O"("%multiplicative, :pirop<mul>")
+    unless $P10, rx1023_fail
+    rx1023_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1020_pos = $P10."pos"()
+    rx1023_pos = $P10."pos"()
   # rx pass
-    rx1020_cur."!cursor_pass"(rx1020_pos, "infix:sym<*>")
-    rx1020_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1020_pos)
-    .return (rx1020_cur)
-  rx1020_fail:
-.annotate "line", 417
-    (rx1020_rep, rx1020_pos, $I10, $P10) = rx1020_cur."!mark_fail"(0)
-    lt rx1020_pos, -1, rx1020_done
-    eq rx1020_pos, -1, rx1020_fail
+    rx1023_cur."!cursor_pass"(rx1023_pos, "infix:sym<*>")
+    rx1023_cur."!cursor_debug"("PASS  ", "infix:sym<*>", " at pos=", rx1023_pos)
+    .return (rx1023_cur)
+  rx1023_fail:
+.annotate "line", 421
+    (rx1023_rep, rx1023_pos, $I10, $P10) = rx1023_cur."!mark_fail"(0)
+    lt rx1023_pos, -1, rx1023_done
+    eq rx1023_pos, -1, rx1023_fail
     jump $I10
-  rx1020_done:
-    rx1020_cur."!cursor_fail"()
-    rx1020_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
-    .return (rx1020_cur)
+  rx1023_done:
+    rx1023_cur."!cursor_fail"()
+    rx1023_cur."!cursor_debug"("FAIL  ", "infix:sym<*>")
+    .return (rx1023_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<*>"  :subid("258_1267204702.05125") :method
-.annotate "line", 417
-    $P1022 = self."!PREFIX__!subrule"("O", "*")
-    new $P1023, "ResizablePMCArray"
-    push $P1023, $P1022
-    .return ($P1023)
+.sub "!PREFIX__infix:sym<*>"  :subid("258_1271336396.90314") :method
+.annotate "line", 421
+    $P1025 = self."!PREFIX__!subrule"("O", "*")
+    new $P1026, "ResizablePMCArray"
+    push $P1026, $P1025
+    .return ($P1026)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym</>"  :subid("259_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1027_tgt
-    .local int rx1027_pos
-    .local int rx1027_off
-    .local int rx1027_eos
-    .local int rx1027_rep
-    .local pmc rx1027_cur
-    (rx1027_cur, rx1027_pos, rx1027_tgt) = self."!cursor_start"()
-    rx1027_cur."!cursor_debug"("START ", "infix:sym</>")
-    .lex unicode:"$\x{a2}", rx1027_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1027_eos, rx1027_tgt
-    set rx1027_off, 0
-    lt rx1027_pos, 2, rx1027_start
-    sub rx1027_off, rx1027_pos, 1
-    substr rx1027_tgt, rx1027_tgt, rx1027_off
-  rx1027_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1031_done
-    goto rxscan1031_scan
-  rxscan1031_loop:
-    ($P10) = rx1027_cur."from"()
-    inc $P10
-    set rx1027_pos, $P10
-    ge rx1027_pos, rx1027_eos, rxscan1031_done
-  rxscan1031_scan:
-    set_addr $I10, rxscan1031_loop
-    rx1027_cur."!mark_push"(0, rx1027_pos, $I10)
-  rxscan1031_done:
-.annotate "line", 478
+.sub "infix:sym</>"  :subid("259_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1030_tgt
+    .local int rx1030_pos
+    .local int rx1030_off
+    .local int rx1030_eos
+    .local int rx1030_rep
+    .local pmc rx1030_cur
+    (rx1030_cur, rx1030_pos, rx1030_tgt) = self."!cursor_start"()
+    rx1030_cur."!cursor_debug"("START ", "infix:sym</>")
+    .lex unicode:"$\x{a2}", rx1030_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1030_eos, rx1030_tgt
+    set rx1030_off, 0
+    lt rx1030_pos, 2, rx1030_start
+    sub rx1030_off, rx1030_pos, 1
+    substr rx1030_tgt, rx1030_tgt, rx1030_off
+  rx1030_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1034_done
+    goto rxscan1034_scan
+  rxscan1034_loop:
+    ($P10) = rx1030_cur."from"()
+    inc $P10
+    set rx1030_pos, $P10
+    ge rx1030_pos, rx1030_eos, rxscan1034_done
+  rxscan1034_scan:
+    set_addr $I10, rxscan1034_loop
+    rx1030_cur."!mark_push"(0, rx1030_pos, $I10)
+  rxscan1034_done:
+.annotate "line", 482
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1032_fail
-    rx1027_cur."!mark_push"(0, rx1027_pos, $I10)
+    set_addr $I10, rxcap_1035_fail
+    rx1030_cur."!mark_push"(0, rx1030_pos, $I10)
   # rx literal  "/"
-    add $I11, rx1027_pos, 1
-    gt $I11, rx1027_eos, rx1027_fail
-    sub $I11, rx1027_pos, rx1027_off
-    substr $S10, rx1027_tgt, $I11, 1
-    ne $S10, "/", rx1027_fail
-    add rx1027_pos, 1
-    set_addr $I10, rxcap_1032_fail
-    ($I12, $I11) = rx1027_cur."!mark_peek"($I10)
-    rx1027_cur."!cursor_pos"($I11)
-    ($P10) = rx1027_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1027_pos, "")
-    rx1027_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1030_pos, 1
+    gt $I11, rx1030_eos, rx1030_fail
+    sub $I11, rx1030_pos, rx1030_off
+    substr $S10, rx1030_tgt, $I11, 1
+    ne $S10, "/", rx1030_fail
+    add rx1030_pos, 1
+    set_addr $I10, rxcap_1035_fail
+    ($I12, $I11) = rx1030_cur."!mark_peek"($I10)
+    rx1030_cur."!cursor_pos"($I11)
+    ($P10) = rx1030_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1030_pos, "")
+    rx1030_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1032_done
-  rxcap_1032_fail:
-    goto rx1027_fail
-  rxcap_1032_done:
+    goto rxcap_1035_done
+  rxcap_1035_fail:
+    goto rx1030_fail
+  rxcap_1035_done:
   # rx subrule "O" subtype=capture negate=
-    rx1027_cur."!cursor_pos"(rx1027_pos)
-    $P10 = rx1027_cur."O"("%multiplicative, :pirop<div>")
-    unless $P10, rx1027_fail
-    rx1027_cur."!mark_push"(0, -1, 0, $P10)
+    rx1030_cur."!cursor_pos"(rx1030_pos)
+    $P10 = rx1030_cur."O"("%multiplicative, :pirop<div>")
+    unless $P10, rx1030_fail
+    rx1030_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1027_pos = $P10."pos"()
+    rx1030_pos = $P10."pos"()
   # rx pass
-    rx1027_cur."!cursor_pass"(rx1027_pos, "infix:sym</>")
-    rx1027_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1027_pos)
-    .return (rx1027_cur)
-  rx1027_fail:
-.annotate "line", 417
-    (rx1027_rep, rx1027_pos, $I10, $P10) = rx1027_cur."!mark_fail"(0)
-    lt rx1027_pos, -1, rx1027_done
-    eq rx1027_pos, -1, rx1027_fail
+    rx1030_cur."!cursor_pass"(rx1030_pos, "infix:sym</>")
+    rx1030_cur."!cursor_debug"("PASS  ", "infix:sym</>", " at pos=", rx1030_pos)
+    .return (rx1030_cur)
+  rx1030_fail:
+.annotate "line", 421
+    (rx1030_rep, rx1030_pos, $I10, $P10) = rx1030_cur."!mark_fail"(0)
+    lt rx1030_pos, -1, rx1030_done
+    eq rx1030_pos, -1, rx1030_fail
     jump $I10
-  rx1027_done:
-    rx1027_cur."!cursor_fail"()
-    rx1027_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
-    .return (rx1027_cur)
+  rx1030_done:
+    rx1030_cur."!cursor_fail"()
+    rx1030_cur."!cursor_debug"("FAIL  ", "infix:sym</>")
+    .return (rx1030_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym</>"  :subid("260_1267204702.05125") :method
-.annotate "line", 417
-    $P1029 = self."!PREFIX__!subrule"("O", "/")
-    new $P1030, "ResizablePMCArray"
-    push $P1030, $P1029
-    .return ($P1030)
+.sub "!PREFIX__infix:sym</>"  :subid("260_1271336396.90314") :method
+.annotate "line", 421
+    $P1032 = self."!PREFIX__!subrule"("O", "/")
+    new $P1033, "ResizablePMCArray"
+    push $P1033, $P1032
+    .return ($P1033)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<%>"  :subid("261_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1034_tgt
-    .local int rx1034_pos
-    .local int rx1034_off
-    .local int rx1034_eos
-    .local int rx1034_rep
-    .local pmc rx1034_cur
-    (rx1034_cur, rx1034_pos, rx1034_tgt) = self."!cursor_start"()
-    rx1034_cur."!cursor_debug"("START ", "infix:sym<%>")
-    .lex unicode:"$\x{a2}", rx1034_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1034_eos, rx1034_tgt
-    set rx1034_off, 0
-    lt rx1034_pos, 2, rx1034_start
-    sub rx1034_off, rx1034_pos, 1
-    substr rx1034_tgt, rx1034_tgt, rx1034_off
-  rx1034_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1038_done
-    goto rxscan1038_scan
-  rxscan1038_loop:
-    ($P10) = rx1034_cur."from"()
-    inc $P10
-    set rx1034_pos, $P10
-    ge rx1034_pos, rx1034_eos, rxscan1038_done
-  rxscan1038_scan:
-    set_addr $I10, rxscan1038_loop
-    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
-  rxscan1038_done:
-.annotate "line", 479
+.sub "infix:sym<%>"  :subid("261_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1037_tgt
+    .local int rx1037_pos
+    .local int rx1037_off
+    .local int rx1037_eos
+    .local int rx1037_rep
+    .local pmc rx1037_cur
+    (rx1037_cur, rx1037_pos, rx1037_tgt) = self."!cursor_start"()
+    rx1037_cur."!cursor_debug"("START ", "infix:sym<%>")
+    .lex unicode:"$\x{a2}", rx1037_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1037_eos, rx1037_tgt
+    set rx1037_off, 0
+    lt rx1037_pos, 2, rx1037_start
+    sub rx1037_off, rx1037_pos, 1
+    substr rx1037_tgt, rx1037_tgt, rx1037_off
+  rx1037_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1041_done
+    goto rxscan1041_scan
+  rxscan1041_loop:
+    ($P10) = rx1037_cur."from"()
+    inc $P10
+    set rx1037_pos, $P10
+    ge rx1037_pos, rx1037_eos, rxscan1041_done
+  rxscan1041_scan:
+    set_addr $I10, rxscan1041_loop
+    rx1037_cur."!mark_push"(0, rx1037_pos, $I10)
+  rxscan1041_done:
+.annotate "line", 483
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1039_fail
-    rx1034_cur."!mark_push"(0, rx1034_pos, $I10)
+    set_addr $I10, rxcap_1042_fail
+    rx1037_cur."!mark_push"(0, rx1037_pos, $I10)
   # rx literal  "%"
-    add $I11, rx1034_pos, 1
-    gt $I11, rx1034_eos, rx1034_fail
-    sub $I11, rx1034_pos, rx1034_off
-    substr $S10, rx1034_tgt, $I11, 1
-    ne $S10, "%", rx1034_fail
-    add rx1034_pos, 1
-    set_addr $I10, rxcap_1039_fail
-    ($I12, $I11) = rx1034_cur."!mark_peek"($I10)
-    rx1034_cur."!cursor_pos"($I11)
-    ($P10) = rx1034_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1034_pos, "")
-    rx1034_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1037_pos, 1
+    gt $I11, rx1037_eos, rx1037_fail
+    sub $I11, rx1037_pos, rx1037_off
+    substr $S10, rx1037_tgt, $I11, 1
+    ne $S10, "%", rx1037_fail
+    add rx1037_pos, 1
+    set_addr $I10, rxcap_1042_fail
+    ($I12, $I11) = rx1037_cur."!mark_peek"($I10)
+    rx1037_cur."!cursor_pos"($I11)
+    ($P10) = rx1037_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1037_pos, "")
+    rx1037_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1039_done
-  rxcap_1039_fail:
-    goto rx1034_fail
-  rxcap_1039_done:
+    goto rxcap_1042_done
+  rxcap_1042_fail:
+    goto rx1037_fail
+  rxcap_1042_done:
   # rx subrule "O" subtype=capture negate=
-    rx1034_cur."!cursor_pos"(rx1034_pos)
-    $P10 = rx1034_cur."O"("%multiplicative, :pirop<mod>")
-    unless $P10, rx1034_fail
-    rx1034_cur."!mark_push"(0, -1, 0, $P10)
+    rx1037_cur."!cursor_pos"(rx1037_pos)
+    $P10 = rx1037_cur."O"("%multiplicative, :pirop<mod>")
+    unless $P10, rx1037_fail
+    rx1037_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1034_pos = $P10."pos"()
+    rx1037_pos = $P10."pos"()
   # rx pass
-    rx1034_cur."!cursor_pass"(rx1034_pos, "infix:sym<%>")
-    rx1034_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1034_pos)
-    .return (rx1034_cur)
-  rx1034_fail:
-.annotate "line", 417
-    (rx1034_rep, rx1034_pos, $I10, $P10) = rx1034_cur."!mark_fail"(0)
-    lt rx1034_pos, -1, rx1034_done
-    eq rx1034_pos, -1, rx1034_fail
+    rx1037_cur."!cursor_pass"(rx1037_pos, "infix:sym<%>")
+    rx1037_cur."!cursor_debug"("PASS  ", "infix:sym<%>", " at pos=", rx1037_pos)
+    .return (rx1037_cur)
+  rx1037_fail:
+.annotate "line", 421
+    (rx1037_rep, rx1037_pos, $I10, $P10) = rx1037_cur."!mark_fail"(0)
+    lt rx1037_pos, -1, rx1037_done
+    eq rx1037_pos, -1, rx1037_fail
     jump $I10
-  rx1034_done:
-    rx1034_cur."!cursor_fail"()
-    rx1034_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
-    .return (rx1034_cur)
+  rx1037_done:
+    rx1037_cur."!cursor_fail"()
+    rx1037_cur."!cursor_debug"("FAIL  ", "infix:sym<%>")
+    .return (rx1037_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<%>"  :subid("262_1267204702.05125") :method
-.annotate "line", 417
-    $P1036 = self."!PREFIX__!subrule"("O", "%")
-    new $P1037, "ResizablePMCArray"
-    push $P1037, $P1036
-    .return ($P1037)
+.sub "!PREFIX__infix:sym<%>"  :subid("262_1271336396.90314") :method
+.annotate "line", 421
+    $P1039 = self."!PREFIX__!subrule"("O", "%")
+    new $P1040, "ResizablePMCArray"
+    push $P1040, $P1039
+    .return ($P1040)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<+>"  :subid("263_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1041_tgt
-    .local int rx1041_pos
-    .local int rx1041_off
-    .local int rx1041_eos
-    .local int rx1041_rep
-    .local pmc rx1041_cur
-    (rx1041_cur, rx1041_pos, rx1041_tgt) = self."!cursor_start"()
-    rx1041_cur."!cursor_debug"("START ", "infix:sym<+>")
-    .lex unicode:"$\x{a2}", rx1041_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1041_eos, rx1041_tgt
-    set rx1041_off, 0
-    lt rx1041_pos, 2, rx1041_start
-    sub rx1041_off, rx1041_pos, 1
-    substr rx1041_tgt, rx1041_tgt, rx1041_off
-  rx1041_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1045_done
-    goto rxscan1045_scan
-  rxscan1045_loop:
-    ($P10) = rx1041_cur."from"()
-    inc $P10
-    set rx1041_pos, $P10
-    ge rx1041_pos, rx1041_eos, rxscan1045_done
-  rxscan1045_scan:
-    set_addr $I10, rxscan1045_loop
-    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
-  rxscan1045_done:
-.annotate "line", 481
+.sub "infix:sym<+>"  :subid("263_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1044_tgt
+    .local int rx1044_pos
+    .local int rx1044_off
+    .local int rx1044_eos
+    .local int rx1044_rep
+    .local pmc rx1044_cur
+    (rx1044_cur, rx1044_pos, rx1044_tgt) = self."!cursor_start"()
+    rx1044_cur."!cursor_debug"("START ", "infix:sym<+>")
+    .lex unicode:"$\x{a2}", rx1044_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1044_eos, rx1044_tgt
+    set rx1044_off, 0
+    lt rx1044_pos, 2, rx1044_start
+    sub rx1044_off, rx1044_pos, 1
+    substr rx1044_tgt, rx1044_tgt, rx1044_off
+  rx1044_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1048_done
+    goto rxscan1048_scan
+  rxscan1048_loop:
+    ($P10) = rx1044_cur."from"()
+    inc $P10
+    set rx1044_pos, $P10
+    ge rx1044_pos, rx1044_eos, rxscan1048_done
+  rxscan1048_scan:
+    set_addr $I10, rxscan1048_loop
+    rx1044_cur."!mark_push"(0, rx1044_pos, $I10)
+  rxscan1048_done:
+.annotate "line", 485
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1046_fail
-    rx1041_cur."!mark_push"(0, rx1041_pos, $I10)
+    set_addr $I10, rxcap_1049_fail
+    rx1044_cur."!mark_push"(0, rx1044_pos, $I10)
   # rx literal  "+"
-    add $I11, rx1041_pos, 1
-    gt $I11, rx1041_eos, rx1041_fail
-    sub $I11, rx1041_pos, rx1041_off
-    substr $S10, rx1041_tgt, $I11, 1
-    ne $S10, "+", rx1041_fail
-    add rx1041_pos, 1
-    set_addr $I10, rxcap_1046_fail
-    ($I12, $I11) = rx1041_cur."!mark_peek"($I10)
-    rx1041_cur."!cursor_pos"($I11)
-    ($P10) = rx1041_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1041_pos, "")
-    rx1041_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1044_pos, 1
+    gt $I11, rx1044_eos, rx1044_fail
+    sub $I11, rx1044_pos, rx1044_off
+    substr $S10, rx1044_tgt, $I11, 1
+    ne $S10, "+", rx1044_fail
+    add rx1044_pos, 1
+    set_addr $I10, rxcap_1049_fail
+    ($I12, $I11) = rx1044_cur."!mark_peek"($I10)
+    rx1044_cur."!cursor_pos"($I11)
+    ($P10) = rx1044_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1044_pos, "")
+    rx1044_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1046_done
-  rxcap_1046_fail:
-    goto rx1041_fail
-  rxcap_1046_done:
+    goto rxcap_1049_done
+  rxcap_1049_fail:
+    goto rx1044_fail
+  rxcap_1049_done:
   # rx subrule "O" subtype=capture negate=
-    rx1041_cur."!cursor_pos"(rx1041_pos)
-    $P10 = rx1041_cur."O"("%additive, :pirop<add>")
-    unless $P10, rx1041_fail
-    rx1041_cur."!mark_push"(0, -1, 0, $P10)
+    rx1044_cur."!cursor_pos"(rx1044_pos)
+    $P10 = rx1044_cur."O"("%additive, :pirop<add>")
+    unless $P10, rx1044_fail
+    rx1044_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1041_pos = $P10."pos"()
+    rx1044_pos = $P10."pos"()
   # rx pass
-    rx1041_cur."!cursor_pass"(rx1041_pos, "infix:sym<+>")
-    rx1041_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1041_pos)
-    .return (rx1041_cur)
-  rx1041_fail:
-.annotate "line", 417
-    (rx1041_rep, rx1041_pos, $I10, $P10) = rx1041_cur."!mark_fail"(0)
-    lt rx1041_pos, -1, rx1041_done
-    eq rx1041_pos, -1, rx1041_fail
+    rx1044_cur."!cursor_pass"(rx1044_pos, "infix:sym<+>")
+    rx1044_cur."!cursor_debug"("PASS  ", "infix:sym<+>", " at pos=", rx1044_pos)
+    .return (rx1044_cur)
+  rx1044_fail:
+.annotate "line", 421
+    (rx1044_rep, rx1044_pos, $I10, $P10) = rx1044_cur."!mark_fail"(0)
+    lt rx1044_pos, -1, rx1044_done
+    eq rx1044_pos, -1, rx1044_fail
     jump $I10
-  rx1041_done:
-    rx1041_cur."!cursor_fail"()
-    rx1041_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
-    .return (rx1041_cur)
+  rx1044_done:
+    rx1044_cur."!cursor_fail"()
+    rx1044_cur."!cursor_debug"("FAIL  ", "infix:sym<+>")
+    .return (rx1044_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<+>"  :subid("264_1267204702.05125") :method
-.annotate "line", 417
-    $P1043 = self."!PREFIX__!subrule"("O", "+")
-    new $P1044, "ResizablePMCArray"
-    push $P1044, $P1043
-    .return ($P1044)
+.sub "!PREFIX__infix:sym<+>"  :subid("264_1271336396.90314") :method
+.annotate "line", 421
+    $P1046 = self."!PREFIX__!subrule"("O", "+")
+    new $P1047, "ResizablePMCArray"
+    push $P1047, $P1046
+    .return ($P1047)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<->"  :subid("265_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1048_tgt
-    .local int rx1048_pos
-    .local int rx1048_off
-    .local int rx1048_eos
-    .local int rx1048_rep
-    .local pmc rx1048_cur
-    (rx1048_cur, rx1048_pos, rx1048_tgt) = self."!cursor_start"()
-    rx1048_cur."!cursor_debug"("START ", "infix:sym<->")
-    .lex unicode:"$\x{a2}", rx1048_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1048_eos, rx1048_tgt
-    set rx1048_off, 0
-    lt rx1048_pos, 2, rx1048_start
-    sub rx1048_off, rx1048_pos, 1
-    substr rx1048_tgt, rx1048_tgt, rx1048_off
-  rx1048_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1052_done
-    goto rxscan1052_scan
-  rxscan1052_loop:
-    ($P10) = rx1048_cur."from"()
-    inc $P10
-    set rx1048_pos, $P10
-    ge rx1048_pos, rx1048_eos, rxscan1052_done
-  rxscan1052_scan:
-    set_addr $I10, rxscan1052_loop
-    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
-  rxscan1052_done:
-.annotate "line", 482
+.sub "infix:sym<->"  :subid("265_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1051_tgt
+    .local int rx1051_pos
+    .local int rx1051_off
+    .local int rx1051_eos
+    .local int rx1051_rep
+    .local pmc rx1051_cur
+    (rx1051_cur, rx1051_pos, rx1051_tgt) = self."!cursor_start"()
+    rx1051_cur."!cursor_debug"("START ", "infix:sym<->")
+    .lex unicode:"$\x{a2}", rx1051_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1051_eos, rx1051_tgt
+    set rx1051_off, 0
+    lt rx1051_pos, 2, rx1051_start
+    sub rx1051_off, rx1051_pos, 1
+    substr rx1051_tgt, rx1051_tgt, rx1051_off
+  rx1051_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1055_done
+    goto rxscan1055_scan
+  rxscan1055_loop:
+    ($P10) = rx1051_cur."from"()
+    inc $P10
+    set rx1051_pos, $P10
+    ge rx1051_pos, rx1051_eos, rxscan1055_done
+  rxscan1055_scan:
+    set_addr $I10, rxscan1055_loop
+    rx1051_cur."!mark_push"(0, rx1051_pos, $I10)
+  rxscan1055_done:
+.annotate "line", 486
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1053_fail
-    rx1048_cur."!mark_push"(0, rx1048_pos, $I10)
+    set_addr $I10, rxcap_1056_fail
+    rx1051_cur."!mark_push"(0, rx1051_pos, $I10)
   # rx literal  "-"
-    add $I11, rx1048_pos, 1
-    gt $I11, rx1048_eos, rx1048_fail
-    sub $I11, rx1048_pos, rx1048_off
-    substr $S10, rx1048_tgt, $I11, 1
-    ne $S10, "-", rx1048_fail
-    add rx1048_pos, 1
-    set_addr $I10, rxcap_1053_fail
-    ($I12, $I11) = rx1048_cur."!mark_peek"($I10)
-    rx1048_cur."!cursor_pos"($I11)
-    ($P10) = rx1048_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1048_pos, "")
-    rx1048_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1051_pos, 1
+    gt $I11, rx1051_eos, rx1051_fail
+    sub $I11, rx1051_pos, rx1051_off
+    substr $S10, rx1051_tgt, $I11, 1
+    ne $S10, "-", rx1051_fail
+    add rx1051_pos, 1
+    set_addr $I10, rxcap_1056_fail
+    ($I12, $I11) = rx1051_cur."!mark_peek"($I10)
+    rx1051_cur."!cursor_pos"($I11)
+    ($P10) = rx1051_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1051_pos, "")
+    rx1051_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1053_done
-  rxcap_1053_fail:
-    goto rx1048_fail
-  rxcap_1053_done:
+    goto rxcap_1056_done
+  rxcap_1056_fail:
+    goto rx1051_fail
+  rxcap_1056_done:
   # rx subrule "O" subtype=capture negate=
-    rx1048_cur."!cursor_pos"(rx1048_pos)
-    $P10 = rx1048_cur."O"("%additive, :pirop<sub>")
-    unless $P10, rx1048_fail
-    rx1048_cur."!mark_push"(0, -1, 0, $P10)
+    rx1051_cur."!cursor_pos"(rx1051_pos)
+    $P10 = rx1051_cur."O"("%additive, :pirop<sub>")
+    unless $P10, rx1051_fail
+    rx1051_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1048_pos = $P10."pos"()
+    rx1051_pos = $P10."pos"()
   # rx pass
-    rx1048_cur."!cursor_pass"(rx1048_pos, "infix:sym<->")
-    rx1048_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1048_pos)
-    .return (rx1048_cur)
-  rx1048_fail:
-.annotate "line", 417
-    (rx1048_rep, rx1048_pos, $I10, $P10) = rx1048_cur."!mark_fail"(0)
-    lt rx1048_pos, -1, rx1048_done
-    eq rx1048_pos, -1, rx1048_fail
+    rx1051_cur."!cursor_pass"(rx1051_pos, "infix:sym<->")
+    rx1051_cur."!cursor_debug"("PASS  ", "infix:sym<->", " at pos=", rx1051_pos)
+    .return (rx1051_cur)
+  rx1051_fail:
+.annotate "line", 421
+    (rx1051_rep, rx1051_pos, $I10, $P10) = rx1051_cur."!mark_fail"(0)
+    lt rx1051_pos, -1, rx1051_done
+    eq rx1051_pos, -1, rx1051_fail
     jump $I10
-  rx1048_done:
-    rx1048_cur."!cursor_fail"()
-    rx1048_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
-    .return (rx1048_cur)
+  rx1051_done:
+    rx1051_cur."!cursor_fail"()
+    rx1051_cur."!cursor_debug"("FAIL  ", "infix:sym<->")
+    .return (rx1051_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<->"  :subid("266_1267204702.05125") :method
-.annotate "line", 417
-    $P1050 = self."!PREFIX__!subrule"("O", "-")
-    new $P1051, "ResizablePMCArray"
-    push $P1051, $P1050
-    .return ($P1051)
+.sub "!PREFIX__infix:sym<->"  :subid("266_1271336396.90314") :method
+.annotate "line", 421
+    $P1053 = self."!PREFIX__!subrule"("O", "-")
+    new $P1054, "ResizablePMCArray"
+    push $P1054, $P1053
+    .return ($P1054)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~>"  :subid("267_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1055_tgt
-    .local int rx1055_pos
-    .local int rx1055_off
-    .local int rx1055_eos
-    .local int rx1055_rep
-    .local pmc rx1055_cur
-    (rx1055_cur, rx1055_pos, rx1055_tgt) = self."!cursor_start"()
-    rx1055_cur."!cursor_debug"("START ", "infix:sym<~>")
-    .lex unicode:"$\x{a2}", rx1055_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1055_eos, rx1055_tgt
-    set rx1055_off, 0
-    lt rx1055_pos, 2, rx1055_start
-    sub rx1055_off, rx1055_pos, 1
-    substr rx1055_tgt, rx1055_tgt, rx1055_off
-  rx1055_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1059_done
-    goto rxscan1059_scan
-  rxscan1059_loop:
-    ($P10) = rx1055_cur."from"()
-    inc $P10
-    set rx1055_pos, $P10
-    ge rx1055_pos, rx1055_eos, rxscan1059_done
-  rxscan1059_scan:
-    set_addr $I10, rxscan1059_loop
-    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
-  rxscan1059_done:
-.annotate "line", 484
+.sub "infix:sym<~>"  :subid("267_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1058_tgt
+    .local int rx1058_pos
+    .local int rx1058_off
+    .local int rx1058_eos
+    .local int rx1058_rep
+    .local pmc rx1058_cur
+    (rx1058_cur, rx1058_pos, rx1058_tgt) = self."!cursor_start"()
+    rx1058_cur."!cursor_debug"("START ", "infix:sym<~>")
+    .lex unicode:"$\x{a2}", rx1058_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1058_eos, rx1058_tgt
+    set rx1058_off, 0
+    lt rx1058_pos, 2, rx1058_start
+    sub rx1058_off, rx1058_pos, 1
+    substr rx1058_tgt, rx1058_tgt, rx1058_off
+  rx1058_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1062_done
+    goto rxscan1062_scan
+  rxscan1062_loop:
+    ($P10) = rx1058_cur."from"()
+    inc $P10
+    set rx1058_pos, $P10
+    ge rx1058_pos, rx1058_eos, rxscan1062_done
+  rxscan1062_scan:
+    set_addr $I10, rxscan1062_loop
+    rx1058_cur."!mark_push"(0, rx1058_pos, $I10)
+  rxscan1062_done:
+.annotate "line", 488
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1060_fail
-    rx1055_cur."!mark_push"(0, rx1055_pos, $I10)
+    set_addr $I10, rxcap_1063_fail
+    rx1058_cur."!mark_push"(0, rx1058_pos, $I10)
   # rx literal  "~"
-    add $I11, rx1055_pos, 1
-    gt $I11, rx1055_eos, rx1055_fail
-    sub $I11, rx1055_pos, rx1055_off
-    substr $S10, rx1055_tgt, $I11, 1
-    ne $S10, "~", rx1055_fail
-    add rx1055_pos, 1
-    set_addr $I10, rxcap_1060_fail
-    ($I12, $I11) = rx1055_cur."!mark_peek"($I10)
-    rx1055_cur."!cursor_pos"($I11)
-    ($P10) = rx1055_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1055_pos, "")
-    rx1055_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1058_pos, 1
+    gt $I11, rx1058_eos, rx1058_fail
+    sub $I11, rx1058_pos, rx1058_off
+    substr $S10, rx1058_tgt, $I11, 1
+    ne $S10, "~", rx1058_fail
+    add rx1058_pos, 1
+    set_addr $I10, rxcap_1063_fail
+    ($I12, $I11) = rx1058_cur."!mark_peek"($I10)
+    rx1058_cur."!cursor_pos"($I11)
+    ($P10) = rx1058_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1058_pos, "")
+    rx1058_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1060_done
-  rxcap_1060_fail:
-    goto rx1055_fail
-  rxcap_1060_done:
+    goto rxcap_1063_done
+  rxcap_1063_fail:
+    goto rx1058_fail
+  rxcap_1063_done:
   # rx subrule "O" subtype=capture negate=
-    rx1055_cur."!cursor_pos"(rx1055_pos)
-    $P10 = rx1055_cur."O"("%concatenation , :pirop<concat>")
-    unless $P10, rx1055_fail
-    rx1055_cur."!mark_push"(0, -1, 0, $P10)
+    rx1058_cur."!cursor_pos"(rx1058_pos)
+    $P10 = rx1058_cur."O"("%concatenation , :pirop<concat>")
+    unless $P10, rx1058_fail
+    rx1058_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1055_pos = $P10."pos"()
+    rx1058_pos = $P10."pos"()
   # rx pass
-    rx1055_cur."!cursor_pass"(rx1055_pos, "infix:sym<~>")
-    rx1055_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1055_pos)
-    .return (rx1055_cur)
-  rx1055_fail:
-.annotate "line", 417
-    (rx1055_rep, rx1055_pos, $I10, $P10) = rx1055_cur."!mark_fail"(0)
-    lt rx1055_pos, -1, rx1055_done
-    eq rx1055_pos, -1, rx1055_fail
+    rx1058_cur."!cursor_pass"(rx1058_pos, "infix:sym<~>")
+    rx1058_cur."!cursor_debug"("PASS  ", "infix:sym<~>", " at pos=", rx1058_pos)
+    .return (rx1058_cur)
+  rx1058_fail:
+.annotate "line", 421
+    (rx1058_rep, rx1058_pos, $I10, $P10) = rx1058_cur."!mark_fail"(0)
+    lt rx1058_pos, -1, rx1058_done
+    eq rx1058_pos, -1, rx1058_fail
     jump $I10
-  rx1055_done:
-    rx1055_cur."!cursor_fail"()
-    rx1055_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
-    .return (rx1055_cur)
+  rx1058_done:
+    rx1058_cur."!cursor_fail"()
+    rx1058_cur."!cursor_debug"("FAIL  ", "infix:sym<~>")
+    .return (rx1058_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~>"  :subid("268_1267204702.05125") :method
-.annotate "line", 417
-    $P1057 = self."!PREFIX__!subrule"("O", "~")
-    new $P1058, "ResizablePMCArray"
-    push $P1058, $P1057
-    .return ($P1058)
+.sub "!PREFIX__infix:sym<~>"  :subid("268_1271336396.90314") :method
+.annotate "line", 421
+    $P1060 = self."!PREFIX__!subrule"("O", "~")
+    new $P1061, "ResizablePMCArray"
+    push $P1061, $P1060
+    .return ($P1061)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<==>"  :subid("269_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1062_tgt
-    .local int rx1062_pos
-    .local int rx1062_off
-    .local int rx1062_eos
-    .local int rx1062_rep
-    .local pmc rx1062_cur
-    (rx1062_cur, rx1062_pos, rx1062_tgt) = self."!cursor_start"()
-    rx1062_cur."!cursor_debug"("START ", "infix:sym<==>")
-    .lex unicode:"$\x{a2}", rx1062_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1062_eos, rx1062_tgt
-    set rx1062_off, 0
-    lt rx1062_pos, 2, rx1062_start
-    sub rx1062_off, rx1062_pos, 1
-    substr rx1062_tgt, rx1062_tgt, rx1062_off
-  rx1062_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1066_done
-    goto rxscan1066_scan
-  rxscan1066_loop:
-    ($P10) = rx1062_cur."from"()
-    inc $P10
-    set rx1062_pos, $P10
-    ge rx1062_pos, rx1062_eos, rxscan1066_done
-  rxscan1066_scan:
-    set_addr $I10, rxscan1066_loop
-    rx1062_cur."!mark_push"(0, rx1062_pos, $I10)
-  rxscan1066_done:
-.annotate "line", 486
+.sub "infix:sym<==>"  :subid("269_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1065_tgt
+    .local int rx1065_pos
+    .local int rx1065_off
+    .local int rx1065_eos
+    .local int rx1065_rep
+    .local pmc rx1065_cur
+    (rx1065_cur, rx1065_pos, rx1065_tgt) = self."!cursor_start"()
+    rx1065_cur."!cursor_debug"("START ", "infix:sym<==>")
+    .lex unicode:"$\x{a2}", rx1065_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1065_eos, rx1065_tgt
+    set rx1065_off, 0
+    lt rx1065_pos, 2, rx1065_start
+    sub rx1065_off, rx1065_pos, 1
+    substr rx1065_tgt, rx1065_tgt, rx1065_off
+  rx1065_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1069_done
+    goto rxscan1069_scan
+  rxscan1069_loop:
+    ($P10) = rx1065_cur."from"()
+    inc $P10
+    set rx1065_pos, $P10
+    ge rx1065_pos, rx1065_eos, rxscan1069_done
+  rxscan1069_scan:
+    set_addr $I10, rxscan1069_loop
+    rx1065_cur."!mark_push"(0, rx1065_pos, $I10)
+  rxscan1069_done:
+.annotate "line", 490
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1067_fail
-    rx1062_cur."!mark_push"(0, rx1062_pos, $I10)
+    set_addr $I10, rxcap_1070_fail
+    rx1065_cur."!mark_push"(0, rx1065_pos, $I10)
   # rx literal  "=="
-    add $I11, rx1062_pos, 2
-    gt $I11, rx1062_eos, rx1062_fail
-    sub $I11, rx1062_pos, rx1062_off
-    substr $S10, rx1062_tgt, $I11, 2
-    ne $S10, "==", rx1062_fail
-    add rx1062_pos, 2
-    set_addr $I10, rxcap_1067_fail
-    ($I12, $I11) = rx1062_cur."!mark_peek"($I10)
-    rx1062_cur."!cursor_pos"($I11)
-    ($P10) = rx1062_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1062_pos, "")
-    rx1062_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1065_pos, 2
+    gt $I11, rx1065_eos, rx1065_fail
+    sub $I11, rx1065_pos, rx1065_off
+    substr $S10, rx1065_tgt, $I11, 2
+    ne $S10, "==", rx1065_fail
+    add rx1065_pos, 2
+    set_addr $I10, rxcap_1070_fail
+    ($I12, $I11) = rx1065_cur."!mark_peek"($I10)
+    rx1065_cur."!cursor_pos"($I11)
+    ($P10) = rx1065_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1065_pos, "")
+    rx1065_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1067_done
-  rxcap_1067_fail:
-    goto rx1062_fail
-  rxcap_1067_done:
+    goto rxcap_1070_done
+  rxcap_1070_fail:
+    goto rx1065_fail
+  rxcap_1070_done:
   # rx subrule "O" subtype=capture negate=
-    rx1062_cur."!cursor_pos"(rx1062_pos)
-    $P10 = rx1062_cur."O"("%relational, :pirop<iseq INn>")
-    unless $P10, rx1062_fail
-    rx1062_cur."!mark_push"(0, -1, 0, $P10)
+    rx1065_cur."!cursor_pos"(rx1065_pos)
+    $P10 = rx1065_cur."O"("%relational, :pirop<iseq INn>")
+    unless $P10, rx1065_fail
+    rx1065_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1062_pos = $P10."pos"()
+    rx1065_pos = $P10."pos"()
   # rx pass
-    rx1062_cur."!cursor_pass"(rx1062_pos, "infix:sym<==>")
-    rx1062_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1062_pos)
-    .return (rx1062_cur)
-  rx1062_fail:
-.annotate "line", 417
-    (rx1062_rep, rx1062_pos, $I10, $P10) = rx1062_cur."!mark_fail"(0)
-    lt rx1062_pos, -1, rx1062_done
-    eq rx1062_pos, -1, rx1062_fail
+    rx1065_cur."!cursor_pass"(rx1065_pos, "infix:sym<==>")
+    rx1065_cur."!cursor_debug"("PASS  ", "infix:sym<==>", " at pos=", rx1065_pos)
+    .return (rx1065_cur)
+  rx1065_fail:
+.annotate "line", 421
+    (rx1065_rep, rx1065_pos, $I10, $P10) = rx1065_cur."!mark_fail"(0)
+    lt rx1065_pos, -1, rx1065_done
+    eq rx1065_pos, -1, rx1065_fail
     jump $I10
-  rx1062_done:
-    rx1062_cur."!cursor_fail"()
-    rx1062_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
-    .return (rx1062_cur)
+  rx1065_done:
+    rx1065_cur."!cursor_fail"()
+    rx1065_cur."!cursor_debug"("FAIL  ", "infix:sym<==>")
+    .return (rx1065_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<==>"  :subid("270_1267204702.05125") :method
-.annotate "line", 417
-    $P1064 = self."!PREFIX__!subrule"("O", "==")
-    new $P1065, "ResizablePMCArray"
-    push $P1065, $P1064
-    .return ($P1065)
+.sub "!PREFIX__infix:sym<==>"  :subid("270_1271336396.90314") :method
+.annotate "line", 421
+    $P1067 = self."!PREFIX__!subrule"("O", "==")
+    new $P1068, "ResizablePMCArray"
+    push $P1068, $P1067
+    .return ($P1068)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<!=>"  :subid("271_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1069_tgt
-    .local int rx1069_pos
-    .local int rx1069_off
-    .local int rx1069_eos
-    .local int rx1069_rep
-    .local pmc rx1069_cur
-    (rx1069_cur, rx1069_pos, rx1069_tgt) = self."!cursor_start"()
-    rx1069_cur."!cursor_debug"("START ", "infix:sym<!=>")
-    .lex unicode:"$\x{a2}", rx1069_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1069_eos, rx1069_tgt
-    set rx1069_off, 0
-    lt rx1069_pos, 2, rx1069_start
-    sub rx1069_off, rx1069_pos, 1
-    substr rx1069_tgt, rx1069_tgt, rx1069_off
-  rx1069_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1073_done
-    goto rxscan1073_scan
-  rxscan1073_loop:
-    ($P10) = rx1069_cur."from"()
-    inc $P10
-    set rx1069_pos, $P10
-    ge rx1069_pos, rx1069_eos, rxscan1073_done
-  rxscan1073_scan:
-    set_addr $I10, rxscan1073_loop
-    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
-  rxscan1073_done:
-.annotate "line", 487
+.sub "infix:sym<!=>"  :subid("271_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1072_tgt
+    .local int rx1072_pos
+    .local int rx1072_off
+    .local int rx1072_eos
+    .local int rx1072_rep
+    .local pmc rx1072_cur
+    (rx1072_cur, rx1072_pos, rx1072_tgt) = self."!cursor_start"()
+    rx1072_cur."!cursor_debug"("START ", "infix:sym<!=>")
+    .lex unicode:"$\x{a2}", rx1072_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1072_eos, rx1072_tgt
+    set rx1072_off, 0
+    lt rx1072_pos, 2, rx1072_start
+    sub rx1072_off, rx1072_pos, 1
+    substr rx1072_tgt, rx1072_tgt, rx1072_off
+  rx1072_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1076_done
+    goto rxscan1076_scan
+  rxscan1076_loop:
+    ($P10) = rx1072_cur."from"()
+    inc $P10
+    set rx1072_pos, $P10
+    ge rx1072_pos, rx1072_eos, rxscan1076_done
+  rxscan1076_scan:
+    set_addr $I10, rxscan1076_loop
+    rx1072_cur."!mark_push"(0, rx1072_pos, $I10)
+  rxscan1076_done:
+.annotate "line", 491
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1074_fail
-    rx1069_cur."!mark_push"(0, rx1069_pos, $I10)
+    set_addr $I10, rxcap_1077_fail
+    rx1072_cur."!mark_push"(0, rx1072_pos, $I10)
   # rx literal  "!="
-    add $I11, rx1069_pos, 2
-    gt $I11, rx1069_eos, rx1069_fail
-    sub $I11, rx1069_pos, rx1069_off
-    substr $S10, rx1069_tgt, $I11, 2
-    ne $S10, "!=", rx1069_fail
-    add rx1069_pos, 2
-    set_addr $I10, rxcap_1074_fail
-    ($I12, $I11) = rx1069_cur."!mark_peek"($I10)
-    rx1069_cur."!cursor_pos"($I11)
-    ($P10) = rx1069_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1069_pos, "")
-    rx1069_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1072_pos, 2
+    gt $I11, rx1072_eos, rx1072_fail
+    sub $I11, rx1072_pos, rx1072_off
+    substr $S10, rx1072_tgt, $I11, 2
+    ne $S10, "!=", rx1072_fail
+    add rx1072_pos, 2
+    set_addr $I10, rxcap_1077_fail
+    ($I12, $I11) = rx1072_cur."!mark_peek"($I10)
+    rx1072_cur."!cursor_pos"($I11)
+    ($P10) = rx1072_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1072_pos, "")
+    rx1072_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1074_done
-  rxcap_1074_fail:
-    goto rx1069_fail
-  rxcap_1074_done:
+    goto rxcap_1077_done
+  rxcap_1077_fail:
+    goto rx1072_fail
+  rxcap_1077_done:
   # rx subrule "O" subtype=capture negate=
-    rx1069_cur."!cursor_pos"(rx1069_pos)
-    $P10 = rx1069_cur."O"("%relational, :pirop<isne INn>")
-    unless $P10, rx1069_fail
-    rx1069_cur."!mark_push"(0, -1, 0, $P10)
+    rx1072_cur."!cursor_pos"(rx1072_pos)
+    $P10 = rx1072_cur."O"("%relational, :pirop<isne INn>")
+    unless $P10, rx1072_fail
+    rx1072_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1069_pos = $P10."pos"()
+    rx1072_pos = $P10."pos"()
   # rx pass
-    rx1069_cur."!cursor_pass"(rx1069_pos, "infix:sym<!=>")
-    rx1069_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1069_pos)
-    .return (rx1069_cur)
-  rx1069_fail:
-.annotate "line", 417
-    (rx1069_rep, rx1069_pos, $I10, $P10) = rx1069_cur."!mark_fail"(0)
-    lt rx1069_pos, -1, rx1069_done
-    eq rx1069_pos, -1, rx1069_fail
+    rx1072_cur."!cursor_pass"(rx1072_pos, "infix:sym<!=>")
+    rx1072_cur."!cursor_debug"("PASS  ", "infix:sym<!=>", " at pos=", rx1072_pos)
+    .return (rx1072_cur)
+  rx1072_fail:
+.annotate "line", 421
+    (rx1072_rep, rx1072_pos, $I10, $P10) = rx1072_cur."!mark_fail"(0)
+    lt rx1072_pos, -1, rx1072_done
+    eq rx1072_pos, -1, rx1072_fail
     jump $I10
-  rx1069_done:
-    rx1069_cur."!cursor_fail"()
-    rx1069_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
-    .return (rx1069_cur)
+  rx1072_done:
+    rx1072_cur."!cursor_fail"()
+    rx1072_cur."!cursor_debug"("FAIL  ", "infix:sym<!=>")
+    .return (rx1072_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<!=>"  :subid("272_1267204702.05125") :method
-.annotate "line", 417
-    $P1071 = self."!PREFIX__!subrule"("O", "!=")
-    new $P1072, "ResizablePMCArray"
-    push $P1072, $P1071
-    .return ($P1072)
+.sub "!PREFIX__infix:sym<!=>"  :subid("272_1271336396.90314") :method
+.annotate "line", 421
+    $P1074 = self."!PREFIX__!subrule"("O", "!=")
+    new $P1075, "ResizablePMCArray"
+    push $P1075, $P1074
+    .return ($P1075)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<=>"  :subid("273_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1076_tgt
-    .local int rx1076_pos
-    .local int rx1076_off
-    .local int rx1076_eos
-    .local int rx1076_rep
-    .local pmc rx1076_cur
-    (rx1076_cur, rx1076_pos, rx1076_tgt) = self."!cursor_start"()
-    rx1076_cur."!cursor_debug"("START ", "infix:sym<<=>")
-    .lex unicode:"$\x{a2}", rx1076_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1076_eos, rx1076_tgt
-    set rx1076_off, 0
-    lt rx1076_pos, 2, rx1076_start
-    sub rx1076_off, rx1076_pos, 1
-    substr rx1076_tgt, rx1076_tgt, rx1076_off
-  rx1076_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1080_done
-    goto rxscan1080_scan
-  rxscan1080_loop:
-    ($P10) = rx1076_cur."from"()
-    inc $P10
-    set rx1076_pos, $P10
-    ge rx1076_pos, rx1076_eos, rxscan1080_done
-  rxscan1080_scan:
-    set_addr $I10, rxscan1080_loop
-    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
-  rxscan1080_done:
-.annotate "line", 488
+.sub "infix:sym<<=>"  :subid("273_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1079_tgt
+    .local int rx1079_pos
+    .local int rx1079_off
+    .local int rx1079_eos
+    .local int rx1079_rep
+    .local pmc rx1079_cur
+    (rx1079_cur, rx1079_pos, rx1079_tgt) = self."!cursor_start"()
+    rx1079_cur."!cursor_debug"("START ", "infix:sym<<=>")
+    .lex unicode:"$\x{a2}", rx1079_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1079_eos, rx1079_tgt
+    set rx1079_off, 0
+    lt rx1079_pos, 2, rx1079_start
+    sub rx1079_off, rx1079_pos, 1
+    substr rx1079_tgt, rx1079_tgt, rx1079_off
+  rx1079_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1083_done
+    goto rxscan1083_scan
+  rxscan1083_loop:
+    ($P10) = rx1079_cur."from"()
+    inc $P10
+    set rx1079_pos, $P10
+    ge rx1079_pos, rx1079_eos, rxscan1083_done
+  rxscan1083_scan:
+    set_addr $I10, rxscan1083_loop
+    rx1079_cur."!mark_push"(0, rx1079_pos, $I10)
+  rxscan1083_done:
+.annotate "line", 492
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1081_fail
-    rx1076_cur."!mark_push"(0, rx1076_pos, $I10)
+    set_addr $I10, rxcap_1084_fail
+    rx1079_cur."!mark_push"(0, rx1079_pos, $I10)
   # rx literal  "<="
-    add $I11, rx1076_pos, 2
-    gt $I11, rx1076_eos, rx1076_fail
-    sub $I11, rx1076_pos, rx1076_off
-    substr $S10, rx1076_tgt, $I11, 2
-    ne $S10, "<=", rx1076_fail
-    add rx1076_pos, 2
-    set_addr $I10, rxcap_1081_fail
-    ($I12, $I11) = rx1076_cur."!mark_peek"($I10)
-    rx1076_cur."!cursor_pos"($I11)
-    ($P10) = rx1076_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1076_pos, "")
-    rx1076_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1079_pos, 2
+    gt $I11, rx1079_eos, rx1079_fail
+    sub $I11, rx1079_pos, rx1079_off
+    substr $S10, rx1079_tgt, $I11, 2
+    ne $S10, "<=", rx1079_fail
+    add rx1079_pos, 2
+    set_addr $I10, rxcap_1084_fail
+    ($I12, $I11) = rx1079_cur."!mark_peek"($I10)
+    rx1079_cur."!cursor_pos"($I11)
+    ($P10) = rx1079_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1079_pos, "")
+    rx1079_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1081_done
-  rxcap_1081_fail:
-    goto rx1076_fail
-  rxcap_1081_done:
+    goto rxcap_1084_done
+  rxcap_1084_fail:
+    goto rx1079_fail
+  rxcap_1084_done:
   # rx subrule "O" subtype=capture negate=
-    rx1076_cur."!cursor_pos"(rx1076_pos)
-    $P10 = rx1076_cur."O"("%relational, :pirop<isle INn>")
-    unless $P10, rx1076_fail
-    rx1076_cur."!mark_push"(0, -1, 0, $P10)
+    rx1079_cur."!cursor_pos"(rx1079_pos)
+    $P10 = rx1079_cur."O"("%relational, :pirop<isle INn>")
+    unless $P10, rx1079_fail
+    rx1079_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1076_pos = $P10."pos"()
+    rx1079_pos = $P10."pos"()
   # rx pass
-    rx1076_cur."!cursor_pass"(rx1076_pos, "infix:sym<<=>")
-    rx1076_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1076_pos)
-    .return (rx1076_cur)
-  rx1076_fail:
-.annotate "line", 417
-    (rx1076_rep, rx1076_pos, $I10, $P10) = rx1076_cur."!mark_fail"(0)
-    lt rx1076_pos, -1, rx1076_done
-    eq rx1076_pos, -1, rx1076_fail
+    rx1079_cur."!cursor_pass"(rx1079_pos, "infix:sym<<=>")
+    rx1079_cur."!cursor_debug"("PASS  ", "infix:sym<<=>", " at pos=", rx1079_pos)
+    .return (rx1079_cur)
+  rx1079_fail:
+.annotate "line", 421
+    (rx1079_rep, rx1079_pos, $I10, $P10) = rx1079_cur."!mark_fail"(0)
+    lt rx1079_pos, -1, rx1079_done
+    eq rx1079_pos, -1, rx1079_fail
     jump $I10
-  rx1076_done:
-    rx1076_cur."!cursor_fail"()
-    rx1076_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
-    .return (rx1076_cur)
+  rx1079_done:
+    rx1079_cur."!cursor_fail"()
+    rx1079_cur."!cursor_debug"("FAIL  ", "infix:sym<<=>")
+    .return (rx1079_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<=>"  :subid("274_1267204702.05125") :method
-.annotate "line", 417
-    $P1078 = self."!PREFIX__!subrule"("O", "<=")
-    new $P1079, "ResizablePMCArray"
-    push $P1079, $P1078
-    .return ($P1079)
+.sub "!PREFIX__infix:sym<<=>"  :subid("274_1271336396.90314") :method
+.annotate "line", 421
+    $P1081 = self."!PREFIX__!subrule"("O", "<=")
+    new $P1082, "ResizablePMCArray"
+    push $P1082, $P1081
+    .return ($P1082)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>=>"  :subid("275_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1083_tgt
-    .local int rx1083_pos
-    .local int rx1083_off
-    .local int rx1083_eos
-    .local int rx1083_rep
-    .local pmc rx1083_cur
-    (rx1083_cur, rx1083_pos, rx1083_tgt) = self."!cursor_start"()
-    rx1083_cur."!cursor_debug"("START ", "infix:sym<>=>")
-    .lex unicode:"$\x{a2}", rx1083_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1083_eos, rx1083_tgt
-    set rx1083_off, 0
-    lt rx1083_pos, 2, rx1083_start
-    sub rx1083_off, rx1083_pos, 1
-    substr rx1083_tgt, rx1083_tgt, rx1083_off
-  rx1083_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1087_done
-    goto rxscan1087_scan
-  rxscan1087_loop:
-    ($P10) = rx1083_cur."from"()
-    inc $P10
-    set rx1083_pos, $P10
-    ge rx1083_pos, rx1083_eos, rxscan1087_done
-  rxscan1087_scan:
-    set_addr $I10, rxscan1087_loop
-    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
-  rxscan1087_done:
-.annotate "line", 489
+.sub "infix:sym<>=>"  :subid("275_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1086_tgt
+    .local int rx1086_pos
+    .local int rx1086_off
+    .local int rx1086_eos
+    .local int rx1086_rep
+    .local pmc rx1086_cur
+    (rx1086_cur, rx1086_pos, rx1086_tgt) = self."!cursor_start"()
+    rx1086_cur."!cursor_debug"("START ", "infix:sym<>=>")
+    .lex unicode:"$\x{a2}", rx1086_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1086_eos, rx1086_tgt
+    set rx1086_off, 0
+    lt rx1086_pos, 2, rx1086_start
+    sub rx1086_off, rx1086_pos, 1
+    substr rx1086_tgt, rx1086_tgt, rx1086_off
+  rx1086_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1090_done
+    goto rxscan1090_scan
+  rxscan1090_loop:
+    ($P10) = rx1086_cur."from"()
+    inc $P10
+    set rx1086_pos, $P10
+    ge rx1086_pos, rx1086_eos, rxscan1090_done
+  rxscan1090_scan:
+    set_addr $I10, rxscan1090_loop
+    rx1086_cur."!mark_push"(0, rx1086_pos, $I10)
+  rxscan1090_done:
+.annotate "line", 493
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1088_fail
-    rx1083_cur."!mark_push"(0, rx1083_pos, $I10)
+    set_addr $I10, rxcap_1091_fail
+    rx1086_cur."!mark_push"(0, rx1086_pos, $I10)
   # rx literal  ">="
-    add $I11, rx1083_pos, 2
-    gt $I11, rx1083_eos, rx1083_fail
-    sub $I11, rx1083_pos, rx1083_off
-    substr $S10, rx1083_tgt, $I11, 2
-    ne $S10, ">=", rx1083_fail
-    add rx1083_pos, 2
-    set_addr $I10, rxcap_1088_fail
-    ($I12, $I11) = rx1083_cur."!mark_peek"($I10)
-    rx1083_cur."!cursor_pos"($I11)
-    ($P10) = rx1083_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1083_pos, "")
-    rx1083_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1086_pos, 2
+    gt $I11, rx1086_eos, rx1086_fail
+    sub $I11, rx1086_pos, rx1086_off
+    substr $S10, rx1086_tgt, $I11, 2
+    ne $S10, ">=", rx1086_fail
+    add rx1086_pos, 2
+    set_addr $I10, rxcap_1091_fail
+    ($I12, $I11) = rx1086_cur."!mark_peek"($I10)
+    rx1086_cur."!cursor_pos"($I11)
+    ($P10) = rx1086_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1086_pos, "")
+    rx1086_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1088_done
-  rxcap_1088_fail:
-    goto rx1083_fail
-  rxcap_1088_done:
+    goto rxcap_1091_done
+  rxcap_1091_fail:
+    goto rx1086_fail
+  rxcap_1091_done:
   # rx subrule "O" subtype=capture negate=
-    rx1083_cur."!cursor_pos"(rx1083_pos)
-    $P10 = rx1083_cur."O"("%relational, :pirop<isge INn>")
-    unless $P10, rx1083_fail
-    rx1083_cur."!mark_push"(0, -1, 0, $P10)
+    rx1086_cur."!cursor_pos"(rx1086_pos)
+    $P10 = rx1086_cur."O"("%relational, :pirop<isge INn>")
+    unless $P10, rx1086_fail
+    rx1086_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1083_pos = $P10."pos"()
+    rx1086_pos = $P10."pos"()
   # rx pass
-    rx1083_cur."!cursor_pass"(rx1083_pos, "infix:sym<>=>")
-    rx1083_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1083_pos)
-    .return (rx1083_cur)
-  rx1083_fail:
-.annotate "line", 417
-    (rx1083_rep, rx1083_pos, $I10, $P10) = rx1083_cur."!mark_fail"(0)
-    lt rx1083_pos, -1, rx1083_done
-    eq rx1083_pos, -1, rx1083_fail
+    rx1086_cur."!cursor_pass"(rx1086_pos, "infix:sym<>=>")
+    rx1086_cur."!cursor_debug"("PASS  ", "infix:sym<>=>", " at pos=", rx1086_pos)
+    .return (rx1086_cur)
+  rx1086_fail:
+.annotate "line", 421
+    (rx1086_rep, rx1086_pos, $I10, $P10) = rx1086_cur."!mark_fail"(0)
+    lt rx1086_pos, -1, rx1086_done
+    eq rx1086_pos, -1, rx1086_fail
     jump $I10
-  rx1083_done:
-    rx1083_cur."!cursor_fail"()
-    rx1083_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
-    .return (rx1083_cur)
+  rx1086_done:
+    rx1086_cur."!cursor_fail"()
+    rx1086_cur."!cursor_debug"("FAIL  ", "infix:sym<>=>")
+    .return (rx1086_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>=>"  :subid("276_1267204702.05125") :method
-.annotate "line", 417
-    $P1085 = self."!PREFIX__!subrule"("O", ">=")
-    new $P1086, "ResizablePMCArray"
-    push $P1086, $P1085
-    .return ($P1086)
+.sub "!PREFIX__infix:sym<>=>"  :subid("276_1271336396.90314") :method
+.annotate "line", 421
+    $P1088 = self."!PREFIX__!subrule"("O", ">=")
+    new $P1089, "ResizablePMCArray"
+    push $P1089, $P1088
+    .return ($P1089)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<<>"  :subid("277_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1090_tgt
-    .local int rx1090_pos
-    .local int rx1090_off
-    .local int rx1090_eos
-    .local int rx1090_rep
-    .local pmc rx1090_cur
-    (rx1090_cur, rx1090_pos, rx1090_tgt) = self."!cursor_start"()
-    rx1090_cur."!cursor_debug"("START ", "infix:sym<<>")
-    .lex unicode:"$\x{a2}", rx1090_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1090_eos, rx1090_tgt
-    set rx1090_off, 0
-    lt rx1090_pos, 2, rx1090_start
-    sub rx1090_off, rx1090_pos, 1
-    substr rx1090_tgt, rx1090_tgt, rx1090_off
-  rx1090_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1094_done
-    goto rxscan1094_scan
-  rxscan1094_loop:
-    ($P10) = rx1090_cur."from"()
-    inc $P10
-    set rx1090_pos, $P10
-    ge rx1090_pos, rx1090_eos, rxscan1094_done
-  rxscan1094_scan:
-    set_addr $I10, rxscan1094_loop
-    rx1090_cur."!mark_push"(0, rx1090_pos, $I10)
-  rxscan1094_done:
-.annotate "line", 490
+.sub "infix:sym<<>"  :subid("277_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1093_tgt
+    .local int rx1093_pos
+    .local int rx1093_off
+    .local int rx1093_eos
+    .local int rx1093_rep
+    .local pmc rx1093_cur
+    (rx1093_cur, rx1093_pos, rx1093_tgt) = self."!cursor_start"()
+    rx1093_cur."!cursor_debug"("START ", "infix:sym<<>")
+    .lex unicode:"$\x{a2}", rx1093_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1093_eos, rx1093_tgt
+    set rx1093_off, 0
+    lt rx1093_pos, 2, rx1093_start
+    sub rx1093_off, rx1093_pos, 1
+    substr rx1093_tgt, rx1093_tgt, rx1093_off
+  rx1093_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1097_done
+    goto rxscan1097_scan
+  rxscan1097_loop:
+    ($P10) = rx1093_cur."from"()
+    inc $P10
+    set rx1093_pos, $P10
+    ge rx1093_pos, rx1093_eos, rxscan1097_done
+  rxscan1097_scan:
+    set_addr $I10, rxscan1097_loop
+    rx1093_cur."!mark_push"(0, rx1093_pos, $I10)
+  rxscan1097_done:
+.annotate "line", 494
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1095_fail
-    rx1090_cur."!mark_push"(0, rx1090_pos, $I10)
+    set_addr $I10, rxcap_1098_fail
+    rx1093_cur."!mark_push"(0, rx1093_pos, $I10)
   # rx literal  "<"
-    add $I11, rx1090_pos, 1
-    gt $I11, rx1090_eos, rx1090_fail
-    sub $I11, rx1090_pos, rx1090_off
-    substr $S10, rx1090_tgt, $I11, 1
-    ne $S10, "<", rx1090_fail
-    add rx1090_pos, 1
-    set_addr $I10, rxcap_1095_fail
-    ($I12, $I11) = rx1090_cur."!mark_peek"($I10)
-    rx1090_cur."!cursor_pos"($I11)
-    ($P10) = rx1090_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1090_pos, "")
-    rx1090_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1093_pos, 1
+    gt $I11, rx1093_eos, rx1093_fail
+    sub $I11, rx1093_pos, rx1093_off
+    substr $S10, rx1093_tgt, $I11, 1
+    ne $S10, "<", rx1093_fail
+    add rx1093_pos, 1
+    set_addr $I10, rxcap_1098_fail
+    ($I12, $I11) = rx1093_cur."!mark_peek"($I10)
+    rx1093_cur."!cursor_pos"($I11)
+    ($P10) = rx1093_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1093_pos, "")
+    rx1093_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1095_done
-  rxcap_1095_fail:
-    goto rx1090_fail
-  rxcap_1095_done:
+    goto rxcap_1098_done
+  rxcap_1098_fail:
+    goto rx1093_fail
+  rxcap_1098_done:
   # rx subrule "O" subtype=capture negate=
-    rx1090_cur."!cursor_pos"(rx1090_pos)
-    $P10 = rx1090_cur."O"("%relational, :pirop<islt INn>")
-    unless $P10, rx1090_fail
-    rx1090_cur."!mark_push"(0, -1, 0, $P10)
+    rx1093_cur."!cursor_pos"(rx1093_pos)
+    $P10 = rx1093_cur."O"("%relational, :pirop<islt INn>")
+    unless $P10, rx1093_fail
+    rx1093_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1090_pos = $P10."pos"()
+    rx1093_pos = $P10."pos"()
   # rx pass
-    rx1090_cur."!cursor_pass"(rx1090_pos, "infix:sym<<>")
-    rx1090_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1090_pos)
-    .return (rx1090_cur)
-  rx1090_fail:
-.annotate "line", 417
-    (rx1090_rep, rx1090_pos, $I10, $P10) = rx1090_cur."!mark_fail"(0)
-    lt rx1090_pos, -1, rx1090_done
-    eq rx1090_pos, -1, rx1090_fail
+    rx1093_cur."!cursor_pass"(rx1093_pos, "infix:sym<<>")
+    rx1093_cur."!cursor_debug"("PASS  ", "infix:sym<<>", " at pos=", rx1093_pos)
+    .return (rx1093_cur)
+  rx1093_fail:
+.annotate "line", 421
+    (rx1093_rep, rx1093_pos, $I10, $P10) = rx1093_cur."!mark_fail"(0)
+    lt rx1093_pos, -1, rx1093_done
+    eq rx1093_pos, -1, rx1093_fail
     jump $I10
-  rx1090_done:
-    rx1090_cur."!cursor_fail"()
-    rx1090_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
-    .return (rx1090_cur)
+  rx1093_done:
+    rx1093_cur."!cursor_fail"()
+    rx1093_cur."!cursor_debug"("FAIL  ", "infix:sym<<>")
+    .return (rx1093_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<<>"  :subid("278_1267204702.05125") :method
-.annotate "line", 417
-    $P1092 = self."!PREFIX__!subrule"("O", "<")
-    new $P1093, "ResizablePMCArray"
-    push $P1093, $P1092
-    .return ($P1093)
+.sub "!PREFIX__infix:sym<<>"  :subid("278_1271336396.90314") :method
+.annotate "line", 421
+    $P1095 = self."!PREFIX__!subrule"("O", "<")
+    new $P1096, "ResizablePMCArray"
+    push $P1096, $P1095
+    .return ($P1096)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<>>"  :subid("279_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1097_tgt
-    .local int rx1097_pos
-    .local int rx1097_off
-    .local int rx1097_eos
-    .local int rx1097_rep
-    .local pmc rx1097_cur
-    (rx1097_cur, rx1097_pos, rx1097_tgt) = self."!cursor_start"()
-    rx1097_cur."!cursor_debug"("START ", "infix:sym<>>")
-    .lex unicode:"$\x{a2}", rx1097_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1097_eos, rx1097_tgt
-    set rx1097_off, 0
-    lt rx1097_pos, 2, rx1097_start
-    sub rx1097_off, rx1097_pos, 1
-    substr rx1097_tgt, rx1097_tgt, rx1097_off
-  rx1097_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1101_done
-    goto rxscan1101_scan
-  rxscan1101_loop:
-    ($P10) = rx1097_cur."from"()
-    inc $P10
-    set rx1097_pos, $P10
-    ge rx1097_pos, rx1097_eos, rxscan1101_done
-  rxscan1101_scan:
-    set_addr $I10, rxscan1101_loop
-    rx1097_cur."!mark_push"(0, rx1097_pos, $I10)
-  rxscan1101_done:
-.annotate "line", 491
+.sub "infix:sym<>>"  :subid("279_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1100_tgt
+    .local int rx1100_pos
+    .local int rx1100_off
+    .local int rx1100_eos
+    .local int rx1100_rep
+    .local pmc rx1100_cur
+    (rx1100_cur, rx1100_pos, rx1100_tgt) = self."!cursor_start"()
+    rx1100_cur."!cursor_debug"("START ", "infix:sym<>>")
+    .lex unicode:"$\x{a2}", rx1100_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1100_eos, rx1100_tgt
+    set rx1100_off, 0
+    lt rx1100_pos, 2, rx1100_start
+    sub rx1100_off, rx1100_pos, 1
+    substr rx1100_tgt, rx1100_tgt, rx1100_off
+  rx1100_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1104_done
+    goto rxscan1104_scan
+  rxscan1104_loop:
+    ($P10) = rx1100_cur."from"()
+    inc $P10
+    set rx1100_pos, $P10
+    ge rx1100_pos, rx1100_eos, rxscan1104_done
+  rxscan1104_scan:
+    set_addr $I10, rxscan1104_loop
+    rx1100_cur."!mark_push"(0, rx1100_pos, $I10)
+  rxscan1104_done:
+.annotate "line", 495
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1102_fail
-    rx1097_cur."!mark_push"(0, rx1097_pos, $I10)
+    set_addr $I10, rxcap_1105_fail
+    rx1100_cur."!mark_push"(0, rx1100_pos, $I10)
   # rx literal  ">"
-    add $I11, rx1097_pos, 1
-    gt $I11, rx1097_eos, rx1097_fail
-    sub $I11, rx1097_pos, rx1097_off
-    substr $S10, rx1097_tgt, $I11, 1
-    ne $S10, ">", rx1097_fail
-    add rx1097_pos, 1
-    set_addr $I10, rxcap_1102_fail
-    ($I12, $I11) = rx1097_cur."!mark_peek"($I10)
-    rx1097_cur."!cursor_pos"($I11)
-    ($P10) = rx1097_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1097_pos, "")
-    rx1097_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1100_pos, 1
+    gt $I11, rx1100_eos, rx1100_fail
+    sub $I11, rx1100_pos, rx1100_off
+    substr $S10, rx1100_tgt, $I11, 1
+    ne $S10, ">", rx1100_fail
+    add rx1100_pos, 1
+    set_addr $I10, rxcap_1105_fail
+    ($I12, $I11) = rx1100_cur."!mark_peek"($I10)
+    rx1100_cur."!cursor_pos"($I11)
+    ($P10) = rx1100_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1100_pos, "")
+    rx1100_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1102_done
-  rxcap_1102_fail:
-    goto rx1097_fail
-  rxcap_1102_done:
+    goto rxcap_1105_done
+  rxcap_1105_fail:
+    goto rx1100_fail
+  rxcap_1105_done:
   # rx subrule "O" subtype=capture negate=
-    rx1097_cur."!cursor_pos"(rx1097_pos)
-    $P10 = rx1097_cur."O"("%relational, :pirop<isgt INn>")
-    unless $P10, rx1097_fail
-    rx1097_cur."!mark_push"(0, -1, 0, $P10)
+    rx1100_cur."!cursor_pos"(rx1100_pos)
+    $P10 = rx1100_cur."O"("%relational, :pirop<isgt INn>")
+    unless $P10, rx1100_fail
+    rx1100_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1097_pos = $P10."pos"()
+    rx1100_pos = $P10."pos"()
   # rx pass
-    rx1097_cur."!cursor_pass"(rx1097_pos, "infix:sym<>>")
-    rx1097_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1097_pos)
-    .return (rx1097_cur)
-  rx1097_fail:
-.annotate "line", 417
-    (rx1097_rep, rx1097_pos, $I10, $P10) = rx1097_cur."!mark_fail"(0)
-    lt rx1097_pos, -1, rx1097_done
-    eq rx1097_pos, -1, rx1097_fail
+    rx1100_cur."!cursor_pass"(rx1100_pos, "infix:sym<>>")
+    rx1100_cur."!cursor_debug"("PASS  ", "infix:sym<>>", " at pos=", rx1100_pos)
+    .return (rx1100_cur)
+  rx1100_fail:
+.annotate "line", 421
+    (rx1100_rep, rx1100_pos, $I10, $P10) = rx1100_cur."!mark_fail"(0)
+    lt rx1100_pos, -1, rx1100_done
+    eq rx1100_pos, -1, rx1100_fail
     jump $I10
-  rx1097_done:
-    rx1097_cur."!cursor_fail"()
-    rx1097_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
-    .return (rx1097_cur)
+  rx1100_done:
+    rx1100_cur."!cursor_fail"()
+    rx1100_cur."!cursor_debug"("FAIL  ", "infix:sym<>>")
+    .return (rx1100_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<>>"  :subid("280_1267204702.05125") :method
-.annotate "line", 417
-    $P1099 = self."!PREFIX__!subrule"("O", ">")
-    new $P1100, "ResizablePMCArray"
-    push $P1100, $P1099
-    .return ($P1100)
+.sub "!PREFIX__infix:sym<>>"  :subid("280_1271336396.90314") :method
+.annotate "line", 421
+    $P1102 = self."!PREFIX__!subrule"("O", ">")
+    new $P1103, "ResizablePMCArray"
+    push $P1103, $P1102
+    .return ($P1103)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<eq>"  :subid("281_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1104_tgt
-    .local int rx1104_pos
-    .local int rx1104_off
-    .local int rx1104_eos
-    .local int rx1104_rep
-    .local pmc rx1104_cur
-    (rx1104_cur, rx1104_pos, rx1104_tgt) = self."!cursor_start"()
-    rx1104_cur."!cursor_debug"("START ", "infix:sym<eq>")
-    .lex unicode:"$\x{a2}", rx1104_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1104_eos, rx1104_tgt
-    set rx1104_off, 0
-    lt rx1104_pos, 2, rx1104_start
-    sub rx1104_off, rx1104_pos, 1
-    substr rx1104_tgt, rx1104_tgt, rx1104_off
-  rx1104_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1108_done
-    goto rxscan1108_scan
-  rxscan1108_loop:
-    ($P10) = rx1104_cur."from"()
-    inc $P10
-    set rx1104_pos, $P10
-    ge rx1104_pos, rx1104_eos, rxscan1108_done
-  rxscan1108_scan:
-    set_addr $I10, rxscan1108_loop
-    rx1104_cur."!mark_push"(0, rx1104_pos, $I10)
-  rxscan1108_done:
-.annotate "line", 492
+.sub "infix:sym<eq>"  :subid("281_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1107_tgt
+    .local int rx1107_pos
+    .local int rx1107_off
+    .local int rx1107_eos
+    .local int rx1107_rep
+    .local pmc rx1107_cur
+    (rx1107_cur, rx1107_pos, rx1107_tgt) = self."!cursor_start"()
+    rx1107_cur."!cursor_debug"("START ", "infix:sym<eq>")
+    .lex unicode:"$\x{a2}", rx1107_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1107_eos, rx1107_tgt
+    set rx1107_off, 0
+    lt rx1107_pos, 2, rx1107_start
+    sub rx1107_off, rx1107_pos, 1
+    substr rx1107_tgt, rx1107_tgt, rx1107_off
+  rx1107_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1111_done
+    goto rxscan1111_scan
+  rxscan1111_loop:
+    ($P10) = rx1107_cur."from"()
+    inc $P10
+    set rx1107_pos, $P10
+    ge rx1107_pos, rx1107_eos, rxscan1111_done
+  rxscan1111_scan:
+    set_addr $I10, rxscan1111_loop
+    rx1107_cur."!mark_push"(0, rx1107_pos, $I10)
+  rxscan1111_done:
+.annotate "line", 496
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1109_fail
-    rx1104_cur."!mark_push"(0, rx1104_pos, $I10)
+    set_addr $I10, rxcap_1112_fail
+    rx1107_cur."!mark_push"(0, rx1107_pos, $I10)
   # rx literal  "eq"
-    add $I11, rx1104_pos, 2
-    gt $I11, rx1104_eos, rx1104_fail
-    sub $I11, rx1104_pos, rx1104_off
-    substr $S10, rx1104_tgt, $I11, 2
-    ne $S10, "eq", rx1104_fail
-    add rx1104_pos, 2
-    set_addr $I10, rxcap_1109_fail
-    ($I12, $I11) = rx1104_cur."!mark_peek"($I10)
-    rx1104_cur."!cursor_pos"($I11)
-    ($P10) = rx1104_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1104_pos, "")
-    rx1104_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1107_pos, 2
+    gt $I11, rx1107_eos, rx1107_fail
+    sub $I11, rx1107_pos, rx1107_off
+    substr $S10, rx1107_tgt, $I11, 2
+    ne $S10, "eq", rx1107_fail
+    add rx1107_pos, 2
+    set_addr $I10, rxcap_1112_fail
+    ($I12, $I11) = rx1107_cur."!mark_peek"($I10)
+    rx1107_cur."!cursor_pos"($I11)
+    ($P10) = rx1107_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1107_pos, "")
+    rx1107_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1109_done
-  rxcap_1109_fail:
-    goto rx1104_fail
-  rxcap_1109_done:
+    goto rxcap_1112_done
+  rxcap_1112_fail:
+    goto rx1107_fail
+  rxcap_1112_done:
   # rx subrule "O" subtype=capture negate=
-    rx1104_cur."!cursor_pos"(rx1104_pos)
-    $P10 = rx1104_cur."O"("%relational, :pirop<iseq ISs>")
-    unless $P10, rx1104_fail
-    rx1104_cur."!mark_push"(0, -1, 0, $P10)
+    rx1107_cur."!cursor_pos"(rx1107_pos)
+    $P10 = rx1107_cur."O"("%relational, :pirop<iseq ISs>")
+    unless $P10, rx1107_fail
+    rx1107_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1104_pos = $P10."pos"()
+    rx1107_pos = $P10."pos"()
   # rx pass
-    rx1104_cur."!cursor_pass"(rx1104_pos, "infix:sym<eq>")
-    rx1104_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1104_pos)
-    .return (rx1104_cur)
-  rx1104_fail:
-.annotate "line", 417
-    (rx1104_rep, rx1104_pos, $I10, $P10) = rx1104_cur."!mark_fail"(0)
-    lt rx1104_pos, -1, rx1104_done
-    eq rx1104_pos, -1, rx1104_fail
+    rx1107_cur."!cursor_pass"(rx1107_pos, "infix:sym<eq>")
+    rx1107_cur."!cursor_debug"("PASS  ", "infix:sym<eq>", " at pos=", rx1107_pos)
+    .return (rx1107_cur)
+  rx1107_fail:
+.annotate "line", 421
+    (rx1107_rep, rx1107_pos, $I10, $P10) = rx1107_cur."!mark_fail"(0)
+    lt rx1107_pos, -1, rx1107_done
+    eq rx1107_pos, -1, rx1107_fail
     jump $I10
-  rx1104_done:
-    rx1104_cur."!cursor_fail"()
-    rx1104_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
-    .return (rx1104_cur)
+  rx1107_done:
+    rx1107_cur."!cursor_fail"()
+    rx1107_cur."!cursor_debug"("FAIL  ", "infix:sym<eq>")
+    .return (rx1107_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<eq>"  :subid("282_1267204702.05125") :method
-.annotate "line", 417
-    $P1106 = self."!PREFIX__!subrule"("O", "eq")
-    new $P1107, "ResizablePMCArray"
-    push $P1107, $P1106
-    .return ($P1107)
+.sub "!PREFIX__infix:sym<eq>"  :subid("282_1271336396.90314") :method
+.annotate "line", 421
+    $P1109 = self."!PREFIX__!subrule"("O", "eq")
+    new $P1110, "ResizablePMCArray"
+    push $P1110, $P1109
+    .return ($P1110)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ne>"  :subid("283_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1111_tgt
-    .local int rx1111_pos
-    .local int rx1111_off
-    .local int rx1111_eos
-    .local int rx1111_rep
-    .local pmc rx1111_cur
-    (rx1111_cur, rx1111_pos, rx1111_tgt) = self."!cursor_start"()
-    rx1111_cur."!cursor_debug"("START ", "infix:sym<ne>")
-    .lex unicode:"$\x{a2}", rx1111_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1111_eos, rx1111_tgt
-    set rx1111_off, 0
-    lt rx1111_pos, 2, rx1111_start
-    sub rx1111_off, rx1111_pos, 1
-    substr rx1111_tgt, rx1111_tgt, rx1111_off
-  rx1111_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1115_done
-    goto rxscan1115_scan
-  rxscan1115_loop:
-    ($P10) = rx1111_cur."from"()
-    inc $P10
-    set rx1111_pos, $P10
-    ge rx1111_pos, rx1111_eos, rxscan1115_done
-  rxscan1115_scan:
-    set_addr $I10, rxscan1115_loop
-    rx1111_cur."!mark_push"(0, rx1111_pos, $I10)
-  rxscan1115_done:
-.annotate "line", 493
+.sub "infix:sym<ne>"  :subid("283_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1114_tgt
+    .local int rx1114_pos
+    .local int rx1114_off
+    .local int rx1114_eos
+    .local int rx1114_rep
+    .local pmc rx1114_cur
+    (rx1114_cur, rx1114_pos, rx1114_tgt) = self."!cursor_start"()
+    rx1114_cur."!cursor_debug"("START ", "infix:sym<ne>")
+    .lex unicode:"$\x{a2}", rx1114_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1114_eos, rx1114_tgt
+    set rx1114_off, 0
+    lt rx1114_pos, 2, rx1114_start
+    sub rx1114_off, rx1114_pos, 1
+    substr rx1114_tgt, rx1114_tgt, rx1114_off
+  rx1114_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1118_done
+    goto rxscan1118_scan
+  rxscan1118_loop:
+    ($P10) = rx1114_cur."from"()
+    inc $P10
+    set rx1114_pos, $P10
+    ge rx1114_pos, rx1114_eos, rxscan1118_done
+  rxscan1118_scan:
+    set_addr $I10, rxscan1118_loop
+    rx1114_cur."!mark_push"(0, rx1114_pos, $I10)
+  rxscan1118_done:
+.annotate "line", 497
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1116_fail
-    rx1111_cur."!mark_push"(0, rx1111_pos, $I10)
+    set_addr $I10, rxcap_1119_fail
+    rx1114_cur."!mark_push"(0, rx1114_pos, $I10)
   # rx literal  "ne"
-    add $I11, rx1111_pos, 2
-    gt $I11, rx1111_eos, rx1111_fail
-    sub $I11, rx1111_pos, rx1111_off
-    substr $S10, rx1111_tgt, $I11, 2
-    ne $S10, "ne", rx1111_fail
-    add rx1111_pos, 2
-    set_addr $I10, rxcap_1116_fail
-    ($I12, $I11) = rx1111_cur."!mark_peek"($I10)
-    rx1111_cur."!cursor_pos"($I11)
-    ($P10) = rx1111_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1111_pos, "")
-    rx1111_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1114_pos, 2
+    gt $I11, rx1114_eos, rx1114_fail
+    sub $I11, rx1114_pos, rx1114_off
+    substr $S10, rx1114_tgt, $I11, 2
+    ne $S10, "ne", rx1114_fail
+    add rx1114_pos, 2
+    set_addr $I10, rxcap_1119_fail
+    ($I12, $I11) = rx1114_cur."!mark_peek"($I10)
+    rx1114_cur."!cursor_pos"($I11)
+    ($P10) = rx1114_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1114_pos, "")
+    rx1114_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1116_done
-  rxcap_1116_fail:
-    goto rx1111_fail
-  rxcap_1116_done:
+    goto rxcap_1119_done
+  rxcap_1119_fail:
+    goto rx1114_fail
+  rxcap_1119_done:
   # rx subrule "O" subtype=capture negate=
-    rx1111_cur."!cursor_pos"(rx1111_pos)
-    $P10 = rx1111_cur."O"("%relational, :pirop<isne ISs>")
-    unless $P10, rx1111_fail
-    rx1111_cur."!mark_push"(0, -1, 0, $P10)
+    rx1114_cur."!cursor_pos"(rx1114_pos)
+    $P10 = rx1114_cur."O"("%relational, :pirop<isne ISs>")
+    unless $P10, rx1114_fail
+    rx1114_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1111_pos = $P10."pos"()
+    rx1114_pos = $P10."pos"()
   # rx pass
-    rx1111_cur."!cursor_pass"(rx1111_pos, "infix:sym<ne>")
-    rx1111_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1111_pos)
-    .return (rx1111_cur)
-  rx1111_fail:
-.annotate "line", 417
-    (rx1111_rep, rx1111_pos, $I10, $P10) = rx1111_cur."!mark_fail"(0)
-    lt rx1111_pos, -1, rx1111_done
-    eq rx1111_pos, -1, rx1111_fail
+    rx1114_cur."!cursor_pass"(rx1114_pos, "infix:sym<ne>")
+    rx1114_cur."!cursor_debug"("PASS  ", "infix:sym<ne>", " at pos=", rx1114_pos)
+    .return (rx1114_cur)
+  rx1114_fail:
+.annotate "line", 421
+    (rx1114_rep, rx1114_pos, $I10, $P10) = rx1114_cur."!mark_fail"(0)
+    lt rx1114_pos, -1, rx1114_done
+    eq rx1114_pos, -1, rx1114_fail
     jump $I10
-  rx1111_done:
-    rx1111_cur."!cursor_fail"()
-    rx1111_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
-    .return (rx1111_cur)
+  rx1114_done:
+    rx1114_cur."!cursor_fail"()
+    rx1114_cur."!cursor_debug"("FAIL  ", "infix:sym<ne>")
+    .return (rx1114_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ne>"  :subid("284_1267204702.05125") :method
-.annotate "line", 417
-    $P1113 = self."!PREFIX__!subrule"("O", "ne")
-    new $P1114, "ResizablePMCArray"
-    push $P1114, $P1113
-    .return ($P1114)
+.sub "!PREFIX__infix:sym<ne>"  :subid("284_1271336396.90314") :method
+.annotate "line", 421
+    $P1116 = self."!PREFIX__!subrule"("O", "ne")
+    new $P1117, "ResizablePMCArray"
+    push $P1117, $P1116
+    .return ($P1117)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<le>"  :subid("285_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1118_tgt
-    .local int rx1118_pos
-    .local int rx1118_off
-    .local int rx1118_eos
-    .local int rx1118_rep
-    .local pmc rx1118_cur
-    (rx1118_cur, rx1118_pos, rx1118_tgt) = self."!cursor_start"()
-    rx1118_cur."!cursor_debug"("START ", "infix:sym<le>")
-    .lex unicode:"$\x{a2}", rx1118_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1118_eos, rx1118_tgt
-    set rx1118_off, 0
-    lt rx1118_pos, 2, rx1118_start
-    sub rx1118_off, rx1118_pos, 1
-    substr rx1118_tgt, rx1118_tgt, rx1118_off
-  rx1118_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1122_done
-    goto rxscan1122_scan
-  rxscan1122_loop:
-    ($P10) = rx1118_cur."from"()
-    inc $P10
-    set rx1118_pos, $P10
-    ge rx1118_pos, rx1118_eos, rxscan1122_done
-  rxscan1122_scan:
-    set_addr $I10, rxscan1122_loop
-    rx1118_cur."!mark_push"(0, rx1118_pos, $I10)
-  rxscan1122_done:
-.annotate "line", 494
+.sub "infix:sym<le>"  :subid("285_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1121_tgt
+    .local int rx1121_pos
+    .local int rx1121_off
+    .local int rx1121_eos
+    .local int rx1121_rep
+    .local pmc rx1121_cur
+    (rx1121_cur, rx1121_pos, rx1121_tgt) = self."!cursor_start"()
+    rx1121_cur."!cursor_debug"("START ", "infix:sym<le>")
+    .lex unicode:"$\x{a2}", rx1121_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1121_eos, rx1121_tgt
+    set rx1121_off, 0
+    lt rx1121_pos, 2, rx1121_start
+    sub rx1121_off, rx1121_pos, 1
+    substr rx1121_tgt, rx1121_tgt, rx1121_off
+  rx1121_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1125_done
+    goto rxscan1125_scan
+  rxscan1125_loop:
+    ($P10) = rx1121_cur."from"()
+    inc $P10
+    set rx1121_pos, $P10
+    ge rx1121_pos, rx1121_eos, rxscan1125_done
+  rxscan1125_scan:
+    set_addr $I10, rxscan1125_loop
+    rx1121_cur."!mark_push"(0, rx1121_pos, $I10)
+  rxscan1125_done:
+.annotate "line", 498
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1123_fail
-    rx1118_cur."!mark_push"(0, rx1118_pos, $I10)
+    set_addr $I10, rxcap_1126_fail
+    rx1121_cur."!mark_push"(0, rx1121_pos, $I10)
   # rx literal  "le"
-    add $I11, rx1118_pos, 2
-    gt $I11, rx1118_eos, rx1118_fail
-    sub $I11, rx1118_pos, rx1118_off
-    substr $S10, rx1118_tgt, $I11, 2
-    ne $S10, "le", rx1118_fail
-    add rx1118_pos, 2
-    set_addr $I10, rxcap_1123_fail
-    ($I12, $I11) = rx1118_cur."!mark_peek"($I10)
-    rx1118_cur."!cursor_pos"($I11)
-    ($P10) = rx1118_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1118_pos, "")
-    rx1118_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1121_pos, 2
+    gt $I11, rx1121_eos, rx1121_fail
+    sub $I11, rx1121_pos, rx1121_off
+    substr $S10, rx1121_tgt, $I11, 2
+    ne $S10, "le", rx1121_fail
+    add rx1121_pos, 2
+    set_addr $I10, rxcap_1126_fail
+    ($I12, $I11) = rx1121_cur."!mark_peek"($I10)
+    rx1121_cur."!cursor_pos"($I11)
+    ($P10) = rx1121_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1121_pos, "")
+    rx1121_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1123_done
-  rxcap_1123_fail:
-    goto rx1118_fail
-  rxcap_1123_done:
+    goto rxcap_1126_done
+  rxcap_1126_fail:
+    goto rx1121_fail
+  rxcap_1126_done:
   # rx subrule "O" subtype=capture negate=
-    rx1118_cur."!cursor_pos"(rx1118_pos)
-    $P10 = rx1118_cur."O"("%relational, :pirop<isle ISs>")
-    unless $P10, rx1118_fail
-    rx1118_cur."!mark_push"(0, -1, 0, $P10)
+    rx1121_cur."!cursor_pos"(rx1121_pos)
+    $P10 = rx1121_cur."O"("%relational, :pirop<isle ISs>")
+    unless $P10, rx1121_fail
+    rx1121_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1118_pos = $P10."pos"()
+    rx1121_pos = $P10."pos"()
   # rx pass
-    rx1118_cur."!cursor_pass"(rx1118_pos, "infix:sym<le>")
-    rx1118_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1118_pos)
-    .return (rx1118_cur)
-  rx1118_fail:
-.annotate "line", 417
-    (rx1118_rep, rx1118_pos, $I10, $P10) = rx1118_cur."!mark_fail"(0)
-    lt rx1118_pos, -1, rx1118_done
-    eq rx1118_pos, -1, rx1118_fail
+    rx1121_cur."!cursor_pass"(rx1121_pos, "infix:sym<le>")
+    rx1121_cur."!cursor_debug"("PASS  ", "infix:sym<le>", " at pos=", rx1121_pos)
+    .return (rx1121_cur)
+  rx1121_fail:
+.annotate "line", 421
+    (rx1121_rep, rx1121_pos, $I10, $P10) = rx1121_cur."!mark_fail"(0)
+    lt rx1121_pos, -1, rx1121_done
+    eq rx1121_pos, -1, rx1121_fail
     jump $I10
-  rx1118_done:
-    rx1118_cur."!cursor_fail"()
-    rx1118_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
-    .return (rx1118_cur)
+  rx1121_done:
+    rx1121_cur."!cursor_fail"()
+    rx1121_cur."!cursor_debug"("FAIL  ", "infix:sym<le>")
+    .return (rx1121_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<le>"  :subid("286_1267204702.05125") :method
-.annotate "line", 417
-    $P1120 = self."!PREFIX__!subrule"("O", "le")
-    new $P1121, "ResizablePMCArray"
-    push $P1121, $P1120
-    .return ($P1121)
+.sub "!PREFIX__infix:sym<le>"  :subid("286_1271336396.90314") :method
+.annotate "line", 421
+    $P1123 = self."!PREFIX__!subrule"("O", "le")
+    new $P1124, "ResizablePMCArray"
+    push $P1124, $P1123
+    .return ($P1124)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<ge>"  :subid("287_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1125_tgt
-    .local int rx1125_pos
-    .local int rx1125_off
-    .local int rx1125_eos
-    .local int rx1125_rep
-    .local pmc rx1125_cur
-    (rx1125_cur, rx1125_pos, rx1125_tgt) = self."!cursor_start"()
-    rx1125_cur."!cursor_debug"("START ", "infix:sym<ge>")
-    .lex unicode:"$\x{a2}", rx1125_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1125_eos, rx1125_tgt
-    set rx1125_off, 0
-    lt rx1125_pos, 2, rx1125_start
-    sub rx1125_off, rx1125_pos, 1
-    substr rx1125_tgt, rx1125_tgt, rx1125_off
-  rx1125_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1129_done
-    goto rxscan1129_scan
-  rxscan1129_loop:
-    ($P10) = rx1125_cur."from"()
-    inc $P10
-    set rx1125_pos, $P10
-    ge rx1125_pos, rx1125_eos, rxscan1129_done
-  rxscan1129_scan:
-    set_addr $I10, rxscan1129_loop
-    rx1125_cur."!mark_push"(0, rx1125_pos, $I10)
-  rxscan1129_done:
-.annotate "line", 495
+.sub "infix:sym<ge>"  :subid("287_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1128_tgt
+    .local int rx1128_pos
+    .local int rx1128_off
+    .local int rx1128_eos
+    .local int rx1128_rep
+    .local pmc rx1128_cur
+    (rx1128_cur, rx1128_pos, rx1128_tgt) = self."!cursor_start"()
+    rx1128_cur."!cursor_debug"("START ", "infix:sym<ge>")
+    .lex unicode:"$\x{a2}", rx1128_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1128_eos, rx1128_tgt
+    set rx1128_off, 0
+    lt rx1128_pos, 2, rx1128_start
+    sub rx1128_off, rx1128_pos, 1
+    substr rx1128_tgt, rx1128_tgt, rx1128_off
+  rx1128_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1132_done
+    goto rxscan1132_scan
+  rxscan1132_loop:
+    ($P10) = rx1128_cur."from"()
+    inc $P10
+    set rx1128_pos, $P10
+    ge rx1128_pos, rx1128_eos, rxscan1132_done
+  rxscan1132_scan:
+    set_addr $I10, rxscan1132_loop
+    rx1128_cur."!mark_push"(0, rx1128_pos, $I10)
+  rxscan1132_done:
+.annotate "line", 499
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1130_fail
-    rx1125_cur."!mark_push"(0, rx1125_pos, $I10)
+    set_addr $I10, rxcap_1133_fail
+    rx1128_cur."!mark_push"(0, rx1128_pos, $I10)
   # rx literal  "ge"
-    add $I11, rx1125_pos, 2
-    gt $I11, rx1125_eos, rx1125_fail
-    sub $I11, rx1125_pos, rx1125_off
-    substr $S10, rx1125_tgt, $I11, 2
-    ne $S10, "ge", rx1125_fail
-    add rx1125_pos, 2
-    set_addr $I10, rxcap_1130_fail
-    ($I12, $I11) = rx1125_cur."!mark_peek"($I10)
-    rx1125_cur."!cursor_pos"($I11)
-    ($P10) = rx1125_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1125_pos, "")
-    rx1125_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1128_pos, 2
+    gt $I11, rx1128_eos, rx1128_fail
+    sub $I11, rx1128_pos, rx1128_off
+    substr $S10, rx1128_tgt, $I11, 2
+    ne $S10, "ge", rx1128_fail
+    add rx1128_pos, 2
+    set_addr $I10, rxcap_1133_fail
+    ($I12, $I11) = rx1128_cur."!mark_peek"($I10)
+    rx1128_cur."!cursor_pos"($I11)
+    ($P10) = rx1128_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1128_pos, "")
+    rx1128_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1130_done
-  rxcap_1130_fail:
-    goto rx1125_fail
-  rxcap_1130_done:
+    goto rxcap_1133_done
+  rxcap_1133_fail:
+    goto rx1128_fail
+  rxcap_1133_done:
   # rx subrule "O" subtype=capture negate=
-    rx1125_cur."!cursor_pos"(rx1125_pos)
-    $P10 = rx1125_cur."O"("%relational, :pirop<isge ISs>")
-    unless $P10, rx1125_fail
-    rx1125_cur."!mark_push"(0, -1, 0, $P10)
+    rx1128_cur."!cursor_pos"(rx1128_pos)
+    $P10 = rx1128_cur."O"("%relational, :pirop<isge ISs>")
+    unless $P10, rx1128_fail
+    rx1128_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1125_pos = $P10."pos"()
+    rx1128_pos = $P10."pos"()
   # rx pass
-    rx1125_cur."!cursor_pass"(rx1125_pos, "infix:sym<ge>")
-    rx1125_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1125_pos)
-    .return (rx1125_cur)
-  rx1125_fail:
-.annotate "line", 417
-    (rx1125_rep, rx1125_pos, $I10, $P10) = rx1125_cur."!mark_fail"(0)
-    lt rx1125_pos, -1, rx1125_done
-    eq rx1125_pos, -1, rx1125_fail
+    rx1128_cur."!cursor_pass"(rx1128_pos, "infix:sym<ge>")
+    rx1128_cur."!cursor_debug"("PASS  ", "infix:sym<ge>", " at pos=", rx1128_pos)
+    .return (rx1128_cur)
+  rx1128_fail:
+.annotate "line", 421
+    (rx1128_rep, rx1128_pos, $I10, $P10) = rx1128_cur."!mark_fail"(0)
+    lt rx1128_pos, -1, rx1128_done
+    eq rx1128_pos, -1, rx1128_fail
     jump $I10
-  rx1125_done:
-    rx1125_cur."!cursor_fail"()
-    rx1125_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
-    .return (rx1125_cur)
+  rx1128_done:
+    rx1128_cur."!cursor_fail"()
+    rx1128_cur."!cursor_debug"("FAIL  ", "infix:sym<ge>")
+    .return (rx1128_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<ge>"  :subid("288_1267204702.05125") :method
-.annotate "line", 417
-    $P1127 = self."!PREFIX__!subrule"("O", "ge")
-    new $P1128, "ResizablePMCArray"
-    push $P1128, $P1127
-    .return ($P1128)
+.sub "!PREFIX__infix:sym<ge>"  :subid("288_1271336396.90314") :method
+.annotate "line", 421
+    $P1130 = self."!PREFIX__!subrule"("O", "ge")
+    new $P1131, "ResizablePMCArray"
+    push $P1131, $P1130
+    .return ($P1131)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<lt>"  :subid("289_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1132_tgt
-    .local int rx1132_pos
-    .local int rx1132_off
-    .local int rx1132_eos
-    .local int rx1132_rep
-    .local pmc rx1132_cur
-    (rx1132_cur, rx1132_pos, rx1132_tgt) = self."!cursor_start"()
-    rx1132_cur."!cursor_debug"("START ", "infix:sym<lt>")
-    .lex unicode:"$\x{a2}", rx1132_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1132_eos, rx1132_tgt
-    set rx1132_off, 0
-    lt rx1132_pos, 2, rx1132_start
-    sub rx1132_off, rx1132_pos, 1
-    substr rx1132_tgt, rx1132_tgt, rx1132_off
-  rx1132_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1136_done
-    goto rxscan1136_scan
-  rxscan1136_loop:
-    ($P10) = rx1132_cur."from"()
-    inc $P10
-    set rx1132_pos, $P10
-    ge rx1132_pos, rx1132_eos, rxscan1136_done
-  rxscan1136_scan:
-    set_addr $I10, rxscan1136_loop
-    rx1132_cur."!mark_push"(0, rx1132_pos, $I10)
-  rxscan1136_done:
-.annotate "line", 496
+.sub "infix:sym<lt>"  :subid("289_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1135_tgt
+    .local int rx1135_pos
+    .local int rx1135_off
+    .local int rx1135_eos
+    .local int rx1135_rep
+    .local pmc rx1135_cur
+    (rx1135_cur, rx1135_pos, rx1135_tgt) = self."!cursor_start"()
+    rx1135_cur."!cursor_debug"("START ", "infix:sym<lt>")
+    .lex unicode:"$\x{a2}", rx1135_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1135_eos, rx1135_tgt
+    set rx1135_off, 0
+    lt rx1135_pos, 2, rx1135_start
+    sub rx1135_off, rx1135_pos, 1
+    substr rx1135_tgt, rx1135_tgt, rx1135_off
+  rx1135_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1139_done
+    goto rxscan1139_scan
+  rxscan1139_loop:
+    ($P10) = rx1135_cur."from"()
+    inc $P10
+    set rx1135_pos, $P10
+    ge rx1135_pos, rx1135_eos, rxscan1139_done
+  rxscan1139_scan:
+    set_addr $I10, rxscan1139_loop
+    rx1135_cur."!mark_push"(0, rx1135_pos, $I10)
+  rxscan1139_done:
+.annotate "line", 500
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1137_fail
-    rx1132_cur."!mark_push"(0, rx1132_pos, $I10)
+    set_addr $I10, rxcap_1140_fail
+    rx1135_cur."!mark_push"(0, rx1135_pos, $I10)
   # rx literal  "lt"
-    add $I11, rx1132_pos, 2
-    gt $I11, rx1132_eos, rx1132_fail
-    sub $I11, rx1132_pos, rx1132_off
-    substr $S10, rx1132_tgt, $I11, 2
-    ne $S10, "lt", rx1132_fail
-    add rx1132_pos, 2
-    set_addr $I10, rxcap_1137_fail
-    ($I12, $I11) = rx1132_cur."!mark_peek"($I10)
-    rx1132_cur."!cursor_pos"($I11)
-    ($P10) = rx1132_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1132_pos, "")
-    rx1132_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1135_pos, 2
+    gt $I11, rx1135_eos, rx1135_fail
+    sub $I11, rx1135_pos, rx1135_off
+    substr $S10, rx1135_tgt, $I11, 2
+    ne $S10, "lt", rx1135_fail
+    add rx1135_pos, 2
+    set_addr $I10, rxcap_1140_fail
+    ($I12, $I11) = rx1135_cur."!mark_peek"($I10)
+    rx1135_cur."!cursor_pos"($I11)
+    ($P10) = rx1135_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1135_pos, "")
+    rx1135_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1137_done
-  rxcap_1137_fail:
-    goto rx1132_fail
-  rxcap_1137_done:
+    goto rxcap_1140_done
+  rxcap_1140_fail:
+    goto rx1135_fail
+  rxcap_1140_done:
   # rx subrule "O" subtype=capture negate=
-    rx1132_cur."!cursor_pos"(rx1132_pos)
-    $P10 = rx1132_cur."O"("%relational, :pirop<islt ISs>")
-    unless $P10, rx1132_fail
-    rx1132_cur."!mark_push"(0, -1, 0, $P10)
+    rx1135_cur."!cursor_pos"(rx1135_pos)
+    $P10 = rx1135_cur."O"("%relational, :pirop<islt ISs>")
+    unless $P10, rx1135_fail
+    rx1135_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1132_pos = $P10."pos"()
+    rx1135_pos = $P10."pos"()
   # rx pass
-    rx1132_cur."!cursor_pass"(rx1132_pos, "infix:sym<lt>")
-    rx1132_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1132_pos)
-    .return (rx1132_cur)
-  rx1132_fail:
-.annotate "line", 417
-    (rx1132_rep, rx1132_pos, $I10, $P10) = rx1132_cur."!mark_fail"(0)
-    lt rx1132_pos, -1, rx1132_done
-    eq rx1132_pos, -1, rx1132_fail
+    rx1135_cur."!cursor_pass"(rx1135_pos, "infix:sym<lt>")
+    rx1135_cur."!cursor_debug"("PASS  ", "infix:sym<lt>", " at pos=", rx1135_pos)
+    .return (rx1135_cur)
+  rx1135_fail:
+.annotate "line", 421
+    (rx1135_rep, rx1135_pos, $I10, $P10) = rx1135_cur."!mark_fail"(0)
+    lt rx1135_pos, -1, rx1135_done
+    eq rx1135_pos, -1, rx1135_fail
     jump $I10
-  rx1132_done:
-    rx1132_cur."!cursor_fail"()
-    rx1132_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
-    .return (rx1132_cur)
+  rx1135_done:
+    rx1135_cur."!cursor_fail"()
+    rx1135_cur."!cursor_debug"("FAIL  ", "infix:sym<lt>")
+    .return (rx1135_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<lt>"  :subid("290_1267204702.05125") :method
-.annotate "line", 417
-    $P1134 = self."!PREFIX__!subrule"("O", "lt")
-    new $P1135, "ResizablePMCArray"
-    push $P1135, $P1134
-    .return ($P1135)
+.sub "!PREFIX__infix:sym<lt>"  :subid("290_1271336396.90314") :method
+.annotate "line", 421
+    $P1137 = self."!PREFIX__!subrule"("O", "lt")
+    new $P1138, "ResizablePMCArray"
+    push $P1138, $P1137
+    .return ($P1138)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<gt>"  :subid("291_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1139_tgt
-    .local int rx1139_pos
-    .local int rx1139_off
-    .local int rx1139_eos
-    .local int rx1139_rep
-    .local pmc rx1139_cur
-    (rx1139_cur, rx1139_pos, rx1139_tgt) = self."!cursor_start"()
-    rx1139_cur."!cursor_debug"("START ", "infix:sym<gt>")
-    .lex unicode:"$\x{a2}", rx1139_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1139_eos, rx1139_tgt
-    set rx1139_off, 0
-    lt rx1139_pos, 2, rx1139_start
-    sub rx1139_off, rx1139_pos, 1
-    substr rx1139_tgt, rx1139_tgt, rx1139_off
-  rx1139_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1143_done
-    goto rxscan1143_scan
-  rxscan1143_loop:
-    ($P10) = rx1139_cur."from"()
-    inc $P10
-    set rx1139_pos, $P10
-    ge rx1139_pos, rx1139_eos, rxscan1143_done
-  rxscan1143_scan:
-    set_addr $I10, rxscan1143_loop
-    rx1139_cur."!mark_push"(0, rx1139_pos, $I10)
-  rxscan1143_done:
-.annotate "line", 497
+.sub "infix:sym<gt>"  :subid("291_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1142_tgt
+    .local int rx1142_pos
+    .local int rx1142_off
+    .local int rx1142_eos
+    .local int rx1142_rep
+    .local pmc rx1142_cur
+    (rx1142_cur, rx1142_pos, rx1142_tgt) = self."!cursor_start"()
+    rx1142_cur."!cursor_debug"("START ", "infix:sym<gt>")
+    .lex unicode:"$\x{a2}", rx1142_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1142_eos, rx1142_tgt
+    set rx1142_off, 0
+    lt rx1142_pos, 2, rx1142_start
+    sub rx1142_off, rx1142_pos, 1
+    substr rx1142_tgt, rx1142_tgt, rx1142_off
+  rx1142_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1146_done
+    goto rxscan1146_scan
+  rxscan1146_loop:
+    ($P10) = rx1142_cur."from"()
+    inc $P10
+    set rx1142_pos, $P10
+    ge rx1142_pos, rx1142_eos, rxscan1146_done
+  rxscan1146_scan:
+    set_addr $I10, rxscan1146_loop
+    rx1142_cur."!mark_push"(0, rx1142_pos, $I10)
+  rxscan1146_done:
+.annotate "line", 501
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1144_fail
-    rx1139_cur."!mark_push"(0, rx1139_pos, $I10)
+    set_addr $I10, rxcap_1147_fail
+    rx1142_cur."!mark_push"(0, rx1142_pos, $I10)
   # rx literal  "gt"
-    add $I11, rx1139_pos, 2
-    gt $I11, rx1139_eos, rx1139_fail
-    sub $I11, rx1139_pos, rx1139_off
-    substr $S10, rx1139_tgt, $I11, 2
-    ne $S10, "gt", rx1139_fail
-    add rx1139_pos, 2
-    set_addr $I10, rxcap_1144_fail
-    ($I12, $I11) = rx1139_cur."!mark_peek"($I10)
-    rx1139_cur."!cursor_pos"($I11)
-    ($P10) = rx1139_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1139_pos, "")
-    rx1139_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1142_pos, 2
+    gt $I11, rx1142_eos, rx1142_fail
+    sub $I11, rx1142_pos, rx1142_off
+    substr $S10, rx1142_tgt, $I11, 2
+    ne $S10, "gt", rx1142_fail
+    add rx1142_pos, 2
+    set_addr $I10, rxcap_1147_fail
+    ($I12, $I11) = rx1142_cur."!mark_peek"($I10)
+    rx1142_cur."!cursor_pos"($I11)
+    ($P10) = rx1142_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1142_pos, "")
+    rx1142_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1144_done
-  rxcap_1144_fail:
-    goto rx1139_fail
-  rxcap_1144_done:
+    goto rxcap_1147_done
+  rxcap_1147_fail:
+    goto rx1142_fail
+  rxcap_1147_done:
   # rx subrule "O" subtype=capture negate=
-    rx1139_cur."!cursor_pos"(rx1139_pos)
-    $P10 = rx1139_cur."O"("%relational, :pirop<isgt ISs>")
-    unless $P10, rx1139_fail
-    rx1139_cur."!mark_push"(0, -1, 0, $P10)
+    rx1142_cur."!cursor_pos"(rx1142_pos)
+    $P10 = rx1142_cur."O"("%relational, :pirop<isgt ISs>")
+    unless $P10, rx1142_fail
+    rx1142_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1139_pos = $P10."pos"()
+    rx1142_pos = $P10."pos"()
   # rx pass
-    rx1139_cur."!cursor_pass"(rx1139_pos, "infix:sym<gt>")
-    rx1139_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1139_pos)
-    .return (rx1139_cur)
-  rx1139_fail:
-.annotate "line", 417
-    (rx1139_rep, rx1139_pos, $I10, $P10) = rx1139_cur."!mark_fail"(0)
-    lt rx1139_pos, -1, rx1139_done
-    eq rx1139_pos, -1, rx1139_fail
+    rx1142_cur."!cursor_pass"(rx1142_pos, "infix:sym<gt>")
+    rx1142_cur."!cursor_debug"("PASS  ", "infix:sym<gt>", " at pos=", rx1142_pos)
+    .return (rx1142_cur)
+  rx1142_fail:
+.annotate "line", 421
+    (rx1142_rep, rx1142_pos, $I10, $P10) = rx1142_cur."!mark_fail"(0)
+    lt rx1142_pos, -1, rx1142_done
+    eq rx1142_pos, -1, rx1142_fail
     jump $I10
-  rx1139_done:
-    rx1139_cur."!cursor_fail"()
-    rx1139_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
-    .return (rx1139_cur)
+  rx1142_done:
+    rx1142_cur."!cursor_fail"()
+    rx1142_cur."!cursor_debug"("FAIL  ", "infix:sym<gt>")
+    .return (rx1142_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<gt>"  :subid("292_1267204702.05125") :method
-.annotate "line", 417
-    $P1141 = self."!PREFIX__!subrule"("O", "gt")
-    new $P1142, "ResizablePMCArray"
-    push $P1142, $P1141
-    .return ($P1142)
+.sub "!PREFIX__infix:sym<gt>"  :subid("292_1271336396.90314") :method
+.annotate "line", 421
+    $P1144 = self."!PREFIX__!subrule"("O", "gt")
+    new $P1145, "ResizablePMCArray"
+    push $P1145, $P1144
+    .return ($P1145)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=:=>"  :subid("293_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1146_tgt
-    .local int rx1146_pos
-    .local int rx1146_off
-    .local int rx1146_eos
-    .local int rx1146_rep
-    .local pmc rx1146_cur
-    (rx1146_cur, rx1146_pos, rx1146_tgt) = self."!cursor_start"()
-    rx1146_cur."!cursor_debug"("START ", "infix:sym<=:=>")
-    .lex unicode:"$\x{a2}", rx1146_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1146_eos, rx1146_tgt
-    set rx1146_off, 0
-    lt rx1146_pos, 2, rx1146_start
-    sub rx1146_off, rx1146_pos, 1
-    substr rx1146_tgt, rx1146_tgt, rx1146_off
-  rx1146_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1150_done
-    goto rxscan1150_scan
-  rxscan1150_loop:
-    ($P10) = rx1146_cur."from"()
-    inc $P10
-    set rx1146_pos, $P10
-    ge rx1146_pos, rx1146_eos, rxscan1150_done
-  rxscan1150_scan:
-    set_addr $I10, rxscan1150_loop
-    rx1146_cur."!mark_push"(0, rx1146_pos, $I10)
-  rxscan1150_done:
-.annotate "line", 498
+.sub "infix:sym<=:=>"  :subid("293_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1149_tgt
+    .local int rx1149_pos
+    .local int rx1149_off
+    .local int rx1149_eos
+    .local int rx1149_rep
+    .local pmc rx1149_cur
+    (rx1149_cur, rx1149_pos, rx1149_tgt) = self."!cursor_start"()
+    rx1149_cur."!cursor_debug"("START ", "infix:sym<=:=>")
+    .lex unicode:"$\x{a2}", rx1149_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1149_eos, rx1149_tgt
+    set rx1149_off, 0
+    lt rx1149_pos, 2, rx1149_start
+    sub rx1149_off, rx1149_pos, 1
+    substr rx1149_tgt, rx1149_tgt, rx1149_off
+  rx1149_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1153_done
+    goto rxscan1153_scan
+  rxscan1153_loop:
+    ($P10) = rx1149_cur."from"()
+    inc $P10
+    set rx1149_pos, $P10
+    ge rx1149_pos, rx1149_eos, rxscan1153_done
+  rxscan1153_scan:
+    set_addr $I10, rxscan1153_loop
+    rx1149_cur."!mark_push"(0, rx1149_pos, $I10)
+  rxscan1153_done:
+.annotate "line", 502
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1151_fail
-    rx1146_cur."!mark_push"(0, rx1146_pos, $I10)
+    set_addr $I10, rxcap_1154_fail
+    rx1149_cur."!mark_push"(0, rx1149_pos, $I10)
   # rx literal  "=:="
-    add $I11, rx1146_pos, 3
-    gt $I11, rx1146_eos, rx1146_fail
-    sub $I11, rx1146_pos, rx1146_off
-    substr $S10, rx1146_tgt, $I11, 3
-    ne $S10, "=:=", rx1146_fail
-    add rx1146_pos, 3
-    set_addr $I10, rxcap_1151_fail
-    ($I12, $I11) = rx1146_cur."!mark_peek"($I10)
-    rx1146_cur."!cursor_pos"($I11)
-    ($P10) = rx1146_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1146_pos, "")
-    rx1146_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1149_pos, 3
+    gt $I11, rx1149_eos, rx1149_fail
+    sub $I11, rx1149_pos, rx1149_off
+    substr $S10, rx1149_tgt, $I11, 3
+    ne $S10, "=:=", rx1149_fail
+    add rx1149_pos, 3
+    set_addr $I10, rxcap_1154_fail
+    ($I12, $I11) = rx1149_cur."!mark_peek"($I10)
+    rx1149_cur."!cursor_pos"($I11)
+    ($P10) = rx1149_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1149_pos, "")
+    rx1149_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1151_done
-  rxcap_1151_fail:
-    goto rx1146_fail
-  rxcap_1151_done:
+    goto rxcap_1154_done
+  rxcap_1154_fail:
+    goto rx1149_fail
+  rxcap_1154_done:
   # rx subrule "O" subtype=capture negate=
-    rx1146_cur."!cursor_pos"(rx1146_pos)
-    $P10 = rx1146_cur."O"("%relational, :pirop<issame>")
-    unless $P10, rx1146_fail
-    rx1146_cur."!mark_push"(0, -1, 0, $P10)
+    rx1149_cur."!cursor_pos"(rx1149_pos)
+    $P10 = rx1149_cur."O"("%relational, :pirop<issame>")
+    unless $P10, rx1149_fail
+    rx1149_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1146_pos = $P10."pos"()
+    rx1149_pos = $P10."pos"()
   # rx pass
-    rx1146_cur."!cursor_pass"(rx1146_pos, "infix:sym<=:=>")
-    rx1146_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1146_pos)
-    .return (rx1146_cur)
-  rx1146_fail:
-.annotate "line", 417
-    (rx1146_rep, rx1146_pos, $I10, $P10) = rx1146_cur."!mark_fail"(0)
-    lt rx1146_pos, -1, rx1146_done
-    eq rx1146_pos, -1, rx1146_fail
+    rx1149_cur."!cursor_pass"(rx1149_pos, "infix:sym<=:=>")
+    rx1149_cur."!cursor_debug"("PASS  ", "infix:sym<=:=>", " at pos=", rx1149_pos)
+    .return (rx1149_cur)
+  rx1149_fail:
+.annotate "line", 421
+    (rx1149_rep, rx1149_pos, $I10, $P10) = rx1149_cur."!mark_fail"(0)
+    lt rx1149_pos, -1, rx1149_done
+    eq rx1149_pos, -1, rx1149_fail
     jump $I10
-  rx1146_done:
-    rx1146_cur."!cursor_fail"()
-    rx1146_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
-    .return (rx1146_cur)
+  rx1149_done:
+    rx1149_cur."!cursor_fail"()
+    rx1149_cur."!cursor_debug"("FAIL  ", "infix:sym<=:=>")
+    .return (rx1149_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=:=>"  :subid("294_1267204702.05125") :method
-.annotate "line", 417
-    $P1148 = self."!PREFIX__!subrule"("O", "=:=")
-    new $P1149, "ResizablePMCArray"
-    push $P1149, $P1148
-    .return ($P1149)
+.sub "!PREFIX__infix:sym<=:=>"  :subid("294_1271336396.90314") :method
+.annotate "line", 421
+    $P1151 = self."!PREFIX__!subrule"("O", "=:=")
+    new $P1152, "ResizablePMCArray"
+    push $P1152, $P1151
+    .return ($P1152)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<~~>"  :subid("295_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1153_tgt
-    .local int rx1153_pos
-    .local int rx1153_off
-    .local int rx1153_eos
-    .local int rx1153_rep
-    .local pmc rx1153_cur
-    (rx1153_cur, rx1153_pos, rx1153_tgt) = self."!cursor_start"()
-    rx1153_cur."!cursor_debug"("START ", "infix:sym<~~>")
-    .lex unicode:"$\x{a2}", rx1153_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1153_eos, rx1153_tgt
-    set rx1153_off, 0
-    lt rx1153_pos, 2, rx1153_start
-    sub rx1153_off, rx1153_pos, 1
-    substr rx1153_tgt, rx1153_tgt, rx1153_off
-  rx1153_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1157_done
-    goto rxscan1157_scan
-  rxscan1157_loop:
-    ($P10) = rx1153_cur."from"()
-    inc $P10
-    set rx1153_pos, $P10
-    ge rx1153_pos, rx1153_eos, rxscan1157_done
-  rxscan1157_scan:
-    set_addr $I10, rxscan1157_loop
-    rx1153_cur."!mark_push"(0, rx1153_pos, $I10)
-  rxscan1157_done:
-.annotate "line", 499
+.sub "infix:sym<~~>"  :subid("295_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1156_tgt
+    .local int rx1156_pos
+    .local int rx1156_off
+    .local int rx1156_eos
+    .local int rx1156_rep
+    .local pmc rx1156_cur
+    (rx1156_cur, rx1156_pos, rx1156_tgt) = self."!cursor_start"()
+    rx1156_cur."!cursor_debug"("START ", "infix:sym<~~>")
+    .lex unicode:"$\x{a2}", rx1156_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1156_eos, rx1156_tgt
+    set rx1156_off, 0
+    lt rx1156_pos, 2, rx1156_start
+    sub rx1156_off, rx1156_pos, 1
+    substr rx1156_tgt, rx1156_tgt, rx1156_off
+  rx1156_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1160_done
+    goto rxscan1160_scan
+  rxscan1160_loop:
+    ($P10) = rx1156_cur."from"()
+    inc $P10
+    set rx1156_pos, $P10
+    ge rx1156_pos, rx1156_eos, rxscan1160_done
+  rxscan1160_scan:
+    set_addr $I10, rxscan1160_loop
+    rx1156_cur."!mark_push"(0, rx1156_pos, $I10)
+  rxscan1160_done:
+.annotate "line", 503
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1158_fail
-    rx1153_cur."!mark_push"(0, rx1153_pos, $I10)
+    set_addr $I10, rxcap_1161_fail
+    rx1156_cur."!mark_push"(0, rx1156_pos, $I10)
   # rx literal  "~~"
-    add $I11, rx1153_pos, 2
-    gt $I11, rx1153_eos, rx1153_fail
-    sub $I11, rx1153_pos, rx1153_off
-    substr $S10, rx1153_tgt, $I11, 2
-    ne $S10, "~~", rx1153_fail
-    add rx1153_pos, 2
-    set_addr $I10, rxcap_1158_fail
-    ($I12, $I11) = rx1153_cur."!mark_peek"($I10)
-    rx1153_cur."!cursor_pos"($I11)
-    ($P10) = rx1153_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1153_pos, "")
-    rx1153_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1156_pos, 2
+    gt $I11, rx1156_eos, rx1156_fail
+    sub $I11, rx1156_pos, rx1156_off
+    substr $S10, rx1156_tgt, $I11, 2
+    ne $S10, "~~", rx1156_fail
+    add rx1156_pos, 2
+    set_addr $I10, rxcap_1161_fail
+    ($I12, $I11) = rx1156_cur."!mark_peek"($I10)
+    rx1156_cur."!cursor_pos"($I11)
+    ($P10) = rx1156_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1156_pos, "")
+    rx1156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1158_done
-  rxcap_1158_fail:
-    goto rx1153_fail
-  rxcap_1158_done:
+    goto rxcap_1161_done
+  rxcap_1161_fail:
+    goto rx1156_fail
+  rxcap_1161_done:
   # rx subrule "O" subtype=capture negate=
-    rx1153_cur."!cursor_pos"(rx1153_pos)
-    $P10 = rx1153_cur."O"("%relational, :reducecheck<smartmatch>")
-    unless $P10, rx1153_fail
-    rx1153_cur."!mark_push"(0, -1, 0, $P10)
+    rx1156_cur."!cursor_pos"(rx1156_pos)
+    $P10 = rx1156_cur."O"("%relational, :reducecheck<smartmatch>")
+    unless $P10, rx1156_fail
+    rx1156_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1153_pos = $P10."pos"()
+    rx1156_pos = $P10."pos"()
   # rx pass
-    rx1153_cur."!cursor_pass"(rx1153_pos, "infix:sym<~~>")
-    rx1153_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1153_pos)
-    .return (rx1153_cur)
-  rx1153_fail:
-.annotate "line", 417
-    (rx1153_rep, rx1153_pos, $I10, $P10) = rx1153_cur."!mark_fail"(0)
-    lt rx1153_pos, -1, rx1153_done
-    eq rx1153_pos, -1, rx1153_fail
+    rx1156_cur."!cursor_pass"(rx1156_pos, "infix:sym<~~>")
+    rx1156_cur."!cursor_debug"("PASS  ", "infix:sym<~~>", " at pos=", rx1156_pos)
+    .return (rx1156_cur)
+  rx1156_fail:
+.annotate "line", 421
+    (rx1156_rep, rx1156_pos, $I10, $P10) = rx1156_cur."!mark_fail"(0)
+    lt rx1156_pos, -1, rx1156_done
+    eq rx1156_pos, -1, rx1156_fail
     jump $I10
-  rx1153_done:
-    rx1153_cur."!cursor_fail"()
-    rx1153_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
-    .return (rx1153_cur)
+  rx1156_done:
+    rx1156_cur."!cursor_fail"()
+    rx1156_cur."!cursor_debug"("FAIL  ", "infix:sym<~~>")
+    .return (rx1156_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<~~>"  :subid("296_1267204702.05125") :method
-.annotate "line", 417
-    $P1155 = self."!PREFIX__!subrule"("O", "~~")
-    new $P1156, "ResizablePMCArray"
-    push $P1156, $P1155
-    .return ($P1156)
+.sub "!PREFIX__infix:sym<~~>"  :subid("296_1271336396.90314") :method
+.annotate "line", 421
+    $P1158 = self."!PREFIX__!subrule"("O", "~~")
+    new $P1159, "ResizablePMCArray"
+    push $P1159, $P1158
+    .return ($P1159)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<&&>"  :subid("297_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1160_tgt
-    .local int rx1160_pos
-    .local int rx1160_off
-    .local int rx1160_eos
-    .local int rx1160_rep
-    .local pmc rx1160_cur
-    (rx1160_cur, rx1160_pos, rx1160_tgt) = self."!cursor_start"()
-    rx1160_cur."!cursor_debug"("START ", "infix:sym<&&>")
-    .lex unicode:"$\x{a2}", rx1160_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1160_eos, rx1160_tgt
-    set rx1160_off, 0
-    lt rx1160_pos, 2, rx1160_start
-    sub rx1160_off, rx1160_pos, 1
-    substr rx1160_tgt, rx1160_tgt, rx1160_off
-  rx1160_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1164_done
-    goto rxscan1164_scan
-  rxscan1164_loop:
-    ($P10) = rx1160_cur."from"()
-    inc $P10
-    set rx1160_pos, $P10
-    ge rx1160_pos, rx1160_eos, rxscan1164_done
-  rxscan1164_scan:
-    set_addr $I10, rxscan1164_loop
-    rx1160_cur."!mark_push"(0, rx1160_pos, $I10)
-  rxscan1164_done:
-.annotate "line", 501
+.sub "infix:sym<&&>"  :subid("297_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1163_tgt
+    .local int rx1163_pos
+    .local int rx1163_off
+    .local int rx1163_eos
+    .local int rx1163_rep
+    .local pmc rx1163_cur
+    (rx1163_cur, rx1163_pos, rx1163_tgt) = self."!cursor_start"()
+    rx1163_cur."!cursor_debug"("START ", "infix:sym<&&>")
+    .lex unicode:"$\x{a2}", rx1163_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1163_eos, rx1163_tgt
+    set rx1163_off, 0
+    lt rx1163_pos, 2, rx1163_start
+    sub rx1163_off, rx1163_pos, 1
+    substr rx1163_tgt, rx1163_tgt, rx1163_off
+  rx1163_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1167_done
+    goto rxscan1167_scan
+  rxscan1167_loop:
+    ($P10) = rx1163_cur."from"()
+    inc $P10
+    set rx1163_pos, $P10
+    ge rx1163_pos, rx1163_eos, rxscan1167_done
+  rxscan1167_scan:
+    set_addr $I10, rxscan1167_loop
+    rx1163_cur."!mark_push"(0, rx1163_pos, $I10)
+  rxscan1167_done:
+.annotate "line", 505
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1165_fail
-    rx1160_cur."!mark_push"(0, rx1160_pos, $I10)
+    set_addr $I10, rxcap_1168_fail
+    rx1163_cur."!mark_push"(0, rx1163_pos, $I10)
   # rx literal  "&&"
-    add $I11, rx1160_pos, 2
-    gt $I11, rx1160_eos, rx1160_fail
-    sub $I11, rx1160_pos, rx1160_off
-    substr $S10, rx1160_tgt, $I11, 2
-    ne $S10, "&&", rx1160_fail
-    add rx1160_pos, 2
-    set_addr $I10, rxcap_1165_fail
-    ($I12, $I11) = rx1160_cur."!mark_peek"($I10)
-    rx1160_cur."!cursor_pos"($I11)
-    ($P10) = rx1160_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1160_pos, "")
-    rx1160_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1163_pos, 2
+    gt $I11, rx1163_eos, rx1163_fail
+    sub $I11, rx1163_pos, rx1163_off
+    substr $S10, rx1163_tgt, $I11, 2
+    ne $S10, "&&", rx1163_fail
+    add rx1163_pos, 2
+    set_addr $I10, rxcap_1168_fail
+    ($I12, $I11) = rx1163_cur."!mark_peek"($I10)
+    rx1163_cur."!cursor_pos"($I11)
+    ($P10) = rx1163_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1163_pos, "")
+    rx1163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1165_done
-  rxcap_1165_fail:
-    goto rx1160_fail
-  rxcap_1165_done:
+    goto rxcap_1168_done
+  rxcap_1168_fail:
+    goto rx1163_fail
+  rxcap_1168_done:
   # rx subrule "O" subtype=capture negate=
-    rx1160_cur."!cursor_pos"(rx1160_pos)
-    $P10 = rx1160_cur."O"("%tight_and, :pasttype<if>")
-    unless $P10, rx1160_fail
-    rx1160_cur."!mark_push"(0, -1, 0, $P10)
+    rx1163_cur."!cursor_pos"(rx1163_pos)
+    $P10 = rx1163_cur."O"("%tight_and, :pasttype<if>")
+    unless $P10, rx1163_fail
+    rx1163_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1160_pos = $P10."pos"()
+    rx1163_pos = $P10."pos"()
   # rx pass
-    rx1160_cur."!cursor_pass"(rx1160_pos, "infix:sym<&&>")
-    rx1160_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1160_pos)
-    .return (rx1160_cur)
-  rx1160_fail:
-.annotate "line", 417
-    (rx1160_rep, rx1160_pos, $I10, $P10) = rx1160_cur."!mark_fail"(0)
-    lt rx1160_pos, -1, rx1160_done
-    eq rx1160_pos, -1, rx1160_fail
+    rx1163_cur."!cursor_pass"(rx1163_pos, "infix:sym<&&>")
+    rx1163_cur."!cursor_debug"("PASS  ", "infix:sym<&&>", " at pos=", rx1163_pos)
+    .return (rx1163_cur)
+  rx1163_fail:
+.annotate "line", 421
+    (rx1163_rep, rx1163_pos, $I10, $P10) = rx1163_cur."!mark_fail"(0)
+    lt rx1163_pos, -1, rx1163_done
+    eq rx1163_pos, -1, rx1163_fail
     jump $I10
-  rx1160_done:
-    rx1160_cur."!cursor_fail"()
-    rx1160_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
-    .return (rx1160_cur)
+  rx1163_done:
+    rx1163_cur."!cursor_fail"()
+    rx1163_cur."!cursor_debug"("FAIL  ", "infix:sym<&&>")
+    .return (rx1163_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<&&>"  :subid("298_1267204702.05125") :method
-.annotate "line", 417
-    $P1162 = self."!PREFIX__!subrule"("O", "&&")
-    new $P1163, "ResizablePMCArray"
-    push $P1163, $P1162
-    .return ($P1163)
+.sub "!PREFIX__infix:sym<&&>"  :subid("298_1271336396.90314") :method
+.annotate "line", 421
+    $P1165 = self."!PREFIX__!subrule"("O", "&&")
+    new $P1166, "ResizablePMCArray"
+    push $P1166, $P1165
+    .return ($P1166)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<||>"  :subid("299_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1167_tgt
-    .local int rx1167_pos
-    .local int rx1167_off
-    .local int rx1167_eos
-    .local int rx1167_rep
-    .local pmc rx1167_cur
-    (rx1167_cur, rx1167_pos, rx1167_tgt) = self."!cursor_start"()
-    rx1167_cur."!cursor_debug"("START ", "infix:sym<||>")
-    .lex unicode:"$\x{a2}", rx1167_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1167_eos, rx1167_tgt
-    set rx1167_off, 0
-    lt rx1167_pos, 2, rx1167_start
-    sub rx1167_off, rx1167_pos, 1
-    substr rx1167_tgt, rx1167_tgt, rx1167_off
-  rx1167_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1171_done
-    goto rxscan1171_scan
-  rxscan1171_loop:
-    ($P10) = rx1167_cur."from"()
-    inc $P10
-    set rx1167_pos, $P10
-    ge rx1167_pos, rx1167_eos, rxscan1171_done
-  rxscan1171_scan:
-    set_addr $I10, rxscan1171_loop
-    rx1167_cur."!mark_push"(0, rx1167_pos, $I10)
-  rxscan1171_done:
-.annotate "line", 503
+.sub "infix:sym<||>"  :subid("299_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1170_tgt
+    .local int rx1170_pos
+    .local int rx1170_off
+    .local int rx1170_eos
+    .local int rx1170_rep
+    .local pmc rx1170_cur
+    (rx1170_cur, rx1170_pos, rx1170_tgt) = self."!cursor_start"()
+    rx1170_cur."!cursor_debug"("START ", "infix:sym<||>")
+    .lex unicode:"$\x{a2}", rx1170_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1170_eos, rx1170_tgt
+    set rx1170_off, 0
+    lt rx1170_pos, 2, rx1170_start
+    sub rx1170_off, rx1170_pos, 1
+    substr rx1170_tgt, rx1170_tgt, rx1170_off
+  rx1170_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1174_done
+    goto rxscan1174_scan
+  rxscan1174_loop:
+    ($P10) = rx1170_cur."from"()
+    inc $P10
+    set rx1170_pos, $P10
+    ge rx1170_pos, rx1170_eos, rxscan1174_done
+  rxscan1174_scan:
+    set_addr $I10, rxscan1174_loop
+    rx1170_cur."!mark_push"(0, rx1170_pos, $I10)
+  rxscan1174_done:
+.annotate "line", 507
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1172_fail
-    rx1167_cur."!mark_push"(0, rx1167_pos, $I10)
+    set_addr $I10, rxcap_1175_fail
+    rx1170_cur."!mark_push"(0, rx1170_pos, $I10)
   # rx literal  "||"
-    add $I11, rx1167_pos, 2
-    gt $I11, rx1167_eos, rx1167_fail
-    sub $I11, rx1167_pos, rx1167_off
-    substr $S10, rx1167_tgt, $I11, 2
-    ne $S10, "||", rx1167_fail
-    add rx1167_pos, 2
-    set_addr $I10, rxcap_1172_fail
-    ($I12, $I11) = rx1167_cur."!mark_peek"($I10)
-    rx1167_cur."!cursor_pos"($I11)
-    ($P10) = rx1167_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1167_pos, "")
-    rx1167_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1170_pos, 2
+    gt $I11, rx1170_eos, rx1170_fail
+    sub $I11, rx1170_pos, rx1170_off
+    substr $S10, rx1170_tgt, $I11, 2
+    ne $S10, "||", rx1170_fail
+    add rx1170_pos, 2
+    set_addr $I10, rxcap_1175_fail
+    ($I12, $I11) = rx1170_cur."!mark_peek"($I10)
+    rx1170_cur."!cursor_pos"($I11)
+    ($P10) = rx1170_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1170_pos, "")
+    rx1170_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1172_done
-  rxcap_1172_fail:
-    goto rx1167_fail
-  rxcap_1172_done:
+    goto rxcap_1175_done
+  rxcap_1175_fail:
+    goto rx1170_fail
+  rxcap_1175_done:
   # rx subrule "O" subtype=capture negate=
-    rx1167_cur."!cursor_pos"(rx1167_pos)
-    $P10 = rx1167_cur."O"("%tight_or, :pasttype<unless>")
-    unless $P10, rx1167_fail
-    rx1167_cur."!mark_push"(0, -1, 0, $P10)
+    rx1170_cur."!cursor_pos"(rx1170_pos)
+    $P10 = rx1170_cur."O"("%tight_or, :pasttype<unless>")
+    unless $P10, rx1170_fail
+    rx1170_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1167_pos = $P10."pos"()
+    rx1170_pos = $P10."pos"()
   # rx pass
-    rx1167_cur."!cursor_pass"(rx1167_pos, "infix:sym<||>")
-    rx1167_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1167_pos)
-    .return (rx1167_cur)
-  rx1167_fail:
-.annotate "line", 417
-    (rx1167_rep, rx1167_pos, $I10, $P10) = rx1167_cur."!mark_fail"(0)
-    lt rx1167_pos, -1, rx1167_done
-    eq rx1167_pos, -1, rx1167_fail
+    rx1170_cur."!cursor_pass"(rx1170_pos, "infix:sym<||>")
+    rx1170_cur."!cursor_debug"("PASS  ", "infix:sym<||>", " at pos=", rx1170_pos)
+    .return (rx1170_cur)
+  rx1170_fail:
+.annotate "line", 421
+    (rx1170_rep, rx1170_pos, $I10, $P10) = rx1170_cur."!mark_fail"(0)
+    lt rx1170_pos, -1, rx1170_done
+    eq rx1170_pos, -1, rx1170_fail
     jump $I10
-  rx1167_done:
-    rx1167_cur."!cursor_fail"()
-    rx1167_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
-    .return (rx1167_cur)
+  rx1170_done:
+    rx1170_cur."!cursor_fail"()
+    rx1170_cur."!cursor_debug"("FAIL  ", "infix:sym<||>")
+    .return (rx1170_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<||>"  :subid("300_1267204702.05125") :method
-.annotate "line", 417
-    $P1169 = self."!PREFIX__!subrule"("O", "||")
-    new $P1170, "ResizablePMCArray"
-    push $P1170, $P1169
-    .return ($P1170)
+.sub "!PREFIX__infix:sym<||>"  :subid("300_1271336396.90314") :method
+.annotate "line", 421
+    $P1172 = self."!PREFIX__!subrule"("O", "||")
+    new $P1173, "ResizablePMCArray"
+    push $P1173, $P1172
+    .return ($P1173)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<//>"  :subid("301_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1174_tgt
-    .local int rx1174_pos
-    .local int rx1174_off
-    .local int rx1174_eos
-    .local int rx1174_rep
-    .local pmc rx1174_cur
-    (rx1174_cur, rx1174_pos, rx1174_tgt) = self."!cursor_start"()
-    rx1174_cur."!cursor_debug"("START ", "infix:sym<//>")
-    .lex unicode:"$\x{a2}", rx1174_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1174_eos, rx1174_tgt
-    set rx1174_off, 0
-    lt rx1174_pos, 2, rx1174_start
-    sub rx1174_off, rx1174_pos, 1
-    substr rx1174_tgt, rx1174_tgt, rx1174_off
-  rx1174_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1178_done
-    goto rxscan1178_scan
-  rxscan1178_loop:
-    ($P10) = rx1174_cur."from"()
-    inc $P10
-    set rx1174_pos, $P10
-    ge rx1174_pos, rx1174_eos, rxscan1178_done
-  rxscan1178_scan:
-    set_addr $I10, rxscan1178_loop
-    rx1174_cur."!mark_push"(0, rx1174_pos, $I10)
-  rxscan1178_done:
-.annotate "line", 504
+.sub "infix:sym<//>"  :subid("301_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1177_tgt
+    .local int rx1177_pos
+    .local int rx1177_off
+    .local int rx1177_eos
+    .local int rx1177_rep
+    .local pmc rx1177_cur
+    (rx1177_cur, rx1177_pos, rx1177_tgt) = self."!cursor_start"()
+    rx1177_cur."!cursor_debug"("START ", "infix:sym<//>")
+    .lex unicode:"$\x{a2}", rx1177_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1177_eos, rx1177_tgt
+    set rx1177_off, 0
+    lt rx1177_pos, 2, rx1177_start
+    sub rx1177_off, rx1177_pos, 1
+    substr rx1177_tgt, rx1177_tgt, rx1177_off
+  rx1177_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1181_done
+    goto rxscan1181_scan
+  rxscan1181_loop:
+    ($P10) = rx1177_cur."from"()
+    inc $P10
+    set rx1177_pos, $P10
+    ge rx1177_pos, rx1177_eos, rxscan1181_done
+  rxscan1181_scan:
+    set_addr $I10, rxscan1181_loop
+    rx1177_cur."!mark_push"(0, rx1177_pos, $I10)
+  rxscan1181_done:
+.annotate "line", 508
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1179_fail
-    rx1174_cur."!mark_push"(0, rx1174_pos, $I10)
+    set_addr $I10, rxcap_1182_fail
+    rx1177_cur."!mark_push"(0, rx1177_pos, $I10)
   # rx literal  "//"
-    add $I11, rx1174_pos, 2
-    gt $I11, rx1174_eos, rx1174_fail
-    sub $I11, rx1174_pos, rx1174_off
-    substr $S10, rx1174_tgt, $I11, 2
-    ne $S10, "//", rx1174_fail
-    add rx1174_pos, 2
-    set_addr $I10, rxcap_1179_fail
-    ($I12, $I11) = rx1174_cur."!mark_peek"($I10)
-    rx1174_cur."!cursor_pos"($I11)
-    ($P10) = rx1174_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1174_pos, "")
-    rx1174_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1177_pos, 2
+    gt $I11, rx1177_eos, rx1177_fail
+    sub $I11, rx1177_pos, rx1177_off
+    substr $S10, rx1177_tgt, $I11, 2
+    ne $S10, "//", rx1177_fail
+    add rx1177_pos, 2
+    set_addr $I10, rxcap_1182_fail
+    ($I12, $I11) = rx1177_cur."!mark_peek"($I10)
+    rx1177_cur."!cursor_pos"($I11)
+    ($P10) = rx1177_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1177_pos, "")
+    rx1177_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1179_done
-  rxcap_1179_fail:
-    goto rx1174_fail
-  rxcap_1179_done:
+    goto rxcap_1182_done
+  rxcap_1182_fail:
+    goto rx1177_fail
+  rxcap_1182_done:
   # rx subrule "O" subtype=capture negate=
-    rx1174_cur."!cursor_pos"(rx1174_pos)
-    $P10 = rx1174_cur."O"("%tight_or, :pasttype<def_or>")
-    unless $P10, rx1174_fail
-    rx1174_cur."!mark_push"(0, -1, 0, $P10)
+    rx1177_cur."!cursor_pos"(rx1177_pos)
+    $P10 = rx1177_cur."O"("%tight_or, :pasttype<def_or>")
+    unless $P10, rx1177_fail
+    rx1177_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1174_pos = $P10."pos"()
+    rx1177_pos = $P10."pos"()
   # rx pass
-    rx1174_cur."!cursor_pass"(rx1174_pos, "infix:sym<//>")
-    rx1174_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1174_pos)
-    .return (rx1174_cur)
-  rx1174_fail:
-.annotate "line", 417
-    (rx1174_rep, rx1174_pos, $I10, $P10) = rx1174_cur."!mark_fail"(0)
-    lt rx1174_pos, -1, rx1174_done
-    eq rx1174_pos, -1, rx1174_fail
+    rx1177_cur."!cursor_pass"(rx1177_pos, "infix:sym<//>")
+    rx1177_cur."!cursor_debug"("PASS  ", "infix:sym<//>", " at pos=", rx1177_pos)
+    .return (rx1177_cur)
+  rx1177_fail:
+.annotate "line", 421
+    (rx1177_rep, rx1177_pos, $I10, $P10) = rx1177_cur."!mark_fail"(0)
+    lt rx1177_pos, -1, rx1177_done
+    eq rx1177_pos, -1, rx1177_fail
     jump $I10
-  rx1174_done:
-    rx1174_cur."!cursor_fail"()
-    rx1174_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
-    .return (rx1174_cur)
+  rx1177_done:
+    rx1177_cur."!cursor_fail"()
+    rx1177_cur."!cursor_debug"("FAIL  ", "infix:sym<//>")
+    .return (rx1177_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<//>"  :subid("302_1267204702.05125") :method
-.annotate "line", 417
-    $P1176 = self."!PREFIX__!subrule"("O", "//")
-    new $P1177, "ResizablePMCArray"
-    push $P1177, $P1176
-    .return ($P1177)
+.sub "!PREFIX__infix:sym<//>"  :subid("302_1271336396.90314") :method
+.annotate "line", 421
+    $P1179 = self."!PREFIX__!subrule"("O", "//")
+    new $P1180, "ResizablePMCArray"
+    push $P1180, $P1179
+    .return ($P1180)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<?? !!>"  :subid("303_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1181_tgt
-    .local int rx1181_pos
-    .local int rx1181_off
-    .local int rx1181_eos
-    .local int rx1181_rep
-    .local pmc rx1181_cur
-    (rx1181_cur, rx1181_pos, rx1181_tgt) = self."!cursor_start"()
-    rx1181_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
-    .lex unicode:"$\x{a2}", rx1181_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1181_eos, rx1181_tgt
-    set rx1181_off, 0
-    lt rx1181_pos, 2, rx1181_start
-    sub rx1181_off, rx1181_pos, 1
-    substr rx1181_tgt, rx1181_tgt, rx1181_off
-  rx1181_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1185_done
-    goto rxscan1185_scan
-  rxscan1185_loop:
-    ($P10) = rx1181_cur."from"()
-    inc $P10
-    set rx1181_pos, $P10
-    ge rx1181_pos, rx1181_eos, rxscan1185_done
-  rxscan1185_scan:
-    set_addr $I10, rxscan1185_loop
-    rx1181_cur."!mark_push"(0, rx1181_pos, $I10)
-  rxscan1185_done:
-.annotate "line", 507
+.sub "infix:sym<?? !!>"  :subid("303_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1184_tgt
+    .local int rx1184_pos
+    .local int rx1184_off
+    .local int rx1184_eos
+    .local int rx1184_rep
+    .local pmc rx1184_cur
+    (rx1184_cur, rx1184_pos, rx1184_tgt) = self."!cursor_start"()
+    rx1184_cur."!cursor_debug"("START ", "infix:sym<?? !!>")
+    .lex unicode:"$\x{a2}", rx1184_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1184_eos, rx1184_tgt
+    set rx1184_off, 0
+    lt rx1184_pos, 2, rx1184_start
+    sub rx1184_off, rx1184_pos, 1
+    substr rx1184_tgt, rx1184_tgt, rx1184_off
+  rx1184_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1188_done
+    goto rxscan1188_scan
+  rxscan1188_loop:
+    ($P10) = rx1184_cur."from"()
+    inc $P10
+    set rx1184_pos, $P10
+    ge rx1184_pos, rx1184_eos, rxscan1188_done
+  rxscan1188_scan:
+    set_addr $I10, rxscan1188_loop
+    rx1184_cur."!mark_push"(0, rx1184_pos, $I10)
+  rxscan1188_done:
+.annotate "line", 511
   # rx literal  "??"
-    add $I11, rx1181_pos, 2
-    gt $I11, rx1181_eos, rx1181_fail
-    sub $I11, rx1181_pos, rx1181_off
-    substr $S10, rx1181_tgt, $I11, 2
-    ne $S10, "??", rx1181_fail
-    add rx1181_pos, 2
-.annotate "line", 508
-  # rx subrule "ws" subtype=method negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."ws"()
-    unless $P10, rx1181_fail
-    rx1181_pos = $P10."pos"()
-.annotate "line", 509
+    add $I11, rx1184_pos, 2
+    gt $I11, rx1184_eos, rx1184_fail
+    sub $I11, rx1184_pos, rx1184_off
+    substr $S10, rx1184_tgt, $I11, 2
+    ne $S10, "??", rx1184_fail
+    add rx1184_pos, 2
+.annotate "line", 512
+  # rx subrule "ws" subtype=method negate=
+    rx1184_cur."!cursor_pos"(rx1184_pos)
+    $P10 = rx1184_cur."ws"()
+    unless $P10, rx1184_fail
+    rx1184_pos = $P10."pos"()
+.annotate "line", 513
   # rx subrule "EXPR" subtype=capture negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."EXPR"("i=")
-    unless $P10, rx1181_fail
-    rx1181_cur."!mark_push"(0, -1, 0, $P10)
+    rx1184_cur."!cursor_pos"(rx1184_pos)
+    $P10 = rx1184_cur."EXPR"("i=")
+    unless $P10, rx1184_fail
+    rx1184_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx1181_pos = $P10."pos"()
-.annotate "line", 510
+    rx1184_pos = $P10."pos"()
+.annotate "line", 514
   # rx literal  "!!"
-    add $I11, rx1181_pos, 2
-    gt $I11, rx1181_eos, rx1181_fail
-    sub $I11, rx1181_pos, rx1181_off
-    substr $S10, rx1181_tgt, $I11, 2
-    ne $S10, "!!", rx1181_fail
-    add rx1181_pos, 2
-.annotate "line", 511
+    add $I11, rx1184_pos, 2
+    gt $I11, rx1184_eos, rx1184_fail
+    sub $I11, rx1184_pos, rx1184_off
+    substr $S10, rx1184_tgt, $I11, 2
+    ne $S10, "!!", rx1184_fail
+    add rx1184_pos, 2
+.annotate "line", 515
   # rx subrule "O" subtype=capture negate=
-    rx1181_cur."!cursor_pos"(rx1181_pos)
-    $P10 = rx1181_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
-    unless $P10, rx1181_fail
-    rx1181_cur."!mark_push"(0, -1, 0, $P10)
+    rx1184_cur."!cursor_pos"(rx1184_pos)
+    $P10 = rx1184_cur."O"("%conditional, :reducecheck<ternary>, :pasttype<if>")
+    unless $P10, rx1184_fail
+    rx1184_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1181_pos = $P10."pos"()
-.annotate "line", 506
+    rx1184_pos = $P10."pos"()
+.annotate "line", 510
   # rx pass
-    rx1181_cur."!cursor_pass"(rx1181_pos, "infix:sym<?? !!>")
-    rx1181_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1181_pos)
-    .return (rx1181_cur)
-  rx1181_fail:
-.annotate "line", 417
-    (rx1181_rep, rx1181_pos, $I10, $P10) = rx1181_cur."!mark_fail"(0)
-    lt rx1181_pos, -1, rx1181_done
-    eq rx1181_pos, -1, rx1181_fail
+    rx1184_cur."!cursor_pass"(rx1184_pos, "infix:sym<?? !!>")
+    rx1184_cur."!cursor_debug"("PASS  ", "infix:sym<?? !!>", " at pos=", rx1184_pos)
+    .return (rx1184_cur)
+  rx1184_fail:
+.annotate "line", 421
+    (rx1184_rep, rx1184_pos, $I10, $P10) = rx1184_cur."!mark_fail"(0)
+    lt rx1184_pos, -1, rx1184_done
+    eq rx1184_pos, -1, rx1184_fail
     jump $I10
-  rx1181_done:
-    rx1181_cur."!cursor_fail"()
-    rx1181_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
-    .return (rx1181_cur)
+  rx1184_done:
+    rx1184_cur."!cursor_fail"()
+    rx1184_cur."!cursor_debug"("FAIL  ", "infix:sym<?? !!>")
+    .return (rx1184_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<?? !!>"  :subid("304_1267204702.05125") :method
-.annotate "line", 417
-    $P1183 = self."!PREFIX__!subrule"("", "??")
-    new $P1184, "ResizablePMCArray"
-    push $P1184, $P1183
-    .return ($P1184)
+.sub "!PREFIX__infix:sym<?? !!>"  :subid("304_1271336396.90314") :method
+.annotate "line", 421
+    $P1186 = self."!PREFIX__!subrule"("", "??")
+    new $P1187, "ResizablePMCArray"
+    push $P1187, $P1186
+    .return ($P1187)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<=>"  :subid("305_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1187_tgt
-    .local int rx1187_pos
-    .local int rx1187_off
-    .local int rx1187_eos
-    .local int rx1187_rep
-    .local pmc rx1187_cur
-    (rx1187_cur, rx1187_pos, rx1187_tgt) = self."!cursor_start"()
-    rx1187_cur."!cursor_debug"("START ", "infix:sym<=>")
-    .lex unicode:"$\x{a2}", rx1187_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1187_eos, rx1187_tgt
-    set rx1187_off, 0
-    lt rx1187_pos, 2, rx1187_start
-    sub rx1187_off, rx1187_pos, 1
-    substr rx1187_tgt, rx1187_tgt, rx1187_off
-  rx1187_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1191_done
-    goto rxscan1191_scan
-  rxscan1191_loop:
-    ($P10) = rx1187_cur."from"()
-    inc $P10
-    set rx1187_pos, $P10
-    ge rx1187_pos, rx1187_eos, rxscan1191_done
-  rxscan1191_scan:
-    set_addr $I10, rxscan1191_loop
-    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
-  rxscan1191_done:
-.annotate "line", 515
+.sub "infix:sym<=>"  :subid("305_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1190_tgt
+    .local int rx1190_pos
+    .local int rx1190_off
+    .local int rx1190_eos
+    .local int rx1190_rep
+    .local pmc rx1190_cur
+    (rx1190_cur, rx1190_pos, rx1190_tgt) = self."!cursor_start"()
+    rx1190_cur."!cursor_debug"("START ", "infix:sym<=>")
+    .lex unicode:"$\x{a2}", rx1190_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1190_eos, rx1190_tgt
+    set rx1190_off, 0
+    lt rx1190_pos, 2, rx1190_start
+    sub rx1190_off, rx1190_pos, 1
+    substr rx1190_tgt, rx1190_tgt, rx1190_off
+  rx1190_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1194_done
+    goto rxscan1194_scan
+  rxscan1194_loop:
+    ($P10) = rx1190_cur."from"()
+    inc $P10
+    set rx1190_pos, $P10
+    ge rx1190_pos, rx1190_eos, rxscan1194_done
+  rxscan1194_scan:
+    set_addr $I10, rxscan1194_loop
+    rx1190_cur."!mark_push"(0, rx1190_pos, $I10)
+  rxscan1194_done:
+.annotate "line", 519
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1192_fail
-    rx1187_cur."!mark_push"(0, rx1187_pos, $I10)
+    set_addr $I10, rxcap_1195_fail
+    rx1190_cur."!mark_push"(0, rx1190_pos, $I10)
   # rx literal  "="
-    add $I11, rx1187_pos, 1
-    gt $I11, rx1187_eos, rx1187_fail
-    sub $I11, rx1187_pos, rx1187_off
-    substr $S10, rx1187_tgt, $I11, 1
-    ne $S10, "=", rx1187_fail
-    add rx1187_pos, 1
-    set_addr $I10, rxcap_1192_fail
-    ($I12, $I11) = rx1187_cur."!mark_peek"($I10)
-    rx1187_cur."!cursor_pos"($I11)
-    ($P10) = rx1187_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1187_pos, "")
-    rx1187_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1190_pos, 1
+    gt $I11, rx1190_eos, rx1190_fail
+    sub $I11, rx1190_pos, rx1190_off
+    substr $S10, rx1190_tgt, $I11, 1
+    ne $S10, "=", rx1190_fail
+    add rx1190_pos, 1
+    set_addr $I10, rxcap_1195_fail
+    ($I12, $I11) = rx1190_cur."!mark_peek"($I10)
+    rx1190_cur."!cursor_pos"($I11)
+    ($P10) = rx1190_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1190_pos, "")
+    rx1190_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1192_done
-  rxcap_1192_fail:
-    goto rx1187_fail
-  rxcap_1192_done:
+    goto rxcap_1195_done
+  rxcap_1195_fail:
+    goto rx1190_fail
+  rxcap_1195_done:
   # rx subrule "panic" subtype=method negate=
-    rx1187_cur."!cursor_pos"(rx1187_pos)
-    $P10 = rx1187_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
-    unless $P10, rx1187_fail
-    rx1187_pos = $P10."pos"()
-.annotate "line", 514
+    rx1190_cur."!cursor_pos"(rx1190_pos)
+    $P10 = rx1190_cur."panic"("Assignment (\"=\") not supported in NQP, use \":=\" instead")
+    unless $P10, rx1190_fail
+    rx1190_pos = $P10."pos"()
+.annotate "line", 518
   # rx pass
-    rx1187_cur."!cursor_pass"(rx1187_pos, "infix:sym<=>")
-    rx1187_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1187_pos)
-    .return (rx1187_cur)
-  rx1187_fail:
-.annotate "line", 417
-    (rx1187_rep, rx1187_pos, $I10, $P10) = rx1187_cur."!mark_fail"(0)
-    lt rx1187_pos, -1, rx1187_done
-    eq rx1187_pos, -1, rx1187_fail
+    rx1190_cur."!cursor_pass"(rx1190_pos, "infix:sym<=>")
+    rx1190_cur."!cursor_debug"("PASS  ", "infix:sym<=>", " at pos=", rx1190_pos)
+    .return (rx1190_cur)
+  rx1190_fail:
+.annotate "line", 421
+    (rx1190_rep, rx1190_pos, $I10, $P10) = rx1190_cur."!mark_fail"(0)
+    lt rx1190_pos, -1, rx1190_done
+    eq rx1190_pos, -1, rx1190_fail
     jump $I10
-  rx1187_done:
-    rx1187_cur."!cursor_fail"()
-    rx1187_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
-    .return (rx1187_cur)
+  rx1190_done:
+    rx1190_cur."!cursor_fail"()
+    rx1190_cur."!cursor_debug"("FAIL  ", "infix:sym<=>")
+    .return (rx1190_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<=>"  :subid("306_1267204702.05125") :method
-.annotate "line", 417
-    $P1189 = self."!PREFIX__!subrule"("", "=")
-    new $P1190, "ResizablePMCArray"
-    push $P1190, $P1189
-    .return ($P1190)
+.sub "!PREFIX__infix:sym<=>"  :subid("306_1271336396.90314") :method
+.annotate "line", 421
+    $P1192 = self."!PREFIX__!subrule"("", "=")
+    new $P1193, "ResizablePMCArray"
+    push $P1193, $P1192
+    .return ($P1193)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<:=>"  :subid("307_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1194_tgt
-    .local int rx1194_pos
-    .local int rx1194_off
-    .local int rx1194_eos
-    .local int rx1194_rep
-    .local pmc rx1194_cur
-    (rx1194_cur, rx1194_pos, rx1194_tgt) = self."!cursor_start"()
-    rx1194_cur."!cursor_debug"("START ", "infix:sym<:=>")
-    .lex unicode:"$\x{a2}", rx1194_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1194_eos, rx1194_tgt
-    set rx1194_off, 0
-    lt rx1194_pos, 2, rx1194_start
-    sub rx1194_off, rx1194_pos, 1
-    substr rx1194_tgt, rx1194_tgt, rx1194_off
-  rx1194_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1198_done
-    goto rxscan1198_scan
-  rxscan1198_loop:
-    ($P10) = rx1194_cur."from"()
-    inc $P10
-    set rx1194_pos, $P10
-    ge rx1194_pos, rx1194_eos, rxscan1198_done
-  rxscan1198_scan:
-    set_addr $I10, rxscan1198_loop
-    rx1194_cur."!mark_push"(0, rx1194_pos, $I10)
-  rxscan1198_done:
-.annotate "line", 517
+.sub "infix:sym<:=>"  :subid("307_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1197_tgt
+    .local int rx1197_pos
+    .local int rx1197_off
+    .local int rx1197_eos
+    .local int rx1197_rep
+    .local pmc rx1197_cur
+    (rx1197_cur, rx1197_pos, rx1197_tgt) = self."!cursor_start"()
+    rx1197_cur."!cursor_debug"("START ", "infix:sym<:=>")
+    .lex unicode:"$\x{a2}", rx1197_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1197_eos, rx1197_tgt
+    set rx1197_off, 0
+    lt rx1197_pos, 2, rx1197_start
+    sub rx1197_off, rx1197_pos, 1
+    substr rx1197_tgt, rx1197_tgt, rx1197_off
+  rx1197_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1201_done
+    goto rxscan1201_scan
+  rxscan1201_loop:
+    ($P10) = rx1197_cur."from"()
+    inc $P10
+    set rx1197_pos, $P10
+    ge rx1197_pos, rx1197_eos, rxscan1201_done
+  rxscan1201_scan:
+    set_addr $I10, rxscan1201_loop
+    rx1197_cur."!mark_push"(0, rx1197_pos, $I10)
+  rxscan1201_done:
+.annotate "line", 521
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1199_fail
-    rx1194_cur."!mark_push"(0, rx1194_pos, $I10)
+    set_addr $I10, rxcap_1202_fail
+    rx1197_cur."!mark_push"(0, rx1197_pos, $I10)
   # rx literal  ":="
-    add $I11, rx1194_pos, 2
-    gt $I11, rx1194_eos, rx1194_fail
-    sub $I11, rx1194_pos, rx1194_off
-    substr $S10, rx1194_tgt, $I11, 2
-    ne $S10, ":=", rx1194_fail
-    add rx1194_pos, 2
-    set_addr $I10, rxcap_1199_fail
-    ($I12, $I11) = rx1194_cur."!mark_peek"($I10)
-    rx1194_cur."!cursor_pos"($I11)
-    ($P10) = rx1194_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1194_pos, "")
-    rx1194_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1197_pos, 2
+    gt $I11, rx1197_eos, rx1197_fail
+    sub $I11, rx1197_pos, rx1197_off
+    substr $S10, rx1197_tgt, $I11, 2
+    ne $S10, ":=", rx1197_fail
+    add rx1197_pos, 2
+    set_addr $I10, rxcap_1202_fail
+    ($I12, $I11) = rx1197_cur."!mark_peek"($I10)
+    rx1197_cur."!cursor_pos"($I11)
+    ($P10) = rx1197_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1197_pos, "")
+    rx1197_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1199_done
-  rxcap_1199_fail:
-    goto rx1194_fail
-  rxcap_1199_done:
+    goto rxcap_1202_done
+  rxcap_1202_fail:
+    goto rx1197_fail
+  rxcap_1202_done:
   # rx subrule "O" subtype=capture negate=
-    rx1194_cur."!cursor_pos"(rx1194_pos)
-    $P10 = rx1194_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1194_fail
-    rx1194_cur."!mark_push"(0, -1, 0, $P10)
+    rx1197_cur."!cursor_pos"(rx1197_pos)
+    $P10 = rx1197_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1197_fail
+    rx1197_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1194_pos = $P10."pos"()
+    rx1197_pos = $P10."pos"()
   # rx pass
-    rx1194_cur."!cursor_pass"(rx1194_pos, "infix:sym<:=>")
-    rx1194_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1194_pos)
-    .return (rx1194_cur)
-  rx1194_fail:
-.annotate "line", 417
-    (rx1194_rep, rx1194_pos, $I10, $P10) = rx1194_cur."!mark_fail"(0)
-    lt rx1194_pos, -1, rx1194_done
-    eq rx1194_pos, -1, rx1194_fail
+    rx1197_cur."!cursor_pass"(rx1197_pos, "infix:sym<:=>")
+    rx1197_cur."!cursor_debug"("PASS  ", "infix:sym<:=>", " at pos=", rx1197_pos)
+    .return (rx1197_cur)
+  rx1197_fail:
+.annotate "line", 421
+    (rx1197_rep, rx1197_pos, $I10, $P10) = rx1197_cur."!mark_fail"(0)
+    lt rx1197_pos, -1, rx1197_done
+    eq rx1197_pos, -1, rx1197_fail
     jump $I10
-  rx1194_done:
-    rx1194_cur."!cursor_fail"()
-    rx1194_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
-    .return (rx1194_cur)
+  rx1197_done:
+    rx1197_cur."!cursor_fail"()
+    rx1197_cur."!cursor_debug"("FAIL  ", "infix:sym<:=>")
+    .return (rx1197_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<:=>"  :subid("308_1267204702.05125") :method
-.annotate "line", 417
-    $P1196 = self."!PREFIX__!subrule"("O", ":=")
-    new $P1197, "ResizablePMCArray"
-    push $P1197, $P1196
-    .return ($P1197)
+.sub "!PREFIX__infix:sym<:=>"  :subid("308_1271336396.90314") :method
+.annotate "line", 421
+    $P1199 = self."!PREFIX__!subrule"("O", ":=")
+    new $P1200, "ResizablePMCArray"
+    push $P1200, $P1199
+    .return ($P1200)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<::=>"  :subid("309_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1201_tgt
-    .local int rx1201_pos
-    .local int rx1201_off
-    .local int rx1201_eos
-    .local int rx1201_rep
-    .local pmc rx1201_cur
-    (rx1201_cur, rx1201_pos, rx1201_tgt) = self."!cursor_start"()
-    rx1201_cur."!cursor_debug"("START ", "infix:sym<::=>")
-    .lex unicode:"$\x{a2}", rx1201_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1201_eos, rx1201_tgt
-    set rx1201_off, 0
-    lt rx1201_pos, 2, rx1201_start
-    sub rx1201_off, rx1201_pos, 1
-    substr rx1201_tgt, rx1201_tgt, rx1201_off
-  rx1201_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1205_done
-    goto rxscan1205_scan
-  rxscan1205_loop:
-    ($P10) = rx1201_cur."from"()
-    inc $P10
-    set rx1201_pos, $P10
-    ge rx1201_pos, rx1201_eos, rxscan1205_done
-  rxscan1205_scan:
-    set_addr $I10, rxscan1205_loop
-    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
-  rxscan1205_done:
-.annotate "line", 518
+.sub "infix:sym<::=>"  :subid("309_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1204_tgt
+    .local int rx1204_pos
+    .local int rx1204_off
+    .local int rx1204_eos
+    .local int rx1204_rep
+    .local pmc rx1204_cur
+    (rx1204_cur, rx1204_pos, rx1204_tgt) = self."!cursor_start"()
+    rx1204_cur."!cursor_debug"("START ", "infix:sym<::=>")
+    .lex unicode:"$\x{a2}", rx1204_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1204_eos, rx1204_tgt
+    set rx1204_off, 0
+    lt rx1204_pos, 2, rx1204_start
+    sub rx1204_off, rx1204_pos, 1
+    substr rx1204_tgt, rx1204_tgt, rx1204_off
+  rx1204_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1208_done
+    goto rxscan1208_scan
+  rxscan1208_loop:
+    ($P10) = rx1204_cur."from"()
+    inc $P10
+    set rx1204_pos, $P10
+    ge rx1204_pos, rx1204_eos, rxscan1208_done
+  rxscan1208_scan:
+    set_addr $I10, rxscan1208_loop
+    rx1204_cur."!mark_push"(0, rx1204_pos, $I10)
+  rxscan1208_done:
+.annotate "line", 522
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1206_fail
-    rx1201_cur."!mark_push"(0, rx1201_pos, $I10)
+    set_addr $I10, rxcap_1209_fail
+    rx1204_cur."!mark_push"(0, rx1204_pos, $I10)
   # rx literal  "::="
-    add $I11, rx1201_pos, 3
-    gt $I11, rx1201_eos, rx1201_fail
-    sub $I11, rx1201_pos, rx1201_off
-    substr $S10, rx1201_tgt, $I11, 3
-    ne $S10, "::=", rx1201_fail
-    add rx1201_pos, 3
-    set_addr $I10, rxcap_1206_fail
-    ($I12, $I11) = rx1201_cur."!mark_peek"($I10)
-    rx1201_cur."!cursor_pos"($I11)
-    ($P10) = rx1201_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1201_pos, "")
-    rx1201_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1204_pos, 3
+    gt $I11, rx1204_eos, rx1204_fail
+    sub $I11, rx1204_pos, rx1204_off
+    substr $S10, rx1204_tgt, $I11, 3
+    ne $S10, "::=", rx1204_fail
+    add rx1204_pos, 3
+    set_addr $I10, rxcap_1209_fail
+    ($I12, $I11) = rx1204_cur."!mark_peek"($I10)
+    rx1204_cur."!cursor_pos"($I11)
+    ($P10) = rx1204_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1204_pos, "")
+    rx1204_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1206_done
-  rxcap_1206_fail:
-    goto rx1201_fail
-  rxcap_1206_done:
+    goto rxcap_1209_done
+  rxcap_1209_fail:
+    goto rx1204_fail
+  rxcap_1209_done:
   # rx subrule "O" subtype=capture negate=
-    rx1201_cur."!cursor_pos"(rx1201_pos)
-    $P10 = rx1201_cur."O"("%assignment, :pasttype<bind>")
-    unless $P10, rx1201_fail
-    rx1201_cur."!mark_push"(0, -1, 0, $P10)
+    rx1204_cur."!cursor_pos"(rx1204_pos)
+    $P10 = rx1204_cur."O"("%assignment, :pasttype<bind>")
+    unless $P10, rx1204_fail
+    rx1204_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1201_pos = $P10."pos"()
+    rx1204_pos = $P10."pos"()
   # rx pass
-    rx1201_cur."!cursor_pass"(rx1201_pos, "infix:sym<::=>")
-    rx1201_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1201_pos)
-    .return (rx1201_cur)
-  rx1201_fail:
-.annotate "line", 417
-    (rx1201_rep, rx1201_pos, $I10, $P10) = rx1201_cur."!mark_fail"(0)
-    lt rx1201_pos, -1, rx1201_done
-    eq rx1201_pos, -1, rx1201_fail
+    rx1204_cur."!cursor_pass"(rx1204_pos, "infix:sym<::=>")
+    rx1204_cur."!cursor_debug"("PASS  ", "infix:sym<::=>", " at pos=", rx1204_pos)
+    .return (rx1204_cur)
+  rx1204_fail:
+.annotate "line", 421
+    (rx1204_rep, rx1204_pos, $I10, $P10) = rx1204_cur."!mark_fail"(0)
+    lt rx1204_pos, -1, rx1204_done
+    eq rx1204_pos, -1, rx1204_fail
     jump $I10
-  rx1201_done:
-    rx1201_cur."!cursor_fail"()
-    rx1201_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
-    .return (rx1201_cur)
+  rx1204_done:
+    rx1204_cur."!cursor_fail"()
+    rx1204_cur."!cursor_debug"("FAIL  ", "infix:sym<::=>")
+    .return (rx1204_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<::=>"  :subid("310_1267204702.05125") :method
-.annotate "line", 417
-    $P1203 = self."!PREFIX__!subrule"("O", "::=")
-    new $P1204, "ResizablePMCArray"
-    push $P1204, $P1203
-    .return ($P1204)
+.sub "!PREFIX__infix:sym<::=>"  :subid("310_1271336396.90314") :method
+.annotate "line", 421
+    $P1206 = self."!PREFIX__!subrule"("O", "::=")
+    new $P1207, "ResizablePMCArray"
+    push $P1207, $P1206
+    .return ($P1207)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "infix:sym<,>"  :subid("311_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1208_tgt
-    .local int rx1208_pos
-    .local int rx1208_off
-    .local int rx1208_eos
-    .local int rx1208_rep
-    .local pmc rx1208_cur
-    (rx1208_cur, rx1208_pos, rx1208_tgt) = self."!cursor_start"()
-    rx1208_cur."!cursor_debug"("START ", "infix:sym<,>")
-    .lex unicode:"$\x{a2}", rx1208_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1208_eos, rx1208_tgt
-    set rx1208_off, 0
-    lt rx1208_pos, 2, rx1208_start
-    sub rx1208_off, rx1208_pos, 1
-    substr rx1208_tgt, rx1208_tgt, rx1208_off
-  rx1208_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1212_done
-    goto rxscan1212_scan
-  rxscan1212_loop:
-    ($P10) = rx1208_cur."from"()
-    inc $P10
-    set rx1208_pos, $P10
-    ge rx1208_pos, rx1208_eos, rxscan1212_done
-  rxscan1212_scan:
-    set_addr $I10, rxscan1212_loop
-    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
-  rxscan1212_done:
-.annotate "line", 520
+.sub "infix:sym<,>"  :subid("311_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1211_tgt
+    .local int rx1211_pos
+    .local int rx1211_off
+    .local int rx1211_eos
+    .local int rx1211_rep
+    .local pmc rx1211_cur
+    (rx1211_cur, rx1211_pos, rx1211_tgt) = self."!cursor_start"()
+    rx1211_cur."!cursor_debug"("START ", "infix:sym<,>")
+    .lex unicode:"$\x{a2}", rx1211_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1211_eos, rx1211_tgt
+    set rx1211_off, 0
+    lt rx1211_pos, 2, rx1211_start
+    sub rx1211_off, rx1211_pos, 1
+    substr rx1211_tgt, rx1211_tgt, rx1211_off
+  rx1211_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1215_done
+    goto rxscan1215_scan
+  rxscan1215_loop:
+    ($P10) = rx1211_cur."from"()
+    inc $P10
+    set rx1211_pos, $P10
+    ge rx1211_pos, rx1211_eos, rxscan1215_done
+  rxscan1215_scan:
+    set_addr $I10, rxscan1215_loop
+    rx1211_cur."!mark_push"(0, rx1211_pos, $I10)
+  rxscan1215_done:
+.annotate "line", 524
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1213_fail
-    rx1208_cur."!mark_push"(0, rx1208_pos, $I10)
+    set_addr $I10, rxcap_1216_fail
+    rx1211_cur."!mark_push"(0, rx1211_pos, $I10)
   # rx literal  ","
-    add $I11, rx1208_pos, 1
-    gt $I11, rx1208_eos, rx1208_fail
-    sub $I11, rx1208_pos, rx1208_off
-    substr $S10, rx1208_tgt, $I11, 1
-    ne $S10, ",", rx1208_fail
-    add rx1208_pos, 1
-    set_addr $I10, rxcap_1213_fail
-    ($I12, $I11) = rx1208_cur."!mark_peek"($I10)
-    rx1208_cur."!cursor_pos"($I11)
-    ($P10) = rx1208_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1208_pos, "")
-    rx1208_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1211_pos, 1
+    gt $I11, rx1211_eos, rx1211_fail
+    sub $I11, rx1211_pos, rx1211_off
+    substr $S10, rx1211_tgt, $I11, 1
+    ne $S10, ",", rx1211_fail
+    add rx1211_pos, 1
+    set_addr $I10, rxcap_1216_fail
+    ($I12, $I11) = rx1211_cur."!mark_peek"($I10)
+    rx1211_cur."!cursor_pos"($I11)
+    ($P10) = rx1211_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1211_pos, "")
+    rx1211_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1213_done
-  rxcap_1213_fail:
-    goto rx1208_fail
-  rxcap_1213_done:
+    goto rxcap_1216_done
+  rxcap_1216_fail:
+    goto rx1211_fail
+  rxcap_1216_done:
   # rx subrule "O" subtype=capture negate=
-    rx1208_cur."!cursor_pos"(rx1208_pos)
-    $P10 = rx1208_cur."O"("%comma, :pasttype<list>")
-    unless $P10, rx1208_fail
-    rx1208_cur."!mark_push"(0, -1, 0, $P10)
+    rx1211_cur."!cursor_pos"(rx1211_pos)
+    $P10 = rx1211_cur."O"("%comma, :pasttype<list>")
+    unless $P10, rx1211_fail
+    rx1211_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1208_pos = $P10."pos"()
+    rx1211_pos = $P10."pos"()
   # rx pass
-    rx1208_cur."!cursor_pass"(rx1208_pos, "infix:sym<,>")
-    rx1208_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1208_pos)
-    .return (rx1208_cur)
-  rx1208_fail:
-.annotate "line", 417
-    (rx1208_rep, rx1208_pos, $I10, $P10) = rx1208_cur."!mark_fail"(0)
-    lt rx1208_pos, -1, rx1208_done
-    eq rx1208_pos, -1, rx1208_fail
+    rx1211_cur."!cursor_pass"(rx1211_pos, "infix:sym<,>")
+    rx1211_cur."!cursor_debug"("PASS  ", "infix:sym<,>", " at pos=", rx1211_pos)
+    .return (rx1211_cur)
+  rx1211_fail:
+.annotate "line", 421
+    (rx1211_rep, rx1211_pos, $I10, $P10) = rx1211_cur."!mark_fail"(0)
+    lt rx1211_pos, -1, rx1211_done
+    eq rx1211_pos, -1, rx1211_fail
     jump $I10
-  rx1208_done:
-    rx1208_cur."!cursor_fail"()
-    rx1208_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
-    .return (rx1208_cur)
+  rx1211_done:
+    rx1211_cur."!cursor_fail"()
+    rx1211_cur."!cursor_debug"("FAIL  ", "infix:sym<,>")
+    .return (rx1211_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__infix:sym<,>"  :subid("312_1267204702.05125") :method
-.annotate "line", 417
-    $P1210 = self."!PREFIX__!subrule"("O", ",")
-    new $P1211, "ResizablePMCArray"
-    push $P1211, $P1210
-    .return ($P1211)
+.sub "!PREFIX__infix:sym<,>"  :subid("312_1271336396.90314") :method
+.annotate "line", 421
+    $P1213 = self."!PREFIX__!subrule"("O", ",")
+    new $P1214, "ResizablePMCArray"
+    push $P1214, $P1213
+    .return ($P1214)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<return>"  :subid("313_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1215_tgt
-    .local int rx1215_pos
-    .local int rx1215_off
-    .local int rx1215_eos
-    .local int rx1215_rep
-    .local pmc rx1215_cur
-    (rx1215_cur, rx1215_pos, rx1215_tgt) = self."!cursor_start"()
-    rx1215_cur."!cursor_debug"("START ", "prefix:sym<return>")
-    .lex unicode:"$\x{a2}", rx1215_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1215_eos, rx1215_tgt
-    set rx1215_off, 0
-    lt rx1215_pos, 2, rx1215_start
-    sub rx1215_off, rx1215_pos, 1
-    substr rx1215_tgt, rx1215_tgt, rx1215_off
-  rx1215_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1218_done
-    goto rxscan1218_scan
-  rxscan1218_loop:
-    ($P10) = rx1215_cur."from"()
-    inc $P10
-    set rx1215_pos, $P10
-    ge rx1215_pos, rx1215_eos, rxscan1218_done
-  rxscan1218_scan:
-    set_addr $I10, rxscan1218_loop
-    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
-  rxscan1218_done:
-.annotate "line", 522
+.sub "prefix:sym<return>"  :subid("313_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1218_tgt
+    .local int rx1218_pos
+    .local int rx1218_off
+    .local int rx1218_eos
+    .local int rx1218_rep
+    .local pmc rx1218_cur
+    (rx1218_cur, rx1218_pos, rx1218_tgt) = self."!cursor_start"()
+    rx1218_cur."!cursor_debug"("START ", "prefix:sym<return>")
+    .lex unicode:"$\x{a2}", rx1218_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1218_eos, rx1218_tgt
+    set rx1218_off, 0
+    lt rx1218_pos, 2, rx1218_start
+    sub rx1218_off, rx1218_pos, 1
+    substr rx1218_tgt, rx1218_tgt, rx1218_off
+  rx1218_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1221_done
+    goto rxscan1221_scan
+  rxscan1221_loop:
+    ($P10) = rx1218_cur."from"()
+    inc $P10
+    set rx1218_pos, $P10
+    ge rx1218_pos, rx1218_eos, rxscan1221_done
+  rxscan1221_scan:
+    set_addr $I10, rxscan1221_loop
+    rx1218_cur."!mark_push"(0, rx1218_pos, $I10)
+  rxscan1221_done:
+.annotate "line", 526
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1219_fail
-    rx1215_cur."!mark_push"(0, rx1215_pos, $I10)
+    set_addr $I10, rxcap_1222_fail
+    rx1218_cur."!mark_push"(0, rx1218_pos, $I10)
   # rx literal  "return"
-    add $I11, rx1215_pos, 6
-    gt $I11, rx1215_eos, rx1215_fail
-    sub $I11, rx1215_pos, rx1215_off
-    substr $S10, rx1215_tgt, $I11, 6
-    ne $S10, "return", rx1215_fail
-    add rx1215_pos, 6
-    set_addr $I10, rxcap_1219_fail
-    ($I12, $I11) = rx1215_cur."!mark_peek"($I10)
-    rx1215_cur."!cursor_pos"($I11)
-    ($P10) = rx1215_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1215_pos, "")
-    rx1215_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1218_pos, 6
+    gt $I11, rx1218_eos, rx1218_fail
+    sub $I11, rx1218_pos, rx1218_off
+    substr $S10, rx1218_tgt, $I11, 6
+    ne $S10, "return", rx1218_fail
+    add rx1218_pos, 6
+    set_addr $I10, rxcap_1222_fail
+    ($I12, $I11) = rx1218_cur."!mark_peek"($I10)
+    rx1218_cur."!cursor_pos"($I11)
+    ($P10) = rx1218_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1218_pos, "")
+    rx1218_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1219_done
-  rxcap_1219_fail:
-    goto rx1215_fail
-  rxcap_1219_done:
+    goto rxcap_1222_done
+  rxcap_1222_fail:
+    goto rx1218_fail
+  rxcap_1222_done:
   # rx charclass s
-    ge rx1215_pos, rx1215_eos, rx1215_fail
-    sub $I10, rx1215_pos, rx1215_off
-    is_cclass $I11, 32, rx1215_tgt, $I10
-    unless $I11, rx1215_fail
-    inc rx1215_pos
+    ge rx1218_pos, rx1218_eos, rx1218_fail
+    sub $I10, rx1218_pos, rx1218_off
+    is_cclass $I11, 32, rx1218_tgt, $I10
+    unless $I11, rx1218_fail
+    inc rx1218_pos
   # rx subrule "O" subtype=capture negate=
-    rx1215_cur."!cursor_pos"(rx1215_pos)
-    $P10 = rx1215_cur."O"("%list_prefix, :pasttype<return>")
-    unless $P10, rx1215_fail
-    rx1215_cur."!mark_push"(0, -1, 0, $P10)
+    rx1218_cur."!cursor_pos"(rx1218_pos)
+    $P10 = rx1218_cur."O"("%list_prefix, :pasttype<return>")
+    unless $P10, rx1218_fail
+    rx1218_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1215_pos = $P10."pos"()
+    rx1218_pos = $P10."pos"()
   # rx pass
-    rx1215_cur."!cursor_pass"(rx1215_pos, "prefix:sym<return>")
-    rx1215_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1215_pos)
-    .return (rx1215_cur)
-  rx1215_fail:
-.annotate "line", 417
-    (rx1215_rep, rx1215_pos, $I10, $P10) = rx1215_cur."!mark_fail"(0)
-    lt rx1215_pos, -1, rx1215_done
-    eq rx1215_pos, -1, rx1215_fail
+    rx1218_cur."!cursor_pass"(rx1218_pos, "prefix:sym<return>")
+    rx1218_cur."!cursor_debug"("PASS  ", "prefix:sym<return>", " at pos=", rx1218_pos)
+    .return (rx1218_cur)
+  rx1218_fail:
+.annotate "line", 421
+    (rx1218_rep, rx1218_pos, $I10, $P10) = rx1218_cur."!mark_fail"(0)
+    lt rx1218_pos, -1, rx1218_done
+    eq rx1218_pos, -1, rx1218_fail
     jump $I10
-  rx1215_done:
-    rx1215_cur."!cursor_fail"()
-    rx1215_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
-    .return (rx1215_cur)
+  rx1218_done:
+    rx1218_cur."!cursor_fail"()
+    rx1218_cur."!cursor_debug"("FAIL  ", "prefix:sym<return>")
+    .return (rx1218_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<return>"  :subid("314_1267204702.05125") :method
-.annotate "line", 417
-    new $P1217, "ResizablePMCArray"
-    push $P1217, "return"
-    .return ($P1217)
+.sub "!PREFIX__prefix:sym<return>"  :subid("314_1271336396.90314") :method
+.annotate "line", 421
+    new $P1220, "ResizablePMCArray"
+    push $P1220, "return"
+    .return ($P1220)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "prefix:sym<make>"  :subid("315_1267204702.05125") :method :outer("11_1267204702.05125")
-.annotate "line", 417
-    .local string rx1221_tgt
-    .local int rx1221_pos
-    .local int rx1221_off
-    .local int rx1221_eos
-    .local int rx1221_rep
-    .local pmc rx1221_cur
-    (rx1221_cur, rx1221_pos, rx1221_tgt) = self."!cursor_start"()
-    rx1221_cur."!cursor_debug"("START ", "prefix:sym<make>")
-    .lex unicode:"$\x{a2}", rx1221_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1221_eos, rx1221_tgt
-    set rx1221_off, 0
-    lt rx1221_pos, 2, rx1221_start
-    sub rx1221_off, rx1221_pos, 1
-    substr rx1221_tgt, rx1221_tgt, rx1221_off
-  rx1221_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1224_done
-    goto rxscan1224_scan
-  rxscan1224_loop:
-    ($P10) = rx1221_cur."from"()
-    inc $P10
-    set rx1221_pos, $P10
-    ge rx1221_pos, rx1221_eos, rxscan1224_done
-  rxscan1224_scan:
-    set_addr $I10, rxscan1224_loop
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
-  rxscan1224_done:
-.annotate "line", 523
+.sub "prefix:sym<make>"  :subid("315_1271336396.90314") :method :outer("11_1271336396.90314")
+.annotate "line", 421
+    .local string rx1224_tgt
+    .local int rx1224_pos
+    .local int rx1224_off
+    .local int rx1224_eos
+    .local int rx1224_rep
+    .local pmc rx1224_cur
+    (rx1224_cur, rx1224_pos, rx1224_tgt) = self."!cursor_start"()
+    rx1224_cur."!cursor_debug"("START ", "prefix:sym<make>")
+    .lex unicode:"$\x{a2}", rx1224_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1224_eos, rx1224_tgt
+    set rx1224_off, 0
+    lt rx1224_pos, 2, rx1224_start
+    sub rx1224_off, rx1224_pos, 1
+    substr rx1224_tgt, rx1224_tgt, rx1224_off
+  rx1224_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1227_done
+    goto rxscan1227_scan
+  rxscan1227_loop:
+    ($P10) = rx1224_cur."from"()
+    inc $P10
+    set rx1224_pos, $P10
+    ge rx1224_pos, rx1224_eos, rxscan1227_done
+  rxscan1227_scan:
+    set_addr $I10, rxscan1227_loop
+    rx1224_cur."!mark_push"(0, rx1224_pos, $I10)
+  rxscan1227_done:
+.annotate "line", 527
   # rx subcapture "sym"
-    set_addr $I10, rxcap_1225_fail
-    rx1221_cur."!mark_push"(0, rx1221_pos, $I10)
+    set_addr $I10, rxcap_1228_fail
+    rx1224_cur."!mark_push"(0, rx1224_pos, $I10)
   # rx literal  "make"
-    add $I11, rx1221_pos, 4
-    gt $I11, rx1221_eos, rx1221_fail
-    sub $I11, rx1221_pos, rx1221_off
-    substr $S10, rx1221_tgt, $I11, 4
-    ne $S10, "make", rx1221_fail
-    add rx1221_pos, 4
-    set_addr $I10, rxcap_1225_fail
-    ($I12, $I11) = rx1221_cur."!mark_peek"($I10)
-    rx1221_cur."!cursor_pos"($I11)
-    ($P10) = rx1221_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1221_pos, "")
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    add $I11, rx1224_pos, 4
+    gt $I11, rx1224_eos, rx1224_fail
+    sub $I11, rx1224_pos, rx1224_off
+    substr $S10, rx1224_tgt, $I11, 4
+    ne $S10, "make", rx1224_fail
+    add rx1224_pos, 4
+    set_addr $I10, rxcap_1228_fail
+    ($I12, $I11) = rx1224_cur."!mark_peek"($I10)
+    rx1224_cur."!cursor_pos"($I11)
+    ($P10) = rx1224_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1224_pos, "")
+    rx1224_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("sym")
-    goto rxcap_1225_done
-  rxcap_1225_fail:
-    goto rx1221_fail
-  rxcap_1225_done:
+    goto rxcap_1228_done
+  rxcap_1228_fail:
+    goto rx1224_fail
+  rxcap_1228_done:
   # rx charclass s
-    ge rx1221_pos, rx1221_eos, rx1221_fail
-    sub $I10, rx1221_pos, rx1221_off
-    is_cclass $I11, 32, rx1221_tgt, $I10
-    unless $I11, rx1221_fail
-    inc rx1221_pos
+    ge rx1224_pos, rx1224_eos, rx1224_fail
+    sub $I10, rx1224_pos, rx1224_off
+    is_cclass $I11, 32, rx1224_tgt, $I10
+    unless $I11, rx1224_fail
+    inc rx1224_pos
   # rx subrule "O" subtype=capture negate=
-    rx1221_cur."!cursor_pos"(rx1221_pos)
-    $P10 = rx1221_cur."O"("%list_prefix")
-    unless $P10, rx1221_fail
-    rx1221_cur."!mark_push"(0, -1, 0, $P10)
+    rx1224_cur."!cursor_pos"(rx1224_pos)
+    $P10 = rx1224_cur."O"("%list_prefix")
+    unless $P10, rx1224_fail
+    rx1224_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("O")
-    rx1221_pos = $P10."pos"()
+    rx1224_pos = $P10."pos"()
   # rx pass
-    rx1221_cur."!cursor_pass"(rx1221_pos, "prefix:sym<make>")
-    rx1221_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1221_pos)
-    .return (rx1221_cur)
-  rx1221_fail:
-.annotate "line", 417
-    (rx1221_rep, rx1221_pos, $I10, $P10) = rx1221_cur."!mark_fail"(0)
-    lt rx1221_pos, -1, rx1221_done
-    eq rx1221_pos, -1, rx1221_fail
+    rx1224_cur."!cursor_pass"(rx1224_pos, "prefix:sym<make>")
+    rx1224_cur."!cursor_debug"("PASS  ", "prefix:sym<make>", " at pos=", rx1224_pos)
+    .return (rx1224_cur)
+  rx1224_fail:
+.annotate "line", 421
+    (rx1224_rep, rx1224_pos, $I10, $P10) = rx1224_cur."!mark_fail"(0)
+    lt rx1224_pos, -1, rx1224_done
+    eq rx1224_pos, -1, rx1224_fail
     jump $I10
-  rx1221_done:
-    rx1221_cur."!cursor_fail"()
-    rx1221_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
-    .return (rx1221_cur)
+  rx1224_done:
+    rx1224_cur."!cursor_fail"()
+    rx1224_cur."!cursor_debug"("FAIL  ", "prefix:sym<make>")
+    .return (rx1224_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__prefix:sym<make>"  :subid("316_1267204702.05125") :method
-.annotate "line", 417
-    new $P1223, "ResizablePMCArray"
-    push $P1223, "make"
-    .return ($P1223)
+.sub "!PREFIX__prefix:sym<make>"  :subid("316_1271336396.90314") :method
+.annotate "line", 421
+    new $P1226, "ResizablePMCArray"
+    push $P1226, "make"
+    .return ($P1226)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "smartmatch"  :subid("317_1267204702.05125") :method :outer("11_1267204702.05125")
-    .param pmc param_1229
-.annotate "line", 525
-    new $P1228, 'ExceptionHandler'
-    set_addr $P1228, control_1227
-    $P1228."handle_types"(58)
-    push_eh $P1228
+.sub "smartmatch"  :subid("317_1271336396.90314") :method :outer("11_1271336396.90314")
+    .param pmc param_1232
+.annotate "line", 529
+    new $P1231, 'ExceptionHandler'
+    set_addr $P1231, control_1230
+    $P1231."handle_types"(58)
+    push_eh $P1231
     .lex "self", self
-    .lex "$/", param_1229
-.annotate "line", 527
-    new $P1230, "Undef"
-    .lex "$t", $P1230
-    find_lex $P1231, "$/"
-    unless_null $P1231, vivify_343
-    $P1231 = root_new ['parrot';'ResizablePMCArray']
+    .lex "$/", param_1232
+.annotate "line", 531
+    new $P1233, "Undef"
+    .lex "$t", $P1233
+    find_lex $P1234, "$/"
+    unless_null $P1234, vivify_343
+    $P1234 = root_new ['parrot';'ResizablePMCArray']
   vivify_343:
-    set $P1232, $P1231[0]
-    unless_null $P1232, vivify_344
-    new $P1232, "Undef"
+    set $P1235, $P1234[0]
+    unless_null $P1235, vivify_344
+    new $P1235, "Undef"
   vivify_344:
-    store_lex "$t", $P1232
-    find_lex $P1233, "$/"
-    unless_null $P1233, vivify_345
-    $P1233 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$t", $P1235
+    find_lex $P1236, "$/"
+    unless_null $P1236, vivify_345
+    $P1236 = root_new ['parrot';'ResizablePMCArray']
   vivify_345:
-    set $P1234, $P1233[1]
-    unless_null $P1234, vivify_346
-    new $P1234, "Undef"
+    set $P1237, $P1236[1]
+    unless_null $P1237, vivify_346
+    new $P1237, "Undef"
   vivify_346:
-    find_lex $P1235, "$/"
-    unless_null $P1235, vivify_347
-    $P1235 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1235
+    find_lex $P1238, "$/"
+    unless_null $P1238, vivify_347
+    $P1238 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1238
   vivify_347:
-    set $P1235[0], $P1234
-    find_lex $P1236, "$t"
-    find_lex $P1237, "$/"
-    unless_null $P1237, vivify_348
-    $P1237 = root_new ['parrot';'ResizablePMCArray']
-    store_lex "$/", $P1237
+    set $P1238[0], $P1237
+    find_lex $P1239, "$t"
+    find_lex $P1240, "$/"
+    unless_null $P1240, vivify_348
+    $P1240 = root_new ['parrot';'ResizablePMCArray']
+    store_lex "$/", $P1240
   vivify_348:
-    set $P1237[1], $P1236
-.annotate "line", 525
-    .return ($P1236)
-  control_1227:
+    set $P1240[1], $P1239
+.annotate "line", 529
+    .return ($P1239)
+  control_1230:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P1238, exception, "payload"
-    .return ($P1238)
+    getattribute $P1241, exception, "payload"
+    .return ($P1241)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1239"  :subid("318_1267204702.05125") :outer("11_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1273 = "329_1267204702.05125" 
-    capture_lex $P1273
-    .const 'Sub' $P1260 = "326_1267204702.05125" 
-    capture_lex $P1260
-    .const 'Sub' $P1255 = "324_1267204702.05125" 
-    capture_lex $P1255
-    .const 'Sub' $P1250 = "322_1267204702.05125" 
-    capture_lex $P1250
-    .const 'Sub' $P1241 = "319_1267204702.05125" 
-    capture_lex $P1241
-    .const 'Sub' $P1273 = "329_1267204702.05125" 
-    capture_lex $P1273
-    .return ($P1273)
+.sub "_block1242"  :subid("318_1271336396.90314") :outer("11_1271336396.90314")
+.annotate "line", 535
+    .const 'Sub' $P1276 = "329_1271336396.90314" 
+    capture_lex $P1276
+    .const 'Sub' $P1263 = "326_1271336396.90314" 
+    capture_lex $P1263
+    .const 'Sub' $P1258 = "324_1271336396.90314" 
+    capture_lex $P1258
+    .const 'Sub' $P1253 = "322_1271336396.90314" 
+    capture_lex $P1253
+    .const 'Sub' $P1244 = "319_1271336396.90314" 
+    capture_lex $P1244
+    .const 'Sub' $P1276 = "329_1271336396.90314" 
+    capture_lex $P1276
+    .return ($P1276)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<:my>"  :subid("319_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1247 = "321_1267204702.05125" 
-    capture_lex $P1247
-    .local string rx1242_tgt
-    .local int rx1242_pos
-    .local int rx1242_off
-    .local int rx1242_eos
-    .local int rx1242_rep
-    .local pmc rx1242_cur
-    (rx1242_cur, rx1242_pos, rx1242_tgt) = self."!cursor_start"()
-    rx1242_cur."!cursor_debug"("START ", "metachar:sym<:my>")
-    .lex unicode:"$\x{a2}", rx1242_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1242_eos, rx1242_tgt
-    set rx1242_off, 0
-    lt rx1242_pos, 2, rx1242_start
-    sub rx1242_off, rx1242_pos, 1
-    substr rx1242_tgt, rx1242_tgt, rx1242_off
-  rx1242_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1245_done
-    goto rxscan1245_scan
-  rxscan1245_loop:
-    ($P10) = rx1242_cur."from"()
-    inc $P10
-    set rx1242_pos, $P10
-    ge rx1242_pos, rx1242_eos, rxscan1245_done
-  rxscan1245_scan:
-    set_addr $I10, rxscan1245_loop
-    rx1242_cur."!mark_push"(0, rx1242_pos, $I10)
-  rxscan1245_done:
-.annotate "line", 533
+.sub "metachar:sym<:my>"  :subid("319_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .const 'Sub' $P1250 = "321_1271336396.90314" 
+    capture_lex $P1250
+    .local string rx1245_tgt
+    .local int rx1245_pos
+    .local int rx1245_off
+    .local int rx1245_eos
+    .local int rx1245_rep
+    .local pmc rx1245_cur
+    (rx1245_cur, rx1245_pos, rx1245_tgt) = self."!cursor_start"()
+    rx1245_cur."!cursor_debug"("START ", "metachar:sym<:my>")
+    .lex unicode:"$\x{a2}", rx1245_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1245_eos, rx1245_tgt
+    set rx1245_off, 0
+    lt rx1245_pos, 2, rx1245_start
+    sub rx1245_off, rx1245_pos, 1
+    substr rx1245_tgt, rx1245_tgt, rx1245_off
+  rx1245_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1248_done
+    goto rxscan1248_scan
+  rxscan1248_loop:
+    ($P10) = rx1245_cur."from"()
+    inc $P10
+    set rx1245_pos, $P10
+    ge rx1245_pos, rx1245_eos, rxscan1248_done
+  rxscan1248_scan:
+    set_addr $I10, rxscan1248_loop
+    rx1245_cur."!mark_push"(0, rx1245_pos, $I10)
+  rxscan1248_done:
+.annotate "line", 537
   # rx literal  ":"
-    add $I11, rx1242_pos, 1
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 1
-    ne $S10, ":", rx1242_fail
-    add rx1242_pos, 1
+    add $I11, rx1245_pos, 1
+    gt $I11, rx1245_eos, rx1245_fail
+    sub $I11, rx1245_pos, rx1245_off
+    substr $S10, rx1245_tgt, $I11, 1
+    ne $S10, ":", rx1245_fail
+    add rx1245_pos, 1
   # rx subrule "before" subtype=zerowidth negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    .const 'Sub' $P1247 = "321_1267204702.05125" 
-    capture_lex $P1247
-    $P10 = rx1242_cur."before"($P1247)
-    unless $P10, rx1242_fail
+    rx1245_cur."!cursor_pos"(rx1245_pos)
+    .const 'Sub' $P1250 = "321_1271336396.90314" 
+    capture_lex $P1250
+    $P10 = rx1245_cur."before"($P1250)
+    unless $P10, rx1245_fail
   # rx subrule "LANG" subtype=capture negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."LANG"("MAIN", "statement")
-    unless $P10, rx1242_fail
-    rx1242_cur."!mark_push"(0, -1, 0, $P10)
+    rx1245_cur."!cursor_pos"(rx1245_pos)
+    $P10 = rx1245_cur."LANG"("MAIN", "statement")
+    unless $P10, rx1245_fail
+    rx1245_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("statement")
-    rx1242_pos = $P10."pos"()
+    rx1245_pos = $P10."pos"()
   # rx subrule "ws" subtype=method negate=
-    rx1242_cur."!cursor_pos"(rx1242_pos)
-    $P10 = rx1242_cur."ws"()
-    unless $P10, rx1242_fail
-    rx1242_pos = $P10."pos"()
+    rx1245_cur."!cursor_pos"(rx1245_pos)
+    $P10 = rx1245_cur."ws"()
+    unless $P10, rx1245_fail
+    rx1245_pos = $P10."pos"()
   # rx literal  ";"
-    add $I11, rx1242_pos, 1
-    gt $I11, rx1242_eos, rx1242_fail
-    sub $I11, rx1242_pos, rx1242_off
-    substr $S10, rx1242_tgt, $I11, 1
-    ne $S10, ";", rx1242_fail
-    add rx1242_pos, 1
-.annotate "line", 532
+    add $I11, rx1245_pos, 1
+    gt $I11, rx1245_eos, rx1245_fail
+    sub $I11, rx1245_pos, rx1245_off
+    substr $S10, rx1245_tgt, $I11, 1
+    ne $S10, ";", rx1245_fail
+    add rx1245_pos, 1
+.annotate "line", 536
   # rx pass
-    rx1242_cur."!cursor_pass"(rx1242_pos, "metachar:sym<:my>")
-    rx1242_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1242_pos)
-    .return (rx1242_cur)
-  rx1242_fail:
-.annotate "line", 531
-    (rx1242_rep, rx1242_pos, $I10, $P10) = rx1242_cur."!mark_fail"(0)
-    lt rx1242_pos, -1, rx1242_done
-    eq rx1242_pos, -1, rx1242_fail
-    jump $I10
-  rx1242_done:
-    rx1242_cur."!cursor_fail"()
-    rx1242_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
-    .return (rx1242_cur)
+    rx1245_cur."!cursor_pass"(rx1245_pos, "metachar:sym<:my>")
+    rx1245_cur."!cursor_debug"("PASS  ", "metachar:sym<:my>", " at pos=", rx1245_pos)
+    .return (rx1245_cur)
+  rx1245_fail:
+.annotate "line", 535
+    (rx1245_rep, rx1245_pos, $I10, $P10) = rx1245_cur."!mark_fail"(0)
+    lt rx1245_pos, -1, rx1245_done
+    eq rx1245_pos, -1, rx1245_fail
+    jump $I10
+  rx1245_done:
+    rx1245_cur."!cursor_fail"()
+    rx1245_cur."!cursor_debug"("FAIL  ", "metachar:sym<:my>")
+    .return (rx1245_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<:my>"  :subid("320_1267204702.05125") :method
-.annotate "line", 531
-    new $P1244, "ResizablePMCArray"
-    push $P1244, ":"
-    .return ($P1244)
-.end
-
-
-.namespace ["NQP";"Regex"]
-.sub "_block1246"  :anon :subid("321_1267204702.05125") :method :outer("319_1267204702.05125")
-.annotate "line", 533
-    .local string rx1248_tgt
-    .local int rx1248_pos
-    .local int rx1248_off
-    .local int rx1248_eos
-    .local int rx1248_rep
-    .local pmc rx1248_cur
-    (rx1248_cur, rx1248_pos, rx1248_tgt) = self."!cursor_start"()
-    rx1248_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1248_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1248_eos, rx1248_tgt
-    set rx1248_off, 0
-    lt rx1248_pos, 2, rx1248_start
-    sub rx1248_off, rx1248_pos, 1
-    substr rx1248_tgt, rx1248_tgt, rx1248_off
-  rx1248_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1249_done
-    goto rxscan1249_scan
-  rxscan1249_loop:
-    ($P10) = rx1248_cur."from"()
-    inc $P10
-    set rx1248_pos, $P10
-    ge rx1248_pos, rx1248_eos, rxscan1249_done
-  rxscan1249_scan:
-    set_addr $I10, rxscan1249_loop
-    rx1248_cur."!mark_push"(0, rx1248_pos, $I10)
-  rxscan1249_done:
-  # rx literal  "my"
-    add $I11, rx1248_pos, 2
-    gt $I11, rx1248_eos, rx1248_fail
-    sub $I11, rx1248_pos, rx1248_off
-    substr $S10, rx1248_tgt, $I11, 2
-    ne $S10, "my", rx1248_fail
-    add rx1248_pos, 2
-  # rx pass
-    rx1248_cur."!cursor_pass"(rx1248_pos, "")
-    rx1248_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1248_pos)
-    .return (rx1248_cur)
-  rx1248_fail:
-    (rx1248_rep, rx1248_pos, $I10, $P10) = rx1248_cur."!mark_fail"(0)
-    lt rx1248_pos, -1, rx1248_done
-    eq rx1248_pos, -1, rx1248_fail
-    jump $I10
-  rx1248_done:
-    rx1248_cur."!cursor_fail"()
-    rx1248_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1248_cur)
-    .return ()
+.sub "!PREFIX__metachar:sym<:my>"  :subid("320_1271336396.90314") :method
+.annotate "line", 535
+    new $P1247, "ResizablePMCArray"
+    push $P1247, ":"
+    .return ($P1247)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "metachar:sym<{ }>"  :subid("322_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
+.sub "_block1249"  :anon :subid("321_1271336396.90314") :method :outer("319_1271336396.90314")
+.annotate "line", 537
     .local string rx1251_tgt
     .local int rx1251_pos
     .local int rx1251_off
@@ -15313,7 +15301,7 @@
     .local int rx1251_rep
     .local pmc rx1251_cur
     (rx1251_cur, rx1251_pos, rx1251_tgt) = self."!cursor_start"()
-    rx1251_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    rx1251_cur."!cursor_debug"("START ", "")
     .lex unicode:"$\x{a2}", rx1251_cur
     .local pmc match
     .lex "$/", match
@@ -15324,444 +15312,500 @@
     substr rx1251_tgt, rx1251_tgt, rx1251_off
   rx1251_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan1254_done
-    goto rxscan1254_scan
-  rxscan1254_loop:
+    ne $I10, -1, rxscan1252_done
+    goto rxscan1252_scan
+  rxscan1252_loop:
     ($P10) = rx1251_cur."from"()
     inc $P10
     set rx1251_pos, $P10
-    ge rx1251_pos, rx1251_eos, rxscan1254_done
-  rxscan1254_scan:
-    set_addr $I10, rxscan1254_loop
+    ge rx1251_pos, rx1251_eos, rxscan1252_done
+  rxscan1252_scan:
+    set_addr $I10, rxscan1252_loop
     rx1251_cur."!mark_push"(0, rx1251_pos, $I10)
-  rxscan1254_done:
-.annotate "line", 537
-  # rx enumcharlist negate=0 zerowidth
-    ge rx1251_pos, rx1251_eos, rx1251_fail
-    sub $I10, rx1251_pos, rx1251_off
-    substr $S10, rx1251_tgt, $I10, 1
-    index $I11, "{", $S10
-    lt $I11, 0, rx1251_fail
-  # rx subrule "codeblock" subtype=capture negate=
-    rx1251_cur."!cursor_pos"(rx1251_pos)
-    $P10 = rx1251_cur."codeblock"()
-    unless $P10, rx1251_fail
-    rx1251_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("codeblock")
-    rx1251_pos = $P10."pos"()
-.annotate "line", 536
+  rxscan1252_done:
+  # rx literal  "my"
+    add $I11, rx1251_pos, 2
+    gt $I11, rx1251_eos, rx1251_fail
+    sub $I11, rx1251_pos, rx1251_off
+    substr $S10, rx1251_tgt, $I11, 2
+    ne $S10, "my", rx1251_fail
+    add rx1251_pos, 2
   # rx pass
-    rx1251_cur."!cursor_pass"(rx1251_pos, "metachar:sym<{ }>")
-    rx1251_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1251_pos)
+    rx1251_cur."!cursor_pass"(rx1251_pos, "")
+    rx1251_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1251_pos)
     .return (rx1251_cur)
   rx1251_fail:
-.annotate "line", 531
     (rx1251_rep, rx1251_pos, $I10, $P10) = rx1251_cur."!mark_fail"(0)
     lt rx1251_pos, -1, rx1251_done
     eq rx1251_pos, -1, rx1251_fail
     jump $I10
   rx1251_done:
     rx1251_cur."!cursor_fail"()
-    rx1251_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    rx1251_cur."!cursor_debug"("FAIL  ", "")
     .return (rx1251_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__metachar:sym<{ }>"  :subid("323_1267204702.05125") :method
-.annotate "line", 531
-    new $P1253, "ResizablePMCArray"
-    push $P1253, "{"
-    .return ($P1253)
+.sub "metachar:sym<{ }>"  :subid("322_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .local string rx1254_tgt
+    .local int rx1254_pos
+    .local int rx1254_off
+    .local int rx1254_eos
+    .local int rx1254_rep
+    .local pmc rx1254_cur
+    (rx1254_cur, rx1254_pos, rx1254_tgt) = self."!cursor_start"()
+    rx1254_cur."!cursor_debug"("START ", "metachar:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1254_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1254_eos, rx1254_tgt
+    set rx1254_off, 0
+    lt rx1254_pos, 2, rx1254_start
+    sub rx1254_off, rx1254_pos, 1
+    substr rx1254_tgt, rx1254_tgt, rx1254_off
+  rx1254_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1257_done
+    goto rxscan1257_scan
+  rxscan1257_loop:
+    ($P10) = rx1254_cur."from"()
+    inc $P10
+    set rx1254_pos, $P10
+    ge rx1254_pos, rx1254_eos, rxscan1257_done
+  rxscan1257_scan:
+    set_addr $I10, rxscan1257_loop
+    rx1254_cur."!mark_push"(0, rx1254_pos, $I10)
+  rxscan1257_done:
+.annotate "line", 541
+  # rx enumcharlist negate=0 zerowidth
+    ge rx1254_pos, rx1254_eos, rx1254_fail
+    sub $I10, rx1254_pos, rx1254_off
+    substr $S10, rx1254_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx1254_fail
+  # rx subrule "codeblock" subtype=capture negate=
+    rx1254_cur."!cursor_pos"(rx1254_pos)
+    $P10 = rx1254_cur."codeblock"()
+    unless $P10, rx1254_fail
+    rx1254_cur."!mark_push"(0, -1, 0, $P10)
+    $P10."!cursor_names"("codeblock")
+    rx1254_pos = $P10."pos"()
+.annotate "line", 540
+  # rx pass
+    rx1254_cur."!cursor_pass"(rx1254_pos, "metachar:sym<{ }>")
+    rx1254_cur."!cursor_debug"("PASS  ", "metachar:sym<{ }>", " at pos=", rx1254_pos)
+    .return (rx1254_cur)
+  rx1254_fail:
+.annotate "line", 535
+    (rx1254_rep, rx1254_pos, $I10, $P10) = rx1254_cur."!mark_fail"(0)
+    lt rx1254_pos, -1, rx1254_done
+    eq rx1254_pos, -1, rx1254_fail
+    jump $I10
+  rx1254_done:
+    rx1254_cur."!cursor_fail"()
+    rx1254_cur."!cursor_debug"("FAIL  ", "metachar:sym<{ }>")
+    .return (rx1254_cur)
+    .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<{ }>"  :subid("324_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .local string rx1256_tgt
-    .local int rx1256_pos
-    .local int rx1256_off
-    .local int rx1256_eos
-    .local int rx1256_rep
-    .local pmc rx1256_cur
-    (rx1256_cur, rx1256_pos, rx1256_tgt) = self."!cursor_start"()
-    rx1256_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
-    .lex unicode:"$\x{a2}", rx1256_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1256_eos, rx1256_tgt
-    set rx1256_off, 0
-    lt rx1256_pos, 2, rx1256_start
-    sub rx1256_off, rx1256_pos, 1
-    substr rx1256_tgt, rx1256_tgt, rx1256_off
-  rx1256_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1259_done
-    goto rxscan1259_scan
-  rxscan1259_loop:
-    ($P10) = rx1256_cur."from"()
-    inc $P10
-    set rx1256_pos, $P10
-    ge rx1256_pos, rx1256_eos, rxscan1259_done
-  rxscan1259_scan:
-    set_addr $I10, rxscan1259_loop
-    rx1256_cur."!mark_push"(0, rx1256_pos, $I10)
-  rxscan1259_done:
-.annotate "line", 541
+.sub "!PREFIX__metachar:sym<{ }>"  :subid("323_1271336396.90314") :method
+.annotate "line", 535
+    new $P1256, "ResizablePMCArray"
+    push $P1256, "{"
+    .return ($P1256)
+.end
+
+
+.namespace ["NQP";"Regex"]
+.sub "assertion:sym<{ }>"  :subid("324_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .local string rx1259_tgt
+    .local int rx1259_pos
+    .local int rx1259_off
+    .local int rx1259_eos
+    .local int rx1259_rep
+    .local pmc rx1259_cur
+    (rx1259_cur, rx1259_pos, rx1259_tgt) = self."!cursor_start"()
+    rx1259_cur."!cursor_debug"("START ", "assertion:sym<{ }>")
+    .lex unicode:"$\x{a2}", rx1259_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1259_eos, rx1259_tgt
+    set rx1259_off, 0
+    lt rx1259_pos, 2, rx1259_start
+    sub rx1259_off, rx1259_pos, 1
+    substr rx1259_tgt, rx1259_tgt, rx1259_off
+  rx1259_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1262_done
+    goto rxscan1262_scan
+  rxscan1262_loop:
+    ($P10) = rx1259_cur."from"()
+    inc $P10
+    set rx1259_pos, $P10
+    ge rx1259_pos, rx1259_eos, rxscan1262_done
+  rxscan1262_scan:
+    set_addr $I10, rxscan1262_loop
+    rx1259_cur."!mark_push"(0, rx1259_pos, $I10)
+  rxscan1262_done:
+.annotate "line", 545
   # rx enumcharlist negate=0 zerowidth
-    ge rx1256_pos, rx1256_eos, rx1256_fail
-    sub $I10, rx1256_pos, rx1256_off
-    substr $S10, rx1256_tgt, $I10, 1
+    ge rx1259_pos, rx1259_eos, rx1259_fail
+    sub $I10, rx1259_pos, rx1259_off
+    substr $S10, rx1259_tgt, $I10, 1
     index $I11, "{", $S10
-    lt $I11, 0, rx1256_fail
+    lt $I11, 0, rx1259_fail
   # rx subrule "codeblock" subtype=capture negate=
-    rx1256_cur."!cursor_pos"(rx1256_pos)
-    $P10 = rx1256_cur."codeblock"()
-    unless $P10, rx1256_fail
-    rx1256_cur."!mark_push"(0, -1, 0, $P10)
+    rx1259_cur."!cursor_pos"(rx1259_pos)
+    $P10 = rx1259_cur."codeblock"()
+    unless $P10, rx1259_fail
+    rx1259_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("codeblock")
-    rx1256_pos = $P10."pos"()
-.annotate "line", 540
+    rx1259_pos = $P10."pos"()
+.annotate "line", 544
   # rx pass
-    rx1256_cur."!cursor_pass"(rx1256_pos, "assertion:sym<{ }>")
-    rx1256_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1256_pos)
-    .return (rx1256_cur)
-  rx1256_fail:
-.annotate "line", 531
-    (rx1256_rep, rx1256_pos, $I10, $P10) = rx1256_cur."!mark_fail"(0)
-    lt rx1256_pos, -1, rx1256_done
-    eq rx1256_pos, -1, rx1256_fail
-    jump $I10
-  rx1256_done:
-    rx1256_cur."!cursor_fail"()
-    rx1256_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
-    .return (rx1256_cur)
+    rx1259_cur."!cursor_pass"(rx1259_pos, "assertion:sym<{ }>")
+    rx1259_cur."!cursor_debug"("PASS  ", "assertion:sym<{ }>", " at pos=", rx1259_pos)
+    .return (rx1259_cur)
+  rx1259_fail:
+.annotate "line", 535
+    (rx1259_rep, rx1259_pos, $I10, $P10) = rx1259_cur."!mark_fail"(0)
+    lt rx1259_pos, -1, rx1259_done
+    eq rx1259_pos, -1, rx1259_fail
+    jump $I10
+  rx1259_done:
+    rx1259_cur."!cursor_fail"()
+    rx1259_cur."!cursor_debug"("FAIL  ", "assertion:sym<{ }>")
+    .return (rx1259_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<{ }>"  :subid("325_1267204702.05125") :method
-.annotate "line", 531
-    new $P1258, "ResizablePMCArray"
-    push $P1258, "{"
-    .return ($P1258)
+.sub "!PREFIX__assertion:sym<{ }>"  :subid("325_1271336396.90314") :method
+.annotate "line", 535
+    new $P1261, "ResizablePMCArray"
+    push $P1261, "{"
+    .return ($P1261)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "assertion:sym<name>"  :subid("326_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .const 'Sub' $P1269 = "328_1267204702.05125" 
-    capture_lex $P1269
-    .local string rx1261_tgt
-    .local int rx1261_pos
-    .local int rx1261_off
-    .local int rx1261_eos
-    .local int rx1261_rep
-    .local pmc rx1261_cur
-    (rx1261_cur, rx1261_pos, rx1261_tgt) = self."!cursor_start"()
-    rx1261_cur."!cursor_debug"("START ", "assertion:sym<name>")
-    rx1261_cur."!cursor_caparray"("assertion", "nibbler", "arglist")
-    .lex unicode:"$\x{a2}", rx1261_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1261_eos, rx1261_tgt
-    set rx1261_off, 0
-    lt rx1261_pos, 2, rx1261_start
-    sub rx1261_off, rx1261_pos, 1
-    substr rx1261_tgt, rx1261_tgt, rx1261_off
-  rx1261_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1264_done
-    goto rxscan1264_scan
-  rxscan1264_loop:
-    ($P10) = rx1261_cur."from"()
-    inc $P10
-    set rx1261_pos, $P10
-    ge rx1261_pos, rx1261_eos, rxscan1264_done
-  rxscan1264_scan:
-    set_addr $I10, rxscan1264_loop
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-  rxscan1264_done:
-.annotate "line", 545
+.sub "assertion:sym<name>"  :subid("326_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .const 'Sub' $P1272 = "328_1271336396.90314" 
+    capture_lex $P1272
+    .local string rx1264_tgt
+    .local int rx1264_pos
+    .local int rx1264_off
+    .local int rx1264_eos
+    .local int rx1264_rep
+    .local pmc rx1264_cur
+    (rx1264_cur, rx1264_pos, rx1264_tgt) = self."!cursor_start"()
+    rx1264_cur."!cursor_debug"("START ", "assertion:sym<name>")
+    rx1264_cur."!cursor_caparray"("nibbler", "arglist", "assertion")
+    .lex unicode:"$\x{a2}", rx1264_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1264_eos, rx1264_tgt
+    set rx1264_off, 0
+    lt rx1264_pos, 2, rx1264_start
+    sub rx1264_off, rx1264_pos, 1
+    substr rx1264_tgt, rx1264_tgt, rx1264_off
+  rx1264_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1267_done
+    goto rxscan1267_scan
+  rxscan1267_loop:
+    ($P10) = rx1264_cur."from"()
+    inc $P10
+    set rx1264_pos, $P10
+    ge rx1264_pos, rx1264_eos, rxscan1267_done
+  rxscan1267_scan:
+    set_addr $I10, rxscan1267_loop
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+  rxscan1267_done:
+.annotate "line", 549
   # rx subcapture "longname"
-    set_addr $I10, rxcap_1265_fail
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
+    set_addr $I10, rxcap_1268_fail
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx1261_pos, rx1261_off
-    find_not_cclass $I11, 8192, rx1261_tgt, $I10, rx1261_eos
+    sub $I10, rx1264_pos, rx1264_off
+    find_not_cclass $I11, 8192, rx1264_tgt, $I10, rx1264_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx1261_fail
-    add rx1261_pos, rx1261_off, $I11
-    set_addr $I10, rxcap_1265_fail
-    ($I12, $I11) = rx1261_cur."!mark_peek"($I10)
-    rx1261_cur."!cursor_pos"($I11)
-    ($P10) = rx1261_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx1261_pos, "")
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    lt $I11, $I12, rx1264_fail
+    add rx1264_pos, rx1264_off, $I11
+    set_addr $I10, rxcap_1268_fail
+    ($I12, $I11) = rx1264_cur."!mark_peek"($I10)
+    rx1264_cur."!cursor_pos"($I11)
+    ($P10) = rx1264_cur."!cursor_start"()
+    $P10."!cursor_pass"(rx1264_pos, "")
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname")
-    goto rxcap_1265_done
-  rxcap_1265_fail:
-    goto rx1261_fail
-  rxcap_1265_done:
-.annotate "line", 552
-  # rx rxquantr1266 ** 0..1
-    set_addr $I1272, rxquantr1266_done
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I1272)
-  rxquantr1266_loop:
-  alt1267_0:
-.annotate "line", 546
-    set_addr $I10, alt1267_1
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 547
+    goto rxcap_1268_done
+  rxcap_1268_fail:
+    goto rx1264_fail
+  rxcap_1268_done:
+.annotate "line", 556
+  # rx rxquantr1269 ** 0..1
+    set_addr $I1275, rxquantr1269_done
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I1275)
+  rxquantr1269_loop:
+  alt1270_0:
+.annotate "line", 550
+    set_addr $I10, alt1270_1
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 551
   # rx subrule "before" subtype=zerowidth negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    .const 'Sub' $P1269 = "328_1267204702.05125" 
-    capture_lex $P1269
-    $P10 = rx1261_cur."before"($P1269)
-    unless $P10, rx1261_fail
-    goto alt1267_end
-  alt1267_1:
-    set_addr $I10, alt1267_2
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 548
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    .const 'Sub' $P1272 = "328_1271336396.90314" 
+    capture_lex $P1272
+    $P10 = rx1264_cur."before"($P1272)
+    unless $P10, rx1264_fail
+    goto alt1270_end
+  alt1270_1:
+    set_addr $I10, alt1270_2
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 552
   # rx literal  "="
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, "=", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, "=", rx1264_fail
+    add rx1264_pos, 1
   # rx subrule "assertion" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."assertion"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."assertion"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("assertion")
-    rx1261_pos = $P10."pos"()
-    goto alt1267_end
-  alt1267_2:
-    set_addr $I10, alt1267_3
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 549
+    rx1264_pos = $P10."pos"()
+    goto alt1270_end
+  alt1270_2:
+    set_addr $I10, alt1270_3
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 553
   # rx literal  ":"
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, ":", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, ":", rx1264_fail
+    add rx1264_pos, 1
   # rx subrule "arglist" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."arglist"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."arglist"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1261_pos = $P10."pos"()
-    goto alt1267_end
-  alt1267_3:
-    set_addr $I10, alt1267_4
-    rx1261_cur."!mark_push"(0, rx1261_pos, $I10)
-.annotate "line", 550
+    rx1264_pos = $P10."pos"()
+    goto alt1270_end
+  alt1270_3:
+    set_addr $I10, alt1270_4
+    rx1264_cur."!mark_push"(0, rx1264_pos, $I10)
+.annotate "line", 554
   # rx literal  "("
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, "(", rx1261_fail
-    add rx1261_pos, 1
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, "(", rx1264_fail
+    add rx1264_pos, 1
   # rx subrule "LANG" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."LANG"("MAIN", "arglist")
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."LANG"("MAIN", "arglist")
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx1261_pos = $P10."pos"()
+    rx1264_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx1261_pos, 1
-    gt $I11, rx1261_eos, rx1261_fail
-    sub $I11, rx1261_pos, rx1261_off
-    substr $S10, rx1261_tgt, $I11, 1
-    ne $S10, ")", rx1261_fail
-    add rx1261_pos, 1
-    goto alt1267_end
-  alt1267_4:
-.annotate "line", 551
+    add $I11, rx1264_pos, 1
+    gt $I11, rx1264_eos, rx1264_fail
+    sub $I11, rx1264_pos, rx1264_off
+    substr $S10, rx1264_tgt, $I11, 1
+    ne $S10, ")", rx1264_fail
+    add rx1264_pos, 1
+    goto alt1270_end
+  alt1270_4:
+.annotate "line", 555
   # rx subrule "normspace" subtype=method negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."normspace"()
-    unless $P10, rx1261_fail
-    rx1261_pos = $P10."pos"()
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."normspace"()
+    unless $P10, rx1264_fail
+    rx1264_pos = $P10."pos"()
   # rx subrule "nibbler" subtype=capture negate=
-    rx1261_cur."!cursor_pos"(rx1261_pos)
-    $P10 = rx1261_cur."nibbler"()
-    unless $P10, rx1261_fail
-    rx1261_cur."!mark_push"(0, -1, 0, $P10)
+    rx1264_cur."!cursor_pos"(rx1264_pos)
+    $P10 = rx1264_cur."nibbler"()
+    unless $P10, rx1264_fail
+    rx1264_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("nibbler")
-    rx1261_pos = $P10."pos"()
-  alt1267_end:
-.annotate "line", 552
-    (rx1261_rep) = rx1261_cur."!mark_commit"($I1272)
-  rxquantr1266_done:
-.annotate "line", 544
+    rx1264_pos = $P10."pos"()
+  alt1270_end:
+.annotate "line", 556
+    (rx1264_rep) = rx1264_cur."!mark_commit"($I1275)
+  rxquantr1269_done:
+.annotate "line", 548
   # rx pass
-    rx1261_cur."!cursor_pass"(rx1261_pos, "assertion:sym<name>")
-    rx1261_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1261_pos)
-    .return (rx1261_cur)
-  rx1261_fail:
-.annotate "line", 531
-    (rx1261_rep, rx1261_pos, $I10, $P10) = rx1261_cur."!mark_fail"(0)
-    lt rx1261_pos, -1, rx1261_done
-    eq rx1261_pos, -1, rx1261_fail
-    jump $I10
-  rx1261_done:
-    rx1261_cur."!cursor_fail"()
-    rx1261_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
-    .return (rx1261_cur)
+    rx1264_cur."!cursor_pass"(rx1264_pos, "assertion:sym<name>")
+    rx1264_cur."!cursor_debug"("PASS  ", "assertion:sym<name>", " at pos=", rx1264_pos)
+    .return (rx1264_cur)
+  rx1264_fail:
+.annotate "line", 535
+    (rx1264_rep, rx1264_pos, $I10, $P10) = rx1264_cur."!mark_fail"(0)
+    lt rx1264_pos, -1, rx1264_done
+    eq rx1264_pos, -1, rx1264_fail
+    jump $I10
+  rx1264_done:
+    rx1264_cur."!cursor_fail"()
+    rx1264_cur."!cursor_debug"("FAIL  ", "assertion:sym<name>")
+    .return (rx1264_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__assertion:sym<name>"  :subid("327_1267204702.05125") :method
-.annotate "line", 531
-    new $P1263, "ResizablePMCArray"
-    push $P1263, ""
-    .return ($P1263)
+.sub "!PREFIX__assertion:sym<name>"  :subid("327_1271336396.90314") :method
+.annotate "line", 535
+    new $P1266, "ResizablePMCArray"
+    push $P1266, ""
+    .return ($P1266)
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "_block1268"  :anon :subid("328_1267204702.05125") :method :outer("326_1267204702.05125")
-.annotate "line", 547
-    .local string rx1270_tgt
-    .local int rx1270_pos
-    .local int rx1270_off
-    .local int rx1270_eos
-    .local int rx1270_rep
-    .local pmc rx1270_cur
-    (rx1270_cur, rx1270_pos, rx1270_tgt) = self."!cursor_start"()
-    rx1270_cur."!cursor_debug"("START ", "")
-    .lex unicode:"$\x{a2}", rx1270_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1270_eos, rx1270_tgt
-    set rx1270_off, 0
-    lt rx1270_pos, 2, rx1270_start
-    sub rx1270_off, rx1270_pos, 1
-    substr rx1270_tgt, rx1270_tgt, rx1270_off
-  rx1270_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1271_done
-    goto rxscan1271_scan
-  rxscan1271_loop:
-    ($P10) = rx1270_cur."from"()
-    inc $P10
-    set rx1270_pos, $P10
-    ge rx1270_pos, rx1270_eos, rxscan1271_done
-  rxscan1271_scan:
-    set_addr $I10, rxscan1271_loop
-    rx1270_cur."!mark_push"(0, rx1270_pos, $I10)
-  rxscan1271_done:
+.sub "_block1271"  :anon :subid("328_1271336396.90314") :method :outer("326_1271336396.90314")
+.annotate "line", 551
+    .local string rx1273_tgt
+    .local int rx1273_pos
+    .local int rx1273_off
+    .local int rx1273_eos
+    .local int rx1273_rep
+    .local pmc rx1273_cur
+    (rx1273_cur, rx1273_pos, rx1273_tgt) = self."!cursor_start"()
+    rx1273_cur."!cursor_debug"("START ", "")
+    .lex unicode:"$\x{a2}", rx1273_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1273_eos, rx1273_tgt
+    set rx1273_off, 0
+    lt rx1273_pos, 2, rx1273_start
+    sub rx1273_off, rx1273_pos, 1
+    substr rx1273_tgt, rx1273_tgt, rx1273_off
+  rx1273_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1274_done
+    goto rxscan1274_scan
+  rxscan1274_loop:
+    ($P10) = rx1273_cur."from"()
+    inc $P10
+    set rx1273_pos, $P10
+    ge rx1273_pos, rx1273_eos, rxscan1274_done
+  rxscan1274_scan:
+    set_addr $I10, rxscan1274_loop
+    rx1273_cur."!mark_push"(0, rx1273_pos, $I10)
+  rxscan1274_done:
   # rx literal  ">"
-    add $I11, rx1270_pos, 1
-    gt $I11, rx1270_eos, rx1270_fail
-    sub $I11, rx1270_pos, rx1270_off
-    substr $S10, rx1270_tgt, $I11, 1
-    ne $S10, ">", rx1270_fail
-    add rx1270_pos, 1
-  # rx pass
-    rx1270_cur."!cursor_pass"(rx1270_pos, "")
-    rx1270_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1270_pos)
-    .return (rx1270_cur)
-  rx1270_fail:
-    (rx1270_rep, rx1270_pos, $I10, $P10) = rx1270_cur."!mark_fail"(0)
-    lt rx1270_pos, -1, rx1270_done
-    eq rx1270_pos, -1, rx1270_fail
-    jump $I10
-  rx1270_done:
-    rx1270_cur."!cursor_fail"()
-    rx1270_cur."!cursor_debug"("FAIL  ", "")
-    .return (rx1270_cur)
+    add $I11, rx1273_pos, 1
+    gt $I11, rx1273_eos, rx1273_fail
+    sub $I11, rx1273_pos, rx1273_off
+    substr $S10, rx1273_tgt, $I11, 1
+    ne $S10, ">", rx1273_fail
+    add rx1273_pos, 1
+  # rx pass
+    rx1273_cur."!cursor_pass"(rx1273_pos, "")
+    rx1273_cur."!cursor_debug"("PASS  ", "", " at pos=", rx1273_pos)
+    .return (rx1273_cur)
+  rx1273_fail:
+    (rx1273_rep, rx1273_pos, $I10, $P10) = rx1273_cur."!mark_fail"(0)
+    lt rx1273_pos, -1, rx1273_done
+    eq rx1273_pos, -1, rx1273_fail
+    jump $I10
+  rx1273_done:
+    rx1273_cur."!cursor_fail"()
+    rx1273_cur."!cursor_debug"("FAIL  ", "")
+    .return (rx1273_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "codeblock"  :subid("329_1267204702.05125") :method :outer("318_1267204702.05125")
-.annotate "line", 531
-    .local string rx1274_tgt
-    .local int rx1274_pos
-    .local int rx1274_off
-    .local int rx1274_eos
-    .local int rx1274_rep
-    .local pmc rx1274_cur
-    (rx1274_cur, rx1274_pos, rx1274_tgt) = self."!cursor_start"()
-    rx1274_cur."!cursor_debug"("START ", "codeblock")
-    .lex unicode:"$\x{a2}", rx1274_cur
-    .local pmc match
-    .lex "$/", match
-    length rx1274_eos, rx1274_tgt
-    set rx1274_off, 0
-    lt rx1274_pos, 2, rx1274_start
-    sub rx1274_off, rx1274_pos, 1
-    substr rx1274_tgt, rx1274_tgt, rx1274_off
-  rx1274_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan1278_done
-    goto rxscan1278_scan
-  rxscan1278_loop:
-    ($P10) = rx1274_cur."from"()
-    inc $P10
-    set rx1274_pos, $P10
-    ge rx1274_pos, rx1274_eos, rxscan1278_done
-  rxscan1278_scan:
-    set_addr $I10, rxscan1278_loop
-    rx1274_cur."!mark_push"(0, rx1274_pos, $I10)
-  rxscan1278_done:
-.annotate "line", 557
+.sub "codeblock"  :subid("329_1271336396.90314") :method :outer("318_1271336396.90314")
+.annotate "line", 535
+    .local string rx1277_tgt
+    .local int rx1277_pos
+    .local int rx1277_off
+    .local int rx1277_eos
+    .local int rx1277_rep
+    .local pmc rx1277_cur
+    (rx1277_cur, rx1277_pos, rx1277_tgt) = self."!cursor_start"()
+    rx1277_cur."!cursor_debug"("START ", "codeblock")
+    .lex unicode:"$\x{a2}", rx1277_cur
+    .local pmc match
+    .lex "$/", match
+    length rx1277_eos, rx1277_tgt
+    set rx1277_off, 0
+    lt rx1277_pos, 2, rx1277_start
+    sub rx1277_off, rx1277_pos, 1
+    substr rx1277_tgt, rx1277_tgt, rx1277_off
+  rx1277_start:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan1281_done
+    goto rxscan1281_scan
+  rxscan1281_loop:
+    ($P10) = rx1277_cur."from"()
+    inc $P10
+    set rx1277_pos, $P10
+    ge rx1277_pos, rx1277_eos, rxscan1281_done
+  rxscan1281_scan:
+    set_addr $I10, rxscan1281_loop
+    rx1277_cur."!mark_push"(0, rx1277_pos, $I10)
+  rxscan1281_done:
+.annotate "line", 561
   # rx subrule "LANG" subtype=capture negate=
-    rx1274_cur."!cursor_pos"(rx1274_pos)
-    $P10 = rx1274_cur."LANG"("MAIN", "pblock")
-    unless $P10, rx1274_fail
-    rx1274_cur."!mark_push"(0, -1, 0, $P10)
+    rx1277_cur."!cursor_pos"(rx1277_pos)
+    $P10 = rx1277_cur."LANG"("MAIN", "pblock")
+    unless $P10, rx1277_fail
+    rx1277_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("block")
-    rx1274_pos = $P10."pos"()
-.annotate "line", 556
+    rx1277_pos = $P10."pos"()
+.annotate "line", 560
   # rx pass
-    rx1274_cur."!cursor_pass"(rx1274_pos, "codeblock")
-    rx1274_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1274_pos)
-    .return (rx1274_cur)
-  rx1274_fail:
-.annotate "line", 531
-    (rx1274_rep, rx1274_pos, $I10, $P10) = rx1274_cur."!mark_fail"(0)
-    lt rx1274_pos, -1, rx1274_done
-    eq rx1274_pos, -1, rx1274_fail
-    jump $I10
-  rx1274_done:
-    rx1274_cur."!cursor_fail"()
-    rx1274_cur."!cursor_debug"("FAIL  ", "codeblock")
-    .return (rx1274_cur)
+    rx1277_cur."!cursor_pass"(rx1277_pos, "codeblock")
+    rx1277_cur."!cursor_debug"("PASS  ", "codeblock", " at pos=", rx1277_pos)
+    .return (rx1277_cur)
+  rx1277_fail:
+.annotate "line", 535
+    (rx1277_rep, rx1277_pos, $I10, $P10) = rx1277_cur."!mark_fail"(0)
+    lt rx1277_pos, -1, rx1277_done
+    eq rx1277_pos, -1, rx1277_fail
+    jump $I10
+  rx1277_done:
+    rx1277_cur."!cursor_fail"()
+    rx1277_cur."!cursor_debug"("FAIL  ", "codeblock")
+    .return (rx1277_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Regex"]
-.sub "!PREFIX__codeblock"  :subid("330_1267204702.05125") :method
-.annotate "line", 531
-    $P1276 = self."!PREFIX__!subrule"("block", "")
-    new $P1277, "ResizablePMCArray"
-    push $P1277, $P1276
-    .return ($P1277)
+.sub "!PREFIX__codeblock"  :subid("330_1271336396.90314") :method
+.annotate "line", 535
+    $P1279 = self."!PREFIX__!subrule"("block", "")
+    new $P1280, "ResizablePMCArray"
+    push $P1280, $P1279
+    .return ($P1280)
 .end
 
 ### .include 'gen/nqp-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1267204714.47172")
+.sub "_block11"  :anon :subid("10_1271336409.53729")
 .annotate "line", 0
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     capture_lex $P14
@@ -15775,9 +15819,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post126") :outer("10_1267204714.47172")
+.sub "" :load :init :subid("post126") :outer("10_1271336409.53729")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1267204714.47172" 
+    .const 'Sub' $P12 = "10_1271336409.53729" 
     .local pmc block
     set block, $P12
     $P2169 = get_root_global ["parrot"], "P6metaclass"
@@ -15786,199 +15830,199 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block13"  :subid("11_1267204714.47172") :outer("10_1267204714.47172")
+.sub "_block13"  :subid("11_1271336409.53729") :outer("10_1271336409.53729")
 .annotate "line", 3
-    .const 'Sub' $P2164 = "125_1267204714.47172" 
+    .const 'Sub' $P2164 = "125_1271336409.53729" 
     capture_lex $P2164
     get_hll_global $P2100, ["NQP";"RegexActions"], "_block2099" 
     capture_lex $P2100
-    .const 'Sub' $P2089 = "119_1267204714.47172" 
+    .const 'Sub' $P2089 = "119_1271336409.53729" 
     capture_lex $P2089
-    .const 'Sub' $P2077 = "118_1267204714.47172" 
+    .const 'Sub' $P2077 = "118_1271336409.53729" 
     capture_lex $P2077
-    .const 'Sub' $P2067 = "117_1267204714.47172" 
+    .const 'Sub' $P2067 = "117_1271336409.53729" 
     capture_lex $P2067
-    .const 'Sub' $P2057 = "116_1267204714.47172" 
+    .const 'Sub' $P2057 = "116_1271336409.53729" 
     capture_lex $P2057
-    .const 'Sub' $P2047 = "115_1267204714.47172" 
+    .const 'Sub' $P2047 = "115_1271336409.53729" 
     capture_lex $P2047
-    .const 'Sub' $P2033 = "114_1267204714.47172" 
+    .const 'Sub' $P2033 = "114_1271336409.53729" 
     capture_lex $P2033
-    .const 'Sub' $P2023 = "113_1267204714.47172" 
+    .const 'Sub' $P2023 = "113_1271336409.53729" 
     capture_lex $P2023
-    .const 'Sub' $P1986 = "112_1267204714.47172" 
+    .const 'Sub' $P1986 = "112_1271336409.53729" 
     capture_lex $P1986
-    .const 'Sub' $P1972 = "111_1267204714.47172" 
+    .const 'Sub' $P1972 = "111_1271336409.53729" 
     capture_lex $P1972
-    .const 'Sub' $P1962 = "110_1267204714.47172" 
+    .const 'Sub' $P1962 = "110_1271336409.53729" 
     capture_lex $P1962
-    .const 'Sub' $P1952 = "109_1267204714.47172" 
+    .const 'Sub' $P1952 = "109_1271336409.53729" 
     capture_lex $P1952
-    .const 'Sub' $P1942 = "108_1267204714.47172" 
+    .const 'Sub' $P1942 = "108_1271336409.53729" 
     capture_lex $P1942
-    .const 'Sub' $P1932 = "107_1267204714.47172" 
+    .const 'Sub' $P1932 = "107_1271336409.53729" 
     capture_lex $P1932
-    .const 'Sub' $P1922 = "106_1267204714.47172" 
+    .const 'Sub' $P1922 = "106_1271336409.53729" 
     capture_lex $P1922
-    .const 'Sub' $P1894 = "105_1267204714.47172" 
+    .const 'Sub' $P1894 = "105_1271336409.53729" 
     capture_lex $P1894
-    .const 'Sub' $P1877 = "104_1267204714.47172" 
+    .const 'Sub' $P1877 = "104_1271336409.53729" 
     capture_lex $P1877
-    .const 'Sub' $P1867 = "103_1267204714.47172" 
+    .const 'Sub' $P1867 = "103_1271336409.53729" 
     capture_lex $P1867
-    .const 'Sub' $P1854 = "102_1267204714.47172" 
+    .const 'Sub' $P1854 = "102_1271336409.53729" 
     capture_lex $P1854
-    .const 'Sub' $P1841 = "101_1267204714.47172" 
+    .const 'Sub' $P1841 = "101_1271336409.53729" 
     capture_lex $P1841
-    .const 'Sub' $P1828 = "100_1267204714.47172" 
+    .const 'Sub' $P1828 = "100_1271336409.53729" 
     capture_lex $P1828
-    .const 'Sub' $P1818 = "99_1267204714.47172" 
+    .const 'Sub' $P1818 = "99_1271336409.53729" 
     capture_lex $P1818
-    .const 'Sub' $P1789 = "98_1267204714.47172" 
+    .const 'Sub' $P1789 = "98_1271336409.53729" 
     capture_lex $P1789
-    .const 'Sub' $P1769 = "97_1267204714.47172" 
+    .const 'Sub' $P1769 = "97_1271336409.53729" 
     capture_lex $P1769
-    .const 'Sub' $P1759 = "96_1267204714.47172" 
+    .const 'Sub' $P1759 = "96_1271336409.53729" 
     capture_lex $P1759
-    .const 'Sub' $P1749 = "95_1267204714.47172" 
+    .const 'Sub' $P1749 = "95_1271336409.53729" 
     capture_lex $P1749
-    .const 'Sub' $P1722 = "94_1267204714.47172" 
+    .const 'Sub' $P1722 = "94_1271336409.53729" 
     capture_lex $P1722
-    .const 'Sub' $P1704 = "93_1267204714.47172" 
+    .const 'Sub' $P1704 = "93_1271336409.53729" 
     capture_lex $P1704
-    .const 'Sub' $P1694 = "92_1267204714.47172" 
+    .const 'Sub' $P1694 = "92_1271336409.53729" 
     capture_lex $P1694
-    .const 'Sub' $P1610 = "89_1267204714.47172" 
+    .const 'Sub' $P1610 = "89_1271336409.53729" 
     capture_lex $P1610
-    .const 'Sub' $P1600 = "88_1267204714.47172" 
+    .const 'Sub' $P1600 = "88_1271336409.53729" 
     capture_lex $P1600
-    .const 'Sub' $P1571 = "87_1267204714.47172" 
+    .const 'Sub' $P1571 = "87_1271336409.53729" 
     capture_lex $P1571
-    .const 'Sub' $P1529 = "86_1267204714.47172" 
+    .const 'Sub' $P1529 = "86_1271336409.53729" 
     capture_lex $P1529
-    .const 'Sub' $P1513 = "85_1267204714.47172" 
+    .const 'Sub' $P1513 = "85_1271336409.53729" 
     capture_lex $P1513
-    .const 'Sub' $P1504 = "84_1267204714.47172" 
+    .const 'Sub' $P1504 = "84_1271336409.53729" 
     capture_lex $P1504
-    .const 'Sub' $P1472 = "83_1267204714.47172" 
+    .const 'Sub' $P1472 = "83_1271336409.53729" 
     capture_lex $P1472
-    .const 'Sub' $P1373 = "80_1267204714.47172" 
+    .const 'Sub' $P1373 = "80_1271336409.53729" 
     capture_lex $P1373
-    .const 'Sub' $P1356 = "79_1267204714.47172" 
+    .const 'Sub' $P1356 = "79_1271336409.53729" 
     capture_lex $P1356
-    .const 'Sub' $P1336 = "78_1267204714.47172" 
+    .const 'Sub' $P1336 = "78_1271336409.53729" 
     capture_lex $P1336
-    .const 'Sub' $P1252 = "77_1267204714.47172" 
+    .const 'Sub' $P1252 = "77_1271336409.53729" 
     capture_lex $P1252
-    .const 'Sub' $P1228 = "75_1267204714.47172" 
+    .const 'Sub' $P1228 = "75_1271336409.53729" 
     capture_lex $P1228
-    .const 'Sub' $P1194 = "73_1267204714.47172" 
+    .const 'Sub' $P1194 = "73_1271336409.53729" 
     capture_lex $P1194
-    .const 'Sub' $P1144 = "71_1267204714.47172" 
+    .const 'Sub' $P1144 = "71_1271336409.53729" 
     capture_lex $P1144
-    .const 'Sub' $P1134 = "70_1267204714.47172" 
+    .const 'Sub' $P1134 = "70_1271336409.53729" 
     capture_lex $P1134
-    .const 'Sub' $P1124 = "69_1267204714.47172" 
+    .const 'Sub' $P1124 = "69_1271336409.53729" 
     capture_lex $P1124
-    .const 'Sub' $P1053 = "67_1267204714.47172" 
+    .const 'Sub' $P1053 = "67_1271336409.53729" 
     capture_lex $P1053
-    .const 'Sub' $P1036 = "66_1267204714.47172" 
+    .const 'Sub' $P1036 = "66_1271336409.53729" 
     capture_lex $P1036
-    .const 'Sub' $P1026 = "65_1267204714.47172" 
+    .const 'Sub' $P1026 = "65_1271336409.53729" 
     capture_lex $P1026
-    .const 'Sub' $P1016 = "64_1267204714.47172" 
+    .const 'Sub' $P1016 = "64_1271336409.53729" 
     capture_lex $P1016
-    .const 'Sub' $P1006 = "63_1267204714.47172" 
+    .const 'Sub' $P1006 = "63_1271336409.53729" 
     capture_lex $P1006
-    .const 'Sub' $P982 = "62_1267204714.47172" 
+    .const 'Sub' $P982 = "62_1271336409.53729" 
     capture_lex $P982
-    .const 'Sub' $P929 = "61_1267204714.47172" 
+    .const 'Sub' $P929 = "61_1271336409.53729" 
     capture_lex $P929
-    .const 'Sub' $P919 = "60_1267204714.47172" 
+    .const 'Sub' $P919 = "60_1271336409.53729" 
     capture_lex $P919
-    .const 'Sub' $P830 = "58_1267204714.47172" 
+    .const 'Sub' $P830 = "58_1271336409.53729" 
     capture_lex $P830
-    .const 'Sub' $P804 = "57_1267204714.47172" 
+    .const 'Sub' $P804 = "57_1271336409.53729" 
     capture_lex $P804
-    .const 'Sub' $P788 = "56_1267204714.47172" 
+    .const 'Sub' $P788 = "56_1271336409.53729" 
     capture_lex $P788
-    .const 'Sub' $P778 = "55_1267204714.47172" 
+    .const 'Sub' $P778 = "55_1271336409.53729" 
     capture_lex $P778
-    .const 'Sub' $P768 = "54_1267204714.47172" 
+    .const 'Sub' $P768 = "54_1271336409.53729" 
     capture_lex $P768
-    .const 'Sub' $P758 = "53_1267204714.47172" 
+    .const 'Sub' $P758 = "53_1271336409.53729" 
     capture_lex $P758
-    .const 'Sub' $P748 = "52_1267204714.47172" 
+    .const 'Sub' $P748 = "52_1271336409.53729" 
     capture_lex $P748
-    .const 'Sub' $P738 = "51_1267204714.47172" 
+    .const 'Sub' $P738 = "51_1271336409.53729" 
     capture_lex $P738
-    .const 'Sub' $P728 = "50_1267204714.47172" 
+    .const 'Sub' $P728 = "50_1271336409.53729" 
     capture_lex $P728
-    .const 'Sub' $P718 = "49_1267204714.47172" 
+    .const 'Sub' $P718 = "49_1271336409.53729" 
     capture_lex $P718
-    .const 'Sub' $P708 = "48_1267204714.47172" 
+    .const 'Sub' $P708 = "48_1271336409.53729" 
     capture_lex $P708
-    .const 'Sub' $P698 = "47_1267204714.47172" 
+    .const 'Sub' $P698 = "47_1271336409.53729" 
     capture_lex $P698
-    .const 'Sub' $P688 = "46_1267204714.47172" 
+    .const 'Sub' $P688 = "46_1271336409.53729" 
     capture_lex $P688
-    .const 'Sub' $P678 = "45_1267204714.47172" 
+    .const 'Sub' $P678 = "45_1271336409.53729" 
     capture_lex $P678
-    .const 'Sub' $P668 = "44_1267204714.47172" 
+    .const 'Sub' $P668 = "44_1271336409.53729" 
     capture_lex $P668
-    .const 'Sub' $P658 = "43_1267204714.47172" 
+    .const 'Sub' $P658 = "43_1271336409.53729" 
     capture_lex $P658
-    .const 'Sub' $P640 = "42_1267204714.47172" 
+    .const 'Sub' $P640 = "42_1271336409.53729" 
     capture_lex $P640
-    .const 'Sub' $P605 = "41_1267204714.47172" 
+    .const 'Sub' $P605 = "41_1271336409.53729" 
     capture_lex $P605
-    .const 'Sub' $P589 = "40_1267204714.47172" 
+    .const 'Sub' $P589 = "40_1271336409.53729" 
     capture_lex $P589
-    .const 'Sub' $P568 = "39_1267204714.47172" 
+    .const 'Sub' $P568 = "39_1271336409.53729" 
     capture_lex $P568
-    .const 'Sub' $P548 = "38_1267204714.47172" 
+    .const 'Sub' $P548 = "38_1271336409.53729" 
     capture_lex $P548
-    .const 'Sub' $P535 = "37_1267204714.47172" 
+    .const 'Sub' $P535 = "37_1271336409.53729" 
     capture_lex $P535
-    .const 'Sub' $P509 = "36_1267204714.47172" 
+    .const 'Sub' $P509 = "36_1271336409.53729" 
     capture_lex $P509
-    .const 'Sub' $P473 = "35_1267204714.47172" 
+    .const 'Sub' $P473 = "35_1271336409.53729" 
     capture_lex $P473
-    .const 'Sub' $P456 = "34_1267204714.47172" 
+    .const 'Sub' $P456 = "34_1271336409.53729" 
     capture_lex $P456
-    .const 'Sub' $P442 = "33_1267204714.47172" 
+    .const 'Sub' $P442 = "33_1271336409.53729" 
     capture_lex $P442
-    .const 'Sub' $P389 = "31_1267204714.47172" 
+    .const 'Sub' $P389 = "31_1271336409.53729" 
     capture_lex $P389
-    .const 'Sub' $P376 = "30_1267204714.47172" 
+    .const 'Sub' $P376 = "30_1271336409.53729" 
     capture_lex $P376
-    .const 'Sub' $P357 = "29_1267204714.47172" 
+    .const 'Sub' $P357 = "29_1271336409.53729" 
     capture_lex $P357
-    .const 'Sub' $P347 = "28_1267204714.47172" 
+    .const 'Sub' $P347 = "28_1271336409.53729" 
     capture_lex $P347
-    .const 'Sub' $P337 = "27_1267204714.47172" 
+    .const 'Sub' $P337 = "27_1271336409.53729" 
     capture_lex $P337
-    .const 'Sub' $P321 = "26_1267204714.47172" 
+    .const 'Sub' $P321 = "26_1271336409.53729" 
     capture_lex $P321
-    .const 'Sub' $P261 = "24_1267204714.47172" 
+    .const 'Sub' $P261 = "24_1271336409.53729" 
     capture_lex $P261
-    .const 'Sub' $P212 = "22_1267204714.47172" 
+    .const 'Sub' $P212 = "22_1271336409.53729" 
     capture_lex $P212
-    .const 'Sub' $P193 = "21_1267204714.47172" 
+    .const 'Sub' $P193 = "21_1271336409.53729" 
     capture_lex $P193
-    .const 'Sub' $P160 = "20_1267204714.47172" 
+    .const 'Sub' $P160 = "20_1271336409.53729" 
     capture_lex $P160
-    .const 'Sub' $P150 = "19_1267204714.47172" 
+    .const 'Sub' $P150 = "19_1271336409.53729" 
     capture_lex $P150
-    .const 'Sub' $P96 = "18_1267204714.47172" 
+    .const 'Sub' $P96 = "18_1271336409.53729" 
     capture_lex $P96
-    .const 'Sub' $P81 = "17_1267204714.47172" 
+    .const 'Sub' $P81 = "17_1271336409.53729" 
     capture_lex $P81
-    .const 'Sub' $P61 = "16_1267204714.47172" 
+    .const 'Sub' $P61 = "16_1271336409.53729" 
     capture_lex $P61
-    .const 'Sub' $P26 = "13_1267204714.47172" 
+    .const 'Sub' $P26 = "13_1271336409.53729" 
     capture_lex $P26
-    .const 'Sub' $P16 = "12_1267204714.47172" 
+    .const 'Sub' $P16 = "12_1271336409.53729" 
     capture_lex $P16
     get_global $P15, "@BLOCK"
     unless_null $P15, vivify_129
@@ -15986,23 +16030,23 @@
     set_global "@BLOCK", $P15
   vivify_129:
 .annotate "line", 9
-    .const 'Sub' $P16 = "12_1267204714.47172" 
+    .const 'Sub' $P16 = "12_1271336409.53729" 
     capture_lex $P16
     .lex "xblock_immediate", $P16
 .annotate "line", 14
-    .const 'Sub' $P26 = "13_1267204714.47172" 
+    .const 'Sub' $P26 = "13_1271336409.53729" 
     capture_lex $P26
     .lex "block_immediate", $P26
 .annotate "line", 24
-    .const 'Sub' $P61 = "16_1267204714.47172" 
+    .const 'Sub' $P61 = "16_1271336409.53729" 
     capture_lex $P61
     .lex "vivitype", $P61
 .annotate "line", 43
-    .const 'Sub' $P81 = "17_1267204714.47172" 
+    .const 'Sub' $P81 = "17_1271336409.53729" 
     capture_lex $P81
     .lex "colonpair_str", $P81
 .annotate "line", 190
-    .const 'Sub' $P96 = "18_1267204714.47172" 
+    .const 'Sub' $P96 = "18_1271336409.53729" 
     capture_lex $P96
     .lex "push_block_handler", $P96
 .annotate "line", 3
@@ -16025,13 +16069,13 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "" :load :init :subid("post127") :outer("11_1267204714.47172")
+.sub "" :load :init :subid("post127") :outer("11_1271336409.53729")
 .annotate "line", 3
     get_hll_global $P14, ["NQP";"Actions"], "_block13" 
     .local pmc block
     set block, $P14
 .annotate "line", 5
-    .const 'Sub' $P2164 = "125_1267204714.47172" 
+    .const 'Sub' $P2164 = "125_1271336409.53729" 
     capture_lex $P2164
     $P2164()
     $P2167 = get_root_global ["parrot"], "P6metaclass"
@@ -16040,7 +16084,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block2163"  :anon :subid("125_1267204714.47172") :outer("11_1267204714.47172")
+.sub "_block2163"  :anon :subid("125_1271336409.53729") :outer("11_1271336409.53729")
 .annotate "line", 6
     get_global $P2165, "@BLOCK"
     unless_null $P2165, vivify_128
@@ -16055,7 +16099,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock_immediate"  :subid("12_1267204714.47172") :outer("11_1267204714.47172")
+.sub "xblock_immediate"  :subid("12_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_19
 .annotate "line", 9
     new $P18, 'ExceptionHandler'
@@ -16091,10 +16135,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block_immediate"  :subid("13_1267204714.47172") :outer("11_1267204714.47172")
+.sub "block_immediate"  :subid("13_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_29
 .annotate "line", 14
-    .const 'Sub' $P39 = "14_1267204714.47172" 
+    .const 'Sub' $P39 = "14_1271336409.53729" 
     capture_lex $P39
     new $P28, 'ExceptionHandler'
     set_addr $P28, control_27
@@ -16116,7 +16160,7 @@
     set $P32, $P37
   unless_33_end:
     if $P32, unless_31_end
-    .const 'Sub' $P39 = "14_1267204714.47172" 
+    .const 'Sub' $P39 = "14_1271336409.53729" 
     capture_lex $P39
     $P39()
   unless_31_end:
@@ -16132,9 +16176,9 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block38"  :anon :subid("14_1267204714.47172") :outer("13_1267204714.47172")
+.sub "_block38"  :anon :subid("14_1271336409.53729") :outer("13_1271336409.53729")
 .annotate "line", 16
-    .const 'Sub' $P50 = "15_1267204714.47172" 
+    .const 'Sub' $P50 = "15_1271336409.53729" 
     capture_lex $P50
 .annotate "line", 17
     new $P40, "Undef"
@@ -16157,7 +16201,7 @@
     unless $P44, loop55_done
     shift $P48, $P44
   loop55_redo:
-    .const 'Sub' $P50 = "15_1267204714.47172" 
+    .const 'Sub' $P50 = "15_1271336409.53729" 
     capture_lex $P50
     $P50($P48)
   loop55_next:
@@ -16180,7 +16224,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block49"  :anon :subid("15_1267204714.47172") :outer("14_1267204714.47172")
+.sub "_block49"  :anon :subid("15_1271336409.53729") :outer("14_1271336409.53729")
     .param pmc param_51
 .annotate "line", 18
     .lex "$_", param_51
@@ -16192,7 +16236,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "vivitype"  :subid("16_1267204714.47172") :outer("11_1267204714.47172")
+.sub "vivitype"  :subid("16_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_64
 .annotate "line", 24
     new $P63, 'ExceptionHandler'
@@ -16240,7 +16284,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair_str"  :subid("17_1267204714.47172") :outer("11_1267204714.47172")
+.sub "colonpair_str"  :subid("17_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_84
 .annotate "line", 43
     new $P83, 'ExceptionHandler'
@@ -16278,7 +16322,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "push_block_handler"  :subid("18_1267204714.47172") :outer("11_1267204714.47172")
+.sub "push_block_handler"  :subid("18_1271336409.53729") :outer("11_1271336409.53729")
     .param pmc param_99
     .param pmc param_100
 .annotate "line", 190
@@ -16395,7 +16439,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "TOP"  :subid("19_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "TOP"  :subid("19_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_153
 .annotate "line", 33
     new $P152, 'ExceptionHandler'
@@ -16425,7 +16469,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "deflongname"  :subid("20_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "deflongname"  :subid("20_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_163
 .annotate "line", 35
     new $P162, 'ExceptionHandler'
@@ -16514,7 +16558,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "comp_unit"  :subid("21_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "comp_unit"  :subid("21_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_196
 .annotate "line", 49
     new $P195, 'ExceptionHandler'
@@ -16567,10 +16611,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statementlist"  :subid("22_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statementlist"  :subid("22_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_215
 .annotate "line", 57
-    .const 'Sub' $P229 = "23_1267204714.47172" 
+    .const 'Sub' $P229 = "23_1271336409.53729" 
     capture_lex $P229
     new $P214, 'ExceptionHandler'
     set_addr $P214, control_213
@@ -16615,7 +16659,7 @@
     unless $P223, loop254_done
     shift $P227, $P223
   loop254_redo:
-    .const 'Sub' $P229 = "23_1267204714.47172" 
+    .const 'Sub' $P229 = "23_1271336409.53729" 
     capture_lex $P229
     $P229($P227)
   loop254_next:
@@ -16645,7 +16689,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block228"  :anon :subid("23_1267204714.47172") :outer("22_1267204714.47172")
+.sub "_block228"  :anon :subid("23_1271336409.53729") :outer("22_1271336409.53729")
     .param pmc param_231
 .annotate "line", 61
     new $P230, "Undef"
@@ -16705,12 +16749,12 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement"  :subid("24_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement"  :subid("24_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_264
     .param pmc param_265 :optional
     .param int has_param_265 :opt_flag
 .annotate "line", 72
-    .const 'Sub' $P273 = "25_1267204714.47172" 
+    .const 'Sub' $P273 = "25_1271336409.53729" 
     capture_lex $P273
     new $P263, 'ExceptionHandler'
     set_addr $P263, control_262
@@ -16769,7 +16813,7 @@
     goto if_269_end
   if_269:
 .annotate "line", 74
-    .const 'Sub' $P273 = "25_1267204714.47172" 
+    .const 'Sub' $P273 = "25_1271336409.53729" 
     capture_lex $P273
     $P273()
   if_269_end:
@@ -16788,7 +16832,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block272"  :anon :subid("25_1267204714.47172") :outer("24_1267204714.47172")
+.sub "_block272"  :anon :subid("25_1271336409.53729") :outer("24_1271336409.53729")
 .annotate "line", 75
     new $P274, "Undef"
     .lex "$mc", $P274
@@ -16901,7 +16945,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "xblock"  :subid("26_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "xblock"  :subid("26_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_324
 .annotate "line", 90
     new $P323, 'ExceptionHandler'
@@ -16945,7 +16989,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "pblock"  :subid("27_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "pblock"  :subid("27_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_340
 .annotate "line", 94
     new $P339, 'ExceptionHandler'
@@ -16977,7 +17021,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "block"  :subid("28_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "block"  :subid("28_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_350
 .annotate "line", 98
     new $P349, 'ExceptionHandler'
@@ -17009,7 +17053,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "blockoid"  :subid("29_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "blockoid"  :subid("29_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_360
 .annotate "line", 102
     new $P359, 'ExceptionHandler'
@@ -17062,7 +17106,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "newpad"  :subid("30_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "newpad"  :subid("30_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_379
 .annotate "line", 110
     new $P378, 'ExceptionHandler'
@@ -17097,10 +17141,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<if>"  :subid("31_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<if>"  :subid("31_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_392
 .annotate "line", 117
-    .const 'Sub' $P420 = "32_1267204714.47172" 
+    .const 'Sub' $P420 = "32_1271336409.53729" 
     capture_lex $P420
     new $P391, 'ExceptionHandler'
     set_addr $P391, control_390
@@ -17185,7 +17229,7 @@
     isgt $I418, $N417, 0.0
     unless $I418, loop435_done
   loop435_redo:
-    .const 'Sub' $P420 = "32_1267204714.47172" 
+    .const 'Sub' $P420 = "32_1271336409.53729" 
     capture_lex $P420
     $P420()
   loop435_next:
@@ -17213,7 +17257,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block419"  :anon :subid("32_1267204714.47172") :outer("31_1267204714.47172")
+.sub "_block419"  :anon :subid("32_1271336409.53729") :outer("31_1271336409.53729")
 .annotate "line", 126
     new $P421, "Undef"
     .lex "$else", $P421
@@ -17252,7 +17296,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<unless>"  :subid("33_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<unless>"  :subid("33_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_445
 .annotate "line", 133
     new $P444, 'ExceptionHandler'
@@ -17293,7 +17337,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<while>"  :subid("34_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<while>"  :subid("34_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_459
 .annotate "line", 139
     new $P458, 'ExceptionHandler'
@@ -17343,7 +17387,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<repeat>"  :subid("35_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<repeat>"  :subid("35_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_476
 .annotate "line", 145
     new $P475, 'ExceptionHandler'
@@ -17443,7 +17487,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<for>"  :subid("36_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<for>"  :subid("36_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_512
 .annotate "line", 159
     new $P511, 'ExceptionHandler'
@@ -17523,7 +17567,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<return>"  :subid("37_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<return>"  :subid("37_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_538
 .annotate "line", 172
     new $P537, 'ExceptionHandler'
@@ -17558,7 +17602,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CATCH>"  :subid("38_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<CATCH>"  :subid("38_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_551
 .annotate "line", 176
     new $P550, 'ExceptionHandler'
@@ -17616,7 +17660,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_control:sym<CONTROL>"  :subid("39_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_control:sym<CONTROL>"  :subid("39_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_571
 .annotate "line", 183
     new $P570, 'ExceptionHandler'
@@ -17674,7 +17718,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<INIT>"  :subid("40_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_prefix:sym<INIT>"  :subid("40_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_592
 .annotate "line", 227
     new $P591, 'ExceptionHandler'
@@ -17720,7 +17764,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_prefix:sym<try>"  :subid("41_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_prefix:sym<try>"  :subid("41_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_608
 .annotate "line", 232
     new $P607, 'ExceptionHandler'
@@ -17797,7 +17841,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "blorst"  :subid("42_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "blorst"  :subid("42_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_643
 .annotate "line", 255
     new $P642, 'ExceptionHandler'
@@ -17856,7 +17900,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<if>"  :subid("43_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_cond:sym<if>"  :subid("43_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_661
 .annotate "line", 263
     new $P660, 'ExceptionHandler'
@@ -17886,7 +17930,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_cond:sym<unless>"  :subid("44_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_cond:sym<unless>"  :subid("44_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_671
 .annotate "line", 264
     new $P670, 'ExceptionHandler'
@@ -17916,7 +17960,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<while>"  :subid("45_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_loop:sym<while>"  :subid("45_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_681
 .annotate "line", 266
     new $P680, 'ExceptionHandler'
@@ -17946,7 +17990,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "statement_mod_loop:sym<until>"  :subid("46_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "statement_mod_loop:sym<until>"  :subid("46_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_691
 .annotate "line", 267
     new $P690, 'ExceptionHandler'
@@ -17976,7 +18020,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<fatarrow>"  :subid("47_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<fatarrow>"  :subid("47_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_701
 .annotate "line", 271
     new $P700, 'ExceptionHandler'
@@ -18006,7 +18050,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<colonpair>"  :subid("48_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<colonpair>"  :subid("48_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_711
 .annotate "line", 272
     new $P710, 'ExceptionHandler'
@@ -18036,7 +18080,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<variable>"  :subid("49_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<variable>"  :subid("49_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_721
 .annotate "line", 273
     new $P720, 'ExceptionHandler'
@@ -18066,7 +18110,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<package_declarator>"  :subid("50_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<package_declarator>"  :subid("50_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_731
 .annotate "line", 274
     new $P730, 'ExceptionHandler'
@@ -18096,7 +18140,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<scope_declarator>"  :subid("51_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<scope_declarator>"  :subid("51_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_741
 .annotate "line", 275
     new $P740, 'ExceptionHandler'
@@ -18126,7 +18170,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<routine_declarator>"  :subid("52_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<routine_declarator>"  :subid("52_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_751
 .annotate "line", 276
     new $P750, 'ExceptionHandler'
@@ -18156,7 +18200,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<regex_declarator>"  :subid("53_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<regex_declarator>"  :subid("53_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_761
 .annotate "line", 277
     new $P760, 'ExceptionHandler'
@@ -18186,7 +18230,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<statement_prefix>"  :subid("54_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<statement_prefix>"  :subid("54_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_771
 .annotate "line", 278
     new $P770, 'ExceptionHandler'
@@ -18216,7 +18260,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<lambda>"  :subid("55_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<lambda>"  :subid("55_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_781
 .annotate "line", 279
     new $P780, 'ExceptionHandler'
@@ -18246,7 +18290,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "fatarrow"  :subid("56_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "fatarrow"  :subid("56_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_791
 .annotate "line", 281
     new $P790, 'ExceptionHandler'
@@ -18295,7 +18339,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "colonpair"  :subid("57_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "colonpair"  :subid("57_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_807
 .annotate "line", 287
     new $P806, 'ExceptionHandler'
@@ -18376,10 +18420,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable"  :subid("58_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "variable"  :subid("58_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_833
 .annotate "line", 295
-    .const 'Sub' $P846 = "59_1267204714.47172" 
+    .const 'Sub' $P846 = "59_1271336409.53729" 
     capture_lex $P846
     new $P832, 'ExceptionHandler'
     set_addr $P832, control_831
@@ -18403,7 +18447,7 @@
   vivify_296:
     if $P838, if_836
 .annotate "line", 301
-    .const 'Sub' $P846 = "59_1267204714.47172" 
+    .const 'Sub' $P846 = "59_1271336409.53729" 
     capture_lex $P846
     $P846()
     goto if_836_end
@@ -18440,7 +18484,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block845"  :anon :subid("59_1267204714.47172") :outer("58_1267204714.47172")
+.sub "_block845"  :anon :subid("59_1271336409.53729") :outer("58_1271336409.53729")
 .annotate "line", 302
     $P847 = root_new ['parrot';'ResizablePMCArray']
     .lex "@name", $P847
@@ -18609,7 +18653,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<module>"  :subid("60_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_declarator:sym<module>"  :subid("60_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_922
 .annotate "line", 333
     new $P921, 'ExceptionHandler'
@@ -18639,7 +18683,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_declarator:sym<class>"  :subid("61_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_declarator:sym<class>"  :subid("61_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_932
 .annotate "line", 334
     new $P931, 'ExceptionHandler'
@@ -18796,7 +18840,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "package_def"  :subid("62_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "package_def"  :subid("62_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_985
 .annotate "line", 357
     new $P984, 'ExceptionHandler'
@@ -18874,7 +18918,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<my>"  :subid("63_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<my>"  :subid("63_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1009
 .annotate "line", 364
     new $P1008, 'ExceptionHandler'
@@ -18904,7 +18948,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<our>"  :subid("64_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<our>"  :subid("64_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1019
 .annotate "line", 365
     new $P1018, 'ExceptionHandler'
@@ -18934,7 +18978,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scope_declarator:sym<has>"  :subid("65_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scope_declarator:sym<has>"  :subid("65_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1029
 .annotate "line", 366
     new $P1028, 'ExceptionHandler'
@@ -18964,7 +19008,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "scoped"  :subid("66_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "scoped"  :subid("66_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1039
 .annotate "line", 368
     new $P1038, 'ExceptionHandler'
@@ -19022,10 +19066,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "variable_declarator"  :subid("67_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "variable_declarator"  :subid("67_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1056
 .annotate "line", 374
-    .const 'Sub' $P1096 = "68_1267204714.47172" 
+    .const 'Sub' $P1096 = "68_1271336409.53729" 
     capture_lex $P1096
     new $P1055, 'ExceptionHandler'
     set_addr $P1055, control_1054
@@ -19107,7 +19151,7 @@
     iseq $I1081, $S1080, "has"
     if $I1081, if_1078
 .annotate "line", 391
-    .const 'Sub' $P1096 = "68_1267204714.47172" 
+    .const 'Sub' $P1096 = "68_1271336409.53729" 
     capture_lex $P1096
     $P1096()
     goto if_1078_end
@@ -19167,7 +19211,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1095"  :anon :subid("68_1267204714.47172") :outer("67_1267204714.47172")
+.sub "_block1095"  :anon :subid("68_1271336409.53729") :outer("67_1271336409.53729")
 .annotate "line", 392
     new $P1097, "Undef"
     .lex "$scope", $P1097
@@ -19228,7 +19272,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<sub>"  :subid("69_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_declarator:sym<sub>"  :subid("69_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1127
 .annotate "line", 402
     new $P1126, 'ExceptionHandler'
@@ -19258,7 +19302,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_declarator:sym<method>"  :subid("70_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_declarator:sym<method>"  :subid("70_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1137
 .annotate "line", 403
     new $P1136, 'ExceptionHandler'
@@ -19288,10 +19332,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "routine_def"  :subid("71_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "routine_def"  :subid("71_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1147
 .annotate "line", 405
-    .const 'Sub' $P1158 = "72_1267204714.47172" 
+    .const 'Sub' $P1158 = "72_1271336409.53729" 
     capture_lex $P1158
     new $P1146, 'ExceptionHandler'
     set_addr $P1146, control_1145
@@ -19328,7 +19372,7 @@
     new $P1156, "Undef"
   vivify_380:
     unless $P1156, if_1154_end
-    .const 'Sub' $P1158 = "72_1267204714.47172" 
+    .const 'Sub' $P1158 = "72_1271336409.53729" 
     capture_lex $P1158
     $P1158()
   if_1154_end:
@@ -19347,7 +19391,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1157"  :anon :subid("72_1267204714.47172") :outer("71_1267204714.47172")
+.sub "_block1157"  :anon :subid("72_1271336409.53729") :outer("71_1271336409.53729")
 .annotate "line", 410
     new $P1159, "Undef"
     .lex "$name", $P1159
@@ -19443,10 +19487,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "method_def"  :subid("73_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "method_def"  :subid("73_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1197
 .annotate "line", 423
-    .const 'Sub' $P1213 = "74_1267204714.47172" 
+    .const 'Sub' $P1213 = "74_1271336409.53729" 
     capture_lex $P1213
     new $P1196, 'ExceptionHandler'
     set_addr $P1196, control_1195
@@ -19498,7 +19542,7 @@
     new $P1211, "Undef"
   vivify_399:
     unless $P1211, if_1209_end
-    .const 'Sub' $P1213 = "74_1267204714.47172" 
+    .const 'Sub' $P1213 = "74_1271336409.53729" 
     capture_lex $P1213
     $P1213()
   if_1209_end:
@@ -19517,7 +19561,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1212"  :anon :subid("74_1267204714.47172") :outer("73_1267204714.47172")
+.sub "_block1212"  :anon :subid("74_1271336409.53729") :outer("73_1271336409.53729")
 .annotate "line", 430
     new $P1214, "Undef"
     .lex "$name", $P1214
@@ -19548,10 +19592,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "signature"  :subid("75_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "signature"  :subid("75_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1231
 .annotate "line", 437
-    .const 'Sub' $P1242 = "76_1267204714.47172" 
+    .const 'Sub' $P1242 = "76_1271336409.53729" 
     capture_lex $P1242
     new $P1230, 'ExceptionHandler'
     set_addr $P1230, control_1229
@@ -19595,7 +19639,7 @@
     unless $P1236, loop1248_done
     shift $P1240, $P1236
   loop1248_redo:
-    .const 'Sub' $P1242 = "76_1267204714.47172" 
+    .const 'Sub' $P1242 = "76_1271336409.53729" 
     capture_lex $P1242
     $P1242($P1240)
   loop1248_next:
@@ -19620,7 +19664,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1241"  :anon :subid("76_1267204714.47172") :outer("75_1267204714.47172")
+.sub "_block1241"  :anon :subid("76_1271336409.53729") :outer("75_1271336409.53729")
     .param pmc param_1243
 .annotate "line", 439
     .lex "$_", param_1243
@@ -19633,7 +19677,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "parameter"  :subid("77_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "parameter"  :subid("77_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1255
 .annotate "line", 442
     new $P1254, 'ExceptionHandler'
@@ -19865,7 +19909,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "param_var"  :subid("78_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "param_var"  :subid("78_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1339
 .annotate "line", 474
     new $P1338, 'ExceptionHandler'
@@ -19918,7 +19962,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "named_param"  :subid("79_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "named_param"  :subid("79_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1359
 .annotate "line", 482
     new $P1358, 'ExceptionHandler'
@@ -19971,14 +20015,14 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "regex_declarator"  :subid("80_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "regex_declarator"  :subid("80_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1376
     .param pmc param_1377 :optional
     .param int has_param_1377 :opt_flag
 .annotate "line", 488
-    .const 'Sub' $P1447 = "82_1267204714.47172" 
+    .const 'Sub' $P1447 = "82_1271336409.53729" 
     capture_lex $P1447
-    .const 'Sub' $P1419 = "81_1267204714.47172" 
+    .const 'Sub' $P1419 = "81_1271336409.53729" 
     capture_lex $P1419
     new $P1375, 'ExceptionHandler'
     set_addr $P1375, control_1374
@@ -20036,13 +20080,13 @@
     iseq $I1417, $S1416, "open"
     if $I1417, if_1414
 .annotate "line", 534
-    .const 'Sub' $P1447 = "82_1267204714.47172" 
+    .const 'Sub' $P1447 = "82_1271336409.53729" 
     capture_lex $P1447
     $P1447()
     goto if_1414_end
   if_1414:
 .annotate "line", 521
-    .const 'Sub' $P1419 = "81_1267204714.47172" 
+    .const 'Sub' $P1419 = "81_1271336409.53729" 
     capture_lex $P1419
     $P1419()
   if_1414_end:
@@ -20099,7 +20143,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1446"  :anon :subid("82_1267204714.47172") :outer("80_1267204714.47172")
+.sub "_block1446"  :anon :subid("82_1271336409.53729") :outer("80_1271336409.53729")
 .annotate "line", 535
     new $P1448, "Undef"
     .lex "$regex", $P1448
@@ -20150,7 +20194,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1418"  :anon :subid("81_1267204714.47172") :outer("80_1267204714.47172")
+.sub "_block1418"  :anon :subid("81_1271336409.53729") :outer("80_1271336409.53729")
 .annotate "line", 522
     $P1420 = root_new ['parrot';'Hash']
     .lex "%h", $P1420
@@ -20248,7 +20292,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "dotty"  :subid("83_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "dotty"  :subid("83_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1475
 .annotate "line", 552
     new $P1474, 'ExceptionHandler'
@@ -20345,7 +20389,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<self>"  :subid("84_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<self>"  :subid("84_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1507
 .annotate "line", 561
     new $P1506, 'ExceptionHandler'
@@ -20370,7 +20414,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<identifier>"  :subid("85_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<identifier>"  :subid("85_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1516
 .annotate "line", 565
     new $P1515, 'ExceptionHandler'
@@ -20419,7 +20463,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<name>"  :subid("86_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<name>"  :subid("86_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1532
 .annotate "line", 571
     new $P1531, 'ExceptionHandler'
@@ -20537,7 +20581,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<pir::op>"  :subid("87_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<pir::op>"  :subid("87_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1574
 .annotate "line", 585
     new $P1573, 'ExceptionHandler'
@@ -20628,7 +20672,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "args"  :subid("88_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "args"  :subid("88_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1603
 .annotate "line", 600
     new $P1602, 'ExceptionHandler'
@@ -20658,10 +20702,10 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "arglist"  :subid("89_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "arglist"  :subid("89_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1613
 .annotate "line", 602
-    .const 'Sub' $P1624 = "90_1267204714.47172" 
+    .const 'Sub' $P1624 = "90_1271336409.53729" 
     capture_lex $P1624
     new $P1612, 'ExceptionHandler'
     set_addr $P1612, control_1611
@@ -20693,7 +20737,7 @@
     new $P1622, "Undef"
   vivify_498:
     unless $P1622, if_1620_end
-    .const 'Sub' $P1624 = "90_1267204714.47172" 
+    .const 'Sub' $P1624 = "90_1271336409.53729" 
     capture_lex $P1624
     $P1624()
   if_1620_end:
@@ -20801,9 +20845,9 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1623"  :anon :subid("90_1267204714.47172") :outer("89_1267204714.47172")
+.sub "_block1623"  :anon :subid("90_1271336409.53729") :outer("89_1271336409.53729")
 .annotate "line", 604
-    .const 'Sub' $P1645 = "91_1267204714.47172" 
+    .const 'Sub' $P1645 = "91_1271336409.53729" 
     capture_lex $P1645
 .annotate "line", 605
     new $P1625, "Undef"
@@ -20856,7 +20900,7 @@
     unless $P1639, loop1650_done
     shift $P1643, $P1639
   loop1650_redo:
-    .const 'Sub' $P1645 = "91_1267204714.47172" 
+    .const 'Sub' $P1645 = "91_1271336409.53729" 
     capture_lex $P1645
     $P1645($P1643)
   loop1650_next:
@@ -20879,7 +20923,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "_block1644"  :anon :subid("91_1267204714.47172") :outer("90_1267204714.47172")
+.sub "_block1644"  :anon :subid("91_1271336409.53729") :outer("90_1271336409.53729")
     .param pmc param_1646
 .annotate "line", 607
     .lex "$_", param_1646
@@ -20891,7 +20935,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "term:sym<value>"  :subid("92_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "term:sym<value>"  :subid("92_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1697
 .annotate "line", 624
     new $P1696, 'ExceptionHandler'
@@ -20921,7 +20965,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<( )>"  :subid("93_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<( )>"  :subid("93_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1707
 .annotate "line", 626
     new $P1706, 'ExceptionHandler'
@@ -20977,7 +21021,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<[ ]>"  :subid("94_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<[ ]>"  :subid("94_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1725
 .annotate "line", 632
     new $P1724, 'ExceptionHandler'
@@ -21053,7 +21097,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<ang>"  :subid("95_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<ang>"  :subid("95_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1752
 .annotate "line", 647
     new $P1751, 'ExceptionHandler'
@@ -21083,7 +21127,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("96_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub unicode:"circumfix:sym<\x{ab} \x{bb}>"  :subid("96_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1762
 .annotate "line", 648
     new $P1761, 'ExceptionHandler'
@@ -21113,7 +21157,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<{ }>"  :subid("97_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<{ }>"  :subid("97_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1772
 .annotate "line", 650
     new $P1771, 'ExceptionHandler'
@@ -21177,7 +21221,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "circumfix:sym<sigil>"  :subid("98_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "circumfix:sym<sigil>"  :subid("98_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1792
 .annotate "line", 656
     new $P1791, 'ExceptionHandler'
@@ -21256,7 +21300,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "semilist"  :subid("99_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "semilist"  :subid("99_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1821
 .annotate "line", 663
     new $P1820, 'ExceptionHandler'
@@ -21286,7 +21330,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<[ ]>"  :subid("100_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<[ ]>"  :subid("100_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1831
 .annotate "line", 665
     new $P1830, 'ExceptionHandler'
@@ -21323,7 +21367,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<{ }>"  :subid("101_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<{ }>"  :subid("101_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1844
 .annotate "line", 671
     new $P1843, 'ExceptionHandler'
@@ -21360,7 +21404,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<ang>"  :subid("102_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<ang>"  :subid("102_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1857
 .annotate "line", 677
     new $P1856, 'ExceptionHandler'
@@ -21397,7 +21441,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postcircumfix:sym<( )>"  :subid("103_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postcircumfix:sym<( )>"  :subid("103_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1870
 .annotate "line", 683
     new $P1869, 'ExceptionHandler'
@@ -21429,7 +21473,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "value"  :subid("104_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "value"  :subid("104_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1880
 .annotate "line", 687
     new $P1879, 'ExceptionHandler'
@@ -21484,7 +21528,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "number"  :subid("105_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "number"  :subid("105_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1897
 .annotate "line", 691
     new $P1896, 'ExceptionHandler'
@@ -21562,7 +21606,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<apos>"  :subid("106_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<apos>"  :subid("106_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1925
 .annotate "line", 697
     new $P1924, 'ExceptionHandler'
@@ -21592,7 +21636,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<dblq>"  :subid("107_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<dblq>"  :subid("107_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1935
 .annotate "line", 698
     new $P1934, 'ExceptionHandler'
@@ -21622,7 +21666,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<qq>"  :subid("108_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<qq>"  :subid("108_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1945
 .annotate "line", 699
     new $P1944, 'ExceptionHandler'
@@ -21652,7 +21696,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<q>"  :subid("109_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<q>"  :subid("109_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1955
 .annotate "line", 700
     new $P1954, 'ExceptionHandler'
@@ -21682,7 +21726,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q>"  :subid("110_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<Q>"  :subid("110_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1965
 .annotate "line", 701
     new $P1964, 'ExceptionHandler'
@@ -21712,7 +21756,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym<Q:PIR>"  :subid("111_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym<Q:PIR>"  :subid("111_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1975
 .annotate "line", 702
     new $P1974, 'ExceptionHandler'
@@ -21748,7 +21792,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote:sym</ />"  :subid("112_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote:sym</ />"  :subid("112_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_1989
     .param pmc param_1990 :optional
     .param int has_param_1990 :opt_flag
@@ -21857,7 +21901,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<$>"  :subid("113_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<$>"  :subid("113_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2026
 .annotate "line", 731
     new $P2025, 'ExceptionHandler'
@@ -21887,7 +21931,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "quote_escape:sym<{ }>"  :subid("114_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "quote_escape:sym<{ }>"  :subid("114_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2036
 .annotate "line", 732
     new $P2035, 'ExceptionHandler'
@@ -21925,7 +21969,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<.>"  :subid("115_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postfix:sym<.>"  :subid("115_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2050
 .annotate "line", 740
     new $P2049, 'ExceptionHandler'
@@ -21955,7 +21999,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<++>"  :subid("116_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postfix:sym<++>"  :subid("116_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2060
 .annotate "line", 742
     new $P2059, 'ExceptionHandler'
@@ -21985,7 +22029,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "postfix:sym<-->"  :subid("117_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "postfix:sym<-->"  :subid("117_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2070
 .annotate "line", 748
     new $P2069, 'ExceptionHandler'
@@ -22015,7 +22059,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "prefix:sym<make>"  :subid("118_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "prefix:sym<make>"  :subid("118_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2080
 .annotate "line", 754
     new $P2079, 'ExceptionHandler'
@@ -22045,7 +22089,7 @@
 
 
 .namespace ["NQP";"Actions"]
-.sub "infix:sym<~~>"  :subid("119_1267204714.47172") :method :outer("11_1267204714.47172")
+.sub "infix:sym<~~>"  :subid("119_1271336409.53729") :method :outer("11_1271336409.53729")
     .param pmc param_2092
 .annotate "line", 763
     new $P2091, 'ExceptionHandler'
@@ -22071,18 +22115,18 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "_block2099"  :subid("120_1267204714.47172") :outer("11_1267204714.47172")
+.sub "_block2099"  :subid("120_1271336409.53729") :outer("11_1271336409.53729")
 .annotate "line", 768
-    .const 'Sub' $P2135 = "124_1267204714.47172" 
+    .const 'Sub' $P2135 = "124_1271336409.53729" 
     capture_lex $P2135
-    .const 'Sub' $P2125 = "123_1267204714.47172" 
+    .const 'Sub' $P2125 = "123_1271336409.53729" 
     capture_lex $P2125
-    .const 'Sub' $P2115 = "122_1267204714.47172" 
+    .const 'Sub' $P2115 = "122_1271336409.53729" 
     capture_lex $P2115
-    .const 'Sub' $P2101 = "121_1267204714.47172" 
+    .const 'Sub' $P2101 = "121_1271336409.53729" 
     capture_lex $P2101
 .annotate "line", 779
-    .const 'Sub' $P2135 = "124_1267204714.47172" 
+    .const 'Sub' $P2135 = "124_1271336409.53729" 
     capture_lex $P2135
 .annotate "line", 768
     .return ($P2135)
@@ -22090,7 +22134,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<:my>"  :subid("121_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "metachar:sym<:my>"  :subid("121_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2104
 .annotate "line", 770
     new $P2103, 'ExceptionHandler'
@@ -22129,7 +22173,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "metachar:sym<{ }>"  :subid("122_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "metachar:sym<{ }>"  :subid("122_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2118
 .annotate "line", 775
     new $P2117, 'ExceptionHandler'
@@ -22159,7 +22203,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "assertion:sym<{ }>"  :subid("123_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "assertion:sym<{ }>"  :subid("123_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2128
 .annotate "line", 777
     new $P2127, 'ExceptionHandler'
@@ -22189,7 +22233,7 @@
 
 
 .namespace ["NQP";"RegexActions"]
-.sub "codeblock"  :subid("124_1267204714.47172") :method :outer("120_1267204714.47172")
+.sub "codeblock"  :subid("124_1271336409.53729") :method :outer("120_1271336409.53729")
     .param pmc param_2138
 .annotate "line", 779
     new $P2137, 'ExceptionHandler'

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

Copied: branches/include_dynpmc_makefile/include/parrot/.gitignore (from r45870, trunk/include/parrot/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/include/parrot/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/include/parrot/.gitignore)
@@ -0,0 +1,12 @@
+/*.tmp
+/config.h
+/core_pmcs.h
+/extend_vtable.h
+/feature.h
+/has_header.h
+/platform.h
+/platform_interface.h
+/vtable.h
+/pbcversion.h
+/platform_limits.h
+/opsenum.h

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

Modified: branches/include_dynpmc_makefile/include/parrot/compiler.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/compiler.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/compiler.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/context.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/context.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/context.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -225,12 +225,6 @@
 
 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);
@@ -329,13 +323,6 @@
         __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))
@@ -452,10 +439,6 @@
      __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))
@@ -507,10 +490,6 @@
      __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,9 +530,6 @@
 #  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))
 
@@ -615,9 +591,6 @@
 #  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))
 

Modified: branches/include_dynpmc_makefile/include/parrot/dynext.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/dynext.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/dynext.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/embed.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/embed.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/embed.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -56,11 +56,7 @@
 
 PARROT_EXPORT void Parrot_pbc_fixup_loaded(Parrot_Interp);
 
-PARROT_EXPORT void Parrot_setup_argv(Parrot_Interp, int argc, const char **argv);
-
-PARROT_EXPORT void Parrot_setup_opt(Parrot_Interp, int n, char *argv);
-
-PARROT_EXPORT void Parrot_runcode(Parrot_Interp, int argc, char **argv);
+PARROT_EXPORT void Parrot_runcode(Parrot_Interp, int argc, const char **argv);
 
 PARROT_EXPORT Parrot_PMC Parrot_compile_string(Parrot_Interp,
         Parrot_String type, const char *code, Parrot_String *error);
@@ -82,8 +78,6 @@
    addition to libparrot */
 void Parrot_set_config_hash(void);
 
-int Parrot_revision(void);
-
 #endif /* PARROT_EMBED_H_GUARD */
 
 /*

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

Modified: branches/include_dynpmc_makefile/include/parrot/exceptions.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/exceptions.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/exceptions.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -118,6 +118,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void exit_fatal(int exitcode, ARGIN(const char *format), ...)
         __attribute__nonnull__(2);
 
@@ -133,6 +134,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_confess(
     ARGIN(const char *cond),
     ARGIN(const char *file),
@@ -160,6 +162,7 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_rethrow_from_c(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -173,12 +176,14 @@
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_throw_from_c(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void Parrot_ex_throw_from_c_args(PARROT_INTERP,
     SHIM(void *ret_addr),
     int exitcode,
@@ -206,11 +211,13 @@
         __attribute__nonnull__(4);
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void die_from_exception(PARROT_INTERP, ARGIN(PMC *exception))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_DOES_NOT_RETURN
+PARROT_COLD
 void do_panic(
     NULLOK_INTERP,
     ARGIN_NULLOK(const char *message),

Modified: branches/include_dynpmc_makefile/include/parrot/exit.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/exit.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/exit.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/extend.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/extend.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/extend.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/gc_api.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/gc_api.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/gc_api.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /* gc_api.h
- *  Copyright (C) 2001-2009, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -136,9 +136,8 @@
         FUNC_MODIFIES(*obj);
 
 PARROT_EXPORT
-void Parrot_gc_mark_STRING_alive_fun(PARROT_INTERP,
+void Parrot_gc_mark_STRING_alive_fun(SHIM_INTERP,
     ARGMOD_NULLOK(STRING *obj))
-        __attribute__nonnull__(1)
         FUNC_MODIFIES(*obj);
 
 PARROT_EXPORT
@@ -256,8 +255,7 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
-void Parrot_gc_free_pmc_sync(PARROT_INTERP, ARGMOD(PMC *p))
-        __attribute__nonnull__(1)
+void Parrot_gc_free_pmc_sync(SHIM_INTERP, ARGMOD(PMC *p))
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*p);
 
@@ -350,8 +348,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(obj))
 #define ASSERT_ARGS_Parrot_gc_mark_STRING_alive_fun \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_gc_reallocate_memory_chunk \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
@@ -421,8 +418,7 @@
        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))
+       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 +468,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/gc/api.c */
 
-void Parrot_gc_inf_init(PARROT_INTERP);
-
 #if defined(NDEBUG) && defined(PARROT_IN_CORE)
 #  define Parrot_gc_mark_STRING_alive(interp, obj) \
           do if (! STRING_IS_NULL(obj)) PObj_live_SET(obj); while (0)

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

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

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

Modified: branches/include_dynpmc_makefile/include/parrot/io_unix.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/io_unix.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/io_unix.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -39,11 +39,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_io_fdopen_unix(PARROT_INTERP,
-    ARGMOD(PMC *filehandle),
+    ARGMOD_NULLOK(PMC *filehandle),
     PIOHANDLE fd,
     INTVAL flags)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
         FUNC_MODIFIES(*filehandle);
 
 INTVAL Parrot_io_flush_unix(PARROT_INTERP, ARGMOD(PMC *filehandle))
@@ -55,7 +54,7 @@
 INTVAL Parrot_io_init_unix(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(PMC *filehandle))
+INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(const PMC *filehandle))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -133,8 +132,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))
 #define ASSERT_ARGS_Parrot_io_fdopen_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(filehandle))
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_io_flush_unix __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(filehandle))

Modified: branches/include_dynpmc_makefile/include/parrot/key.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/key.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/key.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/misc.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/misc.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/misc.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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)
@@ -311,12 +321,6 @@
 
 #endif /* IN_SPF_SYSTEM */
 
-
-/*
- * generated src/revision.c
- */
-PARROT_EXPORT int Parrot_config_revision(void);
-
 #endif /* PARROT_MISC_H_GUARD */
 
 /*

Modified: branches/include_dynpmc_makefile/include/parrot/nci.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/nci.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/nci.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/oo.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/oo.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/oo.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,

Copied: branches/include_dynpmc_makefile/include/parrot/oplib/.gitignore (from r45870, trunk/include/parrot/oplib/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/include/parrot/oplib/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/include/parrot/oplib/.gitignore)
@@ -0,0 +1,4 @@
+/*_ops.h
+/*_ops_switch.h
+/*_ops_cg*.h
+/ops.h

Modified: branches/include_dynpmc_makefile/include/parrot/packfile.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/packfile.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/packfile.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001-2009, Parrot Foundation.
+ * Copyright (C) 2001-2010, Parrot Foundation.
  */
 
 /* packfile.h
@@ -453,11 +453,12 @@
 PARROT_EXPORT
 void PackFile_add_segment(PARROT_INTERP,
     ARGMOD(PackFile_Directory *dir),
-    ARGIN(PackFile_Segment *seg))
+    ARGMOD(PackFile_Segment *seg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dir);
+        FUNC_MODIFIES(*dir)
+        FUNC_MODIFIES(*seg);
 
 PARROT_EXPORT
 void PackFile_Annotations_add_entry(PARROT_INTERP,
@@ -562,8 +563,9 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-void PackFile_destroy(PARROT_INTERP, ARGMOD_NULLOK(PackFile *pf))
+void PackFile_destroy(PARROT_INTERP, ARGMOD(PackFile *pf))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*pf);
 
 PARROT_EXPORT
@@ -808,10 +810,9 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-opcode_t * PackFile_Annotations_pack(PARROT_INTERP,
+opcode_t * PackFile_Annotations_pack(SHIM_INTERP,
     ARGIN(PackFile_Segment *seg),
     ARGMOD(opcode_t *cursor))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*cursor);
@@ -880,7 +881,8 @@
     , PARROT_ASSERT_ARG(seg) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PackFile_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pf))
 #define ASSERT_ARGS_PackFile_find_fixup_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
@@ -976,8 +978,7 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(self))
 #define ASSERT_ARGS_PackFile_Annotations_pack __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(seg) \
+       PARROT_ASSERT_ARG(seg) \
     , PARROT_ASSERT_ARG(cursor))
 #define ASSERT_ARGS_PackFile_Annotations_packed_size \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -1016,20 +1017,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/include_dynpmc_makefile/include/parrot/platform_interface.h (from r45870, trunk/include/parrot/platform_interface.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/include/parrot/platform_interface.h	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/include/parrot/pmc.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/pmc.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/pmc.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/include/parrot/runcore_api.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/runcore_api.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/runcore_api.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -83,6 +83,11 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 void enable_event_checking(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -97,10 +102,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
 void Parrot_runcore_destroy(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -118,6 +119,9 @@
 
 #define ASSERT_ARGS_disable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(lib_pmc))
 #define ASSERT_ARGS_enable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -126,9 +130,6 @@
 #define ASSERT_ARGS_Parrot_runcore_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(lib_pmc))
 #define ASSERT_ARGS_Parrot_runcore_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_runcore_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -147,9 +148,8 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-oplib_init_f get_core_op_lib_init(PARROT_INTERP,
+oplib_init_f get_core_op_lib_init(SHIM_INTERP,
     ARGIN(Parrot_runcore_t *runcore))
-        __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
@@ -186,8 +186,7 @@
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_get_core_op_lib_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore))
+       PARROT_ASSERT_ARG(runcore))
 #define ASSERT_ARGS_init_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(runcore))

Modified: branches/include_dynpmc_makefile/include/parrot/string_funcs.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/string_funcs.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/string_funcs.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,6 +1,5 @@
-#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* string_funcs.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -28,48 +27,31 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-STRING * Parrot_str_append(PARROT_INTERP,
-    ARGMOD_NULLOK(STRING *a),
-    ARGIN_NULLOK(STRING *b))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*a);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_and(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_not(PARROT_INTERP,
-    ARGIN_NULLOK(const STRING *s),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_or(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_bitwise_xor(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
-    ARGIN_NULLOK(const STRING *s2),
-    ARGOUT_NULLOK(STRING **dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    ARGIN_NULLOK(const STRING *s2))
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -85,21 +67,17 @@
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_str_change_charset(PARROT_INTERP,
     ARGMOD_NULLOK(STRING *src),
-    INTVAL charset_nr,
-    ARGOUT_NULLOK(STRING *dest))
+    INTVAL charset_nr)
         __attribute__nonnull__(1)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        FUNC_MODIFIES(*src);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING* Parrot_str_change_encoding(PARROT_INTERP,
     ARGIN_NULLOK(STRING *src),
-    INTVAL encoding_nr,
-    ARGOUT_NULLOK(STRING *dest))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*dest);
+    INTVAL encoding_nr)
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -109,12 +87,6 @@
         FUNC_MODIFIES(*s);
 
 PARROT_EXPORT
-void Parrot_str_chopn_inplace(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_compare(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
@@ -131,8 +103,7 @@
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_str_concat(PARROT_INTERP,
     ARGIN_NULLOK(STRING *a),
-    ARGIN_NULLOK(STRING *b),
-    UINTVAL Uflags)
+    ARGIN_NULLOK(STRING *b))
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
@@ -150,11 +121,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_downcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 INTVAL Parrot_str_equal(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s1),
@@ -214,7 +180,7 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_str_free_cstring(ARGIN_NULLOK(char *p));
+void Parrot_str_free_cstring(ARGFREE(char *p));
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -250,6 +216,8 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
 PARROT_EXPORT
@@ -262,12 +230,9 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-PARROT_IGNORABLE_RESULT
-INTVAL /*@alt void@*/
-Parrot_str_length(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
+PARROT_WARN_UNUSED_RESULT
+INTVAL Parrot_str_length(SHIM_INTERP, ARGIN(const STRING *s))
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -286,14 +251,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 +289,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 +303,19 @@
 
 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))
-        __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(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))
@@ -398,11 +327,8 @@
 STRING * Parrot_str_substr(PARROT_INTERP,
     ARGIN_NULLOK(STRING *src),
     INTVAL offset,
-    INTVAL length,
-    ARGOUT_NULLOK(STRING **d),
-    int replace_dest)
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*d);
+    INTVAL length)
+        __attribute__nonnull__(1);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -411,11 +337,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 +381,12 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_str_upcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
-void Parrot_str_write_COW(PARROT_INTERP, ARGMOD(STRING *s))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*s);
-
-PARROT_EXPORT
 PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 const char * Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_PURE_FUNCTION
-UINTVAL string_capacity(SHIM_INTERP, ARGIN(const STRING *s))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * string_chr(PARROT_INTERP, UINTVAL character)
@@ -496,6 +400,8 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
 
 PARROT_EXPORT
@@ -520,6 +426,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 INTVAL string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
         __attribute__nonnull__(2);
 
@@ -543,6 +450,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 +475,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 +493,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 = (\
@@ -596,8 +504,6 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_downcase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_escape __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -635,16 +541,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 +559,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 +567,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,15 +590,8 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_upcase_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_str_write_COW __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_string_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(str))
-#define ASSERT_ARGS_string_capacity __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_increment __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -727,6 +610,9 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_to_cstring_nullable __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_Parrot_str_clone __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_from_int_base __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(tc))

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

Modified: branches/include_dynpmc_makefile/include/parrot/thread.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/thread.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/thread.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -196,7 +196,7 @@
 
 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);

Modified: branches/include_dynpmc_makefile/include/parrot/vtables.h
==============================================================================
--- branches/include_dynpmc_makefile/include/parrot/vtables.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/include/parrot/vtables.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -26,10 +26,9 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-void Parrot_destroy_vtable(PARROT_INTERP, ARGMOD(VTABLE *vtable))
+void Parrot_destroy_vtable(PARROT_INTERP, ARGFREE_NOTNULL(VTABLE *vtable))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*vtable);
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 void Parrot_initialize_core_vtables(PARROT_INTERP)

Copied: branches/include_dynpmc_makefile/include/pmc/.gitignore (from r45870, trunk/include/pmc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/include/pmc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/include/pmc/.gitignore)
@@ -0,0 +1 @@
+/*.h

Copied: branches/include_dynpmc_makefile/lib/.gitignore (from r45870, trunk/lib/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/lib/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/lib/.gitignore)
@@ -0,0 +1 @@
+/DumbLink.pm

Copied: branches/include_dynpmc_makefile/lib/Parrot/.gitignore (from r45870, trunk/lib/Parrot/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/lib/Parrot/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/lib/Parrot/.gitignore)
@@ -0,0 +1,9 @@
+/PMC.pm
+/Jit.pm
+/blib
+/pm_to_blib
+/PakFile2.c
+/PakFile2.bs
+/Makefile
+/*.tmp
+/OpLib

Copied: branches/include_dynpmc_makefile/lib/Parrot/Config/.gitignore (from r45870, trunk/lib/Parrot/Config/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/lib/Parrot/Config/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/lib/Parrot/Config/.gitignore)
@@ -0,0 +1 @@
+/Generated.pm

Modified: branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Conf.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Conf.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Conf.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -99,8 +99,6 @@
 
 External Library Options:
 
-   --without-crypto     Build parrot without crypto support (libssl)
-   --without-gdbm       Build parrot without GDBM support
    --without-gettext    Build parrot without gettext support
    --without-gmp        Build parrot without GMP support
    --without-opengl     Build parrot without OpenGL support (GL/GLU/GLUT)

Modified: branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Test/Prepare.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Test/Prepare.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Configure/Options/Test/Prepare.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -78,6 +78,8 @@
                 ? qq|$secondlevel-$number|
                 : $number;
             $steps_tests_complex{$category}{$class}{$final}++;
+
+            return;
         }
     } # END wanted()
     finddepth( \&wanted, ( $steps_dir ) );

Modified: branches/include_dynpmc_makefile/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Configure/Step/List.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Configure/Step/List.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -52,10 +52,8 @@
     auto::thread
     auto::gmp
     auto::readline
-    auto::gdbm
     auto::pcre
     auto::opengl
-    auto::crypto
     auto::gettext
     auto::snprintf
     auto::perldoc
@@ -65,7 +63,6 @@
     auto::icu
     gen::config_h
     gen::core_pmcs
-    gen::crypto
     gen::opengl
     gen::makefiles
     gen::platform

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

Modified: branches/include_dynpmc_makefile/lib/Parrot/H2inc.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/H2inc.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/H2inc.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Harness/DefaultTests.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Harness/DefaultTests.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Harness/DefaultTests.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -86,6 +86,7 @@
     t/compilers/tge/*.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/include_dynpmc_makefile/lib/Parrot/Harness/Smoke.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Harness/Smoke.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Harness/Smoke.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Headerizer.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Headerizer.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Headerizer.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Manifest.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Manifest.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Manifest.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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},
@@ -241,8 +241,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/include_dynpmc_makefile/lib/Parrot/OpTrans/C.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/OpTrans/C.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/OpTrans/C.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2006, Parrot Foundation.
+# Copyright (C) 2002-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -68,7 +68,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)>

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

Copied: branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/.gitignore (from r45870, trunk/lib/Parrot/Pmc2c/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/lib/Parrot/Pmc2c/.gitignore)
@@ -0,0 +1 @@
+/PCCMETHOD_BITS.pm

Modified: branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Attribute.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Attribute.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Attribute.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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) \\

Modified: branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Dumper.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Dumper.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Dumper.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/Emitter.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Emitter.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Emitter.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/Library.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Library.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Library.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/MethodEmitter.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/MethodEmitter.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/MethodEmitter.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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...)

Modified: branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Object.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Object.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Object.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/PCCMETHOD.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PCCMETHOD.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PCCMETHOD.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
     }
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Null.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Null.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Null.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);

Modified: branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Object.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Object.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/Object.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
@@ -56,7 +56,7 @@
     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++) {
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/ParrotClass.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/ParrotClass.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/ParrotClass.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/default.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/default.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMC/default.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
@@ -570,7 +570,7 @@
         vt->base_type    = entry;
         vt->whoami       = string_make(interp, "$classname", @{[length($classname)]},
                                        "ascii", PObj_constant_FLAG|PObj_external_FLAG);
-        vt->provides_str = Parrot_str_append(interp, vt->provides_str,
+        vt->provides_str = Parrot_str_concat(interp, vt->provides_str,
             string_make(interp, "$provides", @{[length($provides)]}, "ascii",
             PObj_constant_FLAG|PObj_external_FLAG));
 
@@ -718,7 +718,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
 
@@ -887,7 +887,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 +989,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/include_dynpmc_makefile/lib/Parrot/Pmc2c/Parser.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Parser.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Parser.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/Pmc2cMain.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Pmc2cMain.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/Pmc2cMain.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Pmc2c/UtilFunctions.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/UtilFunctions.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Pmc2c/UtilFunctions.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/lib/Parrot/Vtable.pm
==============================================================================
--- branches/include_dynpmc_makefile/lib/Parrot/Vtable.pm	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/lib/Parrot/Vtable.pm	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/ports/debian/.gitignore (from r45870, trunk/ports/debian/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ports/debian/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/ports/debian/.gitignore)
@@ -0,0 +1 @@
+/

Modified: branches/include_dynpmc_makefile/ports/debian/control.in
==============================================================================
--- branches/include_dynpmc_makefile/ports/debian/control.in	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ports/debian/control.in	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

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

Copied: branches/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.patch (from r45870, trunk/ports/fedora/2.3.0/parrot.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.patch	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.spec (from r45870, trunk/ports/fedora/2.3.0/parrot.spec)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ports/fedora/2.3.0/parrot.spec	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/ports/fedora/parrot.patch
==============================================================================
--- branches/include_dynpmc_makefile/ports/fedora/parrot.patch	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/ports/fedora/parrot.spec.fedora
==============================================================================
--- branches/include_dynpmc_makefile/ports/fedora/parrot.spec.fedora	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/ports/suse/2.2.0/parrot.diff (from r45870, trunk/ports/suse/2.2.0/parrot.diff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ports/suse/2.2.0/parrot.diff	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/ports/suse/2.2.0/parrot.spec (from r45870, trunk/ports/suse/2.2.0/parrot.spec)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/ports/suse/2.2.0/parrot.spec	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/ports/suse/parrot.spec.suse
==============================================================================
--- branches/include_dynpmc_makefile/ports/suse/parrot.spec.suse	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/ports/ubuntu/control.in
==============================================================================
--- branches/include_dynpmc_makefile/ports/ubuntu/control.in	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/ports/ubuntu/control.in	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/runtime/parrot/dynext/.gitignore (from r45870, trunk/runtime/parrot/dynext/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/dynext/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/dynext/.gitignore)
@@ -0,0 +1,13 @@
+/*.dylib
+/libnci.*
+/*.bundle
+/*.so
+/*.exe
+/*.pdb
+/*.ilk
+/*.def
+/*.lib
+/*.obj
+/*.exp
+/*.dll
+/*.manifest

Copied: branches/include_dynpmc_makefile/runtime/parrot/include/.gitignore (from r45870, trunk/runtime/parrot/include/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/include/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/include/.gitignore)
@@ -0,0 +1,3 @@
+/*.pasm
+/*.pbc
+/*.fpmc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/.gitignore (from r45870, trunk/runtime/parrot/library/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/.gitignore)
@@ -0,0 +1,4 @@
+/PAST
+/*.pbc
+/config.pir
+/OpenGL_funcs.pir

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/CGI/.gitignore (from r45870, trunk/runtime/parrot/library/CGI/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/CGI/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/CGI/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Config/.gitignore (from r45870, trunk/runtime/parrot/library/Config/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Config/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Config/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Configure/.gitignore (from r45870, trunk/runtime/parrot/library/Configure/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Configure/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Configure/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Data/.gitignore (from r45870, trunk/runtime/parrot/library/Data/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Data/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Data/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Data/Dumper/.gitignore (from r45870, trunk/runtime/parrot/library/Data/Dumper/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Data/Dumper/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Data/Dumper/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Digest/.gitignore (from r45870, trunk/runtime/parrot/library/Digest/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Digest/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Digest/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/.gitignore (from r45870, trunk/runtime/parrot/library/Getopt/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Getopt/.gitignore)
@@ -0,0 +1 @@
+/Obj.pbc

Modified: branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/Obj.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/Obj.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Getopt/Obj.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/runtime/parrot/library/HTTP/Daemon.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/HTTP/Daemon.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/HTTP/Daemon.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/MIME/.gitignore (from r45870, trunk/runtime/parrot/library/MIME/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/MIME/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/MIME/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Math/.gitignore (from r45870, trunk/runtime/parrot/library/Math/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Math/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Math/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/NCI/.gitignore (from r45870, trunk/runtime/parrot/library/NCI/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/NCI/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/NCI/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/OpenGL/.gitignore (from r45870, trunk/runtime/parrot/library/OpenGL/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/OpenGL/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/OpenGL/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Modified: branches/include_dynpmc_makefile/runtime/parrot/library/P6object.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/P6object.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/P6object.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
@@ -727,7 +727,7 @@
 
 =over 4
 
-=item get_string()  (vtable method)
+=item get_string()
 
 Returns the "shortname" of the protoobject's class and parens.
 
@@ -743,7 +743,7 @@
     .return ($S0)
 .end
 
-=item defined()  (vtable method)
+=item defined()
 
 Protoobjects are always treated as being undefined.
 
@@ -754,7 +754,7 @@
 .end
 
 
-=item name()  (vtable method)
+=item name()
 
 Have protoobjects return their longname in response to a
 C<typeof_s_p> opcode.

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/PCT/.gitignore (from r45870, trunk/runtime/parrot/library/PCT/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/PCT/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/PCT/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/PGE/.gitignore (from r45870, trunk/runtime/parrot/library/PGE/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/PGE/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/PGE/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Parrot/.gitignore (from r45870, trunk/runtime/parrot/library/Parrot/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Parrot/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Parrot/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/.gitignore (from r45870, trunk/runtime/parrot/library/ProfTest/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/ProfTest/.gitignore)
@@ -0,0 +1,2 @@
+/*.pir
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/Matcher.nqp (from r45870, trunk/runtime/parrot/library/ProfTest/Matcher.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/Matcher.nqp	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/runtime/parrot/library/ProfTest/NQPProfile.nqp (from r45870, trunk/runtime/parrot/library/ProfTest/NQPProfile.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/NQPProfile.nqp	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/runtime/parrot/library/ProfTest/PIRProfile.nqp (from r45870, trunk/runtime/parrot/library/ProfTest/PIRProfile.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/PIRProfile.nqp	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/ProfTest/PIRProfile.nqp)
@@ -0,0 +1,111 @@
+
+# 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 @pprof_lines := pir::split("\n", 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::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/include_dynpmc_makefile/runtime/parrot/library/ProfTest/Want.nqp (from r45870, trunk/runtime/parrot/library/ProfTest/Want.nqp)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/ProfTest/Want.nqp	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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(%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

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Stream/.gitignore (from r45870, trunk/runtime/parrot/library/Stream/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Stream/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Stream/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Modified: branches/include_dynpmc_makefile/runtime/parrot/library/Stream/Base.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/Stream/Base.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Stream/Base.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -65,7 +65,7 @@
 
 =cut
 
-.sub close :method
+.sub close :method :nsentry
     .local pmc temp
 
     # reset source

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/String/.gitignore (from r45870, trunk/runtime/parrot/library/String/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/String/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/String/.gitignore)
@@ -0,0 +1 @@
+/Utils.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/TAP/.gitignore (from r45870, trunk/runtime/parrot/library/TAP/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/TAP/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/TAP/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

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

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/TAP/Parser.pir (from r45870, trunk/runtime/parrot/library/TAP/Parser.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/TAP/Parser.pir	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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 :init
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'skipped', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'todo', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'passed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'failed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'actual_failed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'actual_passed', $P0
+    $P0 = new 'ResizableIntegerArray'
+    setattribute self, 'todo_passed', $P0
+    $P0 = new 'ResizableStringArray'
+    setattribute self, 'parse_errors', $P0
+    $P0 = box 0
+    setattribute self, 'tests_run', $P0
+    $P0 = get_global ['TAP';'Parser'], 'LEGAL_CALLBACK'
+    setattribute self, 'ok_callbacks', $P0
+.end
+
+=item start_time
+
+=cut
+
+.sub 'start_time' :method
+    $P0 = getattribute self, 'start_time'
+    .return ($P0)
+.end
+
+=item end_time
+
+=cut
+
+.sub 'end_time' :method
+    $P0 = getattribute self, 'end_time'
+    .return ($P0)
+.end
+
+=item skipped
+
+=cut
+
+.sub 'skipped' :method :nsentry
+    $P0 = getattribute self, 'skipped'
+    .return ($P0)
+.end
+
+=item todo
+
+=cut
+
+.sub 'todo' :method :nsentry
+    $P0 = getattribute self, 'todo'
+    .return ($P0)
+.end
+
+=item passed
+
+=cut
+
+.sub 'passed' :method :nsentry
+    $P0 = getattribute self, 'passed'
+    .return ($P0)
+.end
+
+=item failed
+
+=cut
+
+.sub 'failed' :method :nsentry
+    $P0 = getattribute self, 'failed'
+    .return ($P0)
+.end
+
+=item todo_passed
+
+=cut
+
+.sub 'todo_passed' :method :nsentry
+    $P0 = getattribute self, 'todo_passed'
+    .return ($P0)
+.end
+
+=item parse_errors
+
+=cut
+
+.sub 'parse_errors' :method :nsentry
+    $P0 = getattribute self, 'parse_errors'
+    .return ($P0)
+.end
+
+=item tests_run
+
+=cut
+
+.sub 'tests_run' :method :nsentry
+    $P0 = getattribute self, 'tests_run'
+    .return ($P0)
+.end
+
+=item tests_planned
+
+=cut
+
+.sub 'tests_planned' :method :nsentry
+    $P0 = getattribute self, 'tests_planned'
+    .return ($P0)
+.end
+
+=item merge
+
+=cut
+
+.sub 'merge' :method :nsentry
+    .param int val
+    $P0 = new 'Boolean'
+    set $P0, val
+    setattribute self, 'merge', $P0
+.end
+
+=item ignore_exit
+
+=cut
+
+.sub 'ignore_exit' :method :nsentry
+    .param int val
+    $P0 = new 'Boolean'
+    set $P0, val
+    setattribute self, 'ignore_exit', $P0
+.end
+
+=item exit
+
+=cut
+
+.sub 'exit' :method :nsentry
+    $P0 = getattribute self, 'ignore_exit'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    .return (0)
+  L1:
+    $P0 = getattribute self, 'exit'
+    $I0 = 0
+    if null $P0 goto L2
+    $I0 = $P0
+  L2:
+    .return ($I0)
+.end
+
+=item has_problems
+
+=cut
+
+.sub 'has_problems' :method
+    $P0 = getattribute self, 'failed'
+    $I0 = elements $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'parse_errors'
+    $I0 = elements $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'ignore_exit'
+    if null $P0 goto L2
+    if $P0 goto L1
+  L2:
+    $P0 = getattribute self, 'exit'
+    if null $P0 goto L1
+    $I0 = $P0
+    .return ($I0)
+  L1:
+    .return ($I0)
+.end
+
+=item _add_error
+
+=cut
+
+.sub '_add_error' :method
+    .param pmc args :slurpy
+    $P0 = getattribute self, 'parse_errors'
+    $S0 = join '', args
+    $P1 = box $S0
+    push $P0, $P1
+.end
+
+=item is_good_plan
+
+=cut
+
+.sub 'is_good_plan' :method
+    $P0 = getattribute self, 'good_plan'
+    .return ($P0)
+.end
+
+=item spool
+
+=cut
+
+.sub 'spool' :method
+    .param pmc spool
+    setattribute self, 'spool', spool
+.end
+
+=item delete_spool
+
+=cut
+
+.sub 'delete_spool' :method
+    $P0 = getattribute self, 'spool'
+    null $P1
+    setattribute self, 'spool', $P1
+    .return ($P0)
+.end
+
+=item pragma
+
+=cut
+
+.sub 'pragma' :method
+    .param string name
+    .return (1)
+.end
+
+=item tap
+
+=cut
+
+.sub 'tap' :method
+    .param string tap
+    $P0 = new 'StringHandle'
+    $P0.'open'('tap', 'w')
+    print $P0, tap
+    setattribute self, 'stream', $P0
+.end
+
+=item file
+
+=cut
+
+.sub 'file' :method
+    .param string filename
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $P0.'open'(filename, 'r')
+    pop_eh
+    $S0 = readline $P0
+    $I0 = index $S0, '#!'
+    unless $I0 == 0 goto L1
+    close $P0
+    $S0 = _get_exec($S0)
+    .tailcall self.'exec'($S0, filename)
+  L1:
+    seek $P0, 0, 0
+    setattribute self, 'stream', $P0
+    .return ()
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $S0 = "Can't open '"
+    $S0 .= filename
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    ex = $S0
+    rethrow ex
+.end
+
+.include 'iglobals.pasm'
+
+.sub '_get_exec' :anon
+    .param string line
+    $S0 = chomp(line)
+    $I0 = length $S0
+    $I0 = find_not_cclass .CCLASS_WHITESPACE, $S0, 2, $I0
+    $S0 = substr $S0, $I0
+    .local string slash
+    $P0 = getinterp
+    $P1 = $P0[.IGLOBALS_CONFIG_HASH]
+    slash = $P1['slash']
+    $P0 = split "/", $S0
+    $S0 = join slash, $P0
+    .return ($S0)
+.end
+
+=item exec
+
+=cut
+
+.sub 'exec' :method
+    .param pmc cmds :slurpy
+    .local string cmd
+    cmd = join ' ', cmds
+    $P0 = getattribute self, 'merge'
+    if null $P0 goto L1
+    unless $P0 goto L1
+    cmd .= ' 2>&1'
+  L1:
+    $P0 = new 'FileHandle'
+    push_eh _handler
+    $P0.'open'(cmd, 'pr')
+    pop_eh
+    setattribute self, 'stream', $P0
+    .return ()
+  _handler:
+    .local pmc ex
+    .get_results (ex)
+    $S0 = "Can't open '"
+    $S0 .= cmd
+    $S0 .= "' ("
+    $S1 = err
+    $S0 .= $S1
+    $S0 .= ")\n"
+    ex = $S0
+    rethrow ex
+.end
+
+=item run
+
+=cut
+
+.sub 'run' :method
+    .const 'Sub' $P0 = 'next'
+    $P0 = newclosure $P0
+  L1:
+    $P1 = $P0(self)
+    unless null $P1 goto L1
+.end
+
+=item next
+
+=cut
+
+.sub 'next' :method :nsentry :lex
+    .local pmc stream, spool
+    stream = getattribute self, 'stream'
+    if null stream goto L1
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'start_time', $P0
+    .local pmc grammar, st
+    grammar = new ['TAP';'Parser';'Grammar']
+    .const 'Sub' $P0 = 'next_state'
+    capture_lex $P0
+    st = box 'INIT'
+    .lex 'state', st
+  L2:
+    $S0 = readline stream
+    if $S0 == '' goto L3
+    $S0 = chomp($S0)
+    .local pmc token
+    token = grammar.'tokenize'($S0)
+    self.'next_state'(token)
+    $S0 = token.'type'()
+    $P0 = self.'_callback_for'($S0)
+    if null $P0 goto L4
+    $P0(token)
+    goto L5
+  L4:
+    self.'_make_callback'('ELSE', token)
+  L5:
+    self.'_make_callback'('ALL', token)
+    spool = getattribute self, 'spool'
+    if null spool goto L6
+    $S0 = token
+    print spool, $S0
+    print spool, "\n"
+  L6:
+    .yield (token)
+    goto L2
+  L3:
+    close stream
+    $I0 = can stream, 'exit_status'
+    unless $I0 goto L7
+    $I0 = stream.'exit_status'()
+    unless $I0 goto L7
+    $P0 = box $I0
+    setattribute self, 'exit', $P0
+  L7:
+    self.'_finish'()
+    $I0 = self.'_make_callback'('EOF', self)
+    null $P0
+    .return ($P0)
+  L1:
+    die "no stream"
+.end
+
+.sub 'next_state' :method :lex :outer('next')
+    .param pmc token
+    .local pmc STATES, st
+    STATES = get_global ['TAP';'Parser'], 'STATES'
+    st = find_lex 'state'
+    .local string type
+    type = token.'type'()
+  REDO:
+    $I0 = STATES[st]
+    if $I0 goto L1
+    $S0 = st
+    $S0 = "Illegal state: " . $S0
+    die $S0
+  L1:
+    $P0 = STATES[st]
+    $I0 = exists $P0[type]
+    unless $I0 goto L2
+    $P1 = $P0[type]
+    $I0 = exists $P1['act']
+    unless $I0 goto L3
+    $P2 = $P1['act']
+    $P2(self, token)
+  L3:
+    $I0 = exists $P1['continue']
+    unless $I0 goto L4
+    $S0 = $P1['continue']
+    set st, $S0
+    goto REDO
+  L4:
+    $I0 = exists $P1['goto']
+    unless $I0 goto L5
+    $S0 = $P1['goto']
+    set st, $S0
+    goto L5
+  L2:
+    printerr "Unhandled token type: "
+    printerr type
+    printerr "\n"
+  L5:
+.end
+
+.sub '_make_state_table'
+    .local pmc states
+    states = new 'Hash'
+    $P0 = split ' ', 'INIT PLAN PLANNED PLANNED_AFTER_TEST GOT_PLAN UNPLANNED UNPLANNED_AFTER_TEST'
+    $P1 = split ' ', 'bailout comment plan test unknown version'
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    .local pmc st
+    st = new 'Hash'
+    states[$S0] = st
+    $P2 = iter $P1
+  L3:
+    unless $P2 goto L4
+    $S0 = shift $P2
+    $P3 = new 'Hash'
+    st[$S0] = $P3
+    goto L3
+  L4:
+    $P3 = st['version']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_version'
+    $P3['act'] = $P4
+    $P3 = st['unknown']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_unknown'
+    $P3['act'] = $P4
+    $P3 = st['plan']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_plan'
+    $P3['act'] = $P4
+    $P3 = st['test']
+    $P4 = get_hll_global ['TAP';'Parser'], '_DEFAULT_test'
+    $P3['act'] = $P4
+    goto L1
+  L2:
+
+    st = states['INIT']
+    $P0 = st['version']
+    $P1 = get_hll_global ['TAP';'Parser'], '_INIT_version'
+    $P0['act'] = $P1
+    $P0['goto'] = 'PLAN'
+    $P0 = st['plan']
+    $P0['goto'] = 'PLANNED'
+    $P0 = st['test']
+    $P0['goto'] = 'UNPLANNED'
+
+    st = states['PLAN']
+    $P0 = st['plan']
+    $P0['goto'] = 'PLANNED'
+    $P0 = st['test']
+    $P0['goto'] = 'UNPLANNED'
+
+    st = states['PLANNED']
+    $P0 = st['test']
+    $P0['goto'] = 'PLANNED_AFTER_TEST'
+    $P0 = st['plan']
+    $P1 = get_hll_global ['TAP';'Parser'], '_PLANNED_plan'
+    $P0['act'] = $P1
+
+    st = states['PLANNED_AFTER_TEST']
+    $P0 = st['test']
+    $P0['goto'] = 'PLANNED_AFTER_TEST'
+    $P0 = st['plan']
+    $P1 = get_hll_global ['TAP';'Parser'], '_no_action'
+    $P0['act'] = $P1
+    $P0['continue'] = 'PLANNED'
+
+    st = states['GOT_PLAN']
+    $P0 = st['test']
+    $P1 = get_hll_global ['TAP';'Parser'], '_GOT_PLAN_test'
+    $P0['act'] = $P1
+    $P0['continue'] = 'PLANNED'
+    $P0 = st['plan']
+    $P0['continue'] = 'PLANNED'
+
+    st = states['UNPLANNED']
+    $P0 = st['test']
+    $P0['goto'] = 'UNPLANNED_AFTER_TEST'
+    $P0 = st['plan']
+    $P0['goto'] = 'GOT_PLAN'
+
+    st = states['UNPLANNED_AFTER_TEST']
+    $P0 = st['test']
+    $P1 = get_hll_global ['TAP';'Parser'], '_no_action'
+    $P0['act'] = $P1
+    $P0['continue'] = 'UNPLANNED'
+    $P0 = st['plan']
+    $P1 = get_hll_global ['TAP';'Parser'], '_no_action'
+    $P0['act'] = $P1
+    $P0['continue'] = 'UNPLANNED'
+
+    .return (states)
+.end
+
+.sub '_no_action' :method :nsentry
+    .param pmc result
+    # nothing
+.end
+
+.sub '_DEFAULT_version' :method :nsentry
+    .param pmc result
+    self.'_add_error'('If TAP version is present it must be the first line of output')
+.end
+
+.sub '_DEFAULT_unknown' :method :nsentry
+    .param pmc result
+    $I0 = self.'pragma'('strict')
+    unless $I0 goto L1
+    $P0 = getattribute result, 'raw'
+    $S1 = $P0
+    self.'_add_error'('Unknown TAP token: "', $S1, '"')
+  L1:
+.end
+
+.sub '_DEFAULT_plan' :method :nsentry
+    .param pmc result
+    $P0 = getattribute result, 'tests_planned'
+    setattribute self, 'tests_planned', $P0
+    $P0 = getattribute result, 'plan'
+    setattribute self, 'plan', $P0
+    $I0 = result.'has_skip'()
+    unless $I0 goto L1
+    $S0 = '(no reason given)'
+    $P0 = getattribute result, 'explanation'
+    if null $P0 goto L2
+    $S0 = $P0
+  L2:
+    $P0 = box $S0
+    setattribute self, 'skip_all', $P0
+  L1:
+.end
+
+.sub '_DEFAULT_test' :method :nsentry
+    .param pmc result
+    $P0 = getattribute self, 'tests_run'
+    inc $P0
+    .local int tests_run
+    tests_run = $P0
+
+    $P0 = getattribute self, 'tests_planned'
+    if null $P0 goto L11
+    .local int tests_planned
+    tests_planned = $P0
+    unless tests_run > tests_planned goto L11
+    $P0 = new 'Boolean'
+    set $P0, 1
+    setattribute result, 'unplanned', $P0
+  L11:
+
+    $P0 = getattribute result, 'test_num'
+    if null $P0 goto L21
+    .local int number
+    number = $P0
+    unless number != tests_run goto L22
+    $S1 = number
+    $S2 = tests_run
+    self.'_add_error'("Tests out of sequence.  Found (", $S1, ") but expected (", $S2, ")")
+    goto L22
+  L21:
+    number = tests_run
+    $P0 = box number
+    setattribute result, 'test_num', $P0
+  L22:
+
+    $I0 = result.'has_todo'()
+    unless $I0 goto L31
+    $P0 = getattribute self, 'todo'
+    push $P0, number
+  L31:
+    $I0 = result.'todo_passed'()
+    unless $I0 goto L32
+    $P0 = getattribute self, 'todo_passed'
+    push $P0, number
+  L32:
+    $I0 = result.'has_skip'()
+    unless $I0 goto L33
+    $P0 = getattribute self, 'skipped'
+    push $P0, number
+  L33:
+    $I0 = result.'is_ok'()
+    unless $I0 goto L34
+    $P0 = getattribute self, 'passed'
+    push $P0, number
+    goto L35
+  L34:
+    $P0 = getattribute self, 'failed'
+    push $P0, number
+  L35:
+    $I0 = result.'is_actual_ok'()
+    unless $I0 goto L36
+    $P0 = getattribute self, 'actual_passed'
+    push $P0, number
+    goto L37
+  L36:
+    $P0 = getattribute self, 'actual_failed'
+    push $P0, number
+  L37:
+.end
+
+.sub '_INIT_version' :method :nsentry
+    .param pmc result
+    $P0 = getattribute result, 'version'
+    setattribute self, 'version', $P0
+.end
+
+.sub '_PLANNED_plan' :method :nsentry
+    .param pmc result
+    self.'_add_error'('More than one plan found in TAP output')
+.end
+
+.sub '_GOT_PLAN_test' :method :nsentry
+    .param pmc result
+    $P0 = getattribute self, 'plan'
+    $S1 = $P0
+    self.'_add_error'("Plan (", $S1, ") must be at the beginning or end of the TAP output")
+    self.'is_good_plan'(0)
+.end
+
+.sub '_finish' :method
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'end_time', $P0
+
+    $P0 = getattribute self, 'plan'
+    unless null $P0 goto L1
+    self.'_add_error'('No plan found in TAP output')
+    goto L2
+  L1:
+    $P0 = getattribute self, 'good_plan'
+    unless null $P0 goto L2
+    $P0 = box 1
+    setattribute self, 'good_plan', $P0
+  L2:
+
+    .local int tests_run, tests_planned
+    $P0 = getattribute self, 'tests_run'
+    tests_run = $P0
+    tests_planned = 0
+    $P0 = getattribute self, 'tests_planned'
+    if null $P0 goto L3
+    tests_planned = $P0
+  L3:
+    unless tests_run != tests_planned goto L4
+    $P0 = box 0
+    setattribute self, 'good_plan', $P0
+    if tests_planned == 0 goto L4
+    $S1 = tests_planned
+    $S2 = tests_run
+    self.'_add_error'("Bad plan.  You planned ", $S1, " tests but ran ", $S2, ".")
+  L4:
+
+    $P0 = getattribute self, 'good_plan'
+    unless null $P0 goto L5
+    $P0 = box 0
+    setattribute self, 'good_plan', $P0
+  L5:
+.end
+
+=back
+
+=head3 Class TAP;Parser;Aggregator
+
+C<TAP;Parser;Aggregator> collects parser objects and allows
+reporting/querying their aggregate results.
+
+=over 4
+
+=cut
+
+.namespace ['TAP';'Parser';'Aggregator']
+
+.sub '' :init :load :anon
+    $P0 = newclass ['TAP';'Parser';'Aggregator']
+    $P0.'add_attribute'('parser_for')
+    $P0.'add_attribute'('parse_order')
+    $P0.'add_attribute'('start_time')
+    $P0.'add_attribute'('end_time')
+    $P0.'add_attribute'('failed')
+    $P0.'add_attribute'('parse_errors')
+    $P0.'add_attribute'('passed')
+    $P0.'add_attribute'('skipped')
+    $P0.'add_attribute'('todo')
+    $P0.'add_attribute'('todo_passed')
+    $P0.'add_attribute'('total')
+    $P0.'add_attribute'('planned')
+    $P0.'add_attribute'('exit')
+    $P0.'add_attribute'('description_for_failed')
+    $P0.'add_attribute'('description_for_parse_errors')
+    $P0.'add_attribute'('description_for_passed')
+    $P0.'add_attribute'('description_for_skipped')
+    $P0.'add_attribute'('description_for_todo')
+    $P0.'add_attribute'('description_for_todo_passed')
+    $P0.'add_attribute'('description_for_planned')
+    $P0.'add_attribute'('description_for_exit')
+
+    $P0 = new 'Hash'
+    $P1 = get_hll_global ['TAP';'Parser'], 'failed'
+    $P0['failed'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'parse_errors'
+    $P0['parse_errors'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'passed'
+    $P0['passed'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'skipped'
+    $P0['skipped'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'todo'
+    $P0['todo'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'todo_passed'
+    $P0['todo_passed'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'tests_run'
+    $P0['total'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'tests_planned'
+    $P0['planned'] = $P1
+    $P1 = get_hll_global ['TAP';'Parser'], 'exit'
+    $P0['exit'] = $P1
+    set_global ['TAP';'Parser';'Aggregator'], 'SUMMARY_METHOD_FOR', $P0
+.end
+
+.sub 'init' :vtable :method
+    $P0 = new 'Hash'
+    setattribute self, 'parser_for', $P0
+    $P0 = new 'ResizableStringArray'
+    setattribute self, 'parse_order', $P0
+    .local pmc SUMMARY_METHOD_FOR
+    SUMMARY_METHOD_FOR = get_global ['TAP';'Parser';'Aggregator'], 'SUMMARY_METHOD_FOR'
+    $P0 = iter SUMMARY_METHOD_FOR
+  L1:
+    unless $P0 goto L2
+    $S0 = shift $P0
+    $P1 = box 0
+    setattribute self, $S0, $P1
+    if $S0 == 'total' goto L1
+    $S0 = 'description_for_' . $S0
+    $P1 = new 'ResizableStringArray'
+    setattribute self, $S0, $P1
+    goto L1
+  L2:
+.end
+
+=item add
+
+=cut
+
+.sub 'add' :method
+    .param string description
+    .param pmc parser
+    .local pmc parser_for
+    parser_for = getattribute self, 'parser_for'
+    $I0 = exists parser_for[description]
+    unless $I0 goto L1
+    $S0 = "You already have a parser for (" . description
+    $S0 .= "). Perhaps you have run the same test twice.\n"
+    die $S0
+  L1:
+    parser_for[description] = parser
+    .local pmc parse_order
+    parse_order = getattribute self, 'parse_order'
+    push parse_order, description
+    .local pmc SUMMARY_METHOD_FOR
+    SUMMARY_METHOD_FOR = get_global ['TAP';'Parser';'Aggregator'], 'SUMMARY_METHOD_FOR'
+    $P0 = iter SUMMARY_METHOD_FOR
+  L2:
+    unless $P0 goto L3
+    .local string summary
+    summary = shift $P0
+    .local pmc method
+    method = SUMMARY_METHOD_FOR[summary]
+    .local int count
+    count = method(parser)
+    unless count > 0 goto L2
+    $P1 = getattribute self, summary
+    $P1 += count
+    if summary == 'total' goto L2
+    $S0 = 'description_for_' . summary
+    $P1 = getattribute self, $S0
+    push $P1, description
+    goto L2
+  L3:
+.end
+
+=item parsers
+
+=cut
+
+.sub 'parsers' :method
+    .param string desc
+    $P0 = getattribute self, 'parser_for'
+    $P1 = $P0[desc]
+    .return ($P1)
+.end
+
+=item total
+
+=cut
+
+.sub 'total' :method
+    $P0 = getattribute self, 'total'
+    $I0 = $P0
+    .return ($I0)
+.end
+
+=item passed
+
+=cut
+
+.sub 'passed' :method
+    $P0 = getattribute self, 'passed'
+    $I0 = $P0
+    .return ($I0)
+.end
+
+=item descriptions
+
+=cut
+
+.sub 'descriptions' :method
+    $P0 = getattribute self, 'parse_order'
+    .return ($P0)
+.end
+
+=item start
+
+=cut
+
+.sub 'start' :method
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'start_time', $P0
+.end
+
+=item stop
+
+=cut
+
+.sub 'stop' :method
+    $N0 = time
+    $P0 = box $N0
+    setattribute self, 'end_time', $P0
+.end
+
+=item start_time
+
+=cut
+
+.sub 'start_time' :method
+    $P0= getattribute self, 'start_time'
+    .return ($P0)
+.end
+
+=item en_time
+
+=cut
+
+.sub 'end_time' :method
+    $P0= getattribute self, 'end_time'
+    .return ($P0)
+.end
+
+=item elapsed
+
+=cut
+
+.sub 'elapsed' :method
+    $P0 = getattribute self, 'end_time'
+    if null $P0 goto L1
+    $N2 = $P0
+    $P0 = getattribute self, 'start_time'
+    if null $P0 goto L1
+    $N1 = $P0
+    $N0 = $N2 - $N1
+    .return ($N0)
+  L1:
+    die "Can't call elapsed without first calling start and then stop"
+.end
+
+=item elapsed_timestr
+
+=cut
+
+.sub 'elapsed_timestr' :method
+    $N0 = self.'elapsed'()
+    $P0 = new 'FixedPMCArray'
+    $P0 = 1
+    $P0[0] = $N0
+    $S0 = sprintf "%.3f wallclock secs", $P0
+    .return ($S0)
+.end
+
+=item has_problems
+
+=cut
+
+.sub 'has_problems' :method
+    $P0 = getattribute self, 'todo_passed'
+    $I0 = $P0
+    if $I0 goto L1
+    $I0 = self.'has_errors'()
+  L1:
+    .return ($I0)
+.end
+
+=item has_errors
+
+=cut
+
+.sub 'has_errors' :method
+    $P0 = getattribute self, 'failed'
+    $I0 = $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'parse_errors'
+    $I0 = $P0
+    if $I0 goto L1
+    $P0 = getattribute self, 'exit'
+    $I0 = $P0
+  L1:
+    .return ($I0)
+.end
+
+=item get_status
+
+=cut
+
+.sub 'get_status' :method
+    .local int total, passed
+    $P0 = getattribute self, 'total'
+    total = $P0
+    $P0 = getattribute self, 'passed'
+    passed = $P0
+    $I0 = self.'has_errors'()
+    if $I0 goto L1
+    if total == passed goto L2
+  L1:
+    .return ('FAIL')
+  L2:
+    unless total goto L3
+    .return ('PASS')
+  L3:
+    .return ('NOTESTS')
+.end
+
+=item all_passed
+
+=cut
+
+.sub 'all_passed' :method
+    .local int total
+    $P0 = getattribute self, 'total'
+    total = $P0
+    unless total goto L1
+    $P0 = getattribute self, 'passed'
+    $I0 = $P0
+    unless total == $I0 goto L1
+    $I0 = self.'has_errors'()
+    $I0 = not $I0
+    .return ($I0)
+  L1:
+    .return (0)
+.end
+
+=back
+
+=head1 AUTHOR
+
+Francois Perrad
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Tcl/.gitignore (from r45870, trunk/runtime/parrot/library/Tcl/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Tcl/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Tcl/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Test/.gitignore (from r45870, trunk/runtime/parrot/library/Test/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Test/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Test/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/.gitignore (from r45870, trunk/runtime/parrot/library/Test/Builder/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/Test/Builder/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Modified: branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/Test.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/Test.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/Test/Builder/Test.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 )

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/YAML/.gitignore (from r45870, trunk/runtime/parrot/library/YAML/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/YAML/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/YAML/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/YAML/Dumper/.gitignore (from r45870, trunk/runtime/parrot/library/YAML/Dumper/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/YAML/Dumper/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/YAML/Dumper/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/runtime/parrot/library/YAML/Parser/.gitignore (from r45870, trunk/runtime/parrot/library/YAML/Parser/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/YAML/Parser/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/runtime/parrot/library/YAML/Parser/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Modified: branches/include_dynpmc_makefile/runtime/parrot/library/distutils.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/distutils.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/distutils.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -96,14 +96,6 @@
 
 =over 4
 
-=item prove (in step 'test')
-
-core module Test-Harness
-
-=item prove --archive (in step 'smoke')
-
-module TAP-Harness-Archive
-
 =item pod2html
 
 core module Pod-Html
@@ -120,9 +112,11 @@
 
 =item glob (in step 'manifest' & 'sdist')
 
-PGE::Glob
+PGE/Glob.pbc
 
-Limitation: currently, OS.'readdir' is dummy with MSVC.
+=item tempdir (in step 'smoke')
+
+Math/Rand.pbc
 
 =back
 
@@ -132,7 +126,7 @@
 
 =item smoke
 
-curl
+tar, gzip, curl
 
 =item sdist_gztar
 
@@ -199,6 +193,7 @@
 =cut
 
 .sub '__onload' :load :init :anon
+    load_bytecode 'osutils.pbc'
     $P0 = new 'Hash'
     set_global '%step', $P0
 
@@ -214,12 +209,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 +238,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'
@@ -386,7 +387,7 @@
 
 =cut
 
-.sub 'run_step'
+.sub 'run_step' :multi()
     .param string name
     .param pmc kv :slurpy :named
     $P0 = get_global '%step'
@@ -405,6 +406,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 +547,8 @@
 
 .sub 'build_pbc_pir'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -558,13 +567,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 +616,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 +636,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 +649,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 +676,8 @@
 
 .sub 'build_pir_tge'
     .param pmc hash
+    .local pmc jobs
+    jobs = new 'ResizableStringArray'
     $P0 = iter hash
   L1:
     unless $P0 goto L2
@@ -657,6 +686,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 +697,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 +728,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 +738,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 +751,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 +765,8 @@
 
 the value is the NQP pathname
 
+=item pir_nqp_flags
+
 =cut
 
 .sub '_build_pir_nqp_rx' :anon
@@ -735,17 +774,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 +798,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 +879,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 +922,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 +984,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 +994,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 +1038,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 +1050,7 @@
     .local string bin, pbc
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = "installable_" . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $I0 = newer($S1, pbc)
     if $I0 goto L1
     .local string cmd
@@ -938,12 +1058,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
@@ -1217,7 +1354,7 @@
   L2:
 .end
 
-.sub '__build_dynpmc' :anon
+.sub '__build_dynpmc'
     .param string src
     .param string cflags
     .local pmc config
@@ -1234,32 +1371,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 +1406,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 +1413,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 +1577,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 +1621,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 +1740,11 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = $S0 . exe
+    $S1 = _mk_path_exe(pbc, exe)
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . '.c'
+    $S1 = _mk_path_exe(pbc, '.c')
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . obj
+    $S1 = _mk_path_exe(pbc, obj)
     unlink($S1, 1 :named('verbose'))
     goto L1
   L2:
@@ -1646,15 +1773,11 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . '.c'
+    $S1 = _mk_path_exe(pbc, '.c')
     unlink($S1, 1 :named('verbose'))
-    $S1 = $S0 . obj
+    $S1 = _mk_path_exe(pbc, obj)
     unlink($S1, 1 :named('verbose'))
     goto L1
   L2:
@@ -1917,65 +2040,13 @@
 
 =head3 Step test
 
-If t/harness exists, run : t/harness
-
-If parrot-tapir exists, run it with t/*.t
-
-Else run : prove t/*.t
-
-=cut
-
-.sub '_test' :anon
-    .param pmc kv :slurpy :named
-    run_step('build', kv :flat :named)
-    $I0 = file_exists('t/harness')
-    unless $I0 goto L1
-    .tailcall _test_harness(kv :flat :named)
-  L1:
-    $S0 = get_executable('parrot-tapir')
-    $I0 = file_exists($S0)
-    unless $I0 goto L2
-    .tailcall _test_tapir($S0, kv :flat :named)
-  L2:
-    .tailcall _test_prove(kv :flat :named)
-.end
-
 =over 4
 
-=item harness_exec
-
-the default value is with perl
-
-=item harness_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
+=item prove_exec / test_exec
 
-option --exec of prove
+option --exec of prove / tapir
 
-=item prove_files
+=item prove_files / test_files
 
 the default value is "t/*.t"
 
@@ -1983,111 +2054,78 @@
 
 =cut
 
-.sub '_test_prove' :anon
+.sub '_test' :anon
     .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = "prove"
-    $I0 = exists kv['prove_exec']
-    unless $I0 goto L1
-    $S0 = get_prove_version()
-    $S0 = substr $S0, 0, 1
-    unless $S0 == "3" goto L3
-    cmd .= " --exec="
-    goto L4
-  L3:
-    cmd .= " --perl="
-  L4:
-    $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
-  L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
-.end
-
-.sub 'get_prove_version' :anon
-    $P0 = open 'prove --version', 'rp'
-    $S0 = $P0.'readline'()
-    $P0.'close'()
-    $I1 = index $S0, "Test::Harness v"
-    $I1 += 15
-    $I2 = index $S0, " ", $I1
-    $I3 = $I2 - $I1
-    $S0 = substr $S0, $I1, $I3
-    .return ($S0)
-.end
+    run_step('build', kv :flat :named)
 
-.sub '_test_tapir' :anon
-    .param string tapir
-    .param pmc kv :slurpy :named
-    .local string cmd
-    cmd = tapir
+    load_bytecode 'TAP/Harness.pbc'
+    .local pmc opts, files, harness, aggregate
+    opts = new 'Hash'
     $I0 = exists kv['prove_exec']
     unless $I0 goto L1
-    cmd .= " --exec="
     $S0 = kv['prove_exec']
-    $I0 = index $S0, ' '
-    if $I0 < 0 goto L2
-    cmd .= "\""
-  L2:
-    cmd .= $S0
-    if $I0 < 0 goto L1
-    cmd .= "\""
+    opts['exec'] = $S0
   L1:
-    cmd .= " "
-    $S0 = get_value('prove_files', "t/*.t" :named('default'), kv :flat :named)
-    cmd .= $S0
-    system(cmd, 1 :named('verbose'))
+    $I0 = exists kv['test_exec']
+    unless $I0 goto L2
+    $S0 = kv['test_exec']
+    opts['exec'] = $S0
+  L2:
+    $S0 = "t/*.t"
+    $I0 = exists kv['prove_files']
+    unless $I0 goto L3
+    $S0 = kv['prove_files']
+  L3:
+    $I0 = exists kv['test_files']
+    unless $I0 goto L4
+    $S0 = kv['test_files']
+  L4:
+    $P0 = glob($S0)
+    files = sort_strings($P0)
+    harness = new ['TAP';'Harness']
+    harness.'process_args'(opts)
+    aggregate = harness.'runtests'(files)
+    $I0 = aggregate.'has_errors'()
+    unless $I0 goto L5
+    die "test fails"
+  L5:
 .end
 
-=head3 Step smoke
-
-Unless t/harness exists, run : prove --archive t/*.t
-
-=cut
-
-.sub '_smoke' :anon
-    .param pmc kv :slurpy :named
-    run_step('build', kv :flat :named)
-    $I0 = file_exists('t/harness')
-    if $I0 goto L1
-    $S0 = get_prove_version()
-    $S0 = substr $S0, 0, 1
-    unless $S0 == "3" goto L2
-    .tailcall _smoke_prove(kv :flat :named)
-  L2:
-    die "Require Test::Harness v3.x (option --archive)."
+.sub 'sort_strings'
+    .param pmc array
+    # currently, FixedStringArray hasn't the method sort.
+    # see TT #1356
+    $I0 = elements array
+    $P0 = new 'FixedPMCArray'
+    set $P0, $I0
+    $I0 = 0
+    $P1 = iter array
   L1:
-    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 +2149,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
 
-    $I0 = exists kv['smolder_url']
-    unless $I0 goto L5
+.sub 'smolder_post' :anon
+    .param string archive
+    .param pmc kv :slurpy :named
+    .local string cmd
+    $I0 = exists kv['smolder_url']
+    unless $I0 goto L1
     .local pmc config
     config = get_config()
     cmd = "curl -F architecture="
@@ -2170,57 +2219,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_dynext ???
+=item inst_data
+
+array of pathname or a single pathname
+
+=item inst_dynext (useful ?)
 
 array of pathname or a single pathname
 
@@ -2303,6 +2344,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 +2374,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 +2407,12 @@
     $I0 = does array, 'array'
     if $I0 goto L1
     $S0 = array
-    $S2 = $S1 . $S0
+    $S3 = $S0
+    $S2 = $S1 . $S3
+    $I0 = index $S0, "build/"
+    unless $I0 == 0 goto L0
+    $S3 = substr $S0, 6
+  L0:
     files[$S2] = $S0
     goto L2
   L1:
@@ -2347,7 +2420,12 @@
   L3:
     unless $P0 goto L2
     $S0 = shift $P0
-    $S2 = $S1 . $S0
+    $S3 = $S0
+    $I0 = index $S0, "build/"
+    unless $I0 == 0 goto L4
+    $S3 = substr $S0, 6
+  L4:
+    $S2 = $S1 . $S3
     files[$S2] = $S0
     goto L3
   L2:
@@ -2386,11 +2464,7 @@
     unless $P0 goto L2
     bin = shift $P0
     pbc = hash[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $S2 = bindir . '/'
     $S2 .= bin
     $S2 .= exe
@@ -2679,7 +2753,7 @@
         "requires"     : {
             "fetch"    : ["%s"],
             "build"    : [],
-            "test"     : ["perl5"],
+            "test"     : [],
             "install"  : [],
             "runtime"  : []
         }
@@ -2735,10 +2809,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 +2845,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 +2856,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
@@ -3176,7 +3250,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 +3493,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 +3983,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 +4005,7 @@
     unless $P1 goto L1
     bin = shift $P1
     pbc = $P0[bin]
-    $I0 = length pbc
-    $I0 -= 4
-    $S0 = substr pbc, 0, $I0
-    $S1 = 'installable_' . $S0
-    $S1 .= exe
+    $S1 = _mk_path_installable(pbc, exe)
     $S2 = bin . exe
     $I0 = newer($S2, $S1)
     if $I0 goto L2
@@ -4234,6 +4304,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 +4676,6 @@
 
 =back
 
-=head2 OS Utilities
-
-=over 4
-
-=item system
-
-=cut
-
-.sub 'system'
-    .param string cmd
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    .param int ignore_error     :named('ignore_error') :optional
-    .param int has_ignore_error :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    say cmd
-  L1:
-    $I0 = spawnw cmd
-    unless $I0 goto L2
-    unless has_ignore_error goto L3
-    if ignore_error goto L2
-  L3:
-    $S0 = "exit status: "
-    $S1 = $I0
-    $S0 .= $S1
-    $S0 .= "\ncommand: "
-    $S0 .= cmd
-    $S0 .= "\n"
-    die $S0
-  L2:
-    .return ($I0)
-.end
-
-.include 'stat.pasm'
-
-.sub 'file_exists'
-    .param string filename
-    $I0 = stat filename, .STAT_EXISTS
-    .return ($I0)
-.end
-
-=item newer
-
-=cut
-
-.sub 'newer' :multi(string, pmc)
-    .param string target
-    .param pmc depends
-    $I0 = does depends, 'array'
-    if $I0 goto L1
-    $S0 = depends
-    .tailcall newer(target, $S0)
-  L1:
-    $I0 = stat target, .STAT_EXISTS
-    unless $I0 goto L2
-    $I0 = stat target, .STAT_FILESIZE
-    unless $I0 goto L2
-    goto L3
-  L2:
-    .return (0)
-  L3:
-    $I0 = stat target, .STAT_MODIFYTIME
-    $P0 = iter depends
-  L4:
-    unless $P0 goto L5
-    $S0 = shift $P0
-    if $S0 == '' goto L4
-    $I1 = stat $S0, .STAT_MODIFYTIME
-    if $I1 < $I0 goto L4
-    .return (0)
-  L5:
-    .return (1)
-.end
-
-.sub 'newer' :multi(string, string)
-    .param string target
-    .param string depend
-    $I0 = stat target, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat target, .STAT_FILESIZE
-    unless $I0 goto L1
-    goto L2
-  L1:
-    .return (0)
-  L2:
-    $I1 = stat target, .STAT_MODIFYTIME
-    $I2 = stat depend, .STAT_MODIFYTIME
-    $I0 = $I1 > $I2
-    .return ($I0)
-.end
-
-.sub 'newer' :multi(pmc, pmc)
-    .param pmc target
-    .param pmc depend
-    $S0 = target
-    .tailcall newer($S0, depend)
-.end
-
-=item mkpath
-
-=cut
-
-.sub 'mkpath'
-    .param string pathname
-    .param int verbose          :named('verbose') :optional
-    $I1 = 1
-  L1:
-    $I1 = index pathname, '/', $I1
-    if $I1 < 0 goto L2
-    $S0 = substr pathname, 0, $I1
-    inc $I1
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
-    mkdir($S0, verbose :named('verbose'))
-    goto L1
-  L2:
-    $I0 = stat pathname, .STAT_EXISTS
-    if $I0 goto L3
-    mkdir(pathname, verbose :named('verbose'))
-  L3:
-.end
-
-=item mkdir
-
-=cut
-
-.sub 'mkdir'
-    .param string dirname
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "mkdir "
-    say dirname
-  L1:
-    $P0 = new 'OS'
-    $I1 = 0o775
-    push_eh _handler
-    $P0.'mkdir'(dirname, $I1)
-    pop_eh
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't mkdir '"
-    $S0 .= dirname
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item install
-
-=cut
-
-.sub 'install'
-    .param string src
-    .param string dst
-    .param int exe              :named('exe') :optional
-    .param int has_exe          :opt_flag
-    .param int verbose          :named('verbose') :optional
-    # mkpath
-    $I1 = 1
-  L1:
-    $I1 = index dst, '/', $I1
-    if $I1 < 0 goto L2
-    $S0 = substr dst, 0, $I1
-    inc $I1
-    $I0 = stat $S0, .STAT_EXISTS
-    if $I0 goto L1
-    mkdir($S0, verbose :named('verbose'))
-    goto L1
-  L2:
-    $I0 = newer(dst, src)
-    if $I0 goto L3
-    cp(src, dst, verbose :named('verbose'))
-    unless has_exe goto L3
-    unless exe goto L3
-    $P0 = getinterp
-    $P0 = $P0[.IGLOBALS_CONFIG_HASH]
-    $I0 = $P0['cygwin']
-    if $I0 goto L4
-    $I0 = $P0['hpux']
-    if $I0 goto L4
-    goto L3
-  L4:
-    chmod(dst, 0o755, verbose :named('verbose'))
-  L3:
-.end
-
-=item cp
-
-=cut
-
-.sub 'cp'
-    .param string src
-    .param string dst
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "cp "
-    print src
-    print " "
-    say dst
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler1
-    $S0 = $P0.'readall'(src)
-    pop_eh
-    push_eh _handler2
-    $P0.'open'(dst, 'w')
-    pop_eh
-    $P0.'puts'($S0)
-    $P0.'close'()
-    .return ()
-  _handler1:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= src
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-  _handler2:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= dst
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item chmod
-
-=cut
-
-.sub 'chmod'
-    .param string filename
-    .param int mode
-    .param int verbose          :named('verbose') :optional
-    # see TT #1322
-    $P0 = get_config()
-    .local string cmd
-    cmd = $P0['perl']
-    cmd .= " -MExtUtils::Command -e ExtUtils::Command::chmod "
-    $P1 = new 'FixedIntegerArray'
-    set $P1, 1
-    $P1[0] = mode
-    $S0 = sprintf '0%o', $P1
-    cmd .= $S0
-    cmd .= " "
-    cmd .= filename
-    system(cmd, verbose :named('verbose'))
-.end
-
-=item unlink
-
-=cut
-
-.sub 'unlink' :multi(string)
-    .param string filename
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    $I0 = stat filename, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat filename, .STAT_ISREG
-    unless $I0 goto L1
-    unless has_verbose goto L2
-    unless verbose goto L2
-    print "unlink "
-    say filename
-  L2:
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'rm'(filename)
-    pop_eh
-  L1:
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't remove '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-.sub 'unlink' :multi(pmc)
-    .param pmc list
-    .param int verbose          :named('verbose') :optional
-    $I0 = does list, 'array'
-    if $I0 goto L1
-    $S0 = list
-    unlink($S0, verbose :named('verbose'))
-    goto L2
-  L1:
-    $P0 = iter list
-  L3:
-    unless $P0 goto L2
-    $S0 = shift $P0
-    unlink($S0, verbose :named('verbose'))
-    goto L3
-  L2:
-.end
-
-=item rmtree
-
-=cut
-
-.sub 'rmtree'
-    .param string path
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    $I0 = stat path, .STAT_EXISTS
-    unless $I0 goto L1
-    $I0 = stat path, .STAT_ISDIR
-    unless $I0 goto L1
-    unless has_verbose goto L2
-    unless verbose goto L2
-    print "rmtree "
-    say path
-  L2:
-    new $P0, 'OS'
-    $P1 = $P0.'readdir'(path)
-    push_eh _handler
-  L3:
-    unless $P1 goto L4
-    $S0 = shift $P1
-    if $S0 == '.' goto L3
-    if $S0 == '..' goto L3
-    $S1 = path . '/'
-    $S1 .= $S0
-    $I0 = stat $S1, .STAT_ISDIR
-    unless $I0 goto L5
-    rmtree($S1)
-    goto L3
-  L5:
-    $P0.'rm'($S1)
-    goto L3
-  L4:
-    push_eh _handler
-    $S1 = path
-    $P0.'rm'($S1)
-    pop_eh
-  L1:
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't remove '"
-    $S0 .= $S1
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item basename
-
-=cut
-
-.sub 'basename'
-    .param string path
-    $I0 = 0
-  L1:
-    $I1 = index path, '/', $I0
-    if $I1 < 0 goto L2
-    $I0 = $I1 + 1
-    goto L1
-  L2:
-    $S0 = substr path, $I0
-    .return ($S0)
-.end
-
-=item dirname
-
-=cut
-
-.sub 'dirname'
-    .param string path
-    unless path goto L3
-    $I0 = 0
-  L1:
-    $I1 = index path, '/', $I0
-    if $I1 < 0 goto L2
-    $I0 = $I1 + 1
-    goto L1
-  L2:
-    dec $I0
-    unless $I0 > 0 goto L3
-    $S0 = substr path, 0, $I0
-    .return ($S0)
-  L3:
-    .return ('.')
-.end
-
-=item cwd
-
-=cut
-
-.sub 'cwd'
-    new $P0, 'OS'
-    $S0 = $P0.'cwd'()
-    $P0 = split "\\", $S0
-    $S0 = join "/", $P0
-    .return ($S0)
-.end
-
-=item chdir
-
-=cut
-
-.sub 'chdir'
-    .param string dirname
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "cd "
-    say dirname
-  L1:
-    new $P0, 'OS'
-    push_eh _handler
-    $P0.'chdir'(dirname)
-    pop_eh
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't chdir '"
-    $S0 .= dirname
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item chomp
-
-=cut
-
-.include 'cclass.pasm'
-
-.sub 'chomp'
-    .param string str
-    $I0 = index str, "\r"
-    if $I0 < 0 goto L1
-    str = substr str, 0, $I0
-  L1:
-    $I1 = index str, "\n"
-    if $I1 < 0 goto L2
-    str = substr str, 0, $I1
-  L2:
-    .return (str)
-.end
-
-=item glob
-
-=cut
-
-.sub 'glob'
-    .param string patterns
-    $P0 = new 'ResizableStringArray'
-    $P1 = split ' ', patterns
-  L1:
-    unless $P1 goto L2
-    .local string pattern
-    pattern = shift $P1
-    $I0 = index pattern, '*'
-    unless $I0 < 0 goto L3
-    $I0 = index pattern, '?'
-    unless $I0 < 0 goto L3
-    $I0 = index pattern, '['
-    unless $I0 < 0 goto L3
-    $I0 = stat pattern, .STAT_EXISTS
-    unless $I0 goto L1
-    push $P0, pattern
-    goto L1
-  L3:
-    .local pmc matcher
-    load_bytecode 'PGE/Glob.pbc'
-    $P2 = compreg 'PGE::Glob'
-    matcher = $P2.'compile'(pattern)
-    $S0 = dirname(pattern)
-    $P3 = glob($S0)
-    $P4 = new 'OS'
-  L4:
-    unless $P3 goto L1
-    .local string dir
-    dir = shift $P3
-    $I0 = stat dir, .STAT_ISDIR
-    unless $I0 goto L4
-    $S0 = basename(dir)
-    $P5 = $P4.'readdir'(dir)
-  L5:
-    unless $P5 goto L4
-    $S0 = shift $P5
-    if $S0 == '.' goto L5
-    if $S0 == '..' goto L5
-    if dir == '.' goto L6
-    $S1 = dir . '/'
-    $S0 = $S1 . $S0
-  L6:
-    $P6 = matcher($S0)
-    unless $P6 goto L5
-    push $P0, $S0
-    goto L5
-  L2:
-    .return ($P0)
-.end
-
-=item getenv
-
-=cut
-
-.sub 'getenv'
-    .param string name
-    new $P0, 'Env'
-    $S0 = $P0[name]
-    .return ($S0)
-.end
-
-=item setenv
-
-=cut
-
-.sub 'setenv'
-    .param string name
-    .param string value
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "setenv "
-    print name
-    print " = "
-    say value
-  L1:
-    new $P0, 'Env'
-    $P0[name] = value
-.end
-
-=item slurp
-
-=cut
-
-.sub 'slurp'
-    .param string filename
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $S0 = $P0.'readall'(filename)
-    pop_eh
-    .return ($S0)
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item spew
-
-=cut
-
-.sub 'spew'
-    .param string filename
-    .param string content
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "creat "
-    say filename
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $P0.'open'(filename, 'w')
-    pop_eh
-    $P0.'puts'(content)
-    $P0.'close'()
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=item append
-
-=cut
-
-.sub 'append'
-    .param string filename
-    .param string content
-    .param int verbose          :named('verbose') :optional
-    .param int has_verbose      :opt_flag
-    unless has_verbose goto L1
-    unless verbose goto L1
-    print "append "
-    say filename
-  L1:
-    $P0 = new 'FileHandle'
-    push_eh _handler
-    $P0.'open'(filename, 'a')
-    pop_eh
-    $P0.'puts'(content)
-    $P0.'close'()
-    .return ()
-  _handler:
-    .local pmc e
-    .get_results (e)
-    $S0 = "Can't open '"
-    $S0 .= filename
-    $S0 .= "' ("
-    $S1 = err
-    $S0 .= $S1
-    $S0 .= ")\n"
-    e = $S0
-    rethrow e
-.end
-
-=back
-
 =head1 AUTHOR
 
 Francois Perrad

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

Modified: branches/include_dynpmc_makefile/runtime/parrot/library/pcore.pir
==============================================================================
--- branches/include_dynpmc_makefile/runtime/parrot/library/pcore.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/runtime/parrot/library/pcore.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/src/.gitignore (from r45870, trunk/src/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/.gitignore)
@@ -0,0 +1,24 @@
+/*.o
+/*.obj
+/*.str
+/asmfun.*
+/core_pmcs.c
+/exec_cpu.c
+/exec_dep.c
+/exec_dep.h
+/extra_nci_thunks.c
+/extend_vtable.c
+/fingerprint.c
+/glut_callbacks.c
+/glut_nci_thunks.nci
+/glut_nci_thunks.c
+/install_config.c
+/jit_cpu.c
+/jit_defs.c
+/jit_emit.h
+/null_config.c
+/platform.c
+/platform_asm.s
+/parrot_config.c
+/parrot_config.h
+/revision.c

Copied: branches/include_dynpmc_makefile/src/atomic/.gitignore (from r45870, trunk/src/atomic/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/atomic/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/atomic/.gitignore)
@@ -0,0 +1,2 @@
+/*.gcda
+/*.o

Modified: branches/include_dynpmc_makefile/src/byteorder.c
==============================================================================
--- branches/include_dynpmc_makefile/src/byteorder.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/byteorder.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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.

Copied: branches/include_dynpmc_makefile/src/call/.gitignore (from r45870, trunk/src/call/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/call/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/call/.gitignore)
@@ -0,0 +1,3 @@
+/*.str
+/*.obj
+/*.o

Modified: branches/include_dynpmc_makefile/src/call/args.c
==============================================================================
--- branches/include_dynpmc_makefile/src/call/args.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/call/args.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,9 +364,7 @@
             {
                 STRING *string_value;
                 if (constant)
-                    /* ensure that callees don't modify constant caller strings */
-                    string_value = Parrot_str_new_COW(interp,
-                            Parrot_pcc_get_string_constant(interp, ctx, raw_index));
+                    string_value = Parrot_pcc_get_string_constant(interp, ctx, raw_index);
                 else
                     string_value = CTX_REG_STR(ctx, raw_index);
 
@@ -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))
 {
@@ -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,25 @@
     }
 
     /* First iterate over positional args and positional parameters. */
-    arg_index = 0;
-    param_index = 0;
-    positional_args = VTABLE_elements(interp, call_object);
+    arg_index       = 0;
+    param_index     = 0;
+    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,21 +838,23 @@
         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));
+                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++;
             break; /* Terminate the positional arg loop. */
@@ -1103,11 +867,13 @@
             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);
+                   ?  accessor->string_constant(interp, arg_info, param_index)
+                   : *accessor->string(interp, arg_info, param_index);
+
                 named_count++;
                 param_index++;
                 if (param_index >= param_count)
@@ -1121,10 +887,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 +898,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;
             }
 
@@ -1194,9 +960,11 @@
                 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. */
@@ -1206,8 +974,8 @@
 
     /* 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 +985,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 +997,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,8 +1013,9 @@
             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. */
@@ -1252,12 +1023,13 @@
                     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++;
@@ -1270,12 +1042,14 @@
         }
 
         /* 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. */
@@ -1288,7 +1062,8 @@
             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++;
@@ -1297,23 +1072,23 @@
                 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;
                 }
 
@@ -1333,8 +1108,8 @@
                 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];
 
@@ -1344,13 +1119,15 @@
                     }
                 }
             }
-            /* 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);
             }
         }
 
@@ -1367,23 +1144,27 @@
             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. */
@@ -1403,6 +1184,7 @@
     }
 }
 
+
 /*
 
 =item C<static void assign_default_param_value(PARROT_INTERP, INTVAL
@@ -1417,7 +1199,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 +1224,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 +1242,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 +1258,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 +1287,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,832 +1332,156 @@
         (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");
-            }
-
-            /* 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)>
@@ -2396,20 +1501,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 +1512,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 +1585,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 +1768,7 @@
 */
 
 PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static PMC*
 clone_key_arg(PARROT_INTERP, ARGIN(PMC *key))
 {
@@ -2805,384 +1793,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/include_dynpmc_makefile/src/call/context.c
==============================================================================
--- branches/include_dynpmc_makefile/src/call/context.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/call/context.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -315,7 +315,6 @@
     if (!PMC_IS_NULL(ctx->current_sub))
         return;
 
-    ctx->results_signature = NULL;
     ctx->lex_pad           = PMCNULL;
     ctx->outer_ctx         = NULL;
     ctx->current_cont      = NULL;

Modified: branches/include_dynpmc_makefile/src/call/context_accessors.c
==============================================================================
--- branches/include_dynpmc_makefile/src/call/context_accessors.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/call/context_accessors.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -471,40 +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
@@ -746,6 +712,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 +723,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 +734,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 +745,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/include_dynpmc_makefile/src/call/ops.c
==============================================================================
--- branches/include_dynpmc_makefile/src/call/ops.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/call/ops.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/call/pcc.c
==============================================================================
--- branches/include_dynpmc_makefile/src/call/pcc.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/call/pcc.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
@@ -314,8 +362,9 @@
         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/include_dynpmc_makefile/src/debug.c
==============================================================================
--- branches/include_dynpmc_makefile/src/debug.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/debug.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1314,8 +1314,9 @@
     cond_argleft = condition_regtype(command);
 
     /* get the register number */
-    auxcmd = ++command;
-    get_uint(&command, 0);
+    auxcmd     = ++command;
+    reg_number = get_uint(&command, 0);
+
     if (auxcmd == command) {
         Parrot_io_eprintf(interp->pdb->debugger, "Invalid register\n");
             return NULL;
@@ -2198,7 +2199,14 @@
             *(fill++) = '"';
             break;
           default:
-            *(fill++) = *string;
+            /* Hide non-ascii chars that may come from utf8 or latin-1
+             * strings in constant strings.
+             * Workaround for TT #1557
+             */
+            if ((unsigned char)*string > 127)
+                *(fill++) = '?';
+            else
+                *(fill++) = *string;
             break;
         }
     }

Modified: branches/include_dynpmc_makefile/src/dynext.c
==============================================================================
--- branches/include_dynpmc_makefile/src/dynext.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/dynext.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
 
 */

Copied: branches/include_dynpmc_makefile/src/dynoplibs/.gitignore (from r45870, trunk/src/dynoplibs/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/dynoplibs/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/dynoplibs/.gitignore)
@@ -0,0 +1,14 @@
+/*.c
+/*.h
+/*.so
+/*.bundle
+/*.o
+/*.obj
+/*.dll
+/*.pdb
+/*.ilk
+/*.lib
+/*.exp
+/*.manifest
+/Defines.mak
+/Rules.mak

Copied: branches/include_dynpmc_makefile/src/dynpmc/.gitignore (from r45870, trunk/src/dynpmc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/dynpmc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/dynpmc/.gitignore)
@@ -0,0 +1,25 @@
+/*.bundle
+/*.c
+/*.dump
+/*.dylib
+/*.h
+/*.so
+/Makefile
+/*.o
+/*.exe
+/*.pdb
+/*.ilk
+/*.def
+/*.lib
+/*.obj
+/*.exp
+/*.dll
+/*.manifest
+/md2.pmc
+/md4.pmc
+/md5.pmc
+/ripemd160.pmc
+/sha.pmc
+/sha1.pmc
+/sha256.pmc
+/sha512.pmc

Deleted: branches/include_dynpmc_makefile/src/dynpmc/gdbmhash.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/dynpmc/gdbmhash.pmc	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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:
- */

Modified: branches/include_dynpmc_makefile/src/dynpmc/rational.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/dynpmc/rational.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/dynpmc/rational.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/embed.c
==============================================================================
--- branches/include_dynpmc_makefile/src/embed.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/embed.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
 
@@ -586,7 +586,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 +618,7 @@
 
 /*
 
-=item C<static PMC* setup_argv(PARROT_INTERP, int argc, char **argv)>
+=item C<static PMC* setup_argv(PARROT_INTERP, int argc, const char **argv)>
 
 Creates and returns C<ARGS> array PMC.
 
@@ -628,7 +628,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 static PMC*
-setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
+setup_argv(PARROT_INTERP, int argc, ARGIN(const char **argv))
 {
     ASSERT_ARGS(setup_argv)
     PMC   * const userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
@@ -702,7 +702,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;
@@ -739,16 +739,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 +758,7 @@
 
 PARROT_EXPORT
 void
-Parrot_runcode(PARROT_INTERP, int argc, ARGIN(char **argv))
+Parrot_runcode(PARROT_INTERP, int argc, ARGIN(const char **argv))
 {
     PMC *userargv, *main_sub;
 
@@ -803,7 +803,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 +814,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;
 
@@ -1105,7 +1105,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/include_dynpmc_makefile/src/exceptions.c
==============================================================================
--- branches/include_dynpmc_makefile/src/exceptions.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/exceptions.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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)
 {
@@ -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/include_dynpmc_makefile/src/exit.c
==============================================================================
--- branches/include_dynpmc_makefile/src/exit.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/exit.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/extend.c
==============================================================================
--- branches/include_dynpmc_makefile/src/extend.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/extend.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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)>

Copied: branches/include_dynpmc_makefile/src/gc/.gitignore (from r45870, trunk/src/gc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/gc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/gc/.gitignore)
@@ -0,0 +1,17 @@
+/*.bundle
+/*.c
+/*.dump
+/*.dylib
+/*.h
+/*.so
+/Makefile
+/*.o
+/*.exe
+/*.pdb
+/*.ilk
+/*.def
+/*.lib
+/*.obj
+/*.exp
+/*.dll
+/*.manifest

Modified: branches/include_dynpmc_makefile/src/gc/alloc_resources.c
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/alloc_resources.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/alloc_resources.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,80 @@
 
 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));
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char * move_one_buffer(PARROT_INTERP,
+    ARGMOD(Buffer *old_buf),
+    ARGMOD(char *new_pool_ptr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        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 +153,7 @@
 #define ASSERT_ARGS_check_fixed_size_obj_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_check_memory_system __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_check_var_size_obj_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_debug_print_buf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -145,9 +163,18 @@
        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_move_one_buffer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , 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 +182,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 +193,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 +205,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 +256,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.
 
@@ -270,8 +296,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,7 +339,7 @@
              * Mark the block as big block (it has just one item)
              * And don't set big blocks as the top_block.
              */
-            alloc_new_block(interp, mem_pools, size, pool, "compact failed");
+            alloc_new_block(mem_pools, size, pool, "compact failed");
 
             mem_pools->mem_allocs_since_last_collect++;
 
@@ -333,10 +360,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 +374,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 +420,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 +432,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)
@@ -429,49 +455,9 @@
     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
-
     /* 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 +482,7 @@
             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
-
-                    /* 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);
-                    }
-                }
+                cur_spot = move_one_buffer(interp, b, cur_spot);
                 b = (Buffer *)((char *)b + object_size);
             }
         }
@@ -593,38 +496,228 @@
             (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);
 
-    mem_pools->memory_collected += (new_block->top - new_block->start);
+    free_old_mem_blocks(mem_pools, pool, new_block, total_size);
 
-    /* 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;
+    --mem_pools->gc_sweep_block_level;
+}
 
-        PARROT_ASSERT(new_block == pool->top_block);
+/*
 
-        while (cur_block) {
-            Memory_Block * const next_block = cur_block->prev;
+=item C<static UINTVAL pad_pool_size(const Variable_Size_Pool *pool)>
 
-            /* Note that we don't have it any more */
-            mem_pools->memory_allocated -= cur_block->size;
+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.
 
-            /* 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;
+Moving the live bit into the buffer thus also solves this
+problem easily.
+
+=cut
+
+*/
+
+PARROT_CANNOT_RETURN_NULL
+static UINTVAL
+pad_pool_size(ARGIN(const Variable_Size_Pool *pool))
+{
+    ASSERT_ARGS(pad_pool_size)
+    const Memory_Block *cur_block = pool->top_block;
+
+    UINTVAL total_size = 0;
+
+    while (cur_block) {
+        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
+
+    return total_size;
+}
+
+/*
+
+=item C<static char * move_one_buffer(PARROT_INTERP, 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, ARGMOD(Buffer *old_buf), ARGMOD(char *new_pool_ptr))
+{
+    ASSERT_ARGS(move_one_buffer)
+    /* ! (on_free_list | constant | external | sysmem) */
+    if (Buffer_buflen(old_buf) && PObj_is_movable_TESTALL(old_buf)) {
+        INTVAL *ref_count = NULL;
+        ptrdiff_t offset = 0;
+#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)) {
+            ref_count = Buffer_bufrefcountptr(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 (PObj_COW_TEST(old_buf)
+        && (ref_count && *ref_count & 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 */
+            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(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);
+
+            if (PObj_is_COWable_TEST(old_buf)) {
+                INTVAL * const new_ref_count = ((INTVAL*) new_pool_ptr) - 1;
+                *new_ref_count        = 2;
+            }
+
+            /* Copy our memory to the new pool */
+            memcpy(new_pool_ptr, Buffer_bufstart(old_buf),
+                                 Buffer_buflen(old_buf));
+
+            /* If we're COW */
+            if (PObj_COW_TEST(old_buf)) {
+                PARROT_ASSERT(PObj_is_COWable_TEST(old_buf));
+
+                /* Let the old buffer know how to find us */
+                *((Buffer **)Buffer_bufstart(old_buf)) = old_buf;
+
+                /* No guarantees that our data is still COW, so
+                 * assume not, and let the above code fix-up */
+                PObj_COW_CLEAR(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 */
+                if (ref_count)
+                    *ref_count |= Buffer_moved_FLAG;
+            }
 
-        /* Set our new pool as the only pool */
-        new_block->prev       = NULL;
-        pool->total_allocated = total_size;
+            Buffer_bufstart(old_buf) = new_pool_ptr;
+
+            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 *cur_block = new_block->prev;
+
+    PARROT_ASSERT(new_block == pool->top_block);
+
+    while (cur_block) {
+        Memory_Block * const next_block = cur_block->prev;
+
+        /* 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;
     }
 
+    /* Set our new pool as the only pool */
+    new_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;
 }
 
 /*
@@ -632,7 +725,7 @@
 =item C<char * aligned_mem(const Buffer *buffer, char *mem)>
 
 Returns a pointer to the aligned allocated storage for Buffer C<buffer>,
-which might not be the same as the pointer to C<buffeR> because of
+which might not be the same as the pointer to C<buffer> because of
 memory alignment.
 
 =cut
@@ -642,23 +735,11 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 char *
-aligned_mem(ARGIN(const Buffer *buffer), ARGIN(char *mem))
+aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
 {
     ASSERT_ARGS(aligned_mem)
-#if 0
-    This code causing assert in compact_pool. Looks like STRINGs have
-    aligned flag set, but allocated less memory.
-    See C<aligned_string_size>.
-    if (PObj_is_COWable_TEST(buffer))
-        mem += sizeof (void*);
-    if (PObj_aligned_TEST(buffer))
-        mem = (char*)(((unsigned long)(mem + BUFFER_ALIGN_1)) &
-                BUFFER_ALIGN_MASK);
-    else
-        mem = (char*)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
-#endif
-    mem += sizeof (void*);
-    mem = (char*)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
+    mem += sizeof (void *);
+    mem  = (char *)(((unsigned long)(mem + WORD_ALIGN_1)) & WORD_ALIGN_MASK);
 
     return mem;
 }
@@ -680,8 +761,9 @@
 aligned_string_size(size_t len)
 {
     ASSERT_ARGS(aligned_string_size)
-    len += sizeof (void*);
-    len = (len + WORD_ALIGN_1) & WORD_ALIGN_MASK;
+
+    len += sizeof (void *);
+    len  = (len + WORD_ALIGN_1) & WORD_ALIGN_MASK;
     return len;
 }
 
@@ -703,10 +785,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 +807,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 +819,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 +878,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 +888,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;
@@ -822,7 +901,7 @@
     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];
+        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 +909,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 +918,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 +936,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 +990,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 +999,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 +1079,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 +1092,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;
@@ -1076,7 +1156,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 +1182,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 +1205,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 +1231,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 +1249,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 +1261,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 +1271,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 +1283,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 +1323,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 +1337,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 +1351,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 +1390,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 +1401,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;
@@ -1359,10 +1437,6 @@
 
 F<src/gc/memory.c>.
 
-=head1 HISTORY
-
-Initial version by Dan on 2001.10.2.
-
 =cut
 
 */

Modified: branches/include_dynpmc_makefile/src/gc/api.c
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/api.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/api.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -205,7 +205,7 @@
 
 PARROT_EXPORT
 void
-Parrot_gc_mark_STRING_alive_fun(PARROT_INTERP, ARGMOD_NULLOK(STRING *obj))
+Parrot_gc_mark_STRING_alive_fun(SHIM_INTERP, ARGMOD_NULLOK(STRING *obj))
 {
     ASSERT_ARGS(Parrot_gc_mark_STRING_alive_fun)
     if (!STRING_IS_NULL(obj)) {
@@ -252,14 +252,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 +286,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);
 }
 
@@ -384,7 +374,7 @@
 */
 
 void
-Parrot_gc_free_pmc_sync(PARROT_INTERP, ARGMOD(PMC *p))
+Parrot_gc_free_pmc_sync(SHIM_INTERP, ARGMOD(PMC *p))
 {
     ASSERT_ARGS(Parrot_gc_free_pmc_sync)
 
@@ -796,7 +786,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/include_dynpmc_makefile/src/gc/gc_inf.c
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/gc_inf.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/gc_inf.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/gc/gc_ms.c
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/gc_ms.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/gc_ms.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,13 @@
 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_CAN_RETURN_NULL
 static PMC* gc_ms_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
@@ -100,12 +99,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 +114,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 +170,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 +202,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)
@@ -220,11 +216,9 @@
         __attribute__nonnull__(1);
 
 #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 +230,9 @@
 #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_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 +251,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 +288,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,8 +301,7 @@
     , 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 = (\
@@ -506,8 +493,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 {
@@ -674,7 +661,7 @@
             ? interp->mem_pools->constant_string_header_pool
             : interp->mem_pools->string_header_pool;
 
-    return (STRING*)pool->get_free_object(interp, interp->mem_pools, pool);
+    return (STRING *)pool->get_free_object(interp, interp->mem_pools, pool);
 }
 
 
@@ -799,9 +786,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 +796,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 +805,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;
@@ -849,18 +834,13 @@
     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));
+
+    Buffer_buflen(buffer)   = new_size - sizeof (void *);
 }
 
 /*
@@ -888,9 +868,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;
 
@@ -910,7 +888,7 @@
     &&  (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;
     }
 
@@ -971,10 +949,10 @@
 
     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 *);
 }
 
 /*
@@ -1021,7 +999,7 @@
     &&  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;
     }
 
@@ -1042,7 +1020,7 @@
     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 */
@@ -1095,7 +1073,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 +1095,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 +1110,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 +1132,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 +1147,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 +1161,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 +1308,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,16 +1347,13 @@
     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);
@@ -1381,6 +1364,11 @@
 
         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) {
@@ -1438,18 +1426,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;
@@ -1566,11 +1546,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 +1570,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,8 +1579,7 @@
 */
 
 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;
@@ -1617,8 +1595,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,8 +1604,7 @@
 */
 
 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;

Modified: branches/include_dynpmc_makefile/src/gc/gc_private.h
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/gc_private.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/gc_private.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -175,7 +175,7 @@
 
 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 +314,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,76 +328,77 @@
 /* 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),
+PMC_Attribute_Pool * Parrot_gc_get_attribute_pool(SHIM_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
     size_t attrib_size)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
 PARROT_CANNOT_RETURN_NULL
 void * Parrot_gc_get_attributes_from_pool(PARROT_INTERP,
@@ -407,34 +407,34 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(* pool);
 
-void Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools),
+void Parrot_gc_initialize_fixed_size_pools(SHIM_INTERP,
+    ARGMOD(Memory_Pools *mem_pools),
     size_t init_num_pools)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
-void Parrot_gc_run_init(PARROT_INTERP,
-    ARGIN(Memory_Pools * const mem_pools))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+void Parrot_gc_run_init(SHIM_INTERP, ARGMOD(Memory_Pools *mem_pools))
+        __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 +451,25 @@
     , 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))
+       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))
+       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(mem_pools))
 #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,8 +486,7 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-char * aligned_mem(ARGIN(const Buffer *buffer), ARGIN(char *mem))
-        __attribute__nonnull__(1)
+char * aligned_mem(SHIM(const Buffer *buffer), ARGIN(char *mem))
         __attribute__nonnull__(2);
 
 PARROT_CONST_FUNCTION
@@ -509,27 +502,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,27 +535,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))
+       PARROT_ASSERT_ARG(mem))
 #define ASSERT_ARGS_aligned_string_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_check_buffer_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pobj) \
@@ -571,8 +566,7 @@
     , PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_initialize_var_size_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_mem_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -586,8 +580,7 @@
     , PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_destroy_memory_pools \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(mem_pools))
+       PARROT_ASSERT_ARG(mem_pools))
 #define ASSERT_ARGS_Parrot_gc_merge_memory_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest_interp) \
     , PARROT_ASSERT_ARG(dest_arena) \

Modified: branches/include_dynpmc_makefile/src/gc/mark_sweep.c
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/mark_sweep.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/mark_sweep.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,23 @@
 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);
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*mem_pools);
 
-static void Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP,
+static void Parrot_gc_allocate_new_attributes_arena(
     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);
+PARROT_MALLOC
+static PMC_Attribute_Pool * Parrot_gc_create_attrib_pool(size_t attrib_idx);
 
 #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) \
@@ -107,10 +104,8 @@
     , 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))
+       PARROT_ASSERT_ARG(pool))
+#define ASSERT_ARGS_Parrot_gc_create_attrib_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -119,7 +114,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 +125,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 +136,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 +167,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 +251,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 +263,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)
@@ -329,8 +323,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 +333,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 +354,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,9 +364,7 @@
 */
 
 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)
 
@@ -427,7 +417,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;
@@ -457,7 +447,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))
 {
@@ -490,8 +480,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 +492,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 +585,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 +599,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 +653,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 +666,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,7 +697,7 @@
 
 static void
 free_buffer(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
+        SHIM(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
         ARGMOD(Buffer *b))
 {
@@ -731,8 +719,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 +734,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 +765,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 +780,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 +814,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 +855,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;
 
@@ -922,24 +909,24 @@
 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)>
+=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<void Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP, Memory_Pools *
-const mem_pools, size_t init_num_pools)>
+=item C<void Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP, Memory_Pools
+*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)>
+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(PARROT_INTERP,
-size_t attrib_idx)>
+=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>.
 
@@ -969,12 +956,12 @@
             pool->newfree = NULL;
     }
     else {
-        Parrot_gc_allocate_new_attributes_arena(interp, pool);
+        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(interp, pool);
+        Parrot_gc_allocate_new_attributes_arena(pool);
     item            = pool->free_list;
     pool->free_list = item->next;
 #endif
@@ -985,7 +972,7 @@
 
 
 static void
-Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool *pool))
+Parrot_gc_allocate_new_attributes_arena(ARGMOD(PMC_Attribute_Pool *pool))
 {
     ASSERT_ARGS(Parrot_gc_allocate_new_attributes_arena)
     PMC_Attribute_Free_List *next;
@@ -1021,8 +1008,8 @@
 }
 
 void
-Parrot_gc_initialize_fixed_size_pools(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+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)
@@ -1039,8 +1026,8 @@
 
 PARROT_CANNOT_RETURN_NULL
 PMC_Attribute_Pool *
-Parrot_gc_get_attribute_pool(PARROT_INTERP,
-        ARGIN(Memory_Pools * const mem_pools),
+Parrot_gc_get_attribute_pool(SHIM_INTERP,
+        ARGMOD(Memory_Pools *mem_pools),
         size_t attrib_size)
 {
     ASSERT_ARGS(Parrot_gc_get_attribute_pool)
@@ -1063,9 +1050,9 @@
     }
 
     if (!pools[idx]) {
-        PMC_Attribute_Pool * const pool = Parrot_gc_create_attrib_pool(interp, 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(interp, pool);
+        Parrot_gc_allocate_new_attributes_arena(pool);
         pools[idx] = pool;
     }
 
@@ -1073,8 +1060,9 @@
 }
 
 PARROT_CANNOT_RETURN_NULL
+PARROT_MALLOC
 static PMC_Attribute_Pool *
-Parrot_gc_create_attrib_pool(PARROT_INTERP, size_t attrib_idx)
+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 *);

Modified: branches/include_dynpmc_makefile/src/gc/system.c
==============================================================================
--- branches/include_dynpmc_makefile/src/gc/system.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/gc/system.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,8 +271,7 @@
 
 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;
@@ -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;
+        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;
@@ -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++) {
         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/include_dynpmc_makefile/src/global.c
==============================================================================
--- branches/include_dynpmc_makefile/src/global.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/global.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/global_setup.c
==============================================================================
--- branches/include_dynpmc_makefile/src/global_setup.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/global_setup.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/hash.c
==============================================================================
--- branches/include_dynpmc_makefile/src/hash.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/hash.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +640,7 @@
 */
 
 static void
-hash_freeze(PARROT_INTERP, ARGIN(const Hash * const hash), ARGMOD(PMC *info))
+hash_freeze(PARROT_INTERP, ARGIN(const Hash *hash), ARGMOD(PMC *info))
 {
     ASSERT_ARGS(hash_freeze)
     size_t           i;
@@ -630,11 +649,14 @@
         HashBucket * const b = hash->bs+i;
 
         switch (hash->key_type) {
+          case Hash_key_type_int:
+            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+            break;
           case Hash_key_type_STRING:
             VTABLE_push_string(interp, info, (STRING *)b->key);
             break;
-          case Hash_key_type_int:
-            VTABLE_push_integer(interp, info, (INTVAL)b->key);
+          case Hash_key_type_PMC:
+            VTABLE_push_pmc(interp, info, (PMC *)b->key);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -643,12 +665,15 @@
         }
 
         switch (hash->entry_type) {
-          case enum_hash_pmc:
-            VTABLE_push_pmc(interp, info, (PMC *)b->value);
-            break;
           case enum_hash_int:
             VTABLE_push_integer(interp, info, (INTVAL)b->value);
             break;
+          case enum_hash_string:
+            VTABLE_push_string(interp, info, (STRING *)b->value);
+            break;
+          case enum_hash_pmc:
+            VTABLE_push_pmc(interp, info, (PMC *)b->value);
+            break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "unimplemented value type");
@@ -728,13 +753,13 @@
     ASSERT_ARGS(expand_hash)
     HashBucket  **old_bi, **new_bi;
     HashBucket   *bs, *b, *new_mem;
-    HashBucket   *old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
+    HashBucket * const old_offset = (HashBucket *)((char *)hash + sizeof (Hash));
 
     void * const  old_mem    = hash->bs;
     const UINTVAL old_size   = hash->mask + 1;
     const UINTVAL new_size   = old_size << 1;
     const UINTVAL old_nb     = N_BUCKETS(old_size);
-    size_t        offset, i, new_loc;
+    size_t        offset, i;
 
     /*
        allocate some less buckets
@@ -792,8 +817,9 @@
      * as expand_hash is only called for that case).
      */
     if (offset) {
-        for (i = 0; i < old_size; ++i) {
-            HashBucket **next_p = new_bi + i;
+        size_t j;
+        for (j = 0; j < old_size; ++j) {
+            HashBucket **next_p = new_bi + j;
             while (*next_p) {
                 *next_p = (HashBucket *)((char *)*next_p + offset);
                 b       = *next_p;
@@ -805,11 +831,11 @@
     /* recalc bucket index */
     for (i = 0; i < old_size; ++i) {
         HashBucket **next_p = new_bi + i;
-        while (*next_p) {
-            b = *next_p;
+
+        while ((b = *next_p) != NULL) {
             /* rehash the bucket */
-            new_loc = (hash->hash_val)(interp, b->key, hash->seed) &
-                (new_size - 1);
+            const size_t new_loc =
+                (hash->hash_val)(interp, b->key, hash->seed) & (new_size - 1);
 
             if (i != new_loc) {
                 *next_p         = b->next;
@@ -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);
@@ -1204,7 +1227,7 @@
         UINTVAL        i;
 
         for (i = 0; i < entries; i++) {
-            HashBucket *bucket = hash->bs + 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) {
@@ -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/include_dynpmc_makefile/src/hll.c
==============================================================================
--- branches/include_dynpmc_makefile/src/hll.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/hll.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -88,7 +88,8 @@
 
     PMC *entry_id;
 
-    PMC * const entry = Parrot_pmc_new_constant(interp, enum_class_FixedPMCArray);
+    PMC * const entry = Parrot_pmc_new_constant_init_int(interp,
+            enum_class_FixedPMCArray, e_HLL_MAX);
 
     if (entry_name && !STRING_IS_EMPTY(entry_name)) {
         VTABLE_set_pmc_keyed_str(interp, hll_info, entry_name, entry);
@@ -96,8 +97,6 @@
     else
         VTABLE_push_pmc(interp, hll_info, entry);
 
-    VTABLE_set_integer_native(interp, entry, e_HLL_MAX);
-
     entry_id = Parrot_pmc_new_constant(interp, enum_class_Integer);
     VTABLE_set_integer_native(interp, entry_id, id);
     VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_id, entry_id);
@@ -272,15 +271,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);
     }
@@ -519,11 +521,11 @@
         if (PMC_IS_NULL(ns_hash) ||
                 ns_hash->vtable->base_type == enum_class_Undef)
         {
-            STRING * const hll_name = Parrot_get_HLL_name(interp, hll_id);
+            STRING * hll_name = Parrot_get_HLL_name(interp, hll_id);
             if (!hll_name)
                 continue;
 
-            Parrot_str_downcase_inplace(interp, hll_name);
+            hll_name = Parrot_str_downcase(interp, hll_name);
 
             /* XXX as in Parrot_register_HLL() this needs to be fixed to use
              * the correct type of namespace. It's relatively easy to do that

Copied: branches/include_dynpmc_makefile/src/interp/.gitignore (from r45870, trunk/src/interp/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/interp/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/interp/.gitignore)
@@ -0,0 +1,2 @@
+/*.str
+/*.o

Modified: branches/include_dynpmc_makefile/src/interp/inter_create.c
==============================================================================
--- branches/include_dynpmc_makefile/src/interp/inter_create.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/interp/inter_create.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -131,7 +131,11 @@
         interp->parent_interpreter = parent;
     else {
         interp->parent_interpreter = NULL;
+
+#if PARROT_CATCH_NULL
         PMCNULL                    = NULL;
+#endif
+
         /*
          * we need a global mutex to protect the interpreter array
          */

Modified: branches/include_dynpmc_makefile/src/interp/inter_misc.c
==============================================================================
--- branches/include_dynpmc_makefile/src/interp/inter_misc.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/interp/inter_misc.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -131,17 +131,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,
@@ -284,9 +283,6 @@
       case CURRENT_CONT:
         {
             PMC * const cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
-            if (!PMC_IS_NULL(cont) && cont->vtable->base_type ==
-                    enum_class_RetContinuation)
-                return VTABLE_clone(interp, cont);
             return cont;
         }
       case CURRENT_OBJECT:
@@ -323,15 +319,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,9 +334,10 @@
 
             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] != '/'

Copied: branches/include_dynpmc_makefile/src/io/.gitignore (from r45870, trunk/src/io/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/io/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/io/.gitignore)
@@ -0,0 +1,3 @@
+/*.o
+/*.obj
+/*.str

Modified: branches/include_dynpmc_makefile/src/io/api.c
==============================================================================
--- branches/include_dynpmc_makefile/src/io/api.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/io/api.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -179,9 +179,8 @@
 {
     ASSERT_ARGS(Parrot_io_fdopen)
     PMC *new_filehandle;
-    INTVAL flags;
+    const INTVAL flags = Parrot_io_parse_open_flags(interp, sflags);
 
-    flags = Parrot_io_parse_open_flags(interp, sflags);
     if (!flags)
         return PMCNULL;
 
@@ -349,7 +348,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot read from a closed or non-readable filehandle");
 
-        result = Parrot_io_make_string(interp, &result, length);
+        result = Parrot_str_new_noinit(interp, enum_stringrep_one, length);
         result->bufused = length;
 
         if (Parrot_io_is_encoding(interp, pmc, CONST_STRING(interp, "utf8")))
@@ -367,7 +366,7 @@
                 "Cannot read from a closed filehandle");
 
         if (length == 0)
-            result = Parrot_str_copy(interp, string_orig);
+            result = string_orig;
         else {
             INTVAL read_length = length;
             const INTVAL orig_length = Parrot_str_byte_length(interp, string_orig);
@@ -378,8 +377,7 @@
             if (offset + read_length > orig_length)
                 read_length = orig_length - offset;
 
-            result = Parrot_str_substr(interp, string_orig, offset,
-                    read_length, NULL, 0);
+            result = Parrot_str_substr(interp, string_orig, offset, read_length);
             SETATTR_StringHandle_read_offset(interp, pmc, offset + read_length);
         }
     }
@@ -437,8 +435,7 @@
         else
             read_length = newline_pos - offset + 1; /* +1 to include the newline */
 
-        result = Parrot_str_substr(interp, result, offset,
-                read_length, NULL, 0);
+        result = Parrot_str_substr(interp, result, offset, read_length);
         SETATTR_StringHandle_read_offset(interp, pmc, newline_pos + 1);
     }
     else
@@ -904,7 +901,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/include_dynpmc_makefile/src/io/buffer.c
==============================================================================
--- branches/include_dynpmc_makefile/src/io/buffer.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/io/buffer.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -228,14 +228,13 @@
 Parrot_io_fill_readbuf(PARROT_INTERP, ARGMOD(PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_fill_readbuf)
-    size_t   got;
-    STRING   fake;
-    STRING  *s    = &fake;
     PIOOFF_T pos  = Parrot_io_get_file_position(interp, filehandle);
-
-    Buffer_bufstart(s) = Parrot_io_get_buffer_start(interp, filehandle);
-    fake.bufused       = Parrot_io_get_buffer_size(interp, filehandle);
-    got                = PIO_READ(interp, filehandle, &s);
+    char    *buf  = (char *) Parrot_io_get_buffer_start(interp, filehandle);
+    size_t   size = Parrot_io_get_buffer_size(interp, filehandle);
+    STRING  *s    = Parrot_str_new_init(interp, buf, size,
+                        PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
+                        PObj_external_FLAG);
+    size_t   got  = PIO_READ(interp, filehandle, &s);
 
     /* buffer-filling does not change fileposition */
     Parrot_io_set_file_position(interp, filehandle, pos);
@@ -267,9 +266,10 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 size_t
 Parrot_io_read_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle),
-              ARGIN(STRING **buf))
+              ARGMOD(STRING **buf))
 {
     ASSERT_ARGS(Parrot_io_read_buffer)
     unsigned char *out_buf, *buffer_start, *buffer_next, *buffer_end;
@@ -292,17 +292,11 @@
     if (Parrot_io_get_flags(interp, filehandle) & PIO_F_LINEBUF)
         return Parrot_io_readline_buffer(interp, filehandle, buf);
 
-    if (*buf == NULL) {
-        *buf = Parrot_gc_new_string_header(interp, 0);
-        (*buf)->bufused = len = 2048;
-    }
-
-    s   = *buf;
-    len = s->bufused;
-
-    if (!s->strstart)
-        Parrot_gc_allocate_string_storage(interp, s, len);
+    if (*buf == NULL)
+        *buf = Parrot_str_new_noinit(interp, enum_stringrep_one, 2048);
 
+    s       = *buf;
+    len     = s->bufused;
     out_buf = (unsigned char *)s->strstart;
 
     /* read Data from buffer */
@@ -357,11 +351,6 @@
         }
 
         got = Parrot_io_fill_readbuf(interp, filehandle);
-
-        /* got is never < 0, but C's type system can't tell */
-        if (got < 0)
-            got = 0;
-
         len = (len < got) ? len : got;
     }
 
@@ -461,6 +450,7 @@
 
 */
 
+PARROT_WARN_UNUSED_RESULT
 size_t
 Parrot_io_readline_buffer(PARROT_INTERP, ARGMOD(PMC *filehandle), ARGOUT(STRING **buf))
 {

Modified: branches/include_dynpmc_makefile/src/io/filehandle.c
==============================================================================
--- branches/include_dynpmc_makefile/src/io/filehandle.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/io/filehandle.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/io/unix.c
==============================================================================
--- branches/include_dynpmc_makefile/src/io/unix.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/io/unix.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -305,7 +305,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_io_fdopen_unix(PARROT_INTERP, ARGMOD(PMC *filehandle), PIOHANDLE fd, INTVAL flags)
+Parrot_io_fdopen_unix(PARROT_INTERP, ARGMOD_NULLOK(PMC *filehandle), PIOHANDLE fd, INTVAL flags)
 {
     ASSERT_ARGS(Parrot_io_fdopen_unix)
     if (io_is_tty_unix(fd))
@@ -388,7 +388,7 @@
 
 /*
 
-=item C<INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, PMC *filehandle)>
+=item C<INTVAL Parrot_io_is_closed_unix(PARROT_INTERP, const PMC *filehandle)>
 
 Test whether the filehandle has been closed.
 
@@ -397,7 +397,7 @@
 */
 
 INTVAL
-Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(PMC *filehandle))
+Parrot_io_is_closed_unix(PARROT_INTERP, ARGIN(const PMC *filehandle))
 {
     ASSERT_ARGS(Parrot_io_is_closed_unix)
     if (Parrot_io_get_os_handle(interp, filehandle) == -1)
@@ -815,8 +815,9 @@
 Parrot_io_pipe_unix(SHIM_INTERP, ARGMOD(PIOHANDLE *reader), ARGMOD(PIOHANDLE *writer))
 {
     ASSERT_ARGS(Parrot_io_pipe_unix)
-    int fds[2], rv;
-    rv = pipe(fds);
+    int fds[2];
+    const int rv = pipe(fds);
+
     if (rv >= 0) {
         *reader = fds[0];
         *writer = fds[1];

Modified: branches/include_dynpmc_makefile/src/io/utf8.c
==============================================================================
--- branches/include_dynpmc_makefile/src/io/utf8.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/io/utf8.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -74,18 +74,19 @@
 
                 /* need len - 1 more chars */
                 len2--;
-                s2           = NULL;
-                s2           = Parrot_io_make_string(interp, &s2, len2);
+                s2 = Parrot_str_new_init(interp, NULL, len2, Parrot_utf8_encoding_ptr,
+                                         Parrot_unicode_charset_ptr, 0);
                 s2->bufused  = len2;
-                s2->charset  = Parrot_unicode_charset_ptr;
-                s2->encoding = Parrot_utf8_encoding_ptr;
 
                 /* TT #1257: need to check the amount read here? */
                 read = Parrot_io_read_buffer(interp, filehandle, &s2);
                 UNUSED(read);
 
                 s->strlen    = iter.charpos;
-                s            = Parrot_str_append(interp, s, s2);
+                s            = Parrot_str_concat(interp, s, s2);
+                /* String is updated. Poke into iterator to replace old string */
+                iter.str     = s;
+                *buf         = s;
                 len         += len2 + 1;
 
                 /* check last char */
@@ -118,8 +119,7 @@
     if (s->encoding == Parrot_utf8_encoding_ptr)
         return Parrot_io_write_buffer(interp, filehandle, s);
 
-    dest = Parrot_utf8_encoding_ptr->to_encoding(interp, s,
-            Parrot_gc_new_string_header(interp, 0));
+    dest = Parrot_utf8_encoding_ptr->to_encoding(interp, s);
     return Parrot_io_write_buffer(interp, filehandle, dest);
 }
 

Modified: branches/include_dynpmc_makefile/src/io/win32.c
==============================================================================
--- branches/include_dynpmc_makefile/src/io/win32.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/io/win32.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -660,8 +660,8 @@
     if (comspec == NULL)
         comspec = "cmd";
     auxcomm = Parrot_str_new(interp, comspec, 0);
-    auxcomm = Parrot_str_append(interp, auxcomm, Parrot_str_new(interp, " /c ", 0));
-    auxcomm = Parrot_str_append(interp, auxcomm, command);
+    auxcomm = Parrot_str_concat(interp, auxcomm, Parrot_str_new(interp, " /c ", 0));
+    auxcomm = Parrot_str_concat(interp, auxcomm, command);
     cmd = Parrot_str_to_cstring(interp, auxcomm);
     start.cb = sizeof start;
     GetStartupInfo(&start);

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

Modified: branches/include_dynpmc_makefile/src/main.c
==============================================================================
--- branches/include_dynpmc_makefile/src/main.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/main.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
 
@@ -342,7 +333,7 @@
 
 /*
 
-=item C<static void Parrot_version(PARROT_INTERP)>
+=item C<static void Parrot_version(void)>
 
 Print out parrot version number.
 
@@ -351,7 +342,7 @@
 */
 
 static void
-Parrot_version(PARROT_INTERP)
+Parrot_version(void)
 {
     ASSERT_ARGS(Parrot_version)
     printf("This is Parrot version " PARROT_VERSION);
@@ -369,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.
 
@@ -377,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) {
@@ -408,11 +401,11 @@
         }
         else if (!strncmp(arg, "--hash-seed", 11)) {
 
-            arg = strrchr(arg, '=')+1;
-            if (!arg) {
-                ++pos;
-                arg = argv[pos];
-            }
+            if ((arg = strrchr(arg, '=')))
+                arg++;
+            else
+                arg = argv[++pos];
+
             if (is_all_hex_digits(arg)) {
                 interp->hash_seed = strtoul(arg, NULL, 16);
             }
@@ -430,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.
 
@@ -442,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;
@@ -461,8 +454,7 @@
 
     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"))
@@ -536,7 +528,7 @@
                     Parrot_get_runtime_path(interp));
             exit(EXIT_SUCCESS);
           case 'V':
-            Parrot_version(interp);
+            Parrot_version();
             break;
 
           case OPT_GC_DEBUG:

Modified: branches/include_dynpmc_makefile/src/misc.c
==============================================================================
--- branches/include_dynpmc_makefile/src/misc.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/misc.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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)
 {
@@ -256,6 +257,7 @@
 
 
 PARROT_EXPORT
+PARROT_IGNORABLE_RESULT
 int
 Parrot_secret_snprintf(ARGOUT(char *buffer), SHIM(const size_t len),
         ARGIN(const char *format), ...)

Modified: branches/include_dynpmc_makefile/src/multidispatch.c
==============================================================================
--- branches/include_dynpmc_makefile/src/multidispatch.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/multidispatch.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,12 +391,11 @@
 mmd_build_type_tuple_from_type_list(PARROT_INTERP, ARGIN(PMC *type_list))
 {
     ASSERT_ARGS(mmd_build_type_tuple_from_type_list)
-    PMC   *multi_sig   = Parrot_pmc_new_constant(interp, enum_class_FixedIntegerArray);
     INTVAL param_count = VTABLE_elements(interp, type_list);
+    PMC   *multi_sig   = Parrot_pmc_new_constant_init_int(interp,
+            enum_class_FixedIntegerArray, param_count);
     INTVAL i;
 
-    VTABLE_set_integer_native(interp, multi_sig, param_count);
-
     for (i = 0; i < param_count; i++) {
         STRING *type_name = VTABLE_get_string_keyed_int(interp, type_list, i);
         INTVAL  type;
@@ -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,7 +631,7 @@
     /* 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;
 
@@ -641,15 +644,27 @@
         switch (type_call) {
           case enum_type_INTVAL:
             if (type_sig == enum_class_Integer) { dist++; continue; }
-            if (type_sig == enum_type_PMC) dist++;
+            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) dist++;
+            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) dist++;
+            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;

Copied: branches/include_dynpmc_makefile/src/nci/.gitignore (from r45870, trunk/src/nci/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/nci/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/nci/.gitignore)
@@ -0,0 +1,3 @@
+/*.o
+/*.obj
+/*.str

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

Copied: branches/include_dynpmc_makefile/src/ops/.gitignore (from r45870, trunk/src/ops/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/ops/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/ops/.gitignore)
@@ -0,0 +1,3 @@
+/*.c
+/*.o
+/*.obj

Modified: branches/include_dynpmc_makefile/src/ops/bit.ops
==============================================================================
--- branches/include_dynpmc_makefile/src/ops/bit.ops	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/ops/bit.ops	Wed Apr 21 23:40:50 2010	(r45876)
@@ -109,37 +109,37 @@
 
 =cut
 
-inline op bands(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_and(interp, $1, $2, &$1);
+inline op bands(inout STR, in STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_and(interp, $1, $2);
 }
 
 inline op bands(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_and(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_and(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bands(invar PMC, invar PMC) :base_core {
     STRING * a = VTABLE_get_string(interp, $1);
-    STRING * 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);
 }
 
@@ -187,23 +187,23 @@
 
 =cut
 
-inline op bnots(inout STR) :base_core {
-    Parrot_str_bitwise_not(interp, $1, &$1);
+inline op bnots(inout STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_not(interp, $1);
 }
 
 inline op bnots(out STR, in STR) :base_core {
-    Parrot_str_bitwise_not(interp, $2, &$1);
+    $1 = Parrot_str_bitwise_not(interp, $2);
 }
 
 inline op bnots(invar PMC) :base_core {
-    STRING * 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);
 }
 
@@ -279,37 +279,37 @@
 
 =cut
 
-inline op bors(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_or(interp, $1, $2, &$1);
+inline op bors(inout STR, in STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_or(interp, $1, $2);
 }
 
 inline op bors(invar PMC, in STR) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
-    STRING * const b = Parrot_str_bitwise_or(interp, a, $2, NULL);
+    STRING * const b = Parrot_str_bitwise_or(interp, a, $2);
     VTABLE_set_string_native(interp, $1, b);
 }
 
 inline op bors(invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $1);
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bors(out STR, in STR, in STR) :base_core {
-    $1 = Parrot_str_bitwise_or(interp, $2, $3, NULL);
+    $1 = Parrot_str_bitwise_or(interp, $2, $3);
 }
 
 inline op bors(invar PMC, invar PMC, in STR) :base_core {
     STRING * const b = VTABLE_get_string(interp, $2);
-    STRING * const c = Parrot_str_bitwise_or(interp, b, $3, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, b, $3);
     VTABLE_set_string_native(interp, $1, c);
 }
 
 inline op bors(invar PMC, invar PMC, invar PMC) :base_core {
     STRING * const a = VTABLE_get_string(interp, $2);
     STRING * const b = VTABLE_get_string(interp, $3);
-    STRING * const c = Parrot_str_bitwise_or(interp, a, b, NULL);
+    STRING * const c = Parrot_str_bitwise_or(interp, a, b);
     VTABLE_set_string_native(interp, $1, c);
 }
 
@@ -579,37 +579,37 @@
 
 =cut
 
-inline op bxors(inout STR, in STR) :base_core {
-    Parrot_str_bitwise_xor(interp, $1, $2, &$1);
+inline op bxors(inout STR, in STR) :base_core :deprecated {
+    $1 = Parrot_str_bitwise_xor(interp, $1, $2);
 }
 
 inline op bxors(invar PMC, in STR) :base_core {
-    STRING *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 +621,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

Modified: branches/include_dynpmc_makefile/src/ops/cmp.ops
==============================================================================
--- branches/include_dynpmc_makefile/src/ops/cmp.ops	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/ops/cmp.ops	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/ops/core.ops
==============================================================================
--- branches/include_dynpmc_makefile/src/ops/core.ops	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/ops/core.ops	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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. */
@@ -728,8 +745,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 +775,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 +794,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 +809,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 +827,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 +837,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,
@@ -981,7 +1005,7 @@
 }
 
 op interpinfo(out STR, in INT) {
-    STRING * s = interpinfo_s(interp, $2);
+    STRING * const s = interpinfo_s(interp, $2);
     $1 = s;
 }
 
@@ -1209,7 +1233,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 +1288,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 +1326,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 +1387,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 +1405,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 +1422,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

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

Modified: branches/include_dynpmc_makefile/src/ops/pmc.ops
==============================================================================
--- branches/include_dynpmc_makefile/src/ops/pmc.ops	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/ops/pmc.ops	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/ops/set.ops
==============================================================================
--- branches/include_dynpmc_makefile/src/ops/set.ops	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/ops/set.ops	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
     }
@@ -560,7 +559,7 @@
 =cut
 
 inline op null(out STR) :base_core {
-    $1 = NULL;
+    $1 = STRINGNULL;
 }
 
 inline op null(out INT) :base_core {
@@ -617,7 +616,7 @@
 
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

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

Modified: branches/include_dynpmc_makefile/src/ops/var.ops
==============================================================================
--- branches/include_dynpmc_makefile/src/ops/var.ops	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/ops/var.ops	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/packdump.c
==============================================================================
--- branches/include_dynpmc_makefile/src/packdump.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/packdump.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -299,10 +299,10 @@
                     switch (sub->namespace_name->vtable->base_type) {
                       case enum_class_String:
                         namespace_description = Parrot_str_new(interp, "'", 1);
-                        namespace_description = Parrot_str_append(interp,
+                        namespace_description = Parrot_str_concat(interp,
                                         namespace_description,
                                         VTABLE_get_string(interp, sub->namespace_name));
-                        namespace_description = Parrot_str_append(interp,
+                        namespace_description = Parrot_str_concat(interp,
                                         namespace_description,
                                         Parrot_str_new(interp, "'", 1));
                         break;

Modified: branches/include_dynpmc_makefile/src/packfile.c
==============================================================================
--- branches/include_dynpmc_makefile/src/packfile.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/packfile.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 This program is free software. It is subject to the same license as
 Parrot itself.
 $Id$
@@ -93,10 +93,10 @@
         __attribute__nonnull__(5)
         FUNC_MODIFIES(*dir);
 
-static void default_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+static void default_destroy(PARROT_INTERP,
+    ARGFREE_NOTNULL(PackFile_Segment *self))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*self);
+        __attribute__nonnull__(2);
 
 static void default_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *self))
         __attribute__nonnull__(1)
@@ -534,13 +534,9 @@
 
 PARROT_EXPORT
 void
-PackFile_destroy(PARROT_INTERP, ARGMOD_NULLOK(PackFile *pf))
+PackFile_destroy(PARROT_INTERP, ARGMOD(PackFile *pf))
 {
     ASSERT_ARGS(PackFile_destroy)
-    if (!pf) {
-        Parrot_io_eprintf(NULL, "PackFile_destroy: pf == NULL!\n");
-        return;
-    }
 
 #ifdef PARROT_HAS_HEADER_SYSMMAN
     if (pf->is_mmap_ped) {
@@ -1200,11 +1196,11 @@
 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++;
     seg->dir = dir;
@@ -2063,7 +2059,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;
@@ -2094,7 +2090,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 +2129,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");
         }
@@ -2227,18 +2223,13 @@
         /* 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;
     }
 }
@@ -2395,7 +2386,8 @@
 
     for (i = 0; i < num_segs; i++) {
         const PackFile_Segment * const seg = dir->segments[i];
-        char *name = Parrot_str_to_cstring(interp, seg->name);
+        char * const name = Parrot_str_to_cstring(interp, seg->name);
+
         *cursor++ = seg->type;
         cursor = PF_store_cstring(cursor, name);
         *cursor++ = seg->file_offset;
@@ -2457,7 +2449,7 @@
     self->size        = 0;
     self->data        = NULL;
     self->id          = 0;
-    self->name        = Parrot_str_copy(interp, name);
+    self->name        = name;
 }
 
 
@@ -2505,7 +2497,7 @@
 */
 
 static void
-default_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+default_destroy(PARROT_INTERP, ARGFREE_NOTNULL(PackFile_Segment *self))
 {
     ASSERT_ARGS(default_destroy)
     if (!self->pf->is_mmap_ped && self->data) {
@@ -2682,9 +2674,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;
 }
@@ -2793,7 +2783,7 @@
 
     /* find seg e.g. CODE_DB => CODE and attach it */
     str_len     = Parrot_str_length(interp, debug->base.name);
-    code_name   = Parrot_str_substr(interp, debug->base.name, 0, str_len - 3, NULL, 1);
+    code_name   = Parrot_str_substr(interp, debug->base.name, 0, str_len - 3);
     code        = (PackFile_ByteCode *)PackFile_find_segment(interp, self->dir, code_name, 0);
 
     if (!code || code->base.type != PF_BYTEC_SEG) {
@@ -3843,7 +3833,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;
@@ -4220,7 +4210,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 opcode_t *
-PackFile_Annotations_pack(PARROT_INTERP, ARGIN(PackFile_Segment *seg),
+PackFile_Annotations_pack(SHIM_INTERP, ARGIN(PackFile_Segment *seg),
         ARGMOD(opcode_t *cursor))
 {
     ASSERT_ARGS(PackFile_Annotations_pack)
@@ -4276,7 +4266,7 @@
         ARGIN(const opcode_t *cursor))
 {
     ASSERT_ARGS(PackFile_Annotations_unpack)
-    PackFile_Annotations *self = (PackFile_Annotations *)seg;
+    PackFile_Annotations * const self = (PackFile_Annotations *)seg;
     PackFile_ByteCode    *code;
     STRING               *code_name;
 #if TRACE_PACKFILE
@@ -4334,7 +4324,7 @@
 
     /* Need to associate this segment with the applicable code segment. */
     str_len     = Parrot_str_length(interp, self->base.name);
-    code_name   = Parrot_str_substr(interp, self->base.name, 0, str_len - 4, NULL, 1);
+    code_name   = Parrot_str_substr(interp, self->base.name, 0, str_len - 4);
     code        = (PackFile_ByteCode *)PackFile_find_segment(interp,
                                 self->base.dir, code_name, 0);
 
@@ -4366,7 +4356,7 @@
 PackFile_Annotations_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *seg))
 {
     ASSERT_ARGS(PackFile_Annotations_dump)
-    const PackFile_Annotations *self = (const PackFile_Annotations *)seg;
+    const PackFile_Annotations * const self = (const PackFile_Annotations *)seg;
     INTVAL                      i;
 
     default_dump_header(interp, (const PackFile_Segment *)self);
@@ -4439,6 +4429,7 @@
         opcode_t offset)
 {
     ASSERT_ARGS(PackFile_Annotations_add_group)
+    PackFile_Annotations_Group *group;
 
     /* Allocate extra space for the group in the groups array. */
     if (self->groups)
@@ -4449,11 +4440,10 @@
                 1 + self->num_groups, PackFile_Annotations_Group *);
 
     /* Store details. */
-    self->groups[self->num_groups]                  =
-                            mem_gc_allocate_zeroed_typed(interp,
-                                    PackFile_Annotations_Group);
-    self->groups[self->num_groups]->bytecode_offset = offset;
-    self->groups[self->num_groups]->entries_offset  = self->num_entries;
+    group = self->groups[self->num_groups] =
+                mem_gc_allocate_zeroed_typed(interp, PackFile_Annotations_Group);
+    group->bytecode_offset = offset;
+    group->entries_offset  = self->num_entries;
 
     /* Increment group count. */
     self->num_groups++;
@@ -4483,12 +4473,12 @@
 {
     ASSERT_ARGS(PackFile_Annotations_add_entry)
     /* See if we already have this key. */
-    STRING  *key_name = PF_CONST(self->code, key)->u.string;
+    STRING  * const key_name = PF_CONST(self->code, key)->u.string;
     opcode_t key_id   = -1;
     INTVAL   i;
 
     for (i = 0; i < self->num_keys; i++) {
-        STRING *test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
+        STRING * const test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
         if (Parrot_str_equal(interp, test_key, key_name)) {
             key_id = i;
             break;
@@ -4607,7 +4597,7 @@
     /* If we have a key, look up its ID; if we don't find one. */
     opcode_t key_id = -1;
 
-    if (key) {
+    if (!STRING_IS_NULL(key)) {
         for (i = 0; i < self->num_keys; i++) {
             STRING * const test_key = PF_CONST(self->code, self->keys[i]->name)->u.string;
             if (Parrot_str_equal(interp, test_key, key)) {
@@ -4722,7 +4712,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;
@@ -4769,10 +4759,10 @@
 
     /* Full path to language library is "abc/abc.pbc". */
     pbc = CONST_STRING(interp, "pbc");
-    wo_ext   = Parrot_str_concat(interp, lang_name, CONST_STRING(interp, "/"), 0);
-    wo_ext   = Parrot_str_append(interp, wo_ext, lang_name);
-    file_str = Parrot_str_concat(interp, wo_ext, CONST_STRING(interp, "."), 0);
-    file_str = Parrot_str_append(interp, file_str, pbc);
+    wo_ext   = Parrot_str_concat(interp, lang_name, CONST_STRING(interp, "/"));
+    wo_ext   = Parrot_str_concat(interp, wo_ext, lang_name);
+    file_str = Parrot_str_concat(interp, wo_ext, CONST_STRING(interp, "."));
+    file_str = Parrot_str_concat(interp, file_str, pbc);
 
     /* Check if the language is already loaded */
     is_loaded_hash = VTABLE_get_pmc_keyed_int(interp,
@@ -4797,13 +4787,13 @@
     parrot_split_path_ext(interp, path, &found_path, &found_ext);
     name_length = Parrot_str_length(interp, lang_name);
     found_path = Parrot_str_substr(interp, found_path, 0,
-            Parrot_str_length(interp, found_path)-name_length, NULL, 0);
+            Parrot_str_length(interp, found_path)-name_length);
 
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "include/")),
             PARROT_LIB_PATH_INCLUDE);
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "dynext/")),
             PARROT_LIB_PATH_DYNEXT);
-    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "library/")),
+    Parrot_lib_add_path(interp, Parrot_str_concat(interp, found_path, CONST_STRING(interp, "library/")),
             PARROT_LIB_PATH_LIBRARY);
 
 

Copied: branches/include_dynpmc_makefile/src/packfile/.gitignore (from r45870, trunk/src/packfile/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/packfile/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/packfile/.gitignore)
@@ -0,0 +1,2 @@
+/*.o
+/*.obj

Modified: branches/include_dynpmc_makefile/src/packfile/pf_items.c
==============================================================================
--- branches/include_dynpmc_makefile/src/packfile/pf_items.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/packfile/pf_items.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -984,14 +984,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 +1290,7 @@
 
 Opcode format is:
 
-    opcode_t flags
-    opcode_t encoding
-    opcode_t type
+    opcode_t flags8 | encoding
     opcode_t size
     * data
 
@@ -1307,24 +1307,32 @@
 {
     ASSERT_ARGS(PF_fetch_string)
     STRING   *s;
-    UINTVAL   flags    = PF_fetch_opcode(pf, cursor);
-    const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
+    opcode_t  flag_charset_word;
+    UINTVAL   flags;
+    UINTVAL   charset_nr;
     size_t    size;
-    opcode_t  charset_nr;
+    const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
+
+    flag_charset_word = PF_fetch_opcode(pf, cursor);
 
-    /* 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);
+    if (flag_charset_word == -1) {
+        return STRINGNULL;
+    }
 
-    /* These may need to be separate */
-    size        = (size_t)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;
+
+
+    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,
-                        size, charset_nr, flags);
+    s = string_make_from_charset(interp, (const char *)*cursor,
+                        size, charset_nr, flags | PObj_external_FLAG);
 
     /* print only printable characters */
     TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",
@@ -1370,7 +1378,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 +1392,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 +1434,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 +1462,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/include_dynpmc_makefile/src/parrot_debugger.c
==============================================================================
--- branches/include_dynpmc_makefile/src/parrot_debugger.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/parrot_debugger.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pbc_dump.c
==============================================================================
--- branches/include_dynpmc_makefile/src/pbc_dump.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pbc_dump.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
+    opcode_t *pc = self->data;
+
     Parrot_io_printf(interp, "%Ss => [ # %d ops at offs 0x%x\n",
             self->name, (int)self->size, (int)self->file_offset + 4);
-    pc = self->data;
+
     while (pc < self->data + self->size) {
+        /* n can't be const; the ADD_OP_VAR_PART macro increments it */
+        size_t n = (size_t)interp->op_info_table[*pc].op_count;
+        size_t i;
+
         /* trace_op_dump(interp, self->pf->src, pc); */
-        Parrot_io_printf(interp, " %04x:  ", (int) (pc - self->data));
-        n = (size_t)interp->op_info_table[*pc].op_count;
+        Parrot_io_printf(interp, " %04x:  ", (int)(pc - self->data));
+
         for (i = 0; i < 6; i++)
             if (i < n)
-                Parrot_io_printf(interp, "%08lx ", (unsigned long) pc[i]);
+                Parrot_io_printf(interp, "%08lx ", (unsigned long)pc[i]);
             else
                 Parrot_io_printf(interp, "         ");
+
         Parrot_io_printf(interp, "%s\n",
                 interp->op_info_table[*pc].full_name);
+
         ADD_OP_VAR_PART(interp, interp->code, pc, n);
         pc += n;
     }
+
     Parrot_io_printf(interp, "]\n");
 }
 
+
+/*
+
+=item C<static void nums_dump(PARROT_INTERP, const PackFile_Segment *self)>
+
+Disassembles and dumps op names and line numbers only.
+
+=cut
+
+*/
+
+static void
+nums_dump(PARROT_INTERP, const PackFile_Segment *self)
+{
+    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);
+
+    opcode_t               *pc         = self->data;
+    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/include_dynpmc_makefile/src/pbc_merge.c
==============================================================================
--- branches/include_dynpmc_makefile/src/pbc_merge.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pbc_merge.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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))
@@ -428,17 +424,17 @@
             /* 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;
                 }
             }
 
@@ -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,14 @@
 
 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 *);
     opcode_t              cursor = 0;
-    int                   i, j;
+    int                   i;
 
     /* Add a fixup table segment. */
     fixup_seg = (PackFile_FixupTable*)PackFile_Segment_new_seg(
@@ -496,6 +492,8 @@
     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",
@@ -513,10 +511,10 @@
            the offsets into the bytecode. */
         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,15 +524,15 @@
 
             /* 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. */
@@ -574,13 +572,14 @@
     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;
+        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,
@@ -595,8 +594,9 @@
                 PackFile_DebugFilenameMapping*);
 
         for (j = 0; j < in_seg->num_mappings; j++) {
-            PackFile_DebugFilenameMapping *mapping = mem_gc_allocate_typed(
-                    interp, PackFile_DebugFilenameMapping);
+            PackFile_DebugFilenameMapping * const mapping =
+                mem_gc_allocate_typed(interp, PackFile_DebugFilenameMapping);
+
             STRUCT_COPY(mapping, in_seg->mappings[j]);
             mapping->offset   += num_lines;
             mapping->filename += inputs[i]->const_start;
@@ -662,15 +662,15 @@
         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. */
@@ -689,15 +689,15 @@
             const int sig_items = VTABLE_elements(interp, sig);
             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++;
             }
@@ -752,7 +752,7 @@
     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. */
@@ -841,17 +841,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) {

Modified: branches/include_dynpmc_makefile/src/pmc.c
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
@@ -189,10 +191,10 @@
 PARROT_IGNORABLE_RESULT
 PMC *
 Parrot_pmc_reuse(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    UINTVAL flags)
+    SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse)
-    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type, flags);
+    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
 
     /* Call the base init for the redone pmc. Warning, this should not
        be called on Object PMCs. */
@@ -223,10 +225,10 @@
 PARROT_IGNORABLE_RESULT
 PMC *
 Parrot_pmc_reuse_init(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type, ARGIN(PMC *init),
-          UINTVAL flags)
+          SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(Parrot_pmc_reuse_init)
-    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type, flags);
+    pmc = Parrot_pmc_reuse_noinit(interp, pmc, new_type);
 
     /* Call the base init for the redone pmc. Warning, this should not
        be called on Object PMCs. */
@@ -238,43 +240,39 @@
 /*
 
 =item C<static PMC* Parrot_pmc_reuse_noinit(PARROT_INTERP, PMC *pmc, INTVAL
-new_type, UINTVAL flags)>
+new_type)>
 
 Prepare pmc for reuse. Do all scuffolding except initing.
 
 =cut
 
 */
+
 PARROT_CANNOT_RETURN_NULL
 static PMC*
-Parrot_pmc_reuse_noinit(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type,
-    SHIM(UINTVAL flags)) {
-
+Parrot_pmc_reuse_noinit(PARROT_INTERP, ARGIN(PMC *pmc), INTVAL new_type)
+{
     ASSERT_ARGS(Parrot_pmc_reuse_noinit)
-    VTABLE *new_vtable;
-    INTVAL  new_flags = 0;
 
-    if (pmc->vtable->base_type == new_type)
-        return pmc;
+    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 +300,25 @@
 {
     ASSERT_ARGS(Parrot_pmc_reuse_by_class)
     const INTVAL   new_type   = PARROT_CLASS(class_)->id;
-    VTABLE * const new_vtable = interp->vtables[new_type];
-    const INTVAL   new_flags  = flags;
 
-    if (pmc->vtable->base_type == new_type)
-        return pmc;
+    if (pmc->vtable->base_type != new_type) {
+        VTABLE * const new_vtable = interp->vtables[new_type];
 
-    /* Singleton/const PMCs/types are not eligible */
-    check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
+        /* Singleton/const PMCs/types are not eligible */
+        check_pmc_reuse_flags(interp, pmc->vtable->flags, new_vtable->flags);
 
-    Parrot_pmc_destroy(interp, pmc);
+        Parrot_pmc_destroy(interp, pmc);
 
-    PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | new_flags);
+        PObj_flags_SETTO(pmc, PObj_is_PMC_FLAG | flags);
 
-    /* Set the right vtable */
-    pmc->vtable = new_vtable;
+        /* Set the right vtable */
+        pmc->vtable = new_vtable;
 
-    if (new_vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
-    else
-        PMC_data(pmc) = NULL;
+        if (new_vtable->attr_size)
+            Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        else
+            PMC_data(pmc) = NULL;
+    }
 
     return pmc;
 }
@@ -392,7 +389,7 @@
 get_new_pmc_header(PARROT_INTERP, INTVAL base_type, UINTVAL flags)
 {
     ASSERT_ARGS(get_new_pmc_header)
-    PMC    *pmc;
+    PMC    *newpmc;
     VTABLE *vtable = interp->vtables[base_type];
     UINTVAL vtable_flags;
 
@@ -454,13 +451,13 @@
     if (vtable_flags & VTABLE_IS_SHARED_FLAG)
         flags |= PObj_is_PMC_shared_FLAG;
 
-    pmc            = Parrot_gc_new_pmc_header(interp, flags);
-    pmc->vtable    = vtable;
+    newpmc         = Parrot_gc_new_pmc_header(interp, flags);
+    newpmc->vtable = vtable;
 
     if (vtable->attr_size)
-        Parrot_gc_allocate_pmc_attributes(interp, pmc);
+        Parrot_gc_allocate_pmc_attributes(interp, newpmc);
 
-    return pmc;
+    return newpmc;
 }
 
 
@@ -585,8 +582,7 @@
         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);
-        /* XXX Falls through to end of function without returning */
+        return VTABLE_instantiate(interp, classobj, initial);
     }
     else {
         PMC * const pmc = get_new_pmc_header(interp, base_type, 0);
@@ -623,6 +619,30 @@
 
 /*
 
+=item C<PMC * Parrot_pmc_new_constant_init_int(PARROT_INTERP, INTVAL base_type,
+INTVAL init)>
+
+As C<Parrot_pmc_new_constant>, but passes C<init> to the PMC's C<init_int> vtable
+entry.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC *
+Parrot_pmc_new_constant_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+{
+    ASSERT_ARGS(Parrot_pmc_new_constant_init_int)
+    PMC * const pmc = get_new_pmc_header(interp, base_type, PObj_constant_FLAG);
+    VTABLE_init_int(interp, pmc, init);
+    return pmc;
+}
+
+
+/*
+
 =item C<PMC * Parrot_pmc_new_temporary(PARROT_INTERP, INTVAL base_type)>
 
 Creates a new temporary PMC of type C<base_type>, then call C<init>. Cannot
@@ -963,6 +983,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

Copied: branches/include_dynpmc_makefile/src/pmc/.gitignore (from r45870, trunk/src/pmc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/pmc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/pmc/.gitignore)
@@ -0,0 +1,8 @@
+/Makefile
+/*.c
+/*.h
+/*.o
+/*.tmp
+/*.dump
+/*.str
+/*.obj

Modified: branches/include_dynpmc_makefile/src/pmc/addrregistry.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/addrregistry.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/addrregistry.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 {
 /*
 

Modified: branches/include_dynpmc_makefile/src/pmc/arrayiterator.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/arrayiterator.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/arrayiterator.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */

Modified: branches/include_dynpmc_makefile/src/pmc/bigint.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/bigint.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/bigint.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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"));
     }
 /*
 

Modified: branches/include_dynpmc_makefile/src/pmc/bignum.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/bignum.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/bignum.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
     }
@@ -942,7 +1443,7 @@
         return bignum_get_bigint(INTERP, SELF);
 #else
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_LIBRARY_ERROR,
-            "no bigint support in bigint");
+            "no bigint support in bignum");
 #endif
     }
 
@@ -1007,7 +1508,7 @@
 
     VTABLE STRING *get_repr() {
         STRING *s = SELF.get_string();
-        return Parrot_str_append(INTERP, s, Parrot_str_new(interp, "N", 1));
+        return Parrot_str_concat(INTERP, s, Parrot_str_new(interp, "N", 1));
     }
 /*
 
@@ -1258,19 +1759,9 @@
 */
 
     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;
     }
 

Modified: branches/include_dynpmc_makefile/src/pmc/boolean.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/boolean.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/boolean.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -21,6 +21,8 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+
 pmclass Boolean extends Integer provides boolean provides scalar auto_attrs {
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/callcontext.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/callcontext.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/callcontext.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2008-2009, Parrot Foundation.
+Copyright (C) 2008-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,166 +27,176 @@
         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 NOCELL     0
+#define INTCELL    1
+#define FLOATCELL  2
+#define STRINGCELL 3
+#define PMCCELL    4
 
-#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 ALLOC_CELL(i) \
+    (Pcc_cell *)Parrot_gc_allocate_fixed_size_storage((i), sizeof (Pcc_cell))
 
-#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)))
+    Parrot_gc_free_fixed_size_storage((i), sizeof (Pcc_cell), (c))
 
-#define CELL_TYPE_MASK(c) (PTR2INTVAL(c)) & 3
-#define INTCELL    0
-#define FLOATCELL  1
-#define STRINGCELL 2
-#define PMCCELL    3
+#define CELL_TYPE_MASK(c) (c)->type
 
-#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 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
 
 #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))
+/* 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 void
+ensure_positionals_storage(PARROT_INTERP, ARGIN(PMC *self), INTVAL size)
 {
-    INTVAL num_positionals;
-    Pcc_cell *cell;
-    Pcc_cell *prev = NULL;
+    ASSERT_ARGS(ensure_positionals_storage)
+    INTVAL num_positionals, allocated_positionals;
+    Pcc_cell *array, *new_array;
 
-    GETATTR_CallContext_positionals(interp, SELF, cell);
+    GETATTR_CallContext_allocated_positionals(interp, self, allocated_positionals);
 
-    /* no cells */
-    if (!cell)
-        return NULL;
+    if (size <= allocated_positionals)
+        return;
 
-    GETATTR_CallContext_num_positionals(interp, SELF, num_positionals);
-    SETATTR_CallContext_num_positionals(interp, SELF, num_positionals-1);
+    if (size < 8)
+        size = 8;
 
-    /* one cell */
-    if (!NEXT_CELL(cell)) {
-        SETATTR_CallContext_positionals(interp, SELF, NULL);
-        return cell;
-    }
+    GETATTR_CallContext_positionals(interp, self, array);
 
-    while (cell) {
-        if (!NEXT_CELL(cell)) {
-            NEXT_CELL(prev) = NULL;
-            return cell;
-        }
+    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));
 
-        prev = cell;
-        cell = NEXT_CELL(cell);
+    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);
     }
 
-    /* should abort here */
-    SETATTR_CallContext_num_positionals(interp, SELF, num_positionals+1);
-    return NULL;
+    SETATTR_CallContext_allocated_positionals(interp, self, size);
+    SETATTR_CallContext_positionals(interp, self, new_array);
 }
 
-static Pcc_cell *
-shift_cell(PARROT_INTERP, ARGIN(PMC *SELF))
+PARROT_CANNOT_RETURN_NULL
+static Pcc_cell*
+get_cell_at(PARROT_INTERP, ARGIN(PMC *self), INTVAL key)
 {
-    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));
-
-    return cell;
-}
-
-static Pcc_cell *
-get_cell_at(PARROT_INTERP, ARGIN(PMC *SELF), INTVAL key)
-{
-    INTVAL    i, num_positionals;
-    Pcc_cell *cell;
-
-    GETATTR_CallContext_num_positionals(interp, SELF, num_positionals);
-
-    if (key > num_positionals)
-        return NULL;
-
-    GETATTR_CallContext_positionals(interp, SELF, cell);
-
-    while (key) {
-        /* XXX: shouldn't happen */
-        if (!NEXT_CELL(cell))
-            return NULL;
-
-        cell = NEXT_CELL(cell);
-        key--;
-    }
-
-    return cell;
-
+    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 +217,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 +239,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 +263,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 +284,7 @@
         VTABLE_set_string_native(interp, result, CELL_STRING(cell));
         break;
       case PMCCELL:
-        return CELL_PMC(cell);
+        result = CELL_PMC(cell);
       default:
         /* exception */
         break;
@@ -278,9 +293,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 +316,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 +362,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,8 +381,7 @@
     /* yes, this *looks* risky, but it's a Parrot STRING hash internally */
     if (hash && hash->entries) {
         UINTVAL i, j = 0;
-        result  = Parrot_pmc_new(interp, enum_class_FixedStringArray);
-        VTABLE_set_integer_native(interp, result, hash->entries);
+        result = Parrot_pmc_new_init_int(interp, enum_class_FixedStringArray, hash->entries);
 
         for (i = 0; i <= hash->mask; i++) {
             HashBucket *b = hash->bi[i];
@@ -391,7 +420,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 */
 
@@ -411,18 +439,16 @@
     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 +463,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 +503,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 +532,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,43 +541,82 @@
 
         GET_ATTR_bp_ps(INTERP, SELF, bp_ps);
         for (i = 0; i < n_regs_used[REGNO_PMC]; ++i) {
-            PMC *p = bp_ps.regs_p[-1L-(i)];
+            PMC * const p = bp_ps.regs_p[-1L-(i)];
             /* Original code from CTX_REG_PMC */
             if (p)
                 Parrot_gc_mark_PMC_alive(interp, p);
         }
 
         for (i = 0; i < n_regs_used[REGNO_STR]; ++i) {
-            STRING *s = bp_ps.regs_s[i];
+            STRING * const s = bp_ps.regs_s[i];
             if (s)
                 Parrot_gc_mark_STRING_alive(interp, s);
         }
+    }
+
+/*
 
+=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) {
@@ -577,15 +634,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 +662,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 +676,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 */
@@ -697,17 +744,17 @@
             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))
+                        type = PMC_IS_NULL(c[i].u.p)
                              ? enum_type_PMC
-                             : VTABLE_type(interp, CELL_PMC(c));
+                             : VTABLE_type(interp, c[i].u.p);
                         break;
                     default:
                         Parrot_ex_throw_from_c_args(interp, NULL,
@@ -716,8 +763,6 @@
                 }
 
                 VTABLE_set_integer_keyed_int(interp, type_tuple, i, type);
-                i++;
-                c = NEXT_CELL(c);
             }
 
             SET_ATTR_type_tuple(INTERP, SELF, type_tuple);
@@ -763,11 +808,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 +903,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 +913,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 +932,330 @@
     }
 
     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;
+
+        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.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;
 
-    VTABLE void push_string(STRING *value) {
-        Pcc_cell *cell = CREATE_STRING_CELL(INTERP);
-        APPEND_CELL(INTERP, SELF, cell);
-        CELL_STRING(cell) = value;
-    }
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        ensure_positionals_storage(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;
+        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 INTVAL pop_integer() {
-        Pcc_cell *cell = pop_cell(INTERP, SELF);
-
-        if (cell) {
-            INTVAL result = autobox_intval(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+    VTABLE void push_string(STRING *value) {
+        Pcc_cell *cells;
+        INTVAL    num_pos;
 
-        return 0;
+        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 FLOATVAL pop_float() {
-        Pcc_cell *cell = pop_cell(INTERP, SELF);
+    VTABLE void push_pmc(PMC *value) {
+        Pcc_cell *cells;
+        INTVAL    num_pos;
 
-        if (cell) {
-            FLOATVAL result = autobox_floatval(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+        GET_ATTR_num_positionals(INTERP, SELF, num_pos);
+        ensure_positionals_storage(INTERP, SELF, num_pos + 1);
 
-        return 0.0;
+        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);
+    }
+
+    /*
+        TODO It's very naive implementation. But we do unshift _once_ only.
+        So, for speed sake, allocate _one_ Cell upfront. Or store it independent.
+    */
+
+    VTABLE void unshift_pmc(PMC *value) {
+        Pcc_cell *cells;
+        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;
+        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) {
-            PMC *result = autobox_pmc(INTERP, cell);
-            FREE_CELL(INTERP, cell);
-            return result;
-        }
+        GET_ATTR_positionals(INTERP, SELF, cells);
+        retval = autobox_pmc(INTERP, &cells[0]);
 
-        return PMCNULL;
+        for (i = 1; i < size; i++)
+            cells[i - 1] = cells[i];
+
+        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;
+        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 +1265,11 @@
     }
 
     VTABLE FLOATVAL get_number_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_floatval(INTERP, cell);
@@ -1282,11 +1280,11 @@
 
 
     VTABLE STRING * get_string_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_string(INTERP, cell);
@@ -1296,11 +1294,11 @@
     }
 
     VTABLE PMC * get_pmc_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_string(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_string(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_pmc(INTERP, cell);
@@ -1310,11 +1308,11 @@
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_intval(INTERP, cell);
@@ -1324,11 +1322,11 @@
     }
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_floatval(INTERP, cell);
@@ -1338,11 +1336,11 @@
     }
 
     VTABLE STRING * get_string_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_string(INTERP, cell);
@@ -1352,11 +1350,11 @@
     }
 
     VTABLE PMC * get_pmc_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k    = hash_key_from_pmc(INTERP, hash, key);
-            Pcc_cell *cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
+            void     * const k    = hash_key_from_pmc(INTERP, hash, key);
+            Pcc_cell * const cell = (Pcc_cell *)parrot_hash_get(INTERP, hash, k);
 
             if (cell)
                 return autobox_pmc(INTERP, cell);
@@ -1366,10 +1364,10 @@
     }
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k = hash_key_from_pmc(INTERP, hash, key);
+            void * const k = hash_key_from_pmc(INTERP, hash, key);
             return parrot_hash_exists(INTERP, hash, k);
         }
 
@@ -1377,10 +1375,10 @@
     }
 
     VTABLE INTVAL exists_keyed_str(STRING *key) {
-        Hash *hash = get_hash(INTERP, SELF);
+        Hash * const hash = get_hash(INTERP, SELF);
 
         if (hash) {
-            void     *k = hash_key_from_string(INTERP, hash, key);
+            void * const k = hash_key_from_string(INTERP, hash, key);
             return parrot_hash_exists(INTERP, hash, k);
         }
 
@@ -1408,61 +1406,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 +1443,6 @@
         return dest;
     }
 
-
 /*
 
 =item C<PMC *backtrace>
@@ -1495,11 +1461,11 @@
     METHOD backtrace(PMC *resume :optional, INTVAL has_resume :opt_flag) {
         PMC *result  = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
         PMC *cur_ctx = SELF;
-        Parrot_Continuation_attributes *cont = has_resume ? PMC_cont(resume) : NULL;
+        Parrot_Continuation_attributes * const cont = has_resume ? PMC_cont(resume) : NULL;
 
         /* Get starting context, then loop over them. */
         while (cur_ctx) {
-            PMC        *frame       = Parrot_pmc_new(interp, enum_class_Hash);
+            PMC        * const frame       = Parrot_pmc_new(interp, enum_class_Hash);
             PMC        *annotations = NULL;
             Parrot_Sub_attributes *sub;
 

Modified: branches/include_dynpmc_makefile/src/pmc/capture.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/capture.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/capture.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pmc/class.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/class.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/class.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +203,7 @@
         STRING * const attrib_name = VTABLE_get_string_keyed_str(
             interp, cur_attrib, name_str);
 
-        STRING * const full_key    = Parrot_str_append(interp, fq_class, attrib_name);
+        STRING * const full_key    = Parrot_str_concat(interp, fq_class, attrib_name);
 
         /* Insert into hash, along with index. */
         VTABLE_set_integer_keyed_str(interp, attrib_index, full_key, cur_index);
@@ -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);
@@ -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");
@@ -322,8 +408,9 @@
 }
 
 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");
 
@@ -343,23 +430,17 @@
         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");
 
@@ -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 */
@@ -584,7 +668,7 @@
 */
 
     VTABLE STRING *get_string() {
-        return Parrot_str_copy(interp, make_class_name(interp, SELF));
+        return make_class_name(interp, SELF);
     }
 
 /*
@@ -767,7 +851,7 @@
                 EXCEPTION_METHOD_NOT_FOUND,
                 "'%S' is not a valid vtable function name.", name);
 
-        /* Add it to vtable methods list. */
+        /* Add it to vtable list. */
         VTABLE_set_pmc_keyed_str(interp, _class->vtable_overrides, name, sub);
     }
 
@@ -1570,7 +1654,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 (ParrotClass isa Class does ClassMethods or something like this).
      * **********************************************************************/
@@ -1714,7 +1798,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,7 +1812,7 @@
 =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
 
@@ -1883,7 +1967,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
@@ -1923,6 +2007,23 @@
         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/include_dynpmc_makefile/src/pmc/codestring.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/codestring.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/codestring.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,38 +108,37 @@
     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;
+    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)) {
+            INTVAL I0;
+            INTVAL I1;
+
             repl = VTABLE_get_string_keyed_int(INTERP, args, 0);
-            repl = Parrot_str_new_COW(INTERP, repl);
             I1   = VTABLE_elements(INTERP, args);
             I0   = 1;
 
             while (I0 < I1) {
-                S0   = VTABLE_get_string_keyed_int(INTERP, args, I0);
-                repl = Parrot_str_append(INTERP, repl, comma_space);
-                repl = Parrot_str_append(INTERP, repl, S0);
+                STRING * const S0 = VTABLE_get_string_keyed_int(INTERP, args, I0);
+                repl = Parrot_str_concat(INTERP, repl, comma_space);
+                repl = Parrot_str_concat(INTERP, repl, S0);
                 I0++;
             }
         }
@@ -149,16 +151,16 @@
             continue;
         }
 
-        (void) Parrot_str_replace(INTERP, fmt, pos, 2, repl, NULL);
+        fmt    = Parrot_str_replace(INTERP, fmt, pos, 2, repl);
         replen = Parrot_str_byte_length(INTERP, repl);
     }
 
     /* Add a newline if necessary */
     if ('\n' != Parrot_str_indexed(INTERP, fmt, Parrot_str_byte_length(INTERP, fmt) - 1))
-        fmt = Parrot_str_concat(INTERP, fmt, newline, 0);
+        fmt = Parrot_str_concat(INTERP, fmt, newline);
 
     GET_ATTR_str_val(INTERP, SELF, S1);
-    S1 = Parrot_str_concat(INTERP, S1, fmt, 0);
+    S1 = Parrot_str_concat(INTERP, S1, fmt);
     VTABLE_set_string_native(INTERP, SELF, S1);
 
     RETURN(PMC *SELF);
@@ -244,7 +246,7 @@
 
   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++;
@@ -253,8 +255,7 @@
         RETURN(STRING *counter_as_string);
     }
     else {
-        STRING *result = Parrot_str_copy(INTERP, format);
-        result         = Parrot_str_concat(INTERP, result, counter_as_string, 1);
+        STRING *result = Parrot_str_concat(INTERP, format, counter_as_string);
         RETURN(STRING *result);
     }
   }
@@ -279,8 +280,8 @@
     INTVAL is_unicode = 0;
     UNUSED(SELF);
 
-    escaped_str = Parrot_str_concat(INTERP, quote, escaped_str, 1);
-    escaped_str = Parrot_str_concat(INTERP, escaped_str, quote, 1);
+    escaped_str = Parrot_str_concat(INTERP, quote, escaped_str);
+    escaped_str = Parrot_str_concat(INTERP, escaped_str, quote);
     x_pos       = Parrot_str_find_index(INTERP, escaped_str, x, 0);
 
     if (x_pos != -1) {
@@ -288,14 +289,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 +343,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, "]");
@@ -351,29 +352,34 @@
     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);
+        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/include_dynpmc_makefile/src/pmc/complex.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/complex.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/complex.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -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,
@@ -264,8 +320,8 @@
           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);
+                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;
@@ -273,7 +329,7 @@
             /* else let it fall to default */
           default:
             if (VTABLE_isa(interp, initializer, CONST_STRING(interp, "String"))) {
-                STRING * s = VTABLE_get_string(interp, initializer);
+                STRING * const s = VTABLE_get_string(interp, initializer);
                 SELF.set_string_native(s);
             }
             else {

Modified: branches/include_dynpmc_makefile/src/pmc/continuation.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/continuation.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/continuation.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -36,6 +36,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 
 /*
  * A Continuation (and RetContinuation, ExceptionHandler) has in its
@@ -74,15 +78,6 @@
         SET_ATTR_address(INTERP, SELF, NULL);
 
         PObj_custom_mark_SET(SELF);
-
-        /* PANIC("don't do that"); */
-        /*
-         * Whenever we create a continuation, all return continuations
-         * up the call chain may be reused due to invoking the
-         * continuation. To avoid that all return continuations are
-         * converted to true continuations.
-         */
-        invalidate_retc_context(INTERP, SELF);
     }
 
     /*if they pass in a PMC to initialize with*/
@@ -105,15 +100,6 @@
         SET_ATTR_address(INTERP, SELF, address);
 
         PObj_custom_mark_SET(SELF);
-
-        /* PANIC("don't do that"); */
-        /*
-         * Whenever we create a continuation, all return continuations
-         * up the call chain may be reused due to invoking the
-         * continuation. To avoid that all return continuations are
-         * converted to true continuations.
-         */
-        invalidate_retc_context(INTERP, SELF);
     }
 
 
@@ -262,19 +248,7 @@
         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);
-            }
+            Parrot_pcc_set_signature(INTERP, CURRENT_CONTEXT(INTERP), from_obj);
         }
 
         /* switch segment */

Modified: branches/include_dynpmc_makefile/src/pmc/coroutine.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/coroutine.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/coroutine.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);

Modified: branches/include_dynpmc_makefile/src/pmc/default.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/default.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/default.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +237,10 @@
 */
 
 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);
@@ -156,8 +250,7 @@
 
 /*
 
-=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,8 +281,13 @@
 =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);
@@ -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 {
 
 /*
@@ -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;
         }
@@ -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);
     }
 
 /*
@@ -917,7 +973,7 @@
 */
 
     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);
 
@@ -960,7 +1016,7 @@
 
 */
     VTABLE PMC *inspect() {
-        PMC    *metadata           = Parrot_pmc_new(interp, enum_class_Hash);
+        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,
@@ -979,15 +1035,16 @@
 
 */
     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);
 
         if (PMC_IS_NULL(_class)) {
-            INTVAL type      = VTABLE_type(interp, SELF);
-            PMC   *type_num  = Parrot_pmc_new(interp, enum_class_Integer);
+            const INTVAL type      = VTABLE_type(interp, SELF);
+            PMC   * const 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);
         }
@@ -1766,7 +1823,7 @@
         /* 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,
                 "cmp_pmc", "PP->P", SELF, value, &retval);

Modified: branches/include_dynpmc_makefile/src/pmc/env.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/env.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/env.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 {
 
@@ -149,7 +154,7 @@
 
     VTABLE STRING *get_string_keyed_str(STRING *key) {
         if (!STRING_IS_EMPTY(key)) {
-            char * const val = Parrot_getenv(interp, key);
+            const char * const val = Parrot_getenv(interp, key);
 
             if (val) {
                 STRING * const retval = Parrot_str_new(interp, val, 0);
@@ -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/include_dynpmc_makefile/src/pmc/eval.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/eval.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/eval.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
 
@@ -41,7 +74,7 @@
         return;
 
     for (i = 0; i < ft->fixup_count; i++) {
-        PackFile_FixupEntry *e = ft->fixups[i];
+        const PackFile_FixupEntry * const e = ft->fixups[i];
 
         if (e->type == enum_fixup_sub) {
             opcode_t  ci             = e->offset;
@@ -52,9 +85,13 @@
     }
 }
 
+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;
@@ -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;
@@ -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;
 

Modified: branches/include_dynpmc_makefile/src/pmc/eventhandler.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/eventhandler.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/eventhandler.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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, "");
     }
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/exception.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/exception.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/exception.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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. */

Modified: branches/include_dynpmc_makefile/src/pmc/exceptionhandler.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/exceptionhandler.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/exceptionhandler.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;

Modified: branches/include_dynpmc_makefile/src/pmc/exporter.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/exporter.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/exporter.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;

Modified: branches/include_dynpmc_makefile/src/pmc/file.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/file.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/file.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -22,6 +22,10 @@
 #  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;

Modified: branches/include_dynpmc_makefile/src/pmc/filehandle.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/filehandle.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/filehandle.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
@@ -249,10 +253,10 @@
                                 "Cannot reopen already open filehandle");
 
         if (got_mode && !STRING_IS_NULL(mode))
-            SET_ATTR_mode(INTERP, SELF, Parrot_str_copy(INTERP, mode));
+            SET_ATTR_mode(INTERP, SELF, mode);
 
         if (got_filename && !STRING_IS_NULL(filename))
-            SET_ATTR_filename(INTERP, SELF, Parrot_str_copy(INTERP, filename));
+            SET_ATTR_filename(INTERP, SELF, filename);
 
         /* Open the file. With no options, reopen the same file as before */
         GET_ATTR_filename(INTERP, SELF, open_filename);
@@ -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;
@@ -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/include_dynpmc_makefile/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/fixedbooleanarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/fixedbooleanarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
 }
 
@@ -270,9 +283,9 @@
 
         for (i = 0; i < elems; i++) {
             if (SELF.get_integer_keyed_int((INTVAL)i))
-                str = Parrot_str_concat(INTERP, str, one, 0);
+                str = Parrot_str_concat(INTERP, str, one);
             else
-                str = Parrot_str_concat(INTERP, str, zero, 0);
+                str = Parrot_str_concat(INTERP, str, zero);
         }
 
         return str;

Modified: branches/include_dynpmc_makefile/src/pmc/fixedfloatarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/fixedfloatarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/fixedfloatarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;

Modified: branches/include_dynpmc_makefile/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/fixedintegerarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/fixedintegerarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
@@ -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;
     }
 

Modified: branches/include_dynpmc_makefile/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/fixedpmcarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/fixedpmcarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
@@ -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 *);
-
-        for (i = 0; i < size; i++)
-            data[i] = PMCNULL;
+        SELF.set_integer_native(size);
 
-        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;
     }
@@ -404,7 +401,7 @@
                     _("FixedPMCArray: Cannot set array size to a negative number"));
 
         PMC_size(SELF) = size;
-        data           = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+        data           = mem_gc_allocate_n_typed(INTERP, size, PMC *);
 
         for (i = 0; i < size; i++)
             data[i] = PMCNULL;
@@ -427,7 +424,7 @@
             mem_gc_free(INTERP, PMC_array(SELF));
 
         size            = PMC_size(SELF) = VTABLE_elements(INTERP, value);
-        PMC_array(SELF) = mem_gc_allocate_n_zeroed_typed(INTERP, size, PMC *);
+        PMC_array(SELF) = mem_gc_allocate_n_typed(INTERP, size, PMC *);
 
         for (i = 0; i < size; i++)
             (PMC_array(SELF))[i] = VTABLE_get_pmc_keyed_int(INTERP, value, i);

Modified: branches/include_dynpmc_makefile/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/fixedstringarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/fixedstringarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
@@ -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;
     }
 

Modified: branches/include_dynpmc_makefile/src/pmc/float.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/float.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/float.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
 

Modified: branches/include_dynpmc_makefile/src/pmc/handle.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/handle.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/handle.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -25,6 +25,10 @@
 #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      */

Modified: branches/include_dynpmc_makefile/src/pmc/hash.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/hash.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/hash.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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)
@@ -229,8 +250,8 @@
         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:
@@ -238,9 +259,9 @@
           case enum_type_PMC:
             new_hash = parrot_create_hash(interp,
                         (PARROT_DATA_TYPE)type,
-                        old_hash->key_type,
-                        old_hash->compare,
-                        old_hash->hash_val);
+                        old_hash ? old_hash->key_type : Hash_key_type_STRING,
+                        old_hash ? old_hash->compare : STRING_compare,
+                        old_hash ? old_hash->hash_val : (hash_hash_key_fn)key_hash_STRING);
             break;
           default:
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
@@ -250,7 +271,8 @@
         PARROT_HASH(SELF)->hash = new_hash;
         new_hash->container     = SELF;
 
-        parrot_hash_destroy(INTERP, old_hash);
+        if (old_hash)
+            parrot_hash_destroy(INTERP, old_hash);
     }
 
     METHOD get_value_type() {
@@ -335,23 +357,23 @@
             Parrot_str_free_cstring(key_str);
 
             if (all_digit) {
-                res = Parrot_str_append(INTERP, res, key);
+                res = Parrot_str_concat(INTERP, res, key);
             }
             else {
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "'"));
-                res = Parrot_str_append(INTERP, res, key);
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "'"));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "'"));
+                res = Parrot_str_concat(INTERP, res, key);
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "'"));
             }
 
-            res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ": "));
+            res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ": "));
             val = SELF.get_pmc_keyed_str(key);
-            res = Parrot_str_append(INTERP, res, VTABLE_get_string(INTERP, val));
+            res = Parrot_str_concat(INTERP, res, VTABLE_get_string(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "}"));
+        res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, "}"));
 
         return res;
     }
@@ -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/include_dynpmc_makefile/src/pmc/hashiterator.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/hashiterator.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/hashiterator.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
 
@@ -72,7 +91,8 @@
     }
     attrs->bucket = bucket;
     attrs->elements--;
-    return bucket;
+
+    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/include_dynpmc_makefile/src/pmc/hashiteratorkey.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/hashiteratorkey.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/hashiteratorkey.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pmc/imageio.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/imageio.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/imageio.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -116,25 +217,38 @@
 
 }
 
+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);
+    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,7 +260,7 @@
         break;
       case enum_PackID_normal:
         {
-            INTVAL type = VTABLE_shift_integer(interp, info);
+            const INTVAL type = VTABLE_shift_integer(interp, info);
             if (type <= 0 || type > interp->n_vtable_max)
                 Parrot_ex_throw_from_c_args(interp, NULL, 1, "Unknown PMC type to thaw %d", type);
 
@@ -168,8 +282,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,7 +296,7 @@
         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;
@@ -196,10 +312,11 @@
     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);
         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);
@@ -236,11 +353,11 @@
 
 */
     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_custom_mark_destroy_SETALL(SELF);
     }
@@ -257,6 +374,7 @@
 */
     VTABLE void destroy() {
         PackFile_destroy(INTERP, PARROT_IMAGEIO(SELF)->pf);
+        PARROT_IMAGEIO(SELF)->pf = NULL;
     }
 
 /*
@@ -345,7 +463,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);
         ensure_buffer_size(interp, SELF, len);
         SET_VISIT_CURSOR(SELF, (char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
     }
@@ -381,7 +499,7 @@
 
     VTABLE void push_string(STRING *v)
     {
-        size_t len = PF_size_string(v) * sizeof (opcode_t);
+        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 +531,9 @@
 
     VTABLE INTVAL shift_integer()
     {
-        opcode_t *pos  = GET_VISIT_CURSOR(SELF);
-        const INTVAL i = PF_fetch_integer(PARROT_IMAGEIO(SELF)->pf, (const opcode_t **)&pos);
+        const opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        const INTVAL i      = PF_fetch_integer(PARROT_IMAGEIO(SELF)->pf,
+                (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return i;
@@ -432,8 +551,9 @@
 */
 
     VTABLE FLOATVAL shift_float() {
-        opcode_t *pos    = GET_VISIT_CURSOR(SELF);
-        const FLOATVAL f = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf, (const opcode_t **)&pos);
+        const opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        const FLOATVAL f    = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf,
+                (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
         return f;
@@ -452,8 +572,8 @@
 
     VTABLE STRING *shift_string()
     {
-        opcode_t *pos    = GET_VISIT_CURSOR(SELF);
-        STRING * const s = PF_fetch_string(interp, PARROT_IMAGEIO(SELF)->pf,
+        const opcode_t *pos = GET_VISIT_CURSOR(SELF);
+        STRING * const s    = PF_fetch_string(interp, PARROT_IMAGEIO(SELF)->pf,
                                            (const opcode_t **)&pos);
         SET_VISIT_CURSOR(SELF, (char *)pos);
         BYTECODE_SHIFT_OK(SELF);
@@ -476,7 +596,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 +614,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);
 
@@ -509,16 +630,14 @@
         unpacked_length = PackFile_unpack(interp, PARROT_IMAGEIO(SELF)->pf,
             GET_VISIT_CURSOR(SELF), PARROT_IMAGEIO(SELF)->input_length);
 
-        if (!unpacked_length) {
+        if (unpacked_length)
+            INC_VISIT_CURSOR(SELF, header_length);
+        else
             Parrot_ex_throw_from_c_args(interp, NULL,
                     EXCEPTION_INVALID_STRING_REPRESENTATION,
                     "PackFile header failed during unpack");
-        }
-        else {
-            INC_VISIT_CURSOR(SELF, header_length);
-        }
 
-        visit_todo_list_thaw(INTERP, SELF);
+        unused = visit_todo_list_thaw(INTERP, SELF);
         Parrot_visit_loop_visit(INTERP, SELF);
 
         /* we're done reading the image */

Modified: branches/include_dynpmc_makefile/src/pmc/imageiosize.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/imageiosize.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/imageiosize.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +49,8 @@
     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);
         VTABLE_push_integer(interp, info, pmc->vtable->base_type);
         VTABLE_push_pmc(interp, PARROT_IMAGEIOSIZE(info)->todo, pmc);
@@ -113,7 +134,7 @@
 */
 
     VTABLE PMC *get_pmc() {
-        PMC *ret = Parrot_pmc_new(INTERP, enum_class_Integer);
+        PMC * const ret = Parrot_pmc_new(INTERP, enum_class_Integer);
         VTABLE_set_integer_native(INTERP, ret, PARROT_IMAGEIOSIZE(SELF)->size);
         return ret;
     }
@@ -157,7 +178,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 +195,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;
     }
 
@@ -191,7 +212,7 @@
 
     VTABLE void push_string(STRING *v)
     {
-        size_t len = PF_size_string(v) * sizeof (opcode_t);
+        const size_t len = PF_size_string(v) * sizeof (opcode_t);
         PARROT_IMAGEIOSIZE(SELF)->size += len;
     }
 

Modified: branches/include_dynpmc_makefile/src/pmc/integer.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/integer.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/integer.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
@@ -353,6 +381,7 @@
 
     MULTI void i_add(Complex value) {
         const INTVAL a = SELF.get_integer();
+        UNUSED(a);
 
         Parrot_pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
         VTABLE_set_number_native(INTERP, SELF,
@@ -373,7 +402,6 @@
         if ((c^a) >= 0 || (c^b) >= 0)
             VTABLE_set_integer_native(INTERP, SELF, c);
         else {
-            PMC *temp;
             maybe_throw_overflow_error(interp);
             SELF = upgrade_self_to_bignum(interp, SELF);
             VTABLE_i_add_int(interp, SELF, b);
@@ -854,7 +882,6 @@
 
     VTABLE void i_floor_divide_float(FLOATVAL value) {
         FLOATVAL f;
-        INTVAL   self_val;
 
         if (FLOAT_IS_ZERO(value))
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_DIV_BY_ZERO,

Modified: branches/include_dynpmc_makefile/src/pmc/iterator.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/iterator.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/iterator.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -57,6 +57,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass Iterator no_ro {
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/key.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/key.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/key.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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:

Modified: branches/include_dynpmc_makefile/src/pmc/lexinfo.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/lexinfo.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/lexinfo.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
@@ -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);
     }
 
 /*
@@ -95,9 +97,10 @@
 
     VTABLE PMC *inspect_str(STRING *what) {
         if (Parrot_str_equal(interp, what, CONST_STRING(interp, "symbols"))) {
-            PMC *result     = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
-            Hash *hash      = (Hash *)SELF.get_pointer();
-            UINTVAL entries = hash->entries;
+            PMC * const result    = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
+            const Hash *hash      = (Hash *)SELF.get_pointer();
+            const UINTVAL entries = hash->entries;
+
             UINTVAL found   = 0;
             INTVAL  i;
 

Modified: branches/include_dynpmc_makefile/src/pmc/lexpad.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/lexpad.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/lexpad.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pmc/managedstruct.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/managedstruct.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/managedstruct.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Modified: branches/include_dynpmc_makefile/src/pmc/multisub.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/multisub.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/multisub.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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() {
@@ -79,7 +83,7 @@
 
     /* 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;

Modified: branches/include_dynpmc_makefile/src/pmc/namespace.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/namespace.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/namespace.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
 
@@ -312,13 +409,12 @@
             }
             else {
                 /* create new tuple */
-                new_tuple = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+                /* for a fully typed namespace, we'd need 3 or 4 */
+                new_tuple = Parrot_pmc_new_init_int(INTERP,
+                        enum_class_FixedPMCArray, NS_max_slots);
 
                 /* flag it as special */
                 PObj_get_FLAGS(new_tuple) |= FPA_is_ns_ext;
-
-                /* for a fully typed namespace, we'd need 3 or 4 */
-                VTABLE_set_integer_native(INTERP, new_tuple, NS_max_slots);
             }
         }
 
@@ -429,7 +525,7 @@
             INTVAL i = 0;
             while (!PMC_IS_NULL(ns) && VTABLE_elements(INTERP, key)) {
                 STRING * const name = VTABLE_get_string_keyed_int(INTERP, key, i);
-                if (name == NULL || name == STRINGNULL) {
+                if (STRING_IS_NULL(name)) {
                     ns = PMCNULL;
                     /* What to do here? Throw an exception or something? */
                     break;
@@ -1008,7 +1104,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/include_dynpmc_makefile/src/pmc/nci.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/nci.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/nci.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
+        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/include_dynpmc_makefile/src/pmc/null.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/null.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/null.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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));

Modified: branches/include_dynpmc_makefile/src/pmc/object.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/object.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/object.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
 
@@ -430,7 +500,7 @@
         Parrot_Class_attributes  * const _class    = PARROT_CLASS(obj->_class);
         STRING * const meth_name = CONST_STRING(interp, "get_integer");
 
-        /* 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++) {
@@ -447,7 +517,7 @@
             }
             /* 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. */
+                /* 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, pmc, proxy);
 
@@ -643,7 +713,7 @@
         Parrot_Object_attributes * const obj    = PARROT_OBJECT(pmc);
         Parrot_Class_attributes  * const _class = PARROT_CLASS(obj->_class);
 
-        /* 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;
 
@@ -660,8 +730,7 @@
             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 ||
+                if ((VTABLE_elements(interp, call_sig) == 0 ||
                         VTABLE_get_pmc_keyed_int(interp, call_sig, 0) != SELF))
                     VTABLE_unshift_pmc(interp, call_sig, SELF);
 
@@ -669,7 +738,7 @@
             }
 
             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);
 
@@ -713,14 +782,16 @@
         STRING * const meth_name = CONST_STRING(interp, "clone");
         PMC * const meth =
                 Parrot_oo_find_vtable_override(interp, obj->_class, meth_name);
+        PMC *result;
+
         if (!PMC_IS_NULL(meth)) {
-            PMC *result;
-            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->P",
-                    pmc, &result);
-            return result;
+            Parrot_pcc_invoke_sub_from_c_args(interp, meth, "Pi->P", pmc, &result);
         }
-        else
-            return Parrot_oo_clone_object(interp, SELF, obj->_class, NULL);
+        else {
+            result = Parrot_oo_clone_object(interp, SELF, NULL);
+        }
+
+        return result;
     }
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/opcode.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/opcode.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/opcode.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -16,6 +16,10 @@
 
 #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;
@@ -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/include_dynpmc_makefile/src/pmc/oplib.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/oplib.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/oplib.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;

Modified: branches/include_dynpmc_makefile/src/pmc/orderedhash.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/orderedhash.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/orderedhash.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -77,9 +77,70 @@
 
 */
 
+/* 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) {
+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;
@@ -100,7 +161,10 @@
 /* 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) {
+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)) {
@@ -118,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);
@@ -259,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);
 
@@ -369,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))
@@ -382,10 +461,13 @@
     }
 
     VTABLE PMC *get_pmc_keyed_str(STRING *key) {
-        PMC * const 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);
     }
 /*
 

Modified: branches/include_dynpmc_makefile/src/pmc/orderedhashiterator.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/orderedhashiterator.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/orderedhashiterator.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */

Modified: branches/include_dynpmc_makefile/src/pmc/os.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/os.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/os.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -34,6 +34,10 @@
 /* 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 singleton {
 

Modified: branches/include_dynpmc_makefile/src/pmc/packfile.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfile.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfile.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
 
@@ -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 =
+        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;
@@ -148,18 +168,21 @@
 =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);
+        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
+        PackFile                   * const pf    = PackFile_new(interp, 0);
+        const opcode_t             * const ptr   =
+                (const opcode_t *)Parrot_string_cstring(interp, str);
+
+        const int length = Parrot_str_byte_length(interp, str);
 
         if (!PackFile_unpack(interp, pf, ptr, length)) {
             PackFile_destroy(interp, pf);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
-                                        "Can't unpack packfile.");
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_MALFORMED_PACKFILE, "Can't unpack packfile.");
         }
 
         /* Disable GC during copy data into internal structures. */
@@ -210,7 +233,8 @@
 
 */
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        Parrot_Packfile_attributes *attrs = PARROT_PACKFILE(SELF);
+        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")))
@@ -313,7 +337,7 @@
 
 */
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        Parrot_Packfile_attributes *attrs = PARROT_PACKFILE(SELF);
+        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
         if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "version_major"))) {
             attrs->version_major = value;
             return;
@@ -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/include_dynpmc_makefile/src/pmc/packfileannotation.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfileannotation.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfileannotation.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +61,7 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileAnnotation_attributes * attrs =
+        Parrot_PackfileAnnotation_attributes * const attrs =
                 PARROT_PACKFILEANNOTATION(SELF);
 
         Parrot_gc_mark_STRING_alive(interp, attrs->name);
@@ -133,7 +137,7 @@
 
 */
     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,
                 "Trying to fetch wrong type of value from annotation");
@@ -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,7 +170,7 @@
 
 */
     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,
                 "Trying to fetch wrong type of value from annotation");
@@ -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,7 +203,7 @@
 
 */
     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,
                 "Trying to fetch wrong type of value from annotation");
@@ -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/include_dynpmc_makefile/src/pmc/packfileannotations.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfileannotations.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfileannotations.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -307,8 +311,7 @@
             PMC * key_array = VTABLE_get_pmc_keyed_str(interp, keys, entity_attrs->name);
             if (PMC_IS_NULL(key_array)) {
                 /* Never see this name before. Create new FIA and add to keys. */
-                key_array = Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
-                VTABLE_set_integer_native(interp, key_array, 3);
+                key_array = Parrot_pmc_new_init_int(interp, enum_class_FixedIntegerArray, 3);
                 VTABLE_set_integer_keyed_int(interp, key_array, 0, -1);
                 VTABLE_set_integer_keyed_int(interp, key_array, 1, -1);
                 VTABLE_set_integer_keyed_int(interp, key_array, 2, -1);

Modified: branches/include_dynpmc_makefile/src/pmc/packfileconstanttable.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfileconstanttable.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfileconstanttable.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +46,7 @@
 */
 
     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);
@@ -63,7 +67,7 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileConstantTable_attributes * attrs =
+        Parrot_PackfileConstantTable_attributes * const attrs =
                 PARROT_PACKFILECONSTANTTABLE(SELF);
 
         Parrot_gc_mark_PMC_alive(interp, attrs->constants);
@@ -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);
@@ -126,11 +130,10 @@
 
 */
     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;
@@ -141,7 +144,7 @@
                 pftable->const_count, PackFile_Constant*);
 
         for (i = 0; i < pftable->const_count; ++i) {
-            value = PackFile_Constant_new(interp);
+            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:
@@ -243,7 +246,7 @@
 
 */
     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);
@@ -262,7 +265,7 @@
 */
 
     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);
@@ -280,10 +283,10 @@
 
 */
     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;
 
@@ -354,19 +357,18 @@
 
 */
     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);
@@ -374,19 +376,18 @@
     }
 
     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);
@@ -394,23 +395,22 @@
     }
 
     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);

Modified: branches/include_dynpmc_makefile/src/pmc/packfiledirectory.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfiledirectory.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfiledirectory.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -144,7 +148,7 @@
             PackFile_Segment * const pfseg = (PackFile_Segment *)VTABLE_get_pointer(interp, seg);
 
             pfseg->pf   = pf;
-            pfseg->name = Parrot_str_copy(interp, name);
+            pfseg->name = name;
             PackFile_add_segment(interp, pfdir, pfseg);
         }
 

Modified: branches/include_dynpmc_makefile/src/pmc/packfilefixupentry.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfilefixupentry.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfilefixupentry.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -19,6 +19,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass PackfileFixupEntry auto_attrs {
     ATTR INTVAL     type;
     ATTR STRING     *name;

Modified: branches/include_dynpmc_makefile/src/pmc/packfilefixuptable.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfilefixuptable.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfilefixuptable.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;

Modified: branches/include_dynpmc_makefile/src/pmc/packfilerawsegment.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfilerawsegment.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfilerawsegment.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -61,7 +65,7 @@
 */
 
     VTABLE void mark() {
-        Parrot_PackfileRawSegment_attributes * attrs =
+        Parrot_PackfileRawSegment_attributes * const attrs =
                 PARROT_PACKFILERAWSEGMENT(SELF);
 
         Parrot_gc_mark_PMC_alive(interp, attrs->opcodes);
@@ -83,15 +87,16 @@
     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);
             /* Not very efficient... */
@@ -112,7 +117,7 @@
     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;
@@ -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/include_dynpmc_makefile/src/pmc/packfilesegment.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/packfilesegment.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/packfilesegment.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Modified: branches/include_dynpmc_makefile/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/parrotinterpreter.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/parrotinterpreter.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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.
 
@@ -127,11 +140,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 +163,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 +172,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 +245,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 +268,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 +317,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);
@@ -441,7 +456,7 @@
 */
 
     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");
@@ -487,7 +502,7 @@
         }
         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,
@@ -712,7 +727,7 @@
 
     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 +761,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 +803,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 +826,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/include_dynpmc_makefile/src/pmc/parrotlibrary.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/parrotlibrary.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/parrotlibrary.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */

Modified: branches/include_dynpmc_makefile/src/pmc/parrotrunningthread.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/parrotrunningthread.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/parrotrunningthread.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -32,6 +32,10 @@
 
 #define PMC_tid(x) (PARROT_PARROTRUNNINGTHREAD(x))->tid
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 pmclass ParrotRunningThread no_ro auto_attrs {
     ATTR INTVAL tid; /* thread id */
 

Modified: branches/include_dynpmc_makefile/src/pmc/parrotthread.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/parrotthread.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/parrotthread.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2007, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -40,13 +40,43 @@
 
 #define PMC_interp(x) ((Parrot_ParrotInterpreter_attributes *)PMC_data(x))->interp
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static INTVAL do_thread_run(PARROT_INTERP,
+    ARGIN(PMC *thread),
+    INTVAL clone_flags,
+    ARGIN(PMC *sub),
+    ARGIN(PMC *args))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5);
+
+static void stop_GC(ARGIN(Interp *parent), ARGIN(Interp *thread))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_do_thread_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(thread) \
+    , PARROT_ASSERT_ARG(sub) \
+    , PARROT_ASSERT_ARG(args))
+#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 */
+
 /*
  * can't do multi-threaded GC yet
  * XXX a quick hack to pass the few tests
  */
 static void
-stop_GC(Interp *parent, Interp *thread)
+stop_GC(ARGIN(Interp *parent), ARGIN(Interp *thread))
 {
+    ASSERT_ARGS(stop_GC)
     Parrot_block_GC_mark(parent);
     Parrot_block_GC_mark(thread);
     Parrot_block_GC_sweep(parent);
@@ -57,9 +87,13 @@
    coke's]
  */
 
-static INTVAL do_thread_run(PARROT_INTERP, PMC *thread,
-                            INTVAL clone_flags, PMC *sub, PMC *args) {
-    INTVAL tid = VTABLE_get_integer(interp, thread);
+static INTVAL
+do_thread_run(PARROT_INTERP, ARGIN(PMC *thread),
+                            INTVAL clone_flags, ARGIN(PMC *sub), ARGIN(PMC *args))
+{
+    ASSERT_ARGS(do_thread_run)
+
+    const INTVAL tid = VTABLE_get_integer(interp, thread);
 
     if (PMC_IS_NULL(sub)) {
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,

Modified: branches/include_dynpmc_makefile/src/pmc/pmcproxy.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/pmcproxy.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/pmcproxy.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -63,6 +63,10 @@
 
 */
 
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
 
 pmclass PMCProxy extends Class auto_attrs {
 
@@ -314,15 +318,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);
     }
 
 /*
@@ -464,7 +465,7 @@
 */
 
     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)
@@ -485,9 +486,7 @@
 
     VTABLE STRING *get_string() {
         Parrot_Class_attributes * const proxy_info = PARROT_CLASS(SELF);
-
-        /* Copy the stored string name of the proxy. */
-        return Parrot_str_copy(interp, proxy_info->name);
+        return proxy_info->name;
     }
 
 

Modified: branches/include_dynpmc_makefile/src/pmc/pointer.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/pointer.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/pointer.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pmc/resizablebooleanarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/resizablebooleanarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/resizablebooleanarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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)

Modified: branches/include_dynpmc_makefile/src/pmc/resizablefloatarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/resizablefloatarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/resizablefloatarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
 

Modified: branches/include_dynpmc_makefile/src/pmc/resizableintegerarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/resizableintegerarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/resizableintegerarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
 

Modified: branches/include_dynpmc_makefile/src/pmc/resizablepmcarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/resizablepmcarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/resizablepmcarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -281,8 +285,8 @@
     }
 
     VTABLE void delete_keyed_int(INTVAL idx) {
-        PMC   **data = PMC_array(SELF);
-        INTVAL  n    = PMC_size(SELF);
+        PMC ** const data = PMC_array(SELF);
+        const INTVAL  n   = PMC_size(SELF);
         INTVAL  i;
 
         for (i = idx; i < n - 1; ++i)
@@ -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,8 +381,8 @@
 
     VTABLE void push_integer(INTVAL value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_Integer);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_Integer);
 
         VTABLE_set_integer_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -387,9 +391,14 @@
     }
 
     VTABLE void push_pmc(PMC *value) {
+        const INTVAL size   = PMC_size(SELF);
+        const INTVAL thresh = PMC_threshold(SELF);
 
-        INTVAL size = PMC_size(SELF);
-        SELF.set_integer_native(size + 1);
+        if (PMC_array(SELF) && size < thresh)
+            PMC_size(SELF) = size + 1;
+        else {
+            SELF.set_integer_native(size + 1);
+        }
         ((PMC **)PMC_array(SELF))[size] = value;
 
         return;
@@ -397,8 +406,8 @@
 
     VTABLE void push_string(STRING *value) {
 
-        INTVAL size = PMC_size(SELF);
-        PMC   *val  = Parrot_pmc_new(INTERP, enum_class_String);
+        const INTVAL size = PMC_size(SELF);
+        PMC   * const val = Parrot_pmc_new(INTERP, enum_class_String);
 
         VTABLE_assign_string_native(INTERP, val, value);
         SELF.set_pmc_keyed_int(size, val);
@@ -501,8 +510,8 @@
 
     VTABLE void unshift_float(FLOATVAL value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_Float);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val   = Parrot_pmc_new(INTERP, enum_class_Float);
         PMC   **data;
         INTVAL  i;
 
@@ -521,8 +530,8 @@
 
     VTABLE void unshift_integer(INTVAL value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_Integer);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val   = Parrot_pmc_new(INTERP, enum_class_Integer);
         PMC    **data;
         INTVAL   i;
 
@@ -541,7 +550,7 @@
 
     VTABLE void unshift_pmc(PMC *value) {
 
-        INTVAL  size = PMC_size(SELF);
+        const INTVAL size = PMC_size(SELF);
         PMC   **data;
         INTVAL  i;
 
@@ -559,8 +568,8 @@
 
     VTABLE void unshift_string(STRING *value) {
 
-        INTVAL  size = PMC_size(SELF);
-        PMC    *val  = Parrot_pmc_new(INTERP, enum_class_String);
+        const INTVAL size = PMC_size(SELF);
+        PMC * const val  = Parrot_pmc_new(INTERP, enum_class_String);
         PMC   **data;
         INTVAL  i;
 
@@ -588,7 +597,7 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *copy = SUPER();
+        PMC * const copy = SUPER();
 
         /* copy trimmed extra space */
         PMC_threshold(copy) = PMC_size(SELF);
@@ -608,9 +617,8 @@
 
     METHOD append(PMC *other) {
 
-        INTVAL i;
-        INTVAL n = VTABLE_elements(INTERP, SELF);
-        INTVAL m = VTABLE_elements(INTERP, other);
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
+        const INTVAL m = VTABLE_elements(INTERP, other);
 
         if (!m)
             RETURN(void);
@@ -620,14 +628,15 @@
 
         if (other->vtable->base_type == SELF->vtable->base_type
         ||  other->vtable->base_type == enum_class_FixedPMCArray) {
-            PMC **other_data = PMC_array(other);
-            PMC **this_data  = PMC_array(SELF);
+            PMC ** const other_data = PMC_array(other);
+            PMC ** const this_data  = PMC_array(SELF);
 
             /* libc is faster at copying data than a manual loop here */
             memmove(this_data + n, other_data, m  * sizeof (PMC *));
         }
         else {
-            PMC **this_data = PMC_array(SELF);
+            PMC ** const this_data = PMC_array(SELF);
+            INTVAL i;
 
             for (i = 0; i < m; ++i)
                 this_data[n + i] = VTABLE_get_pmc_keyed_int(INTERP, other, i);
@@ -646,18 +655,18 @@
     VTABLE STRING *get_repr() {
 
         INTVAL  j;
-        INTVAL  n   = VTABLE_elements(INTERP, SELF);
+        const INTVAL n = VTABLE_elements(INTERP, SELF);
         STRING *res = CONST_STRING(INTERP, "[ ");
 
         for (j = 0; j < n; ++j) {
-            PMC *val = SELF.get_pmc_keyed_int(j);
-            res      = Parrot_str_append(INTERP, res, VTABLE_get_repr(INTERP, val));
+            PMC * const val = SELF.get_pmc_keyed_int(j);
+            res      = Parrot_str_concat(INTERP, res, VTABLE_get_repr(INTERP, val));
 
             if (j < n - 1)
-                res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, ", "));
+                res = Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, ", "));
         }
 
-        return Parrot_str_append(INTERP, res, CONST_STRING(INTERP, " ]"));
+        return Parrot_str_concat(INTERP, res, CONST_STRING(INTERP, " ]"));
     }
 
 /*
@@ -680,7 +689,7 @@
 
         const INTVAL length = VTABLE_elements(INTERP, SELF);
         const INTVAL elems  = VTABLE_elements(INTERP, value);
-        INTVAL       shift  = elems - count;
+        const INTVAL shift  = elems - count;
         INTVAL       i;
 
         /* start from end? */
@@ -731,12 +740,12 @@
 */
 
     METHOD shift() {
-        PMC *value = VTABLE_shift_pmc(INTERP, SELF);
+        PMC * const value = VTABLE_shift_pmc(INTERP, SELF);
         RETURN(PMC *value);
     }
 
     METHOD pop() {
-        PMC *value = VTABLE_pop_pmc(INTERP, SELF);
+        PMC * const value = VTABLE_pop_pmc(INTERP, SELF);
         RETURN(PMC *value);
     }
 

Modified: branches/include_dynpmc_makefile/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/resizablestringarray.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/resizablestringarray.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */
 
@@ -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);
     }
 
@@ -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;
@@ -264,7 +268,7 @@
 */
 
     VTABLE PMC *clone() {
-        PMC *copy = SUPER();
+        PMC * const copy = SUPER();
         INTVAL size;
         GET_ATTR_size(interp, SELF, size);
         /* copy trimmed extra space */
@@ -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;
 
@@ -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/include_dynpmc_makefile/src/pmc/retcontinuation.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/retcontinuation.pmc	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/src/pmc/role.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/role.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/role.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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. */
@@ -495,7 +515,7 @@
         }
 
         /* Otherwise, copy the stored string name of the class. */
-        return Parrot_str_copy(interp, role->name);
+        return role->name;
     }
 
 /*
@@ -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).
      */
@@ -750,7 +770,7 @@
     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);
         else

Modified: branches/include_dynpmc_makefile/src/pmc/scalar.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/scalar.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/scalar.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
     }
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/scheduler.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/scheduler.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/scheduler.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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. */

Modified: branches/include_dynpmc_makefile/src/pmc/schedulermessage.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/schedulermessage.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/schedulermessage.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
     }
 

Modified: branches/include_dynpmc_makefile/src/pmc/sockaddr.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/sockaddr.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/sockaddr.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pmc/socket.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/socket.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/socket.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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                  */

Modified: branches/include_dynpmc_makefile/src/pmc/string.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/string.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/string.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
@@ -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,7 +536,7 @@
 */
 
     METHOD to_int(INTVAL base) {
-        PMC *result = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp,
+        PMC * const result = Parrot_pmc_new(INTERP, Parrot_get_ctx_HLL_type(interp,
                         enum_class_Integer));
 
         /* TODO verify encoding */
@@ -571,7 +571,7 @@
         }
 
         if (j < len) {
-            char ch = str[j];
+            const char ch = str[j];
             Parrot_str_free_cstring(str);
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
                     "invalid conversion to int - bad char %c", ch);
@@ -699,7 +699,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
                 "Can't translate non-ascii");
 
-        p = (unsigned char *)Buffer_bufstart(src);
+        p = (unsigned char *)(src->strstart);
         /* TODO verify trans table */
 
         GETATTR_FixedIntegerArray_int_array(INTERP, table, tr_data);

Modified: branches/include_dynpmc_makefile/src/pmc/stringhandle.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/stringhandle.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/stringhandle.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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(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, 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(STRING *s))
 {
+    ASSERT_ARGS(encoding_is_utf8)
     if (STRING_IS_NULL(s))
         return 0;
     else
@@ -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;
@@ -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. */
@@ -305,8 +317,6 @@
             else
                 string_result = Parrot_str_new_constant(INTERP, "");
         }
-        else
-            string_result = Parrot_str_copy(INTERP, string_result);
 
         RETURN(STRING *string_result);
     }
@@ -366,7 +376,7 @@
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_PIO_ERROR,
                 "Cannot write to a filehandle not opened for write");
 
-        new_string = Parrot_str_append(interp, old_string, to_print);
+        new_string = Parrot_str_concat(interp, old_string, to_print);
 
         SET_ATTR_stringhandle(INTERP, SELF, new_string);
 
@@ -452,13 +462,9 @@
 */
 
     METHOD mode() {
-        STRING *mode, *mode_copy;
-
+        STRING *mode;
         GET_ATTR_mode(INTERP, SELF, mode);
-        mode_copy = Parrot_str_copy(INTERP, mode);
-
-        RETURN(STRING *mode_copy);
-
+        RETURN(STRING *mode);
     }
 
 /*
@@ -474,21 +480,14 @@
 
     METHOD encoding(STRING *new_encoding :optional, INTVAL got_encoding :opt_flag) {
         STRING *encoding;
-        STRING *encoding_copy = NULL;
 
         if (got_encoding) {
-            if (!STRING_IS_NULL(new_encoding))
-                encoding_copy = Parrot_str_copy(INTERP, new_encoding);
-            SET_ATTR_encoding(INTERP, SELF, encoding_copy);
+            SET_ATTR_encoding(INTERP, SELF, new_encoding);
             RETURN(STRING *new_encoding);
         }
 
         GET_ATTR_encoding(INTERP, SELF, encoding);
-        if (!STRING_IS_NULL(encoding))
-            encoding_copy = Parrot_str_copy(INTERP, encoding);
-
-        RETURN(STRING *encoding_copy);
-
+        RETURN(STRING *encoding);
     }
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/stringiterator.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/stringiterator.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/stringiterator.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/pmc/sub.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/sub.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/sub.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +405,10 @@
         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);
@@ -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
@@ -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,
@@ -865,10 +849,10 @@
             /* 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);
@@ -1016,7 +1000,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;

Modified: branches/include_dynpmc_makefile/src/pmc/task.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/task.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/task.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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. */

Modified: branches/include_dynpmc_makefile/src/pmc/timer.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/timer.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/timer.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 */

Modified: branches/include_dynpmc_makefile/src/pmc/undef.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/undef.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/undef.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 {
 
 /*

Modified: branches/include_dynpmc_makefile/src/pmc/unmanagedstruct.pmc
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc/unmanagedstruct.pmc	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc/unmanagedstruct.pmc	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);
     }
 
@@ -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, pmc, 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, pmc, 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, pmc, 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, pmc, 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, pmc, 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, pmc, key, &type);
         return ret_string(INTERP, p, type);
     }
 
@@ -907,7 +1053,7 @@
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
         int   type;
-        char *p = char_offset_int(INTERP, pmc, key, &type);
+        char * const p = char_offset_int(INTERP, pmc, key, &type);
         return ret_pmc(INTERP, pmc, p, type, key);
     }
 
@@ -923,7 +1069,7 @@
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
         int   type;
-        char *p = char_offset_key(INTERP, pmc, key, &type);
+        char * const p = char_offset_key(INTERP, pmc, key, &type);
         return ret_pmc(INTERP, pmc, p, type, key_2_idx(INTERP, pmc, key));
     }
 
@@ -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, pmc, 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, pmc, 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, pmc, 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, pmc, 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, pmc, 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, pmc, 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/include_dynpmc_makefile/src/pmc_freeze.c
==============================================================================
--- branches/include_dynpmc_makefile/src/pmc_freeze.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/pmc_freeze.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -54,7 +54,7 @@
 Parrot_freeze(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze)
-    PMC *image = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const image = Parrot_pmc_new(interp, enum_class_ImageIO);
     VTABLE_set_pmc(interp, image, pmc);
     return VTABLE_get_string(interp, image);
 }
@@ -80,7 +80,7 @@
     ASSERT_ARGS(Parrot_freeze_size)
     UINTVAL int_result;
     PMC    *pmc_result;
-    PMC    *visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
+    PMC    * const visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
     VTABLE_set_pmc(interp, visitor, pmc);
     pmc_result = VTABLE_get_pmc(interp, visitor);
     int_result = VTABLE_get_integer(interp, pmc_result);
@@ -112,7 +112,7 @@
 {
     ASSERT_ARGS(Parrot_thaw)
 
-    PMC        *info     = Parrot_pmc_new(interp, enum_class_ImageIO);
+    PMC * const info = Parrot_pmc_new(interp, enum_class_ImageIO);
     int         gc_block = 0;
     PMC        *result;
 
@@ -199,7 +199,8 @@
 */
 
 void
-Parrot_visit_loop_visit(PARROT_INTERP, ARGIN(PMC *info)) {
+Parrot_visit_loop_visit(PARROT_INTERP, ARGIN(PMC *info))
+{
     ASSERT_ARGS(Parrot_visit_loop_visit)
 
     INTVAL      i;
@@ -207,7 +208,7 @@
 
     /* can't cache upper limit, visit may append items */
     for (i = 0; i < VTABLE_elements(interp, todo); i++) {
-        PMC *current = VTABLE_get_pmc_keyed_int(interp, todo, i);
+        PMC * const current = VTABLE_get_pmc_keyed_int(interp, todo, i);
         if (!current)
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                     "NULL current PMC in visit_loop_todo_list");
@@ -231,7 +232,8 @@
 */
 
 void
-Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info)) {
+Parrot_visit_loop_thawfinish(PARROT_INTERP, ARGIN(PMC *info))
+{
     ASSERT_ARGS(Parrot_visit_loop_thawfinish)
 
     /* call thawfinish for each processed PMC */
@@ -267,10 +269,6 @@
 
 Lot of discussion on p6i and F<docs/dev/pmc_freeze.pod>.
 
-=head1 HISTORY
-
-Initial version by leo 2003.11.03 - 2003.11.07.
-
 =cut
 
 */

Copied: branches/include_dynpmc_makefile/src/runcore/.gitignore (from r45870, trunk/src/runcore/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/runcore/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/runcore/.gitignore)
@@ -0,0 +1,3 @@
+/*.o
+/*.obj
+/*.str

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

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

Modified: branches/include_dynpmc_makefile/src/runcore/profiling.c
==============================================================================
--- branches/include_dynpmc_makefile/src/runcore/profiling.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/runcore/profiling.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -387,12 +387,12 @@
                 i++;
                 i++; /* the root namespace has an empty name, so ignore it */
                 for (;i < MAX_NS_DEPTH; i++) {
-                    full_ns = Parrot_str_concat(interp, full_ns, ns_names[i], 0);
-                    full_ns = Parrot_str_concat(interp, full_ns, ns_separator, 0);
+                    full_ns = Parrot_str_concat(interp, full_ns, ns_names[i]);
+                    full_ns = Parrot_str_concat(interp, full_ns, ns_separator);
                 }
 
                 GETATTR_Sub_name(interp, preop_ctx->current_sub, sub_name);
-                full_ns = Parrot_str_concat(interp, full_ns, sub_name, 0);
+                full_ns = Parrot_str_concat(interp, full_ns, sub_name);
                 full_ns_cstr = Parrot_str_to_cstring(interp, full_ns);
 
                 pprof_data[PPROF_DATA_NAMESPACE] = (PPROF_DATA) full_ns_cstr;

Modified: branches/include_dynpmc_makefile/src/runcore/trace.c
==============================================================================
--- branches/include_dynpmc_makefile/src/runcore/trace.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/runcore/trace.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,7 +309,7 @@
                 "NULL sig PMC detected in trace_op_dump");
 
         var_args = VTABLE_elements(interp, sig);
-        n += var_args;
+        n       += var_args;
     }
 
     if (n > 1) {
@@ -314,9 +318,9 @@
         /* pass 1 print arguments */
         for (i = s; i < n; i++) {
             const opcode_t o = pc[i];
-            if (i < info->op_count) {
+
+            if (i < info->op_count)
                 type = info->types[i - 1];
-            }
             else {
                 if (!sig)
                     Parrot_ex_throw_from_c_args(interp, NULL, 1,
@@ -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,17 +402,17 @@
                 break;
             }
         }
+
         if (!more)
             goto done;
+
         if (len < ARGS_COLUMN)  {
             STRING * const fill = Parrot_str_repeat(debugger,
-                    Parrot_str_new_constant(debugger, " "),
-                    ARGS_COLUMN);
+                    Parrot_str_new_constant(debugger, " "), ARGS_COLUMN);
             Parrot_io_putps(debugger, Parrot_io_STDERR(debugger), fill);
         }
-        else {
+        else
             Parrot_io_eprintf(debugger, "\t");
-        }
 
         /* pass 2 print argument details if needed */
         for (i = 1; i < n; i++) {
@@ -413,9 +422,10 @@
             else
                 type = VTABLE_get_integer_keyed_int(interp, sig, i - 2) &
                     (PARROT_ARG_TYPE_MASK|PARROT_ARG_CONSTANT);
-            if (i > s) {
+
+            if (i > s)
                 Parrot_io_eprintf(debugger, " ");
-            }
+
             switch (type) {
               case PARROT_ARG_I:
                 Parrot_io_eprintf(debugger, "I%vd=%vd", o, REG_INT(interp, o));
@@ -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/include_dynpmc_makefile/src/scheduler.c
==============================================================================
--- branches/include_dynpmc_makefile/src/scheduler.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/scheduler.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -18,6 +18,7 @@
 
 #include "parrot/parrot.h"
 #include "parrot/scheduler_private.h"
+#include "parrot/runcore_api.h"
 
 #include "pmc/pmc_scheduler.h"
 #include "pmc/pmc_task.h"
@@ -328,7 +329,7 @@
     FLOATVAL duration = VTABLE_get_number_keyed_int(interp, task,
             PARROT_TIMER_INTERVAL);
     if (repeat != 0) {
-        PMC *repeat_task = VTABLE_clone(interp, task);
+        PMC * const repeat_task = VTABLE_clone(interp, task);
         VTABLE_set_number_keyed_int(interp, repeat_task, PARROT_TIMER_NSEC, duration);
 
         if (repeat > 0)
@@ -356,7 +357,7 @@
         ARGIN(PMC *user_data), ARGIN(char *ext_data))
 {
     ASSERT_ARGS(Parrot_cx_schedule_callback)
-    PMC *callback = Parrot_pmc_new(interp, enum_class_Task);
+    PMC * const callback = Parrot_pmc_new(interp, enum_class_Task);
     Parrot_Task_attributes * const task_struct = PARROT_TASK(callback);
 
     task_struct->type    = CONST_STRING(interp, "callback");
@@ -530,11 +531,10 @@
             Parrot_str_equal(interp, handler_type, event_str) ?
                 Hevent :
                 Hunknown;
-        STRING * const handler_name = (htype == Hexception) ?
-            handler_str : (STRING *) NULL;
+        STRING * const handler_name = (htype == Hexception) ? handler_str : (STRING *)NULL;
 
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
+            PMC * const handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 switch (htype) {
                   case Hexception:
@@ -578,7 +578,7 @@
 Parrot_cx_count_handlers_local(PARROT_INTERP, ARGIN(STRING *handler_type))
 {
     ASSERT_ARGS(Parrot_cx_count_handlers_local)
-    PMC *handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
+    PMC * const handlers = Parrot_pcc_get_handlers(interp, interp->ctx);
     INTVAL elements;
 
     if (PMC_IS_NULL(handlers))
@@ -604,11 +604,10 @@
             (Parrot_str_equal(interp, handler_type, event_str)) ?
                 Hevent :
                 Hunknown;
-        STRING * const handler_name = (htype == Hexception) ?
-            handler_str : (STRING *) NULL;
+        STRING * const handler_name = (htype == Hexception) ? handler_str : (STRING *)NULL;
 
         for (index = 0; index < elements; ++index) {
-            PMC *handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
+            PMC * const handler = VTABLE_get_pmc_keyed_int(interp, handlers, index);
             if (!PMC_IS_NULL(handler)) {
                 switch (htype) {
                   case Hexception:
@@ -644,7 +643,7 @@
 Parrot_cx_add_handler(PARROT_INTERP, ARGIN(PMC *handler))
 {
     ASSERT_ARGS(Parrot_cx_add_handler)
-    STRING *add_handler = CONST_STRING(interp, "add_handler");
+    STRING * const add_handler = CONST_STRING(interp, "add_handler");
     if (!interp->scheduler)
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
             "Scheduler was not initialized for this interpreter.\n");
@@ -894,7 +893,7 @@
         keep_context = context;
         /* Loop from newest handler to oldest handler. */
         while (!PMC_IS_NULL(iter) && VTABLE_get_bool(interp, iter)) {
-            PMC *handler = VTABLE_shift_pmc(interp, iter);
+            PMC * const handler = VTABLE_shift_pmc(interp, iter);
 
             if (!PMC_IS_NULL(handler)) {
                 INTVAL valid_handler = 0;

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

Modified: branches/include_dynpmc_makefile/src/spf_vtable.c
==============================================================================
--- branches/include_dynpmc_makefile/src/spf_vtable.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/spf_vtable.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -453,7 +453,7 @@
     obj->index++;
     s = VTABLE_get_string(interp, tmp);
     /* XXX Parrot_str_copy like below? + adjusting bufused */
-    return Parrot_str_substr(interp, s, 0, 1, NULL, 0);
+    return Parrot_str_substr(interp, s, 0, 1);
 }
 
 /*

Copied: branches/include_dynpmc_makefile/src/string/.gitignore (from r45870, trunk/src/string/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/string/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/string/.gitignore)
@@ -0,0 +1,4 @@
+/private_cstring.h
+/*.o
+/*.obj
+/*.str

Modified: branches/include_dynpmc_makefile/src/string/api.c
==============================================================================
--- branches/include_dynpmc_makefile/src/string/api.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/api.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -28,7 +28,9 @@
 #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) \
@@ -41,14 +43,6 @@
 /* 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_CAN_RETURN_NULL
@@ -61,9 +55,6 @@
         __attribute__nonnull__(4)
         FUNC_MODIFIES(*e);
 
-#define ASSERT_ARGS_make_writable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_string_rep_compatible __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(a) \
     , PARROT_ASSERT_ARG(b) \
@@ -82,11 +73,13 @@
 */
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL
 Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_is_null)
-    return !s || s == STRINGNULL;
+    return STRING_IS_NULL(s);
 }
 
 
@@ -101,171 +94,17 @@
 */
 
 PARROT_EXPORT
+PARROT_HOT
+PARROT_PURE_FUNCTION
 INTVAL
 STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(STRING_is_null)
-    return !s || s == STRINGNULL;
-}
-
-
-/*
-
-=item C<void Parrot_str_write_COW(PARROT_INTERP, STRING *s)>
-
-If the specified Parrot string is copy-on-write then the memory is
-copied over and the copy-on-write flag is cleared.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_write_COW(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_write_COW)
-
-    /* COW_FLAG | constant_FLAG | external_FLAG) */
-    if (PObj_is_cowed_TESTALL(s)) {
-        STRING for_alloc;
-
-        /* 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;
+    return STRING_IS_NULL(s);
 }
 
 /*
 
-=item C<STRING * Parrot_str_new_COW(PARROT_INTERP, STRING *s)>
-
-Creates a copy-on-write string, cloning a string header without
-allocating a new buffer.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-STRING *
-Parrot_str_new_COW(PARROT_INTERP, ARGMOD(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_new_COW)
-    STRING *d;
-
-    if (PObj_constant_TEST(s)) {
-        d = Parrot_gc_new_string_header(interp,
-            PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        /* we can't move the memory, because constants aren't
-         * scanned in compact_pool, therefore the other end
-         * would point to garbage.
-         */
-        PObj_constant_CLEAR(d);
-        PObj_external_SET(d);
-    }
-    else {
-        d = Parrot_gc_new_string_header(interp, PObj_get_FLAGS(s));
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_sysmem_CLEAR(d);
-    }
-    return d;
-}
-
-/*
-
-=item C<STRING * Parrot_str_reuse_COW(PARROT_INTERP, STRING *s, STRING *d)>
-
-Creates a copy-on-write string by cloning a string header without
-allocating a new buffer. Doesn't allocate a new string header, instead
-using the one passed in and returns it.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_reuse_COW(SHIM_INTERP, ARGMOD(STRING *s), ARGOUT(STRING *d))
-{
-    ASSERT_ARGS(Parrot_str_reuse_COW)
-
-    if (PObj_constant_TEST(s)) {
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_constant_CLEAR(d);
-        PObj_external_SET(d);
-    }
-    else {
-        PObj_COW_SET(s);
-        STRUCT_COPY(d, s);
-        PObj_sysmem_CLEAR(d);
-    }
-    return d;
-}
-
-/*
-
-=item C<STRING * Parrot_str_set(PARROT_INTERP, STRING *dest, STRING *src)>
-
-Makes the contents of first Parrot string a copy of the contents of
-second.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_set(PARROT_INTERP, ARGIN_NULLOK(STRING *dest), ARGMOD(STRING *src))
-{
-    ASSERT_ARGS(Parrot_str_set)
-    if (dest == src)
-        return dest;
-    if (dest) { /* && dest != src */
-        /* they are different, dest is not an external string */
-        dest = Parrot_str_reuse_COW(interp, src, dest);
-    }
-    else
-        dest = Parrot_str_new_COW(interp, src);
-    return dest;
-}
-
-
-/*
-
 =back
 
 =head2 Basic String Functions
@@ -292,15 +131,16 @@
     const size_t n_parrot_cstrings =
         sizeof (parrot_cstrings) / sizeof (parrot_cstrings[0]);
 
-    if (interp->parent_interpreter) {
+    if (interp->parent_interpreter)
         interp->hash_seed = interp->parent_interpreter->hash_seed;
-    }
+
     /* interp is initialized from zeroed memory, so this is fine */
     else if (interp->hash_seed == 0) {
         /* TT #64 - use an entropy source once available */
         Parrot_srand(Parrot_intval_time());
         interp->hash_seed = Parrot_uint_rand(0);
     }
+
     /* initialize the constant string table */
     if (interp->parent_interpreter) {
         interp->const_cstring_table =
@@ -315,10 +155,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 +179,7 @@
     }
 }
 
+
 /*
 
 =item C<void Parrot_str_finish(PARROT_INTERP)>
@@ -352,6 +195,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 +205,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 +240,7 @@
     return s;
 }
 
+
 /*
 
 =item C<static const CHARSET * string_rep_compatible(PARROT_INTERP, const STRING
@@ -442,6 +265,7 @@
     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 +273,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 +283,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 +317,47 @@
 
 /*
 
-=item C<STRING * Parrot_str_concat(PARROT_INTERP, STRING *a, STRING *b, UINTVAL
-Uflags)>
+=item C<STRING* Parrot_str_clone(PARROT_INTERP, const STRING *s)>
 
-Concatenates two Parrot strings. If necessary, converts the second
-string's encoding and/or type to match those of the first string. If
-either string is C<NULL>, then a copy of the non-C<NULL> string is
-returned. If both strings are C<NULL>, then a new zero-length string is
-created and returned.
+Helper function to clone string.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING*
+Parrot_str_clone(PARROT_INTERP, ARGIN(const STRING *s))
+{
+    ASSERT_ARGS(Parrot_str_clone)
+
+    const size_t alloc_size = s->bufused;
+    STRING * const result = Parrot_gc_new_string_header(interp, 0);
+
+    /* Copy encoding/charset/etc */
+    STRUCT_COPY(result, s);
+
+    /* Clear COW flag. We own buffer */
+    PObj_get_FLAGS(result)  = PObj_is_string_FLAG
+                            | PObj_is_COWable_FLAG
+                            | PObj_live_FLAG;
+
+    /* Allocate new chunk of memory */
+    Parrot_gc_allocate_string_storage(interp, result, alloc_size);
+
+    /* and copy it over */
+    mem_sys_memcopy(result->strstart, s->strstart, alloc_size);
+
+    return result;
+}
+
+
+/*
+
+=item C<STRING * Parrot_str_copy(PARROT_INTERP, STRING *s)>
+
+Creates and returns a shallow copy of the specified Parrot string.
 
 =cut
 
@@ -508,50 +365,63 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 STRING *
-Parrot_str_concat(PARROT_INTERP, ARGIN_NULLOK(STRING *a),
-            ARGIN_NULLOK(STRING *b), UINTVAL Uflags)
+Parrot_str_copy(PARROT_INTERP, ARGMOD(STRING *s))
 {
-    ASSERT_ARGS(Parrot_str_concat)
-    if (a && a->strlen) {
-        if (b && b->strlen) {
-            STRING *result = Parrot_str_copy(interp, a);
-            Parrot_str_write_COW(interp, result);
-            return Parrot_str_append(interp, result, b);
-        }
+    ASSERT_ARGS(Parrot_str_copy)
+    STRING *d;
+
+    /* We set COW flag to avoid cloning buffer in compact_pool */
 
-        return Parrot_str_copy(interp, a);
+    if (PObj_constant_TEST(s)) {
+        d = Parrot_gc_new_string_header(interp,
+            PObj_get_FLAGS(s) & ~PObj_constant_FLAG);
+        PObj_COW_SET(s);
+        STRUCT_COPY(d, s);
+        /* we can't move the memory, because constants aren't
+         * scanned in compact_pool, therefore the other end
+         * would point to garbage.
+         */
+        PObj_constant_CLEAR(d);
+        PObj_external_SET(d);
+    }
+    else {
+        d = Parrot_gc_new_string_header(interp, PObj_get_FLAGS(s));
+        PObj_COW_SET(s);
+        STRUCT_COPY(d, s);
+        PObj_sysmem_CLEAR(d);
     }
 
-    return b
-        ? Parrot_str_copy(interp, b)
-        : string_make(interp, NULL, 0, NULL, Uflags);
+    return d;
 }
 
 
 /*
 
-=item C<STRING * Parrot_str_append(PARROT_INTERP, STRING *a, STRING *b)>
+=item C<STRING * Parrot_str_concat(PARROT_INTERP, STRING *a, STRING *b)>
 
-Take in two Parrot strings and append the second to the first.  NOTE THAT
-RETURN VALUE MAY NOT BE THE FIRST STRING, if the first string is COW'd or
-read-only.  So make sure to _use_ the return value.
+Concatenates two Parrot strings. If necessary, converts the second
+string's encoding and/or type to match those of the first string. If
+either string is C<NULL>, then a copy of the non-C<NULL> string is
+returned. If both strings are C<NULL>, then a new zero-length string is
+created and returned.
 
 =cut
 
 */
 
 PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
+PARROT_CANNOT_RETURN_NULL
 STRING *
-Parrot_str_append(PARROT_INTERP, ARGMOD_NULLOK(STRING *a), ARGIN_NULLOK(STRING *b))
+Parrot_str_concat(PARROT_INTERP, ARGIN_NULLOK(STRING *a),
+            ARGIN_NULLOK(STRING *b))
 {
-    ASSERT_ARGS(Parrot_str_append)
-    UINTVAL a_capacity;
-    UINTVAL total_length;
-    const CHARSET *cs;
-    const ENCODING *enc;
+    ASSERT_ARGS(Parrot_str_concat)
+    const CHARSET   *cs;
+    const ENCODING  *enc;
+    STRING          *dest;
+    UINTVAL          total_length;
 
     /* XXX should this be a CHARSET method? */
 
@@ -561,17 +431,12 @@
         return a;
 
     /* Is A real? */
-    if (a == NULL || Buffer_bufstart(a) == NULL)
-        return Parrot_str_copy(interp, b);
+    if (STRING_IS_NULL(a) || Buffer_bufstart(a) == NULL)
+        return b;
 
     saneify_string(a);
     saneify_string(b);
 
-    /* If the destination's constant, or external then just fall back to
-       Parrot_str_concat */
-    if (PObj_is_cowed_TESTALL(a))
-        return Parrot_str_concat(interp, a, b, 0);
-
     cs = string_rep_compatible(interp, a, b, &enc);
 
     if (cs) {
@@ -584,46 +449,45 @@
            ||  b->encoding == Parrot_utf16_encoding_ptr
            ||  a->encoding == Parrot_ucs2_encoding_ptr
            ||  b->encoding == Parrot_ucs2_encoding_ptr)
-              ? Parrot_utf16_encoding_ptr
-              : Parrot_utf8_encoding_ptr;
+            ? Parrot_utf16_encoding_ptr
+            : Parrot_utf8_encoding_ptr;
 
-        Parrot_unicode_charset_ptr->to_charset(interp, a, NULL);
-        b = Parrot_unicode_charset_ptr->to_charset(interp, b,
-                Parrot_gc_new_string_header(interp, 0));
+        a = Parrot_unicode_charset_ptr->to_charset(interp, a);
+        b = Parrot_unicode_charset_ptr->to_charset(interp, b);
 
         if (a->encoding != enc)
-            enc->to_encoding(interp, a, NULL);
+            a = enc->to_encoding(interp, a);
         if (b->encoding != enc)
-            enc->to_encoding(interp, b, NULL);
+            b = enc->to_encoding(interp, b);
     }
 
     /* calc usable and total bytes */
-    a_capacity   = string_capacity(interp, a);
     total_length = a->bufused + b->bufused;
 
-    /* make sure A's big enough for both  */
-    if (total_length > a_capacity)
-        Parrot_gc_reallocate_string_storage(interp, a, total_length << 1);
+    dest = Parrot_str_new_noinit(interp, enum_stringrep_one, total_length);
+    dest->encoding = a->encoding;
+    dest->charset  = a->charset;
 
-    /* A is now ready to receive the contents of B */
+    /* Copy A first */
+    mem_sys_memcopy(dest->strstart, a->strstart, a->bufused);
 
     /* Tack B on the end of A */
-    mem_sys_memcopy((void *)((ptrcast_t)a->strstart + a->bufused),
+    mem_sys_memcopy((void *)((ptrcast_t)dest->strstart + a->bufused),
             b->strstart, b->bufused);
 
-    a->bufused += b->bufused;
-    a->strlen  += b_len;
-    a->hashval  = 0;
+    dest->bufused = a->bufused + b->bufused;
+    dest->strlen  = a->strlen + b_len;
 
-    return a;
+    return dest;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_new(PARROT_INTERP, const char * const buffer, const
 UINTVAL len)>
 
-Make a Parrot string from a specified C string.
+Makes a Parrot string from a specified C string.
 
 =cut
 
@@ -637,11 +501,14 @@
 Parrot_str_new(PARROT_INTERP, ARGIN_NULLOK(const char * const buffer), const UINTVAL len)
 {
     ASSERT_ARGS(Parrot_str_new)
-    return Parrot_str_new_init(interp, buffer, len ? len :
-            buffer ? strlen(buffer) : 0,
-                              PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET,
-                              0); /* Force an 8-bit encoding at some
-                                     point? */
+    return Parrot_str_new_init(interp, buffer,
+           len
+             ? len
+             : buffer
+                 ? strlen(buffer)
+                 : 0,
+           /* Force an 8-bit encoding at some point? */
+           PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, 0);
 }
 
 
@@ -650,9 +517,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 +534,23 @@
 Parrot_str_new_from_buffer(PARROT_INTERP, ARGMOD(Buffer *buffer), const UINTVAL len)
 {
     ASSERT_ARGS(Parrot_str_new_from_buffer)
-    STRING *result;
 
-    result = Parrot_gc_new_string_header(interp, 0);
+    STRING *result          = Parrot_gc_new_string_header(interp, 0);
     Buffer_bufstart(result) = Buffer_bufstart(buffer);
     Buffer_buflen(result)   = Buffer_buflen(buffer);
-    result->strstart        = (char *) Buffer_bufstart(result);
+    result->strstart        = (char *)Buffer_bufstart(result);
     result->bufused         = len;
     result->strlen          = len;
     result->encoding        = Parrot_fixed_8_encoding_ptr;
     result->charset         = Parrot_binary_charset_ptr;
 
-    Buffer_bufstart(buffer) = NULL;
     Buffer_buflen(buffer)   = 0;
+    Buffer_bufstart(buffer) = NULL;
 
     return result;
 }
 
+
 /*
 
 =item C<const char* string_primary_encoding_for_representation(PARROT_INTERP,
@@ -713,6 +581,7 @@
         "invalid string representation");
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_new_constant(PARROT_INTERP, const char *buffer)>
@@ -731,10 +600,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;
@@ -889,7 +757,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,7 +770,7 @@
         if (encoding == Parrot_fixed_8_encoding_ptr)
             s->strlen = len;
         else
-            Parrot_str_length(interp, s);
+            s->strlen = CHARSET_CODEPOINTS(interp, s);
     }
     else {
         s->strlen = s->bufused = 0;
@@ -914,31 +782,6 @@
 
 /*
 
-=item C<STRING * Parrot_str_resize(PARROT_INTERP, STRING *s, UINTVAL addlen)>
-
-Grows the Parrot string's buffer by the specified number of characters.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_CANNOT_RETURN_NULL
-STRING *
-Parrot_str_resize(PARROT_INTERP, ARGMOD(STRING *s), UINTVAL addlen)
-{
-    ASSERT_ARGS(Parrot_str_resize)
-    Parrot_str_write_COW(interp, s);
-
-    /* Don't check buflen, if we are here, we already checked. */
-    Parrot_gc_reallocate_string_storage(interp,
-        s, Buffer_buflen(s) + string_max_bytes(interp, s, addlen));
-    return s;
-}
-
-
-/*
-
 =back
 
 =head2 Ordinary user-visible string operations
@@ -960,7 +803,7 @@
 {
     ASSERT_ARGS(Parrot_str_byte_length)
 
-    return s ? s->strlen : 0;
+    return !STRING_IS_NULL(s) ? s->strlen : 0;
 }
 
 
@@ -1010,9 +853,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 +868,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);
+    }
 }
 
 
@@ -1111,34 +954,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 +969,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 +992,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_PURE_FUNCTION
 INTVAL
 string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
 {
@@ -1179,6 +1001,7 @@
     return ENCODING_MAX_BYTES_PER_CODEPOINT(interp, s) * nchars;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_repeat(PARROT_INTERP, const STRING *s, UINTVAL num)>
@@ -1209,21 +1032,21 @@
             destpos += length;
         }
 
+        dest->strlen  = s->strlen  * num;
         dest->bufused = s->bufused * num;
-        dest->strlen  = s->strlen * num;
     }
 
     return dest;
 }
 
+
 /*
 
 =item C<STRING * Parrot_str_substr(PARROT_INTERP, STRING *src, INTVAL offset,
-INTVAL length, STRING **d, int replace_dest)>
+INTVAL length)>
 
-Copies the substring of length C<length> from C<offset> from the specified
-Parrot string and stores it in C<**d>, allocating memory if necessary. The
-substring is also returned.
+Returns substring of length C<length> from C<offset> from the specified
+Parrot string.
 
 =cut
 
@@ -1234,66 +1057,45 @@
 PARROT_WARN_UNUSED_RESULT
 STRING *
 Parrot_str_substr(PARROT_INTERP,
-        ARGIN_NULLOK(STRING *src), INTVAL offset, INTVAL length,
-        ARGOUT_NULLOK(STRING **d), int replace_dest)
+        ARGIN_NULLOK(STRING *src), INTVAL offset, INTVAL length)
 {
     ASSERT_ARGS(Parrot_str_substr)
-    if (src == NULL)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
-            "Cannot substr on a null string");
-    else {
-        STRING *dest;
-        UINTVAL true_length;
-        UINTVAL true_offset = (UINTVAL)offset;
-
-        saneify_string(src);
-
-        /* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
-        if (offset == (INTVAL)Parrot_str_byte_length(interp, src) || length < 1)
-            return Parrot_str_new_noinit(interp, enum_stringrep_one, 0);
 
-        if (offset < 0)
-            true_offset = (UINTVAL)(src->strlen + offset);
+    UINTVAL true_length;
+    UINTVAL true_offset = (UINTVAL)offset;
 
-        /* 0 based... */
-        if (src->strlen == 0 || true_offset > src->strlen - 1)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_SUBSTR_OUT_OF_STRING,
-                "Cannot take substr outside string");
+    if (STRING_IS_NULL(src))
+        Parrot_ex_throw_from_c_args(interp, NULL,
+            EXCEPTION_SUBSTR_OUT_OF_STRING, "Cannot substr on a null string");
 
-        true_length = (UINTVAL)length;
-        if (true_length > (src->strlen - true_offset))
-            true_length = (UINTVAL)(src->strlen - true_offset);
+    saneify_string(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)>
+INTVAL length, 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 +1119,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))
+    INTVAL offset, INTVAL length, ARGIN(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,25 +1149,19 @@
      * 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));
+        src = Parrot_utf16_encoding_ptr->to_encoding(interp, src);
+        rep = Parrot_utf16_encoding_ptr->to_encoding(interp, rep);
     }
     else {
         src->charset  = cs;
@@ -1393,54 +1179,43 @@
 
     /* 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;
+    /* Copy encoding/charset/etc */
+    STRUCT_COPY(dest, src);
 
-    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;
-        }
+    /* Clear COW flag. We own buffer */
+    PObj_get_FLAGS(dest) = PObj_is_string_FLAG
+                         | PObj_is_COWable_FLAG
+                         | PObj_live_FLAG;
 
-        mem_sys_memcopy((char *)src->strstart + start_byte,
-                rep->strstart, rep->bufused);
+            /* size            removed bytes            added bytes */
+    buf_size = src->bufused - (end_byte - start_byte) + rep->bufused;
 
-        if (diff)
-            (void)Parrot_str_length(interp, src);
-    }
+    /* Alloctate new string size. */
+    Parrot_gc_allocate_string_storage(interp, dest, buf_size);
+    dest->bufused = buf_size;
 
-    /* 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);
-    }
+    /* 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);
+
+    dest->strlen  = CHARSET_CODEPOINTS(interp, dest);
+    dest->hashval = 0;
 
-    /* src is modified, now return the original substring */
     return dest;
 }
 
@@ -1449,9 +1224,8 @@
 
 =item C<STRING * Parrot_str_chopn(PARROT_INTERP, STRING *s, INTVAL n)>
 
-Removes the last C<n> characters of the specified Parrot string. If C<n> is
-negative, cuts the string after C<+n> characters. The returned string is a copy
-of the one passed in.
+Removes the last C<n> characters of the specified Parrot string and returns the
+modified string. If C<n> is negative, cuts the string after C<+n> characters.
 
 =cut
 
@@ -1463,68 +1237,47 @@
 Parrot_str_chopn(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
 {
     ASSERT_ARGS(Parrot_str_chopn)
-    STRING * const chopped = Parrot_str_copy(interp, s);
-    Parrot_str_chopn_inplace(interp, chopped, n);
-    return chopped;
-}
-
-
-/*
 
-=item C<void Parrot_str_chopn_inplace(PARROT_INTERP, STRING *s, INTVAL n)>
-
-Removes the last C<n> characters of the specified Parrot string. If C<n> is
-negative, cuts the string after C<+n> characters. The string passed in is
-modified and returned.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_chopn_inplace(PARROT_INTERP, ARGMOD(STRING *s), INTVAL n)
-{
-    ASSERT_ARGS(Parrot_str_chopn_inplace)
+    STRING * const chopped = Parrot_str_copy(interp, s);
     UINTVAL new_length, uchar_size;
 
     if (n < 0) {
         new_length = -n;
-        if (new_length > s->strlen)
-            return;
+        if (new_length > chopped->strlen)
+            return chopped;
     }
     else {
-        if (s->strlen > (UINTVAL)n)
-            new_length = s->strlen - n;
+        if (chopped->strlen > (UINTVAL)n)
+            new_length = chopped->strlen - n;
         else
             new_length = 0;
     }
 
-    s->hashval = 0;
+    chopped->hashval = 0;
 
-    if (!new_length || !s->strlen) {
-        s->bufused = s->strlen = 0;
-        return;
+    if (!new_length || !chopped->strlen) {
+        chopped->bufused = chopped->strlen = 0;
+        return chopped;
     }
 
-    uchar_size = s->bufused / s->strlen;
-    s->strlen  = new_length;
+    uchar_size      = chopped->bufused / chopped->strlen;
+    chopped->strlen = new_length;
 
-    if (s->encoding == Parrot_fixed_8_encoding_ptr) {
-        s->bufused = new_length;
+    if (chopped->encoding == Parrot_fixed_8_encoding_ptr) {
+        chopped->bufused = new_length;
     }
-    else if (s->encoding == Parrot_ucs2_encoding_ptr) {
-        s->bufused = new_length * uchar_size;
+    else if (chopped->encoding == Parrot_ucs2_encoding_ptr) {
+        chopped->bufused = new_length * uchar_size;
     }
     else {
         String_iter iter;
 
         ENCODING_ITER_INIT(interp, s, &iter);
         iter.set_position(interp, &iter, new_length);
-        s->bufused = iter.bytepos;
+        chopped->bufused = iter.bytepos;
     }
 
-    return;
+    return chopped;
 }
 
 
@@ -1548,10 +1301,10 @@
 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);
@@ -1582,6 +1335,7 @@
     return !Parrot_str_equal(interp, s1, s2);
 }
 
+
 /*
 
 =item C<INTVAL Parrot_str_equal(PARROT_INTERP, const STRING *s1, const STRING
@@ -1602,28 +1356,30 @@
 Parrot_str_equal(PARROT_INTERP, ARGIN_NULLOK(const STRING *s1), ARGIN_NULLOK(const STRING *s2))
 {
     ASSERT_ARGS(Parrot_str_equal)
-    if ((s1 == s2) || (!s1 && !s2)) {
+
+    if ((s1 == s2) || (STRING_IS_NULL(s1) && STRING_IS_NULL(s2))) {
         return 1;
     }
-    else if (!s2) {
+    else if (STRING_IS_NULL(s2)) {
         return s1->strlen == 0;
     }
-    else if (!s1) {
+    else if (STRING_IS_NULL(s1)) {
         return s2->strlen == 0;
     }
-    else if (s1->strlen != s2->strlen) {
-        return 0;       /* we don't care which is bigger */
-    }
-    else if (s1->hashval != s2->hashval && s1->hashval && s2->hashval) {
+
+   /* we don't care which is bigger */
+    else if (s1->strlen != s2->strlen)
         return 0;
-    }
-    else if (!s1->strlen) {   /* s2->strlen is the same here */
+    else if (s1->hashval != s2->hashval && s1->hashval && s2->hashval)
+        return 0;
+
+    /* s2->strlen is the same here */
+    else if (!s1->strlen)
         return 1;
-    }
+
     /* COWed strings */
-    else if (s1->strstart == s2->strstart && s1->bufused == s2->bufused) {
+    else if (s1->strstart == s2->strstart && s1->bufused == s2->bufused)
         return 1;
-    }
 
     /*
      * now,
@@ -1636,39 +1392,11 @@
 
 /*
 
-=item C<static void make_writable(PARROT_INTERP, STRING **s, const size_t len,
-parrot_string_representation_t representation)>
-
-Makes the specified Parrot string writable with minimum length C<len>.  The
-C<representation> argument is required in case a new Parrot string has to be
-created.
-
-=cut
-
-*/
-
-static void
-make_writable(PARROT_INTERP, ARGMOD(STRING **s),
-    const size_t len, parrot_string_representation_t representation)
-{
-    ASSERT_ARGS(make_writable)
-    if (!*s)
-        *s = Parrot_str_new_noinit(interp, representation, len);
-    else if ((*s)->strlen < len)
-        Parrot_str_resize(interp, *s, (UINTVAL)(len - (*s)->strlen));
-    else if (PObj_is_cowed_TESTALL(*s))
-        Parrot_str_write_COW(interp, *s);
-}
-
-
-/*
-
 =item C<STRING * Parrot_str_bitwise_and(PARROT_INTERP, const STRING *s1, const
-STRING *s2, STRING **dest)>
+STRING *s2)>
 
-Performs a bitwise C<AND> on two Parrot 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 +1406,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 +1424,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 +1445,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 +1457,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 +1470,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 +1505,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 +1534,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 +1547,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 +1574,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 +1589,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 +1600,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 +1613,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 +1640,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 +1655,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 +1675,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 +1690,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 +1708,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 +1723,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 +1748,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,7 +1794,9 @@
     return output;
 }
 
+
 /*
+
 State of FSM during number value parsing.
 
 Integer uses only parse_start, parse_before_dot and parse_end.
@@ -2151,7 +1841,7 @@
 Parrot_str_to_int(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_int)
-    if (s == NULL)
+    if (STRING_IS_NULL(s))
         return 0;
     {
         const INTVAL        max_safe  = PARROT_INTVAL_MAX / 10;
@@ -2177,8 +1867,9 @@
                     if (i < max_safe || (i == max_safe && nextval <= last_dig))
                         i = i * 10 + nextval;
                     else
-                        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ERR_OVERFLOW,
-                                "Integer value of String '%S' too big", s);
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_ERR_OVERFLOW,
+                            "Integer value of String '%S' too big", s);
                     state = parse_before_dot;
                 }
                 else if (c == '-') {
@@ -2200,8 +1891,9 @@
                     if (i < max_safe || (i == max_safe && nextval <= last_dig))
                         i = i * 10 + nextval;
                     else
-                        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ERR_OVERFLOW,
-                                "Integer value of String '%S' too big", s);
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_ERR_OVERFLOW,
+                            "Integer value of String '%S' too big", s);
                 }
                 else
                     state = parse_end;
@@ -2219,6 +1911,7 @@
     }
 }
 
+
 /*
 
 =item C<FLOATVAL Parrot_str_to_num(PARROT_INTERP, const STRING *s)>
@@ -2253,7 +1946,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);
@@ -2364,16 +2057,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 +2150,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 +2164,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 +2179,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 +2194,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 +2220,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 +2239,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 +2273,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 +2322,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 */
+        saneify_string(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 +2394,8 @@
     String_iter iter;
     unsigned char *dp;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     len = src->strlen;
 
@@ -2793,7 +2481,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;
@@ -2913,9 +2601,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 +2631,13 @@
 Parrot_str_upcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_upcase)
-    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 {
-        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)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't upcase NULL string");
-    }
-    else {
-        Parrot_str_write_COW(interp, s);
-        CHARSET_UPCASE(interp, s);
+        STRING * res = CHARSET_UPCASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3000,47 +2660,14 @@
 Parrot_str_downcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_downcase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't downcase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_downcase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_downcase_inplace(PARROT_INTERP, STRING *s)>
-
-Converts the specified Parrot string to lower case.
-
-=cut
 
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_downcase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_downcase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't downcase NULL string");
-    }
     else {
-        /*
-         * TODO get rid of all the inplace variants. We have for utf8:
-         * * 1 Parrot_str_copy from the non-incase variant
-         * * conversion to utf16, with doubling the buffer
-         * * possibly one more reallocation in downcase
-         */
-        Parrot_str_write_COW(interp, s);
-        CHARSET_DOWNCASE(interp, s);
+        STRING * res = CHARSET_DOWNCASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3063,41 +2690,14 @@
 Parrot_str_titlecase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
     ASSERT_ARGS(Parrot_str_titlecase)
-    if (STRING_IS_NULL(s)) {
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
-            "Can't titlecase NULL string");
-    }
-    else {
-        DECL_CONST_CAST;
-        STRING * const dest = Parrot_str_copy(interp, PARROT_const_cast(STRING *, s));
-        Parrot_str_titlecase_inplace(interp, dest);
-        return dest;
-    }
-}
-
-
-/*
-
-=item C<void Parrot_str_titlecase_inplace(PARROT_INTERP, STRING *s)>
 
-Converts the specified Parrot string to title case.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_str_titlecase_inplace(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
-{
-    ASSERT_ARGS(Parrot_str_titlecase_inplace)
-    if (STRING_IS_NULL(s)) {
+    if (STRING_IS_NULL(s))
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNEXPECTED_NULL,
             "Can't titlecase NULL string");
-    }
     else {
-        Parrot_str_write_COW(interp, s);
-        CHARSET_TITLECASE(interp, s);
+        STRING * res = CHARSET_TITLECASE(interp, s);
+        res->hashval = 0;
+        return res;
     }
 }
 
@@ -3157,7 +2757,7 @@
 Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
 {
     ASSERT_ARGS(Parrot_string_cstring)
-    /* TODO handle NUL and friends */
+    /* TODO handle NULL and friends */
     return str->strstart;
 }
 
@@ -3182,6 +2782,7 @@
         ARGIN(const STRING *s), UINTVAL offset)
 {
     ASSERT_ARGS(Parrot_str_is_cclass)
+
     if (!Parrot_str_byte_length(interp, s))
         return 0;
 
@@ -3208,12 +2809,14 @@
                           UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(Parrot_str_find_cclass)
-    if (!s)
+
+    if (STRING_IS_NULL(s))
         return -1;
 
     return CHARSET_FIND_CCLASS(interp, flags, s, offset, count);
 }
 
+
 /*
 
 =item C<INTVAL Parrot_str_find_not_cclass(PARROT_INTERP, INTVAL flags, STRING
@@ -3235,7 +2838,8 @@
     ARGIN_NULLOK(STRING *s), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(Parrot_str_find_not_cclass)
-    if (!s)
+
+    if (STRING_IS_NULL(s))
         return -1;
 
     return CHARSET_FIND_NOT_CCLASS(interp, flags, s, offset, count);
@@ -3245,10 +2849,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 +2863,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 +2877,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
 
@@ -3318,13 +2901,13 @@
 PARROT_CAN_RETURN_NULL
 STRING*
 Parrot_str_change_encoding(PARROT_INTERP, ARGIN_NULLOK(STRING *src),
-        INTVAL encoding_nr, ARGOUT_NULLOK(STRING *dest))
+        INTVAL encoding_nr)
 {
     ASSERT_ARGS(Parrot_str_change_encoding)
     const ENCODING *new_encoding;
 
-    if (!src)
-        return NULL;
+    if (STRING_IS_NULL(src))
+        return STRINGNULL;
 
     new_encoding = Parrot_get_encoding(interp, encoding_nr);
 
@@ -3332,25 +2915,10 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_CHARTYPE,
             "encoding #%d not found", (int) encoding_nr);
 
-    /*
-     * dest is an empty string header or NULL, if an inplace
-     * operation is desired
-     */
-    if (dest) {
-        dest->encoding = new_encoding;
-        if (new_encoding == src->encoding) {
-            dest = Parrot_str_reuse_COW(interp, src, dest);
-            return dest;
-        }
-    }
-    else {
-        if (new_encoding == src->encoding)
-            return src;
-
-        Parrot_str_write_COW(interp, src);
-    }
+    if (new_encoding == src->encoding)
+        return src;
 
-    return new_encoding->to_encoding(interp, src, dest);
+    return new_encoding->to_encoding(interp, src);
 }
 
 
@@ -3371,7 +2939,8 @@
 Parrot_str_compose(PARROT_INTERP, ARGIN_NULLOK(STRING *src))
 {
     ASSERT_ARGS(Parrot_str_compose)
-    if (!src)
+
+    if (STRING_IS_NULL(src))
         return NULL;
 
     if (!src->strlen)
@@ -3399,24 +2968,104 @@
 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;
+            const CHARSET  *c = 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];
 
-        res  = Parrot_str_append(interp, res, j);
-        res  = Parrot_str_append(interp, res, next);
+        if (STRING_IS_NULL(next))
+            continue;
+
+        mem_sys_memcopy(pos, j->strstart, j->bufused);
+        pos += j->bufused;
+
+        mem_sys_memcopy(pos, next->strstart, next->bufused);
+        pos += next->bufused;
+
+        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 +3075,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 +3084,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 +3096,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 +3110,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 +3128,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 +3170,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,12 +3179,12 @@
 
     do {
         const char cur = (char)(num % base);
-        if (cur < 10) {
+
+        if (cur < 10)
             *--p = (char)('0' + cur);
-        }
-        else {
+        else
             *--p = (char)('a' + cur - 10);
-        }
+
     } while (num /= base);
 
     if (minus)
@@ -3572,6 +3223,7 @@
     return Parrot_str_from_uint(interp, tc, (UHUGEINTVAL)num, base, is_neg);
 }
 
+
 /*
 
 =back

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

Copied: branches/include_dynpmc_makefile/src/string/charset/.gitignore (from r45870, trunk/src/string/charset/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/string/charset/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/string/charset/.gitignore)
@@ -0,0 +1,2 @@
+/*.o
+/*.obj

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

Modified: branches/include_dynpmc_makefile/src/string/charset/ascii.h
==============================================================================
--- branches/include_dynpmc_makefile/src/string/charset/ascii.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/charset/ascii.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -61,29 +61,13 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING * ascii_get_graphemes_inplace(PARROT_INTERP,
-    ARGIN(STRING *source_string),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *dest_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*dest_string);
-
 PARROT_CANNOT_RETURN_NULL
-STRING * charset_cvt_ascii_to_binary(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+STRING * charset_cvt_ascii_to_binary(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_CANNOT_RETURN_NULL
-STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGIN_NULLOK(STRING *dest))
+STRING * charset_cvt_ascii_to_iso_8859_1(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -96,8 +80,7 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_ascii_init(PARROT_INTERP)
+void Parrot_charset_ascii_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_ascii_compare __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -117,10 +100,6 @@
 #define ASSERT_ARGS_ascii_get_graphemes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(source_string))
-#define ASSERT_ARGS_ascii_get_graphemes_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(source_string) \
-    , PARROT_ASSERT_ARG(dest_string))
 #define ASSERT_ARGS_charset_cvt_ascii_to_binary __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(src))

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

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

Modified: branches/include_dynpmc_makefile/src/string/charset/iso-8859-1.h
==============================================================================
--- branches/include_dynpmc_makefile/src/string/charset/iso-8859-1.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/charset/iso-8859-1.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -18,15 +18,11 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP,
-    ARGIN(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+STRING * charset_cvt_iso_8859_1_to_ascii(PARROT_INTERP, ARGIN(STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-const CHARSET * Parrot_charset_iso_8859_1_init(PARROT_INTERP)
+void Parrot_charset_iso_8859_1_init(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_charset_cvt_iso_8859_1_to_ascii \

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

Modified: branches/include_dynpmc_makefile/src/string/charset/unicode.h
==============================================================================
--- branches/include_dynpmc_makefile/src/string/charset/unicode.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/charset/unicode.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/string/encoding.c
==============================================================================
--- branches/include_dynpmc_makefile/src/string/encoding.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/encoding.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2004-2009, Parrot Foundation.
+Copyright (C) 2004-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -114,6 +114,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING *
@@ -173,6 +174,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_encoding_number(PARROT_INTERP, ARGIN(const STRING *encodingname))
@@ -199,6 +201,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 INTVAL
 Parrot_encoding_number_of_str(SHIM_INTERP, ARGIN(const STRING *src))
@@ -226,6 +229,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 STRING*
@@ -250,6 +254,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const ENCODING*
@@ -275,6 +280,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 const char *
@@ -428,6 +434,7 @@
 */
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 const ENCODING *

Copied: branches/include_dynpmc_makefile/src/string/encoding/.gitignore (from r45870, trunk/src/string/encoding/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/src/string/encoding/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/src/string/encoding/.gitignore)
@@ -0,0 +1,2 @@
+/*.o
+/*.obj

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

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

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

Modified: branches/include_dynpmc_makefile/src/string/encoding/utf16.h
==============================================================================
--- branches/include_dynpmc_makefile/src/string/encoding/utf16.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/encoding/utf16.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/string/encoding/utf8.c
==============================================================================
--- branches/include_dynpmc_makefile/src/string/encoding/utf8.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/encoding/utf8.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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(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),
@@ -64,14 +58,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*src);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_bytes_inplace(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *return_string))
-        __attribute__nonnull__(1);
-
 static UINTVAL get_codepoint(PARROT_INTERP,
     ARGIN(const STRING *src),
     UINTVAL offset)
@@ -86,18 +72,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_CANNOT_RETURN_NULL
-static STRING * get_codepoints_inplace(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    UINTVAL offset,
-    UINTVAL count,
-    ARGMOD(STRING *return_string))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*return_string);
-
 static void iter_init(SHIM_INTERP,
     ARGIN(const STRING *src),
     ARGOUT(String_iter *iter))
@@ -112,35 +86,10 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void set_bytes(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_bytes))
-        __attribute__nonnull__(1);
-
-static void set_codepoint(PARROT_INTERP,
-    ARGIN(STRING *src),
-    UINTVAL offset,
-    UINTVAL codepoint)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void set_codepoints(PARROT_INTERP,
-    SHIM(STRING *src),
-    SHIM(UINTVAL offset),
-    SHIM(UINTVAL count),
-    SHIM(STRING *new_codepoints))
-        __attribute__nonnull__(1);
-
 PARROT_CAN_RETURN_NULL
-static STRING * to_encoding(PARROT_INTERP,
-    ARGMOD(STRING *src),
-    ARGMOD_NULLOK(STRING *dest))
+static STRING * to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*src)
-        FUNC_MODIFIES(*dest);
+        __attribute__nonnull__(2);
 
 static UINTVAL utf8_characters(PARROT_INTERP,
     ARGIN(const utf8_t *ptr),
@@ -185,47 +134,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 +207,6 @@
     4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6      /* cjk etc. */
 };
 
-#if 0
-typedef unsigned char utf8_t;
-#endif
-
 /*
 
 =item C<static UINTVAL utf8_characters(PARROT_INTERP, const utf8_t *ptr, UINTVAL
@@ -286,6 +214,8 @@
 
 Returns the number of characters in the C<byte_len> bytes from C<*ptr>.
 
+XXX This function is unused.
+
 =cut
 
 */
@@ -421,6 +351,8 @@
 
 Moves C<ptr> C<n> characters back.
 
+XXX This function is unused.
+
 =cut
 
 */
@@ -566,7 +498,7 @@
 
 /*
 
-=item C<static STRING * to_encoding(PARROT_INTERP, STRING *src, STRING *dest)>
+=item C<static STRING * to_encoding(PARROT_INTERP, const STRING *src)>
 
 Converts the string C<src> to this particular encoding.  If C<dest> is
 provided, it will contain the result.  Otherwise this function operates in
@@ -578,24 +510,19 @@
 
 PARROT_CAN_RETURN_NULL
 static STRING *
-to_encoding(PARROT_INTERP, ARGMOD(STRING *src), ARGMOD_NULLOK(STRING *dest))
+to_encoding(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(to_encoding)
     STRING *result;
     String_iter src_iter;
     UINTVAL offs, dest_len, dest_pos, src_len;
-    const int in_place = (dest == NULL);
-    unsigned char *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 +531,11 @@
     result->strlen   = src_len;
 
     if (!src->strlen)
-        return dest;
+        return result;
+
+    Parrot_gc_allocate_string_storage(interp, result, src_len);
+    p = (unsigned char *)result->strstart;
 
-    if (in_place) {
-        /* need intermediate memory */
-        p = mem_gc_allocate_n_typed(interp, src_len, unsigned char);
-    }
-    else {
-        Parrot_gc_reallocate_string_storage(interp, dest, src_len);
-        p = (unsigned char *)dest->strstart;
-    }
     if (src->charset == Parrot_ascii_charset_ptr) {
         for (dest_len = 0; dest_len < src_len; ++dest_len) {
             p[dest_len] = ((unsigned char*)src->strstart)[dest_len];
@@ -625,18 +547,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 +566,7 @@
         }
         result->bufused = dest_pos;
     }
-    if (in_place) {
-        Parrot_gc_reallocate_string_storage(interp, src, src->bufused);
-        memcpy(src->strstart, p, src->bufused);
-        mem_gc_free(interp, p);
-    }
+
     return result;
 }
 
@@ -672,29 +589,6 @@
     return utf8_decode(interp, start);
 }
 
-/*
-
-=item C<static void set_codepoint(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL codepoint)>
-
-Sets, in string C<src> at position C<offset>, the codepoint C<codepoint>.
-
-=cut
-
-*/
-
-static void
-set_codepoint(PARROT_INTERP, ARGIN(STRING *src), UINTVAL offset, UINTVAL codepoint)
-{
-    ASSERT_ARGS(set_codepoint)
-    const void *start;
-    void *p;
-    DECL_CONST_CAST;
-
-    start = utf8_skip_forward(src->strstart, offset);
-    p = PARROT_const_cast(void *, start);
-    utf8_encode(interp, p, codepoint);
-}
 
 /*
 
@@ -709,8 +603,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(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,
@@ -786,7 +680,7 @@
 {
     ASSERT_ARGS(get_codepoints)
 
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
+    STRING * const return_string = Parrot_str_copy(interp, src);
     String_iter    iter;
     UINTVAL        start;
 
@@ -824,10 +718,7 @@
 get_bytes(PARROT_INTERP, ARGMOD(STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_bytes)
-    STRING * const return_string = Parrot_str_new_COW(interp, src);
-
-    return_string->encoding = src->encoding;    /* XXX */
-    return_string->charset = src->charset;
+    STRING * const return_string = Parrot_str_copy(interp, src);
 
     return_string->strstart = (char *)return_string->strstart + offset ;
     return_string->bufused = count;
@@ -838,125 +729,11 @@
     return return_string;
 }
 
-/*
-
-=item C<static STRING * get_codepoints_inplace(PARROT_INTERP, STRING *src,
-UINTVAL offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> codepoints and returns
-them in C<return_string>.
 
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_codepoints_inplace(PARROT_INTERP, ARGMOD(STRING *src),
-        UINTVAL offset, UINTVAL count, ARGMOD(STRING *return_string))
-{
-    ASSERT_ARGS(get_codepoints_inplace)
-    String_iter iter;
-    UINTVAL start;
-
-    Parrot_str_reuse_COW(interp, src, return_string);
-    iter_init(interp, src, &iter);
-    iter.set_position(interp, &iter, offset);
-
-    start = iter.bytepos;
-
-    return_string->strstart = (char *)return_string->strstart + start;
-    iter.set_position(interp, &iter, offset + count);
-
-    return_string->bufused = iter.bytepos - start;
-    return_string->strlen  = count;
-    return_string->hashval = 0;
-
-    return return_string;
-}
-
-/*
-
-=item C<static STRING * get_bytes_inplace(PARROT_INTERP, STRING *src, UINTVAL
-offset, UINTVAL count, STRING *return_string)>
-
-Gets from string C<src> at position C<offset> C<count> bytes and returns them
-in C<return_string>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static STRING *
-get_bytes_inplace(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *return_string))
-{
-    ASSERT_ARGS(get_bytes_inplace)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_codepoints(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_codepoints)>
-
-Replaces in string C<src> at position C<offset> for C<count> codepoints with
-the contents of string C<new_codepoints>.
-
-=cut
-
-*/
-
-static void
-set_codepoints(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_codepoints))
-{
-    ASSERT_ARGS(set_codepoints)
-    UNIMPL;
-}
-
-/*
-
-=item C<static void set_bytes(PARROT_INTERP, STRING *src, UINTVAL offset,
-UINTVAL count, STRING *new_bytes)>
-
-Replaces in string C<src> at position C<offset> for C<count> bytes with the
-contents of string C<new_bytes>.
-
-=cut
-
-*/
-
-static void
-set_bytes(PARROT_INTERP, SHIM(STRING *src),
-        SHIM(UINTVAL offset), SHIM(UINTVAL count), SHIM(STRING *new_bytes))
-{
-    ASSERT_ARGS(set_bytes)
-    UNIMPL;
-}
 
 /*
 
-=item C<static void become_encoding(PARROT_INTERP, STRING *src)>
-
-Unconditionally makes the string be in this encoding, if that's valid
-
-=cut
-
-*/
-
-static void
-become_encoding(PARROT_INTERP, SHIM(STRING *src))
-{
-    ASSERT_ARGS(become_encoding)
-    UNIMPL;
-}
-
-
-/*
-
-=item C<static UINTVAL codepoints(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL codepoints(PARROT_INTERP, const STRING *src)>
 
 Returns the number of codepoints in string C<src>.
 
@@ -965,7 +742,7 @@
 */
 
 static UINTVAL
-codepoints(PARROT_INTERP, ARGMOD(STRING *src))
+codepoints(PARROT_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(codepoints)
     String_iter iter;
@@ -981,7 +758,7 @@
 
 /*
 
-=item C<static UINTVAL bytes(PARROT_INTERP, STRING *src)>
+=item C<static UINTVAL bytes(PARROT_INTERP, const STRING *src)>
 
 Returns the number of bytes in string C<src>.
 
@@ -991,7 +768,7 @@
 
 PARROT_PURE_FUNCTION
 static UINTVAL
-bytes(SHIM_INTERP, ARGIN(STRING *src))
+bytes(SHIM_INTERP, ARGIN(const STRING *src))
 {
     ASSERT_ARGS(bytes)
     return src->bufused;
@@ -1022,7 +799,7 @@
 
 /*
 
-=item C<ENCODING * Parrot_encoding_utf8_init(PARROT_INTERP)>
+=item C<void Parrot_encoding_utf8_init(PARROT_INTERP)>
 
 Initializes the UTF-8 encoding.
 
@@ -1030,8 +807,7 @@
 
 */
 
-PARROT_CANNOT_RETURN_NULL
-ENCODING *
+void
 Parrot_encoding_utf8_init(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_encoding_utf8_init)
@@ -1042,24 +818,20 @@
         4, /* Max bytes per codepoint 0 .. 0x10ffff */
         to_encoding,
         get_codepoint,
-        set_codepoint,
         get_byte,
         set_byte,
         get_codepoints,
-        get_codepoints_inplace,
         get_bytes,
-        get_bytes_inplace,
-        set_codepoints,
-        set_bytes,
-        become_encoding,
         codepoints,
         bytes,
         iter_init,
-        find_cclass
+        find_cclass,
+        NULL
     };
     STRUCT_COPY_FROM_STRUCT(return_encoding, base_encoding);
     Parrot_register_encoding(interp, "utf8", return_encoding);
-    return return_encoding;
+
+    return;
 }
 
 /*

Modified: branches/include_dynpmc_makefile/src/string/encoding/utf8.h
==============================================================================
--- branches/include_dynpmc_makefile/src/string/encoding/utf8.h	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/encoding/utf8.h	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/string/primitives.c
==============================================================================
--- branches/include_dynpmc_makefile/src/string/primitives.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/string/primitives.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/src/sub.c
==============================================================================
--- branches/include_dynpmc_makefile/src/sub.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/sub.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -49,60 +49,6 @@
 
 /*
 
-=item C<PMC * new_ret_continuation_pmc(PARROT_INTERP, opcode_t *address)>
-
-Returns a new C<RetContinuation> PMC, and sets address field to C<address>
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-PMC *
-new_ret_continuation_pmc(PARROT_INTERP, ARGIN_NULLOK(opcode_t *address))
-{
-    ASSERT_ARGS(new_ret_continuation_pmc)
-    PMC* const continuation = Parrot_pmc_new(interp, enum_class_RetContinuation);
-    VTABLE_set_pointer(interp, continuation, address);
-    return continuation;
-}
-
-/*
-
-=item C<void invalidate_retc_context(PARROT_INTERP, PMC *cont)>
-
-Make true Continuations from all RetContinuations up the call chain.
-
-=cut
-
-*/
-
-void
-invalidate_retc_context(PARROT_INTERP, ARGMOD(PMC *cont))
-{
-    ASSERT_ARGS(invalidate_retc_context)
-
-    PMC *ctx = PARROT_CONTINUATION(cont)->from_ctx;
-    cont = Parrot_pcc_get_continuation(interp, ctx);
-
-    while (1) {
-        /*
-         * We  stop if we encounter a true continuation, because
-         * if one were created, everything up the chain would have been
-         * invalidated earlier.
-         */
-        if (!cont || cont->vtable != interp->vtables[enum_class_RetContinuation])
-            break;
-        cont->vtable = interp->vtables[enum_class_Continuation];
-        ctx  = Parrot_pcc_get_caller_ctx(interp, ctx);
-        cont = Parrot_pcc_get_continuation(interp, ctx);
-    }
-}
-
-/*
-
 =item C<STRING* Parrot_full_sub_name(PARROT_INTERP, PMC* sub_pmc)>
 
 Return namespace, name, and location of subroutine.
@@ -395,7 +341,7 @@
         PMC * const lex_pad = Parrot_pcc_get_lex_pad(interp, ctx);
         PMC * outer         = Parrot_pcc_get_outer_ctx(interp, ctx);
 
-        if (!outer)
+        if (PMC_IS_NULL(outer))
             return lex_pad;
 
         if (!PMC_IS_NULL(lex_pad))
@@ -428,7 +374,7 @@
         PMC * const lex_pad = Parrot_pcc_get_lex_pad(interp, ctx);
         PMC * caller        = Parrot_pcc_get_caller_ctx(interp, ctx);
 
-        if (!caller)
+        if (PMC_IS_NULL(caller))
             return lex_pad;
 
         if (!PMC_IS_NULL(lex_pad))
@@ -570,6 +516,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 +529,7 @@
 
     /* set context */
     CURRENT_CONTEXT(interp) = to_ctx;
+    Parrot_pcc_set_signature(interp, to_ctx, sig);
 }
 
 
@@ -631,10 +579,6 @@
 
 F<include/parrot/sub.h>.
 
-=head1 HISTORY
-
-Initial version by Melvin on 2002/06/6.
-
 =cut
 
 */

Modified: branches/include_dynpmc_makefile/src/thread.c
==============================================================================
--- branches/include_dynpmc_makefile/src/thread.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/thread.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
@@ -368,7 +361,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 +542,7 @@
     }
 
     /* make sure we don't block a GC run */
-    pt_gc_wakeup_check(interp);
+    pt_gc_wakeup_check();
     PARROT_ASSERT(interp->thread_data->state & THREAD_STATE_FINISHED);
 
     UNLOCK(interpreter_array_mutex);
@@ -777,10 +770,6 @@
             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;
@@ -957,7 +946,7 @@
 
 /*
 
-=item C<static int pt_gc_count_threads(PARROT_INTERP)>
+=item C<static int pt_gc_count_threads(void)>
 
 Returns the number of active threads in the system (running or suspended).  Be
 sure to hold C<interpreter_array_mutex>.
@@ -967,7 +956,7 @@
 */
 
 static int
-pt_gc_count_threads(PARROT_INTERP)
+pt_gc_count_threads(void)
 {
     ASSERT_ARGS(pt_gc_count_threads)
     UINTVAL i;
@@ -1014,7 +1003,7 @@
     LOCK(interpreter_array_mutex);
 
     DEBUG_ONLY(fprintf(stderr, "%p: got lock\n", interp));
-    thread_count = pt_gc_count_threads(interp);
+    thread_count = pt_gc_count_threads();
 
     PARROT_ASSERT(info->gc_stage == from_stage);
     PARROT_ASSERT(!(interp->thread_data->state & THREAD_STATE_NOT_STARTED));
@@ -1045,7 +1034,7 @@
 
 /*
 
-=item C<static void pt_gc_wakeup_check(PARROT_INTERP)>
+=item C<static void pt_gc_wakeup_check(void)>
 
 Checks if it's necessary to wake threads to perform garbage collection.  This
 is called after thread death.  Be sure to hold C<interpreter_array_mutex>.
@@ -1055,7 +1044,7 @@
 */
 
 static void
-pt_gc_wakeup_check(PARROT_INTERP)
+pt_gc_wakeup_check(void)
 {
     ASSERT_ARGS(pt_gc_wakeup_check)
     Shared_gc_info * const info = shared_gc_info;
@@ -1064,7 +1053,7 @@
     if (!info)
         return;
 
-    thread_count = pt_gc_count_threads(interp);
+    thread_count = pt_gc_count_threads();
 
     if (info->num_reached == thread_count) {
         PARROT_ASSERT(info->gc_stage == THREAD_GC_STAGE_NONE);
@@ -1240,7 +1229,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;
@@ -1581,7 +1570,7 @@
     if (!running_threads)
         return;
 
-    info = get_pool(interp);
+    info = get_pool();
     PARROT_ATOMIC_INT_GET(block_level, info->gc_block_level);
 
     DEBUG_ONLY(fprintf(stderr, "start threaded mark\n"));
@@ -1718,7 +1707,7 @@
 Parrot_shared_gc_block(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_shared_gc_block)
-    Shared_gc_info * const info = get_pool(interp);
+    Shared_gc_info * const info = get_pool();
 
     if (info) {
         int level;
@@ -1742,7 +1731,7 @@
 Parrot_shared_gc_unblock(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_shared_gc_unblock)
-    Shared_gc_info * const info = get_pool(interp);
+    Shared_gc_info * const info = get_pool();
     if (info) {
         int level;
         PARROT_ATOMIC_INT_DEC(level, info->gc_block_level);

Modified: branches/include_dynpmc_makefile/src/utils.c
==============================================================================
--- branches/include_dynpmc_makefile/src/utils.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/utils.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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;
         }
@@ -990,12 +997,6 @@
 
 =back
 
-=head1 HISTORY
-
-Initial version by leo 2003.09.09.
-
-=cut
-
 */
 
 

Modified: branches/include_dynpmc_makefile/src/vtables.c
==============================================================================
--- branches/include_dynpmc_makefile/src/vtables.c	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/src/vtables.c	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);

Copied: branches/include_dynpmc_makefile/t/benchmark/.gitignore (from r45870, trunk/t/benchmark/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/benchmark/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/benchmark/.gitignore)
@@ -0,0 +1,2 @@
+/*.pasm
+/*.pir

Modified: branches/include_dynpmc_makefile/t/codingstd/c_function_docs.t
==============================================================================
--- branches/include_dynpmc_makefile/t/codingstd/c_function_docs.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/codingstd/c_function_docs.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Copied: branches/include_dynpmc_makefile/t/compilers/imcc/.gitignore (from r45870, trunk/t/compilers/imcc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/imcc/.gitignore)
@@ -0,0 +1 @@
+/*.pbc

Copied: branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/.gitignore (from r45870, trunk/t/compilers/imcc/imcpasm/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/imcc/imcpasm/.gitignore)
@@ -0,0 +1,4 @@
+/*_pbcexe
+/*.pbc
+/*.pir
+/*.pasm

Modified: branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/optc.t
==============================================================================
--- branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/optc.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/imcpasm/optc.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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:
-

Copied: branches/include_dynpmc_makefile/t/compilers/imcc/reg/.gitignore (from r45870, trunk/t/compilers/imcc/reg/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/reg/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/imcc/reg/.gitignore)
@@ -0,0 +1,4 @@
+/*_pbcexe*
+/*.pbc
+/*.pir
+/*.pasm

Copied: branches/include_dynpmc_makefile/t/compilers/imcc/syn/.gitignore (from r45870, trunk/t/compilers/imcc/syn/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/syn/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/imcc/syn/.gitignore)
@@ -0,0 +1,4 @@
+/*_pbcexe*
+/*.pasm
+/*.pbc
+/*.pir

Modified: branches/include_dynpmc_makefile/t/compilers/imcc/syn/file.t
==============================================================================
--- branches/include_dynpmc_makefile/t/compilers/imcc/syn/file.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/syn/file.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/compilers/imcc/syn/regressions.t
==============================================================================
--- branches/include_dynpmc_makefile/t/compilers/imcc/syn/regressions.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/syn/regressions.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 KEYLEN.
+.end
+CODE
+/key too complex/
+OUT
+
 # This test probably belongs in subflags.t
 # The test inspired by TT #744, even though it presents differently.
 {

Modified: branches/include_dynpmc_makefile/t/compilers/imcc/syn/subflags.t
==============================================================================
--- branches/include_dynpmc_makefile/t/compilers/imcc/syn/subflags.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/syn/subflags.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/compilers/imcc/syn/tail.t
==============================================================================
--- branches/include_dynpmc_makefile/t/compilers/imcc/syn/tail.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/compilers/imcc/syn/tail.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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, "

Copied: branches/include_dynpmc_makefile/t/compilers/json/.gitignore (from r45870, trunk/t/compilers/json/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/json/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/json/.gitignore)
@@ -0,0 +1,3 @@
+/*_pbcexe
+/*.pbc
+/*.pir

Copied: branches/include_dynpmc_makefile/t/compilers/pct/.gitignore (from r45870, trunk/t/compilers/pct/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/pct/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/pct/.gitignore)
@@ -0,0 +1,2 @@
+/*.pbc
+/*.pir

Copied: branches/include_dynpmc_makefile/t/compilers/pge/.gitignore (from r45870, trunk/t/compilers/pge/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/pge/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/pge/.gitignore)
@@ -0,0 +1,4 @@
+/*_pbcexe
+/*.pasm
+/*.pbc
+/*.pir

Copied: branches/include_dynpmc_makefile/t/compilers/pge/p5regex/.gitignore (from r45870, trunk/t/compilers/pge/p5regex/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/pge/p5regex/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/pge/p5regex/.gitignore)
@@ -0,0 +1 @@
+/*.pir

Copied: branches/include_dynpmc_makefile/t/compilers/pge/perl6regex/.gitignore (from r45870, trunk/t/compilers/pge/perl6regex/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/pge/perl6regex/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/pge/perl6regex/.gitignore)
@@ -0,0 +1,2 @@
+/*.pbc
+/*.pir

Copied: branches/include_dynpmc_makefile/t/compilers/tge/.gitignore (from r45870, trunk/t/compilers/tge/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/compilers/tge/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/compilers/tge/.gitignore)
@@ -0,0 +1,3 @@
+/*_pbcexe
+/*.pir
+/*.pbc

Modified: branches/include_dynpmc_makefile/t/distro/file_metadata.t
==============================================================================
--- branches/include_dynpmc_makefile/t/distro/file_metadata.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/distro/file_metadata.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 {

Copied: branches/include_dynpmc_makefile/t/dynoplibs/.gitignore (from r45870, trunk/t/dynoplibs/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/dynoplibs/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/dynoplibs/.gitignore)
@@ -0,0 +1,3 @@
+/*.pasm
+/*.pbc
+/*.pir

Copied: branches/include_dynpmc_makefile/t/dynpmc/.gitignore (from r45870, trunk/t/dynpmc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/dynpmc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/dynpmc/.gitignore)
@@ -0,0 +1,12 @@
+/*.pasm
+/*_pbcexe*
+/*.pbc
+/*.pir
+/md2.t
+/md4.t
+/md5.t
+/ripemd160.t
+/sha1.t
+/sha256.t
+/sha512.t
+/sha.t

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

Modified: branches/include_dynpmc_makefile/t/dynpmc/rational.t
==============================================================================
--- branches/include_dynpmc_makefile/t/dynpmc/rational.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/dynpmc/rational.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -26,7 +26,7 @@
     $S0 = config_hash['gmp']
 
     unless $S0 goto no_gmp
-    plan(55)
+    plan(56)
     goto gmp_tests
 
   no_gmp:
@@ -76,7 +76,7 @@
     test_neg()
     test_abs()
     test_cmp()
-    #test_equal_tt1517()
+    test_equal_tt1517()
 .end
 
 .sub test_neg

Modified: branches/include_dynpmc_makefile/t/dynpmc/rotest.t
==============================================================================
--- branches/include_dynpmc_makefile/t/dynpmc/rotest.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/dynpmc/rotest.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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 ],
 

Copied: branches/include_dynpmc_makefile/t/examples/.gitignore (from r45870, trunk/t/examples/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/examples/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/examples/.gitignore)
@@ -0,0 +1,4 @@
+/*_pbcexe*
+/*.pasm
+/*.pbc
+/*.pir

Modified: branches/include_dynpmc_makefile/t/examples/tutorial.t
==============================================================================
--- branches/include_dynpmc_makefile/t/examples/tutorial.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/examples/tutorial.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/harness
==============================================================================
--- branches/include_dynpmc_makefile/t/harness	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/harness	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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);

Copied: branches/include_dynpmc_makefile/t/harness.pir (from r45870, trunk/t/harness.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/harness.pir	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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:

Copied: branches/include_dynpmc_makefile/t/library/.gitignore (from r45870, trunk/t/library/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/library/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/library/.gitignore)
@@ -0,0 +1,5 @@
+/*_pbcexe*
+/*.out
+/*.pasm
+/*.pbc
+/*.pir

Modified: branches/include_dynpmc_makefile/t/library/getopt_obj.t
==============================================================================
--- branches/include_dynpmc_makefile/t/library/getopt_obj.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/library/getopt_obj.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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:

Copied: branches/include_dynpmc_makefile/t/library/osutils.t (from r45870, trunk/t/library/osutils.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/library/osutils.t	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/library/osutils.t)
@@ -0,0 +1,49 @@
+#!parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/library/osutils.t
+
+=head1 DESCRIPTION
+
+Test the osutils library
+
+=head1 SYNOPSIS
+
+    % prove t/library/osutils.t
+
+=cut
+
+.sub 'main' :main
+    .include 'test_more.pir'
+
+    load_bytecode 'osutils.pir'
+
+    plan(4)
+    test_basename()
+    test_dirname()
+.end
+
+.sub 'test_basename'
+    $S0 = 'foo/bar/baz.txt'
+    $S0 = basename($S0)
+    is( $S0, 'baz.txt', "basename" )
+.end
+
+.sub 'test_dirname'
+    $S0 = 'foo/bar/baz.txt'
+    $S0 = dirname($S0)
+    is( $S0, 'foo/bar', "dirname" )
+    $S0 = dirname($S0)
+    is( $S0, 'foo', "dirname" )
+    $S0 = dirname($S0)
+    is( $S0, '.', "dirname" )
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: branches/include_dynpmc_makefile/t/library/p6object.t
==============================================================================
--- branches/include_dynpmc_makefile/t/library/p6object.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/library/p6object.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -437,7 +437,7 @@
 
 
 .namespace ['ABC']
-.sub 'foo' :method
+.sub 'foo' :method :nsentry('foo')
     .return ('ABC::foo')
 .end
 

Copied: branches/include_dynpmc_makefile/t/library/tap_parser.t (from r45870, trunk/t/library/tap_parser.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/library/tap_parser.t	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/t/library/test_builder_tester.t
==============================================================================
--- branches/include_dynpmc_makefile/t/library/test_builder_tester.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/library/test_builder_tester.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/library/test_more.t
==============================================================================
--- branches/include_dynpmc_makefile/t/library/test_more.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/library/test_more.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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' )
 

Copied: branches/include_dynpmc_makefile/t/native_pbc/.gitignore (from r45870, trunk/t/native_pbc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/native_pbc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/native_pbc/.gitignore)
@@ -0,0 +1 @@
+/*_pbcexe*

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

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

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

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

Copied: branches/include_dynpmc_makefile/t/oo/.gitignore (from r45870, trunk/t/oo/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/oo/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/oo/.gitignore)
@@ -0,0 +1,2 @@
+/*.pbc
+/*.pir

Modified: branches/include_dynpmc_makefile/t/oo/composition.t
==============================================================================
--- branches/include_dynpmc_makefile/t/oo/composition.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/oo/composition.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/oo/mro-c3.t
==============================================================================
--- branches/include_dynpmc_makefile/t/oo/mro-c3.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/oo/mro-c3.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/oo/proxy.t
==============================================================================
--- branches/include_dynpmc_makefile/t/oo/proxy.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/oo/proxy.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -93,7 +93,7 @@
 .end
 
 .namespace ['Complex']
-.sub 'Complex' :method
+.sub 'Complex' :method :nsentry('Complex')
     .return (self)
 .end
 

Copied: branches/include_dynpmc_makefile/t/op/.gitignore (from r45870, trunk/t/op/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/op/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/op/.gitignore)
@@ -0,0 +1,5 @@
+/*_pbcexe*
+/*.out
+/*.pasm
+/*.pbc
+/*.pir

Modified: branches/include_dynpmc_makefile/t/op/calling.t
==============================================================================
--- branches/include_dynpmc_makefile/t/op/calling.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/op/calling.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/op/exceptions.t
==============================================================================
--- branches/include_dynpmc_makefile/t/op/exceptions.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/op/exceptions.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/op/gc.t
==============================================================================
--- branches/include_dynpmc_makefile/t/op/gc.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/op/gc.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/op/interp.t
==============================================================================
--- branches/include_dynpmc_makefile/t/op/interp.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/op/interp.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
 

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

Modified: branches/include_dynpmc_makefile/t/op/vivify.t
==============================================================================
--- branches/include_dynpmc_makefile/t/op/vivify.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/op/vivify.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
 

Copied: branches/include_dynpmc_makefile/t/perl/.gitignore (from r45870, trunk/t/perl/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/perl/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/perl/.gitignore)
@@ -0,0 +1,2 @@
+/Parrot_Test_1.pasm
+/Parrot_Test_1.pir

Copied: branches/include_dynpmc_makefile/t/pmc/.gitignore (from r45870, trunk/t/pmc/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/pmc/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/pmc/.gitignore)
@@ -0,0 +1,5 @@
+/*_pbcexe*
+/*.pasm
+/*.pbc
+/*.pir
+/*.out

Modified: branches/include_dynpmc_makefile/t/pmc/callcontext.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/callcontext.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/callcontext.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,5 +1,5 @@
 #! parrot
-# Copyright (C) 2006-2009, Parrot Foundation.
+# 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/include_dynpmc_makefile/t/pmc/class.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/class.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/class.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/context.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/context.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/context.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/continuation.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/continuation.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/continuation.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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:

Modified: branches/include_dynpmc_makefile/t/pmc/eval.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/eval.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/eval.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Modified: branches/include_dynpmc_makefile/t/pmc/exception-old.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/exception-old.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/exception-old.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -359,7 +359,7 @@
 /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' );
@@ -448,6 +448,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
@@ -472,6 +480,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/include_dynpmc_makefile/t/pmc/fixedpmcarray.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/fixedpmcarray.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/fixedpmcarray.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/freeze.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/freeze.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/freeze.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/handle.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/handle.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/handle.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/multidispatch.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/multidispatch.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/multidispatch.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/namespace-old.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/namespace-old.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/namespace-old.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/namespace-subs.t (from r45870, trunk/t/pmc/namespace-subs.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/pmc/namespace-subs.t	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/t/pmc/nci.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/nci.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/nci.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/objects.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/objects.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/objects.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/parrotobject.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/parrotobject.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/parrotobject.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
 
 # '

Modified: branches/include_dynpmc_makefile/t/pmc/pmcproxy.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/pmcproxy.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/pmcproxy.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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

Deleted: branches/include_dynpmc_makefile/t/pmc/retcontinuation.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/retcontinuation.t	Wed Apr 21 23:40:50 2010	(r45875)
+++ /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/include_dynpmc_makefile/t/pmc/ro.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/ro.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/ro.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/pmc/string.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/string.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/string.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -27,7 +27,6 @@
     setting_numbers()
     ensure_that_concat_ppp_copies_strings()
     ensure_that_concat_pps_copies_strings()
-    setting_string_references()
     assigning_string_copies()
     test_repeat()
     test_repeat_without_creating_dest_pmc()
@@ -102,6 +101,12 @@
         set $P0, "0xFFFFFF"
         set $S0, $P0
         is( $S0, "0xFFFFFF", 'String obj set with literal hex string' )
+
+        null $S0
+        set $P0, $S0
+        set $S1, $P0
+        isnull $I0, $S1
+        ok( $I0, 'String obj is null-in null-out' )
 .end
 
 .sub setting_integers
@@ -197,16 +202,6 @@
     is( $P0, 'fnarghGrunties', 'concat success' )
 .end
 
-.sub setting_string_references
-    new $P0, ['String']
-    set $S0, "C2H5OH + 10H20"
-    set $P0, $S0
-    chopn $S0, 8
-
-    is( $S0, 'C2H5OH', 'removed last 8 from string' )
-    is( $P0, 'C2H5OH', '...and the PMC still reference $S0' )
-.end
-
 .sub assigning_string_copies
     new $P0, ['String']
     set $S0, "C2H5OH + 10H20"
@@ -1036,6 +1031,7 @@
 
     # Set
     s = new ['String']
+    s = ''
 
     $S0 = 'f'
     s[0] = $S0
@@ -1049,6 +1045,16 @@
     $P0 = 'o'
     s[2] = $P0
     is(s, 'foo', 'Set PMC keyed')
+
+    push_eh null_replace
+    s = new ['String']
+    s[0] = 'f'
+    nok('Replace on null string throws')
+    goto done_null_replace
+
+  null_replace:
+    ok(1, 'Replace on null string throws')
+  done_null_replace:
 .end
 
 # Local Variables:

Modified: branches/include_dynpmc_makefile/t/pmc/threads.t
==============================================================================
--- branches/include_dynpmc_makefile/t/pmc/threads.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/pmc/threads.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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';
 

Copied: branches/include_dynpmc_makefile/t/profiling/profiling.t (from r45870, trunk/t/profiling/profiling.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/profiling/profiling.t	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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

Copied: branches/include_dynpmc_makefile/t/src/.gitignore (from r45870, trunk/t/src/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/src/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/src/.gitignore)
@@ -0,0 +1 @@
+/*_*

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

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

Modified: branches/include_dynpmc_makefile/t/steps/gen/platform-01.t
==============================================================================
--- branches/include_dynpmc_makefile/t/steps/gen/platform-01.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/steps/gen/platform-01.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/steps/init/defaults-01.t
==============================================================================
--- branches/include_dynpmc_makefile/t/steps/init/defaults-01.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/steps/init/defaults-01.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/t/steps/inter/progs-04.t
==============================================================================
--- branches/include_dynpmc_makefile/t/steps/inter/progs-04.t	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/t/steps/inter/progs-04.t	Wed Apr 21 23:40:50 2010	(r45876)
@@ -56,7 +56,6 @@
         linkflags
         ldflags
         libs
-        cxx
     |
     )
 {

Copied: branches/include_dynpmc_makefile/t/stress/.gitignore (from r45870, trunk/t/stress/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/stress/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/stress/.gitignore)
@@ -0,0 +1,5 @@
+/*_pbcexe*
+/*.pasm
+/*.pbc
+/*.pir
+/*.out

Copied: branches/include_dynpmc_makefile/t/tools/.gitignore (from r45870, trunk/t/tools/.gitignore)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/t/tools/.gitignore	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/t/tools/.gitignore)
@@ -0,0 +1,7 @@
+/*.pir
+/*.pbc
+/pmc2c.*.pmc
+/pmc2c.*.dump
+/pmc2c.*.h
+/pmc2c.*.c
+/pdb.t.*

Modified: branches/include_dynpmc_makefile/tools/build/headerizer.pl
==============================================================================
--- branches/include_dynpmc_makefile/tools/build/headerizer.pl	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/tools/build/headerizer.pl	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/tools/dev/mk_inno.pl
==============================================================================
--- branches/include_dynpmc_makefile/tools/dev/mk_inno.pl	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/tools/dev/mk_inno.pl	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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/include_dynpmc_makefile/tools/dev/mk_manifest_and_skip.pl
==============================================================================
--- branches/include_dynpmc_makefile/tools/dev/mk_manifest_and_skip.pl	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/tools/dev/mk_manifest_and_skip.pl	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,6 +1,6 @@
-##! perl
+#! perl
 # $Id$
-# Copyright (C) 2006-2009, Parrot Foundation.
+# Copyright (C) 2006-2010, Parrot Foundation.
 
 use strict;
 use warnings;
@@ -40,8 +40,7 @@
 
 Recreates MANIFEST and MANIFEST.SKIP from the subversion properties
 and the output of C<svn status>. .
-So far tested with svn 1.2.0 and svn 1.4.2.  This also worked with svk 1.08,
-but to keep our tasks manageable, we only guarantee support for Subversion.
+So far tested with svn 1.2.0 and svn 1.4.2.
 
 This won't work for git-svn.
 

Modified: branches/include_dynpmc_makefile/tools/dev/nci_thunk_gen.pir
==============================================================================
--- branches/include_dynpmc_makefile/tools/dev/nci_thunk_gen.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/tools/dev/nci_thunk_gen.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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
@@ -835,7 +833,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 +844,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 +882,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 +890,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 +898,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",
@@ -960,7 +958,7 @@
     $I1 = !$I1
     $I0 = $I0 || $I1 # not (not exists v[ret_assign] and exists v[sig_char])
     if $I0 goto has_ret_assign
-        $S0 = 'Parrot_pcc_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);'

Modified: branches/include_dynpmc_makefile/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/include_dynpmc_makefile/tools/dev/pbc_to_exe.pir	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/tools/dev/pbc_to_exe.pir	Wed Apr 21 23:40:50 2010	(r45876)
@@ -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,13 +239,13 @@
     unless pos < pbclength goto code_done
     $I0 = ord pbcstring, pos
     $S0 = $I0
-    codestring .= $S0
-    codestring .= ','
+    push codestring, $S0
+    push codestring, ','
     inc pos
     inc size
     $I0 = size % 32
     unless $I0 == 0 goto code_loop
-    codestring .= "\n"
+    push codestring, "\n"
     goto code_loop
   code_done:
     goto read_loop
@@ -250,19 +253,19 @@
   read_done:
     close ifh
 
-    codestring .= "\n};\n\n"
-    codestring .= "const int bytecode_size = "
+    push codestring, "\n};\n\nconst int bytecode_size = "
     $S0 = size
-    codestring .= $S0
-    codestring .= ";\n"
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, $S0
+    push codestring, ";\n"
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             return program_code;
         }
 END_OF_FUNCTION
 
-    .return (codestring)
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_infile:
     die "cannot open infile"
@@ -307,10 +310,13 @@
     .local pmc encoding_table
     encoding_table = 'generate_encoding_table'()
 
-    .local string codestring
+    .local pmc codestring
     .local int size
-    codestring = "const char * program_code =\n"
-    codestring .= '"'
+
+    codestring = new ['ResizableStringArray']
+
+    push codestring, "const char * program_code =\n"
+    push codestring, '"'
     size = 0
 
   read_loop:
@@ -327,14 +333,14 @@
     unless pos < pbclength goto code_done
     $I0 = ord pbcstring, pos
     $S0 = encoding_table[$I0]
-    codestring .= $S0
+    push codestring, $S0
     inc pos
     inc size
     $I0 = size % 32
     unless $I0 == 0 goto code_loop
-    codestring .= '"'
-    codestring .= "\n"
-    codestring .= '"'
+    push codestring, '"'
+    push codestring, "\n"
+    push codestring, '"'
     goto code_loop
   code_done:
     goto read_loop
@@ -342,21 +348,22 @@
   read_done:
     close ifh
 
-    codestring .= '"'
-    codestring .= "\n;\n\n"
-    codestring .= "const int bytecode_size = "
+    push codestring, '"'
+    push codestring, "\n;\n\n"
+    push codestring, "const int bytecode_size = "
     $S0 = size
-    codestring .= $S0
-    codestring .= ";\n"
+    push codestring, $S0
+    push codestring, ";\n"
 
-    codestring .= <<'END_OF_FUNCTION'
+    push codestring, <<'END_OF_FUNCTION'
         const void * get_program_code(void)
         {
             return program_code;
         }
 END_OF_FUNCTION
 
-    .return (codestring)
+    $S0 = join '', codestring
+    .return ($S0)
 
   err_infile:
     die "cannot open infile"
@@ -687,19 +694,14 @@
 .sub 'prepend_installable'
     .param string file
 
-    $P0   = '_config'()
-
-    .local string slash
-    slash = $P0['slash']
-
     .local pmc path
-    path = split slash, file
+    path     = split '/', file
 
     file     = path[-1]
     file     = concat 'installable_', file
     path[-1] = file
 
-    file     = join slash, path
+    file     = join '/', path
 
     .return( file )
 .end

Copied: branches/include_dynpmc_makefile/tools/dev/tapir.pir (from r45870, trunk/tools/dev/tapir.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/tools/dev/tapir.pir	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, 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/include_dynpmc_makefile/tools/docs/book-to-latex.pl (from r45870, trunk/tools/docs/book-to-latex.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/include_dynpmc_makefile/tools/docs/book-to-latex.pl	Wed Apr 21 23:40:50 2010	(r45876, copy of r45870, trunk/tools/docs/book-to-latex.pl)
@@ -0,0 +1,34 @@
+#! perl
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use Pod::PseudoPod::LaTeX;
+
+print <<'HEADER';
+\documentclass[11pt,a4paper,oneside]{report}
+\usepackage{graphics,graphicx}
+\usepackage{colortbl}
+
+\begin{document}
+\tableofcontents
+HEADER
+
+for (@ARGV) {
+    my $parser = Pod::PseudoPod::LaTeX->new();
+    $parser->output_fh( *STDOUT );
+    $parser->parse_file( $_ );
+}
+
+print <<'FOOTER';
+\end{document}
+FOOTER
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

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

Modified: branches/include_dynpmc_makefile/tools/util/release.json
==============================================================================
--- branches/include_dynpmc_makefile/tools/util/release.json	Wed Apr 21 23:39:02 2010	(r45875)
+++ branches/include_dynpmc_makefile/tools/util/release.json	Wed Apr 21 23:40:50 2010	(r45876)
@@ -1,9 +1,9 @@
 {
-    "release.version"  : "2.2.0",
-    "release.name"     : "Like Clockwork",
+    "release.version"  : "2.3.0",
+    "release.name"     : "Samoan Lory",
     "release.day"      : "Tuesday",
-    "release.date"     : "16 March 2010",
-    "release.nextdate" : "20 April 2010",
+    "release.date"     : "20 April 2010",
+    "release.nextdate" : "18 May 2010",
 
     "web.root"         : "http://parrot.org/",
     "web.source"       : "download",
@@ -11,13 +11,13 @@
     "web.repository"   : "https://svn.parrot.org/parrot/trunk/",
 
     "bugday.day"       : "Saturday",
-    "bugday.date"      : "13 March 2010",
+    "bugday.date"      : "17 April 2010",
 
     "wiki.root"        : "https://trac.parrot.org/parrot/wiki/",
-    "wiki.bugday"      : "bug_day_2010_03_13",
+    "wiki.bugday"      : "bug_day_2010_04_17",
 
     "cpan.search"      : "http://search.cpan.org/dist/parrot",
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.2.0/",
-    "subversion.root"  : "http://subversion.tigris.org/",
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/stable/2.3.0/",
+    "subversion.root"  : "http://subversion.apache.org/",
     "svk.root"         : "http://svk.bestpractical.com/"
 }


More information about the parrot-commits mailing list